HITDAQ/FPGA_nios/hit_pat/hit_pat.objdump
2024-10-11 14:49:54 +02:00

106021 lines
3.7 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

hit_pat.elf: file format elf32-littlenios2
hit_pat.elf
architecture: nios2:r1, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08000338
Program Header:
LOAD off 0x00000000 vaddr 0x08000000 paddr 0x08000000 align 2**12
filesz 0x0004cb8c memsz 0x0005e59c flags rwx
LOAD off 0x0004d000 vaddr 0x14000000 paddr 0x14000000 align 2**12
filesz 0x00000020 memsz 0x00000020 flags r-x
Sections:
Idx Name Size VMA LMA File off Algn
0 .entry 00000020 14000000 14000000 0004d000 2**5
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .exceptions 00000218 08000120 08000120 00000120 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .text 00046670 08000338 08000338 00000338 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
3 .rodata 00004f6c 080469a8 080469a8 000469a8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .rwdata 0000126c 0804b920 0804b920 0004b920 2**4
CONTENTS, ALLOC, LOAD, DATA, SMALL_DATA
5 .bss 00011a10 0804cb8c 0804cb8c 0004cb8c 2**2
ALLOC, SMALL_DATA
6 .ddr3_ram 00000000 0805e59c 0805e59c 0004d020 2**0
CONTENTS
7 .ext_flash_avl_mem 00000000 14000020 14000020 0004d020 2**0
CONTENTS
8 .onchip_flash_data 00000000 18200000 18200000 0004d020 2**0
CONTENTS
9 .descriptor_memory 00000000 18400000 18400000 0004d020 2**0
CONTENTS
10 .calibration_ram 00000000 18403400 18403400 0004d020 2**0
CONTENTS
11 .comment 0000002c 00000000 00000000 0004d020 2**0
CONTENTS, READONLY
12 .debug_aranges 00001c78 00000000 00000000 0004d050 2**3
CONTENTS, READONLY, DEBUGGING
13 .debug_info 0010e51e 00000000 00000000 0004ecc8 2**0
CONTENTS, READONLY, DEBUGGING
14 .debug_abbrev 00021537 00000000 00000000 0015d1e6 2**0
CONTENTS, READONLY, DEBUGGING
15 .debug_line 0003ca4d 00000000 00000000 0017e71d 2**0
CONTENTS, READONLY, DEBUGGING
16 .debug_frame 00008900 00000000 00000000 001bb16c 2**2
CONTENTS, READONLY, DEBUGGING
17 .debug_str 0000c2e6 00000000 00000000 001c3a6c 2**0
CONTENTS, READONLY, DEBUGGING
18 .debug_loc 00022905 00000000 00000000 001cfd52 2**0
CONTENTS, READONLY, DEBUGGING
19 .debug_alt_sim_info 00000060 00000000 00000000 001f2658 2**2
CONTENTS, READONLY, DEBUGGING
20 .debug_ranges 000021b8 00000000 00000000 001f26b8 2**3
CONTENTS, READONLY, DEBUGGING
21 .thread_model 00000006 00000000 00000000 001fec83 2**0
CONTENTS, READONLY
22 .cpu 00000003 00000000 00000000 001fec89 2**0
CONTENTS, READONLY
23 .qsys 00000001 00000000 00000000 001fec8c 2**0
CONTENTS, READONLY
24 .simulation_enabled 00000001 00000000 00000000 001fec8d 2**0
CONTENTS, READONLY
25 .sysid_hash 00000004 00000000 00000000 001fec8e 2**0
CONTENTS, READONLY
26 .sysid_base 00000004 00000000 00000000 001fec92 2**0
CONTENTS, READONLY
27 .sysid_time 00000004 00000000 00000000 001fec96 2**0
CONTENTS, READONLY
28 .stderr_dev 0000000a 00000000 00000000 001fec9a 2**0
CONTENTS, READONLY
29 .stdin_dev 0000000a 00000000 00000000 001feca4 2**0
CONTENTS, READONLY
30 .stdout_dev 0000000a 00000000 00000000 001fecae 2**0
CONTENTS, READONLY
31 .thread_model 00000006 00000000 00000000 001fecb8 2**0
CONTENTS, READONLY
32 .cpu 00000003 00000000 00000000 001fecbe 2**0
CONTENTS, READONLY
33 .qsys 00000001 00000000 00000000 001fecc1 2**0
CONTENTS, READONLY
34 .simulation_enabled 00000001 00000000 00000000 001fecc2 2**0
CONTENTS, READONLY
35 .sysid_hash 00000004 00000000 00000000 001fecc3 2**0
CONTENTS, READONLY
36 .sysid_base 00000004 00000000 00000000 001fecc7 2**0
CONTENTS, READONLY
37 .sysid_time 00000004 00000000 00000000 001feccb 2**0
CONTENTS, READONLY
38 .stderr_dev 0000000a 00000000 00000000 001feccf 2**0
CONTENTS, READONLY
39 .stdin_dev 0000000a 00000000 00000000 001fecd9 2**0
CONTENTS, READONLY
40 .stdout_dev 0000000a 00000000 00000000 001fece3 2**0
CONTENTS, READONLY
41 .sopc_system_name 00000005 00000000 00000000 001feced 2**0
CONTENTS, READONLY
42 .quartus_project_dir 0000001b 00000000 00000000 001fecf2 2**0
CONTENTS, READONLY
SYMBOL TABLE:
14000000 l d .entry 00000000 .entry
08000120 l d .exceptions 00000000 .exceptions
08000338 l d .text 00000000 .text
080469a8 l d .rodata 00000000 .rodata
0804b920 l d .rwdata 00000000 .rwdata
0804cb8c l d .bss 00000000 .bss
0805e59c l d .ddr3_ram 00000000 .ddr3_ram
14000020 l d .ext_flash_avl_mem 00000000 .ext_flash_avl_mem
18200000 l d .onchip_flash_data 00000000 .onchip_flash_data
18400000 l d .descriptor_memory 00000000 .descriptor_memory
18403400 l d .calibration_ram 00000000 .calibration_ram
00000000 l d .comment 00000000 .comment
00000000 l d .debug_aranges 00000000 .debug_aranges
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_abbrev 00000000 .debug_abbrev
00000000 l d .debug_line 00000000 .debug_line
00000000 l d .debug_frame 00000000 .debug_frame
00000000 l d .debug_str 00000000 .debug_str
00000000 l d .debug_loc 00000000 .debug_loc
00000000 l d .debug_alt_sim_info 00000000 .debug_alt_sim_info
00000000 l d .debug_ranges 00000000 .debug_ranges
00000000 l df *ABS* 00000000 d:/hit20v3/software/hit_pat/software/hit_pat_bsp//obj/HAL/src/crt0.o
0800037c l .text 00000000 alt_after_alt_main
00000000 l df *ABS* 00000000 alt_irq_handler.c
00000000 l df *ABS* 00000000 alt_instruction_exception_entry.c
00000000 l df *ABS* 00000000 control.c
0804cb8c l O .bss 00000004 bytes_received.5850
0804cb90 l O .bss 00000006 header.5849
0804cb98 l O .bss 00000004 bytes_received.5856
0804cd60 l O .bss 00000020 packet_data.5855
00000000 l df *ABS* 00000000 main.c
00000000 l df *ABS* 00000000 network_utilities.c
00000000 l df *ABS* 00000000 sensor.c
00000000 l df *ABS* 00000000 socket_server.c
0804cba8 l O .bss 00000004 mutex
0804cd80 l O .bss 00000010 connections
00000000 l df *ABS* 00000000 tse_my_system.c
00000000 l df *ABS* 00000000 udpgen.c
00000000 l df *ABS* 00000000 utils.c
00000000 l df *ABS* 00000000 ctype_.c
00000000 l df *ABS* 00000000 getchar.c
00000000 l df *ABS* 00000000 impure.c
0804ba80 l O .rwdata 00000424 impure_data
00000000 l df *ABS* 00000000 printf.c
00000000 l df *ABS* 00000000 putchar.c
00000000 l df *ABS* 00000000 puts.c
00000000 l df *ABS* 00000000 strlen.c
00000000 l df *ABS* 00000000 vfprintf.c
08004fbc l F .text 000000c0 __sbprintf
080474ae l O .rodata 00000010 blanks.5226
0804749e l O .rodata 00000010 zeroes.5227
00000000 l df *ABS* 00000000 wsetup.c
00000000 l df *ABS* 00000000 dtoa.c
080051dc l F .text 00000210 quorem
00000000 l df *ABS* 00000000 fflush.c
00000000 l df *ABS* 00000000 findfp.c
08006d64 l F .text 00000008 __fp_lock
08006d78 l F .text 00000168 __sinit.part.0
08006ee0 l F .text 00000008 __fp_unlock
00000000 l df *ABS* 00000000 mallocr.c
00000000 l df *ABS* 00000000 fvwrite.c
00000000 l df *ABS* 00000000 fwalk.c
00000000 l df *ABS* 00000000 getc.c
00000000 l df *ABS* 00000000 localeconv.c
00000000 l df *ABS* 00000000 makebuf.c
00000000 l df *ABS* 00000000 mallocr.c
00000000 l df *ABS* 00000000 memchr.c
00000000 l df *ABS* 00000000 memcpy.c
00000000 l df *ABS* 00000000 memmove.c
00000000 l df *ABS* 00000000 memset.c
00000000 l df *ABS* 00000000 mprec.c
080474d0 l O .rodata 0000000c p05.4024
00000000 l df *ABS* 00000000 putc.c
00000000 l df *ABS* 00000000 mallocr.c
00000000 l df *ABS* 00000000 rget.c
00000000 l df *ABS* 00000000 sbrkr.c
00000000 l df *ABS* 00000000 stdio.c
00000000 l df *ABS* 00000000 vfprintf.c
0800a304 l F .text 000000f4 __sprint_r.part.0
0800b754 l F .text 000000c0 __sbprintf
08047604 l O .rodata 00000010 blanks.5203
080475f4 l O .rodata 00000010 zeroes.5204
00000000 l df *ABS* 00000000 wbuf.c
00000000 l df *ABS* 00000000 writer.c
00000000 l df *ABS* 00000000 closer.c
00000000 l df *ABS* 00000000 mallocr.c
00000000 l df *ABS* 00000000 fclose.c
00000000 l df *ABS* 00000000 fputwc.c
00000000 l df *ABS* 00000000 fstatr.c
00000000 l df *ABS* 00000000 int_errno.c
00000000 l df *ABS* 00000000 isattyr.c
00000000 l df *ABS* 00000000 locale.c
00000000 l df *ABS* 00000000 lseekr.c
00000000 l df *ABS* 00000000 mbtowc_r.c
00000000 l df *ABS* 00000000 readr.c
00000000 l df *ABS* 00000000 refill.c
0800c03c l F .text 0000001c lflush
00000000 l df *ABS* 00000000 strcmp.c
00000000 l df *ABS* 00000000 wcrtomb.c
00000000 l df *ABS* 00000000 wctomb_r.c
00000000 l df *ABS* 00000000 libgcc2.c
00000000 l df *ABS* 00000000 libgcc2.c
00000000 l df *ABS* 00000000 lib2-divmod.c
00000000 l df *ABS* 00000000 adddf3.c
00000000 l df *ABS* 00000000 divdf3.c
00000000 l df *ABS* 00000000 eqdf2.c
00000000 l df *ABS* 00000000 gedf2.c
00000000 l df *ABS* 00000000 ledf2.c
00000000 l df *ABS* 00000000 muldf3.c
00000000 l df *ABS* 00000000 subdf3.c
00000000 l df *ABS* 00000000 unorddf2.c
00000000 l df *ABS* 00000000 fixdfsi.c
00000000 l df *ABS* 00000000 floatsidf.c
00000000 l df *ABS* 00000000 floatunsidf.c
00000000 l df *ABS* 00000000 libgcc2.c
00000000 l df *ABS* 00000000 libgcc2.c
00000000 l df *ABS* 00000000 alt_flash_dev.c
00000000 l df *ABS* 00000000 alt_fstat.c
0800f8a0 l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 alt_isatty.c
0800f98c l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 alt_lseek.c
0800fa6c l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 alt_main.c
00000000 l df *ABS* 00000000 alt_sbrk.c
0804cad0 l O .rwdata 00000004 heap_end
00000000 l df *ABS* 00000000 alt_env_lock.c
0804cad4 l O .rwdata 00000004 lockid
0804cbd4 l O .bss 00000004 locks
00000000 l df *ABS* 00000000 alt_malloc_lock.c
0804cad8 l O .rwdata 00000004 lockid
0804cbdc l O .bss 00000004 locks
00000000 l df *ABS* 00000000 os_core.c
080113a0 l F .text 0000003c OS_InitMisc
080113dc l F .text 0000006c OS_InitRdyList
080114cc l F .text 000000e4 OS_InitTCBList
080112c0 l F .text 000000e0 OS_InitEventList
08011448 l F .text 00000084 OS_InitTaskIdle
08011734 l F .text 0000006c OS_SchedNew
00000000 l df *ABS* 00000000 os_flag.c
08012fb8 l F .text 000000f4 OS_FlagTaskRdy
08012d74 l F .text 00000164 OS_FlagBlock
00000000 l df *ABS* 00000000 os_mem.c
00000000 l df *ABS* 00000000 os_mutex.c
0801457c l F .text 00000188 OSMutex_RdyAtPrio
00000000 l df *ABS* 00000000 os_q.c
00000000 l df *ABS* 00000000 os_sem.c
00000000 l df *ABS* 00000000 os_task.c
00000000 l df *ABS* 00000000 os_time.c
00000000 l df *ABS* 00000000 alt_sys_init.c
08017794 l F .text 00000034 alt_dev_reg
0804c420 l O .rwdata 000000d0 debug_uart
0804c4f0 l O .rwdata 000000dc ext_flash
0804c5d0 l O .rwdata 00000070 msgdma_rx
0804c640 l O .rwdata 00000070 msgdma_tx
0804c6b0 l O .rwdata 00000100 onchip_flash
00000000 l df *ABS* 00000000 altera_avalon_timer_sc.c
08017a2c l F .text 00000078 alt_avalon_timer_sc_irq
00000000 l df *ABS* 00000000 altera_avalon_tse.c
0804cc26 l O .bss 00000001 tse_system_count.5331
0804cc27 l O .bss 00000001 is_init.5413
00000000 l df *ABS* 00000000 altera_avalon_uart_fd.c
00000000 l df *ABS* 00000000 altera_avalon_uart_init.c
0801ccb0 l F .text 0000009c altera_avalon_uart_irq
0801cd4c l F .text 00000134 altera_avalon_uart_rxirq
0801ce80 l F .text 000001a0 altera_avalon_uart_txirq
00000000 l df *ABS* 00000000 altera_avalon_uart_read.c
0801d074 l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 altera_avalon_uart_write.c
0801d318 l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 altera_generic_quad_spi_controller.c
0801d588 l F .text 00000034 alt_flash_device_register
0801e010 l F .text 0000008c alt_qspi_poll_for_write_in_progress
0801df74 l F .text 0000009c alt_qspi_validate_read_write_arguments
00000000 l df *ABS* 00000000 altera_msgdma.c
0801e09c l F .text 0000003c alt_get_errno
0801e0d8 l F .text 00000094 alt_msgdma_write_standard_descriptor
0801e16c l F .text 0000012c alt_msgdma_write_extended_descriptor
0801e298 l F .text 00000184 alt_msgdma_irq
0801e41c l F .text 0000008c alt_msgdma_construct_standard_descriptor
0801e4a8 l F .text 00000154 alt_msgdma_construct_extended_descriptor
0801e5fc l F .text 0000033c alt_msgdma_descriptor_async_transfer
0801e938 l F .text 00000408 alt_msgdma_descriptor_sync_transfer
0801f010 l F .text 000000a4 alt_msgdma_construct_prefetcher_standard_descriptor
0801f0b4 l F .text 00000194 alt_msgdma_construct_prefetcher_extended_descriptor
00000000 l df *ABS* 00000000 altera_onchip_flash.c
080201d8 l F .text 00000034 alt_flash_device_register
00000000 l df *ABS* 00000000 ins_tse_mac.c
00000000 l df *ABS* 00000000 alt_iniche_close.c
00000000 l df *ABS* 00000000 alt_iniche_dev.c
00000000 l df *ABS* 00000000 alt_iniche_read.c
00000000 l df *ABS* 00000000 alt_iniche_write.c
00000000 l df *ABS* 00000000 et_arp.c
0804cc2c l O .bss 00000004 arp_timer
0804cc34 l O .bss 00000004 cachetime
00000000 l df *ABS* 00000000 iface.c
00000000 l df *ABS* 00000000 ipnet.c
00000000 l df *ABS* 00000000 ipstart.c
0804cdb8 l O .bss 0000003c closers
0804cc58 l O .bss 00000004 nclosers
00000000 l df *ABS* 00000000 igmp_cmn.c
00000000 l df *ABS* 00000000 bsdsock.c
00000000 l df *ABS* 00000000 cksum.c
0804cb04 l O .rwdata 00000004 cksum_select
00000000 l df *ABS* 00000000 in_utils.c
0804cdf4 l O .bss 00000018 tistring
00000000 l df *ABS* 00000000 netmain.c
00000000 l df *ABS* 00000000 tk_crnos.c
00000000 l df *ABS* 00000000 ping.c
00000000 l df *ABS* 00000000 pktalloc.c
00000000 l df *ABS* 00000000 q.c
00000000 l df *ABS* 00000000 asm_cksum.o
08028cd0 l .text 00000000 done
08028b60 l .text 00000000 asm1
08028c8c l .text 00000000 loop0
08028b88 l .text 00000000 loop
08028ca8 l .text 00000000 fold
00000000 l df *ABS* 00000000 brdutils.c
0804cc8c l O .bss 00000004 kbd_init.4507
0804cc88 l O .bss 00000004 cpu_statusreg
00000000 l df *ABS* 00000000 osportco.c
00000000 l df *ABS* 00000000 targnios.c
00000000 l df *ABS* 00000000 nptcp.c
0804ccc0 l O .bss 00000004 in_tcptick
00000000 l df *ABS* 00000000 rawsock.c
00000000 l df *ABS* 00000000 sockcall.c
0802cf30 l F .text 0000008c sockargs
0802c26c l F .text 000001e0 t_getname
00000000 l df *ABS* 00000000 socket.c
00000000 l df *ABS* 00000000 socket2.c
00000000 l df *ABS* 00000000 soselect.c
00000000 l df *ABS* 00000000 tcp_in.c
00000000 l df *ABS* 00000000 tcp_out.c
0803492c l F .text 000000cc bld_options
00000000 l df *ABS* 00000000 tcp_subr.c
00000000 l df *ABS* 00000000 tcp_timr.c
00000000 l df *ABS* 00000000 tcp_usr.c
00000000 l df *ABS* 00000000 tcpport.c
00000000 l df *ABS* 00000000 udpsock.c
00000000 l df *ABS* 00000000 alt_busy_sleep.c
00000000 l df *ABS* 00000000 alt_close.c
080370b4 l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 alt_dcache_flush.c
00000000 l df *ABS* 00000000 alt_dev.c
08037238 l F .text 0000002c alt_dev_null_write
00000000 l df *ABS* 00000000 alt_dev_llist_insert.c
08037264 l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 alt_do_ctors.c
00000000 l df *ABS* 00000000 alt_do_dtors.c
00000000 l df *ABS* 00000000 alt_errno.c
00000000 l df *ABS* 00000000 alt_find_dev.c
00000000 l df *ABS* 00000000 alt_iic.c
00000000 l df *ABS* 00000000 alt_iic_isr_register.c
00000000 l df *ABS* 00000000 alt_io_redirect.c
08037728 l F .text 000000b0 alt_open_fd
00000000 l df *ABS* 00000000 alt_irq_vars.c
00000000 l df *ABS* 00000000 alt_open.c
08037854 l F .text 0000003c alt_get_errno
08037890 l F .text 000000b8 alt_file_locked
00000000 l df *ABS* 00000000 alt_printf.c
00000000 l df *ABS* 00000000 alt_putchar.c
00000000 l df *ABS* 00000000 alt_read.c
08037cf8 l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 alt_release_fd.c
00000000 l df *ABS* 00000000 alt_remap_cached.c
00000000 l df *ABS* 00000000 alt_tick.c
00000000 l df *ABS* 00000000 alt_uncached_free.c
00000000 l df *ABS* 00000000 alt_uncached_malloc.c
00000000 l df *ABS* 00000000 alt_usleep.c
00000000 l df *ABS* 00000000 alt_write.c
08038230 l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 altera_nios2_gen2_irq.c
00000000 l df *ABS* 00000000 os_cpu_a.o
00000040 l *ABS* 00000000 OSCtxSw_SWITCH_PC
00000000 l df *ABS* 00000000 os_cpu_c.c
00000014 l *ABS* 00000000 OSTCBNext_OFFSET
00000032 l *ABS* 00000000 OSTCBPrio_OFFSET
00000000 l *ABS* 00000000 OSTCBStkPtr_OFFSET
00000000 l df *ABS* 00000000 allports.c
0804ccf8 l O .bss 00000004 inside_pktdemux
00000000 l df *ABS* 00000000 timeouts.c
08038b28 l F .text 0000014c check_interval_timers
0804cd04 l O .bss 00000004 numtimers
00000000 l df *ABS* 00000000 tk_misc.c
00000000 l df *ABS* 00000000 alt_iniche_fcntl.c
00000000 l df *ABS* 00000000 icmp.c
0804c940 l O .rwdata 00000018 dsts
00000000 l df *ABS* 00000000 ip.c
0804cb74 l O .rwdata 00000004 uid
00000000 l df *ABS* 00000000 ipdemux.c
00000000 l df *ABS* 00000000 ipmc.c
00000000 l df *ABS* 00000000 ipport.c
00000000 l df *ABS* 00000000 ipraw.c
00000000 l df *ABS* 00000000 iproute.c
00000000 l df *ABS* 00000000 udp.c
0804cd2c l O .bss 00000002 usocket
00000000 l df *ABS* 00000000 igmp.c
00000000 l df *ABS* 00000000 igmp2.c
00000000 l df *ABS* 00000000 ipopt.c
00000000 l df *ABS* 00000000 u_mctest.c
0804cb7c l O .rwdata 00000004 iCounter.5304
00000000 l df *ABS* 00000000 memdev.c
00000000 l df *ABS* 00000000 parseip.c
0804ce0c l O .bss 0000001e nearBuf.4931
00000000 l df *ABS* 00000000 tcpcksum.c
00000000 l df *ABS* 00000000 udp_open.c
00000000 l df *ABS* 00000000 in_pcb.c
00000000 l df *ABS* 00000000 vfsfiles.c
00000000 l df *ABS* 00000000 vfsport.c
00000000 l df *ABS* 00000000 alt_fcntl.c
080426b8 l F .text 0000003c alt_get_errno
00000000 l df *ABS* 00000000 alt_find_file.c
00000000 l df *ABS* 00000000 alt_get_fd.c
00000000 l df *ABS* 00000000 atexit.c
00000000 l df *ABS* 00000000 atoi.c
00000000 l df *ABS* 00000000 exit.c
00000000 l df *ABS* 00000000 malign.c
00000000 l df *ABS* 00000000 mallocr.c
00000000 l df *ABS* 00000000 malloc.c
00000000 l df *ABS* 00000000 memcmp.c
00000000 l df *ABS* 00000000 sprintf.c
00000000 l df *ABS* 00000000 strchr.c
00000000 l df *ABS* 00000000 strcpy.c
00000000 l df *ABS* 00000000 strncmp.c
00000000 l df *ABS* 00000000 strtol.c
080430e8 l F .text 00000224 _strtol_l.isra.0
00000000 l df *ABS* 00000000 vfprintf.c
0804b8e1 l O .rodata 00000010 blanks.5207
0804b8d1 l O .rodata 00000010 zeroes.5208
00000000 l df *ABS* 00000000 vprintf.c
00000000 l df *ABS* 00000000 vsprintf.c
00000000 l df *ABS* 00000000 __atexit.c
00000000 l df *ABS* 00000000 __call_atexit.c
00000000 l df *ABS* 00000000 vfprintf.c
0804b901 l O .rodata 00000010 blanks.5187
0804b8f1 l O .rodata 00000010 zeroes.5188
00000000 l df *ABS* 00000000 vfprintfr_1.c
00000000 l df *ABS* 00000000 alt_exit.c
0804cd5c g O .bss 00000004 alt_instruction_exception_handler
080200e8 g F .text 0000003c alt_msgdma_standard_descriptor_async_transfer
08002cb8 g F .text 00000018 putchar
0805e1c4 g O .bss 00000014 soq
18200000 g *ABS* 00000000 __alt_mem_onchip_flash_data
080097bc g F .text 00000074 _mprec_log10
0804cbac g O .bss 00000001 to_sslistenertask
08018c1c g F .text 000000cc alt_tse_get_mac_info
0800989c g F .text 00000074 __any_on
0800be3c g F .text 00000058 _isatty_r
080474dc g O .rodata 00000028 __mprec_tinytens
0803a2d4 g F .text 00000714 ip_write_internal
0800fb7c g F .text 000000bc alt_main
08042f60 g F .text 0000008c strcpy
08028748 g F .text 000000ac pk_free
08002cd0 g F .text 000000cc _puts_r
08000380 g F .text 00000030 control_delay
0805e370 g O .bss 00000100 alt_irq
08002a14 g F .text 0000005c master_clock_enable
0804c958 g O .rwdata 00000009 rtp_priority
0800bf24 g F .text 00000064 _lseek_r
08039d2c g F .text 000002f0 icmp_timex
08029cfc g F .text 00000044 m_freem
080421c0 g F .text 00000048 vgetc
08028e18 g F .text 00000020 clock_c
0804ccd8 g O .bss 00000004 tcp_optionbuf
08024088 g F .text 0000006c if_getbynum
08001d1c g F .text 0000003c ss_reset_connection
08013658 g F .text 000000cc OS_MemInit
08027c78 g F .text 0000006c TK_OSTaskQuery
08028b40 g .text 00000000 asm_cksum
0801c7dc g F .text 000000f0 marvell_cfg_rgmii
08017734 g F .text 00000060 OSTimeSet
080420c8 g F .text 000000f8 vgetc_locked
080295e8 g F .text 00000020 post_task_setup
080360cc g F .text 00000118 tcp_attach
0802b050 g F .text 00000078 tcp_tick
08026fbc g F .text 0000007c print_ipad
08027ba0 g F .text 000000d8 tcp_wakeup
0800e300 g F .text 00000080 .hidden __eqdf2
0804cba0 g O .bss 00000004 last_flash_sector_offset
0804cc5c g O .bss 00000004 igmp_timers_are_running
080333ec g F .text 0000012c tcp_pulloutofband
0801edf0 g F .text 00000058 alt_msgdma_construct_standard_mm_to_mm_descriptor
08019e30 g F .text 000001d0 alt_tse_phy_print_profile
080101d0 g F .text 000005ac OSEventPendMulti
08002314 g F .text 000001b8 ethernet_read
0805e59c g *ABS* 00000000 __alt_heap_start
080385a4 g F .text 00000024 OSTaskCreateHook
0801c57c g F .text 00000098 marvell_phy_cfg
0803b668 g F .text 00000354 ip_rcv
08041e68 g F .text 00000154 vfseek
0802f6ec g F .text 00000108 soqremque
0803d134 g F .text 0000076c udpdemux
08022984 g F .text 000000dc tse_mac_close
08002c78 g F .text 00000038 printf
0804cd0c g O .bss 00000004 rt_mib
080454d0 g F .text 00000018 vsprintf
080107cc g F .text 0000004c OSIntEnter
0800c2fc g F .text 0000006c _wcrtomb_r
0804ce2c g O .bss 0000e000 InitialTaskStk
0800a2a0 g F .text 0000005c __sseek
08007060 g F .text 00000010 __sinit
0803c3f8 g F .text 0000010c in_delmulti
0800b814 g F .text 00000148 __swbuf_r
0801c944 g F .text 0000005c PEF7071_config
0804cd18 g O .bss 00000004 so_evtmap_create
0804052c g F .text 00000088 in_pcballoc
18403400 g *ABS* 00000000 __alt_mem_calibration_ram
0804cb28 g O .rwdata 00000002 socket_defaults
0800be94 g F .text 00000070 _setlocale_r
08022f68 g F .text 00000454 send_arp
08006ee8 g F .text 00000068 __sfmoreglue
08040f88 g F .text 00000338 vfopen_locked
0800ff2c g F .text 000000cc __malloc_unlock
0805d5c8 g O .bss 000000e0 eth_tse_if
0803860c g F .text 00000020 OSTaskStatHook
08038a5c g F .text 00000054 prep_modules
08026574 g F .text 00000190 bsd_i_sockoptlen
0804cbe4 g O .bss 00000001 OSLockNesting
0801dd20 g F .text 00000254 altera_qspi_controller_init
08018e54 g F .text 00000a78 getPHYSpeed
080414cc g F .text 00000044 vfclose
0805e264 g O .bss 0000002c tcb
08037e88 g F .text 00000034 alt_remap_cached
0804cbe5 g O .bss 00000001 OSRunning
08023dd0 g F .text 000002b8 grat_arp
0800123c g F .text 000001f8 get_ip_addr
0803fce8 g F .text 00000094 inet_pton
080241c8 g F .text 0000008c reg_type
080254ec g F .text 00000170 igmp_fasttimo
08041678 g F .text 0000005c vunlink_flag_open_files
080024cc g F .text 00000088 ethernet_close
0805e290 g O .bss 000000e0 tcpstat
0802a22c g F .text 00000098 dtom
08034830 g F .text 000000fc tcp_setpersist
0802c60c g F .text 00000188 t_getsockopt
080087b8 g F .text 0000012c memmove
0802a658 g F .text 00000588 ip_output
08038658 g F .text 00000020 OSInitHookBegin
0803a01c g F .text 00000054 icmp_du
0804cb08 g O .rwdata 00000004 num_net_tasks
0804cd40 g O .bss 00000004 vfiles
0800704c g F .text 00000014 _cleanup
08002bc8 g F .text 00000068 set_delay
080089d4 g F .text 000000a4 _Balloc
080018b4 g F .text 000001a0 get_board_mac_addr
0801ed40 g F .text 00000058 alt_msgdma_construct_standard_st_to_mm_descriptor
0804cbe8 g O .bss 00000004 OSIdleCtr
0801b7f0 g F .text 000001c4 alt_tse_phy_set_adv_1000
0804cae0 g O .rwdata 00000001 max_mac_system
0803e7c4 g F .text 000005a0 ip_setmoptions
08018038 g F .text 000008c4 alt_tse_system_add_sys
0800e380 g F .text 000000f0 .hidden __gtdf2
0803f804 g F .text 0000002c md_fseek
08038364 g F .text 00000024 altera_nios2_gen2_irq_init
08038434 g .text 00000000 OSStartTsk
080118c4 g F .text 000002d4 OS_TCBInit
0805e58c g O .bss 00000010 udp_mib
14000000 g F .entry 0000001c __reset
0802cd9c g F .text 000000d4 t_shutdown
08007be8 g F .text 00000008 __localeconv_l
0802c870 g F .text 0000013c t_recvfrom
0803ef2c g F .text 0000066c u_mctest_run
0803c568 g F .text 00000080 prep_ifaces
0804cc78 g O .bss 00000001 to_netmain
08028434 g F .text 000000c0 pk_alloc
0804cbec g O .bss 00000001 OSPrioHighRdy
0800bddc g F .text 00000060 _fstat_r
0804b950 g O .rwdata 00000130 tse_mac_device
0802796c g F .text 00000044 tk_nettick
080385c8 g F .text 00000024 OSTaskDelHook
0804cbc0 g O .bss 00000004 errno
0800a15c g F .text 00000010 __srget
0800080c g F .text 00000098 control_get_header
080308f0 g F .text 000000c4 in_pcbnotify
0800a218 g F .text 00000008 __seofread
08038414 g .text 00000000 OSStartHighRdy
0805de58 g O .bss 00000014 lilfreeq
0803c610 g F .text 0000002c evtmap_setup
0801664c g F .text 000001a4 OSTaskCreateExt
0804cc7c g O .bss 00000004 tcp_sleep_timeout
080300b0 g F .text 000001b8 sbdrop
0804cd14 g O .bss 00000004 net_system_exit
08045850 g F .text 00001120 ___svfiprintf_internal_r
0805e4d4 g O .bss 00000068 icmp_mib
08035294 g F .text 00000074 tcp_getseq
0803c9e4 g F .text 000000b8 ip_raw_alloc
0801c0cc g F .text 000004b0 alt_tse_phy_set_common_speed
0801d87c g F .text 00000210 alt_qspi_controller_write_block
08012910 g F .text 00000060 OSFlagPendGetFlagsRdy
0804cbae g O .bss 00000001 mastermode
0805d6a8 g O .bss 00000010 pmac_groups
0802de94 g F .text 00000758 soreceive
08011b98 g F .text 000002e0 OSFlagAccept
08014c10 g F .text 0000008c OSQFlush
08014704 g F .text 00000114 OSQAccept
0804cbcc g O .bss 00000004 alt_argv
0800220c g F .text 00000108 ethernet_write
08054ab8 g *ABS* 00000000 _gp
0803811c g F .text 00000114 usleep
08041510 g F .text 00000048 vfflush
0805e16c g O .bss 00000040 resid_semaphore
08026e78 g F .text 00000144 hexdump
08025b04 g F .text 00000080 igmp_leavegroup
080164cc g F .text 00000180 OSTaskCreate
0801604c g F .text 00000480 OSTaskChangePrio
08021044 g F .text 00000094 alt_onchip_flash_poll_for_status_write_passed
0804cbe0 g O .bss 00000004 alt_heapsem
080350e8 g F .text 000000e8 tcp_close
080167f0 g F .text 00000314 OSTaskDel
080425e0 g F .text 0000005c vferror
080380a4 g F .text 00000078 alt_uncached_malloc
08013724 g F .text 00000178 OSMutexAccept
08017b50 g F .text 00000060 tse_mac_initTransInfo2
0801f8d8 g F .text 0000014c alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits
0803dcd8 g F .text 000000bc udp_alloc
0804c868 g O .rwdata 000000c0 alt_fd_list
0805ae2c g O .bss 00000370 OSFlagTbl
080010f0 g F .text 00000034 control_init
0804ccc4 g O .bss 00000008 mbstat
08007adc g F .text 0000007c _getc_r
08007b58 g F .text 00000090 getc
08002cb0 g F .text 00000008 _putchar_r
080110b0 g F .text 000000b0 OS_EventTaskRemove
0803e444 g F .text 00000130 igmpv2_chk_set_timer
080279b0 g F .text 00000030 TK_OSTimeDly
08037404 g F .text 00000090 alt_find_dev
080086b8 g F .text 00000100 memcpy
08017de0 g F .text 00000054 tse_mac_setMIImode
08038e5c g F .text 0000007c task_stats
0802ba20 g F .text 00000050 DOMAIN_CHECK
0802abe0 g F .text 00000038 in_broadcast
08027f0c g F .text 0000029c icmpEcho
080198cc g F .text 00000048 alt_tse_phy_rd_mdio_addr
0804cd3c g O .bss 00000004 vfsystems
0803dc28 g F .text 000000b0 udp_socket
0804cc4c g O .bss 00000004 MaxMtu
080305c8 g F .text 00000140 sock_selscan
08006d6c g F .text 0000000c _cleanup_r
0800f62c g F .text 000000c8 .hidden __floatsidf
08002a70 g F .text 0000004c led_set
0802f84c g F .text 00000058 socantrcvmore
08017bb0 g F .text 000000c8 tse_mac_sTxWrite
080377d8 g F .text 0000007c alt_io_redirect
0800e470 g F .text 000000f0 .hidden __ltdf2
0804cca0 g O .bss 00000004 netq_intmask
0803fc9c g F .text 0000004c hextoa
080469a8 g *ABS* 00000000 __DTOR_END__
0801fde4 g F .text 000000b0 alt_msgdma_start_prefetcher_with_extd_desc_list
08020124 g F .text 0000003c alt_msgdma_extended_descriptor_async_transfer
0802cb9c g F .text 00000200 t_send
080370f0 g F .text 000000d0 alt_close
08001124 g F .text 00000054 InitialTask
08020094 g F .text 00000054 alt_msgdma_register_callback
0804cccc g O .bss 00000002 select_wait
08002d9c g F .text 00000010 puts
08027500 g F .text 00000044 std_out
080429f8 g F .text 00000098 alt_exception_cause_generated_bad_addr
0805d6d8 g O .bss 00000030 tse_iniche_dev_driver_data
08042208 g F .text 00000124 vfslookup_locked
0802d74c g F .text 00000098 soaccept
0800fff8 g F .text 000000d8 OSEventNameGet
0805e1d8 g O .bss 0000003c tcpmib
0802cfbc g F .text 00000094 t_errno
0803c63c g F .text 000000d8 ip_raw_open
080004f8 g F .text 00000314 control_process_config_peer
08013cdc g F .text 0000055c OSMutexPend
08009714 g F .text 000000a8 __ratio
08010818 g F .text 000000f0 OSIntExit
0804cb78 g O .rwdata 00000004 ipRoutes
08041628 g F .text 00000050 vfeof
0800b73c g F .text 00000018 __vfiprintf_internal
08035564 g F .text 0000005c tcp_canceltimers
0804cbed g O .bss 00000001 OSPrioCur
08042c98 g F .text 00000010 malloc
0804cd38 g O .bss 00000004 inpcb_cachemiss
0801f540 g F .text 000000f0 alt_msgdma_prefetcher_add_standard_desc_to_list
08002c48 g F .text 00000030 _printf_r
0803fe5c g F .text 000000c4 inet46_addr
0804cd34 g O .bss 00000004 inpcb_cachehits
0800cff8 g F .text 00000064 .hidden __udivsi3
0804c828 g O .rwdata 0000000b tcp_outflags
0805d708 g O .bss 00000290 tse
0800f9c8 g F .text 000000a4 isatty
080188fc g F .text 00000144 alt_tse_sys_enable_mdio_sharing
08020fb0 g F .text 00000094 alt_onchip_flash_poll_for_status_erase_passed
0802144c g F .text 00000078 msgdma_reset
0804752c g O .rodata 000000c8 __mprec_tens
08040e00 g F .text 00000070 vf_alloc_and_link_vop
080251e4 g F .text 00000068 exit_hook
0804cc60 g O .bss 00000004 igmp_cticks
08018ba0 g F .text 0000007c alt_tse_get_mac_info_index
0804cbb0 g O .bss 00000004 delays
0804ccb4 g O .bss 00000004 mheap_sem_ptr
08033754 g F .text 00000048 ip4_tcpmss
0805da98 g O .bss 00000014 netlist
0802e5ec g F .text 00000098 soshutdown
08038388 g .text 00000000 OSCtxSw
080389e8 g F .text 00000050 packet_check
0805e214 g O .bss 00000014 mbufq
0802d6fc g F .text 00000050 soabort
0804cbbc g O .bss 00000004 __malloc_top_pad
0804caec g O .rwdata 00000008 altera_onchip_flash_list
0804cbf0 g O .bss 00000004 OSTCBList
08028a40 g F .text 00000100 qdel
08038850 g F .text 00000160 station_state
0803cb28 g F .text 00000154 rt_lookup
0804cce4 g O .bss 00000004 alt_fd_list_lock
08025b84 g F .text 000002dc igmp_validate
0801dc74 g F .text 000000ac alt_qspi_controller_read
08007bf0 g F .text 0000000c _localeconv_r
08024f80 g F .text 00000264 ip_startup
08022210 g F .text 00000198 tse_msgdmaRx_isr
0802bd24 g F .text 00000250 t_accept
0802f2ec g F .text 00000098 soisdisconnecting
08008dd4 g F .text 00000034 __i2b
080074c0 g F .text 000004c4 __sfvwrite_r
080249c4 g F .text 000003a0 pktdemux
0805b19c g O .bss 00000c30 OSMemTbl
0801996c g F .text 0000012c alt_tse_phy_wr_mdio_reg
08028d08 g F .text 00000088 kbhit
0802c44c g F .text 000001c0 t_setsockopt
0800a16c g F .text 00000058 _sbrk_r
0804c928 g O .rwdata 00000018 icmpdu_types
0801a000 g F .text 00000698 alt_tse_mac_group_init
080416d4 g F .text 00000200 vunlink
08002944 g F .text 00000088 masterslave
080214c4 g F .text 00000a64 tse_mac_init
14000000 g *ABS* 00000000 __alt_mem_ext_flash_avl_mem
08013a1c g F .text 000002c0 OSMutexDel
08026cd8 g F .text 000000a4 ccksum
08040e70 g F .text 000000c8 vf_alloc_buffer
0804cd28 g O .bss 00000004 cachedRoute
0804cb10 g O .rwdata 00000004 lilbufs
0803f830 g F .text 00000024 md_ftell
08026d7c g F .text 00000054 cksum
0801335c g F .text 000000a8 OSMemNameGet
0802d324 g F .text 00000110 sofree
0804cc54 g O .bss 00000004 ifNumber
0800bfd8 g F .text 00000064 _read_r
080371c0 g F .text 00000078 alt_dcache_flush
08020374 g F .text 00000168 alt_onchip_flash_erase_block
0801503c g F .text 00000158 OSQPost
080130ac g F .text 000000a4 OS_FlagUnlink
0804cb50 g O .rwdata 00000004 alt_max_fd
08011604 g F .text 00000068 OS_MemCopy
0804cb18 g O .rwdata 00000004 bigbufs
08017ce8 g F .text 00000070 tse_mac_aTxWrite
080361e4 g F .text 000000cc tcp_disconnect
0801166c g F .text 000000c8 OS_Sched
0800bae4 g F .text 000000f8 _fclose_r
08013298 g F .text 000000c4 OSMemGet
08016d64 g F .text 0000015c OSTaskNameSet
08006d3c g F .text 00000028 fflush
0804cbb8 g O .bss 00000004 __malloc_max_sbrked_mem
0804cbf4 g O .bss 00000004 OSCtxSwCtr
0805ddd0 g O .bss 00000064 igmpstats
0803862c g F .text 0000002c OSTimeTickHook
08026704 g F .text 00000108 bsd_getsockopt
08036418 g F .text 000001a0 udp_soinput
08028990 g F .text 000000b0 putq
08011160 g F .text 000000f8 OS_EventTaskRemoveMulti
080029cc g F .text 00000048 master_clock_period
0804cc74 g O .bss 00000004 iniche_net_ready
08002554 g F .text 00000088 udpgen_command_bit
0800d0b8 g F .text 000009a0 .hidden __adddf3
08010f68 g F .text 00000148 OS_EventTaskWaitMulti
08042598 g F .text 00000048 isvfile
0802e780 g F .text 0000048c sosetopt
08027814 g F .text 000000e0 netmain
0803379c g F .text 000000f8 tcp_mss
080094c8 g F .text 00000104 __b2d
0803f93c g F .text 000002fc parse_ipad
08040de0 g F .text 00000020 get_vfopen_error
0801f2a0 g F .text 00000058 alt_msgdma_construct_prefetcher_standard_st_to_mm_descriptor
0800c9c0 g F .text 00000540 .hidden __umoddi3
0800faa8 g F .text 000000d4 lseek
08038ab0 g F .text 00000078 inet_timer
08015a60 g F .text 000001e4 OSSemPend
08019b68 g F .text 000002c8 alt_tse_phy_add_profile_default
0801b264 g F .text 0000058c alt_tse_phy_get_cap
0804cab8 g O .rwdata 00000004 _global_impure_ptr
080271c0 g F .text 00000154 print_eth
080412c0 g F .text 00000050 vfopen
08037d34 g F .text 000000fc alt_read
08009abc g F .text 0000062c _realloc_r
0805e59c g *ABS* 00000000 __bss_end
08037644 g F .text 000000e4 alt_iic_isr_register
08029bf8 g F .text 00000104 m_free
08043310 g F .text 00000018 strtol_l
080386b8 g F .text 00000024 OSTCBInitHook
08022944 g F .text 00000040 tse_mac_stats
080284f4 g F .text 00000254 pk_validate
08037f58 g F .text 00000108 alt_tick
0804b920 g O .rwdata 00000018 controltask
08040b60 g F .text 00000254 in_pcblookup
0801feec g F .text 000001a8 alt_msgdma_init
0800c428 g F .text 00000598 .hidden __udivdi3
08029a70 g F .text 00000188 m_getnbuf
08028814 g F .text 000000c4 dump_buf_estats
0800bd3c g F .text 00000024 _fputwc_r
0801b0dc g F .text 00000188 alt_tse_phy_check_link
0804cc44 g O .bss 00000004 arpRepsOut
08047504 g O .rodata 00000028 __mprec_bigtens
08008bb0 g F .text 00000110 __s2b
0800f6f4 g F .text 0000009c .hidden __floatunsidf
080386dc g F .text 000000e8 netmain_init
0801c6f8 g F .text 000000e4 marvell_cfg_sgmii
0801af18 g F .text 000001c4 alt_tse_phy_restart_an
08009258 g F .text 00000058 __mcmp
08001da8 g F .text 000000e8 ss_handle_accept
0801cb50 g F .text 00000160 altera_avalon_uart_init
0802019c g F .text 0000003c alt_msgdma_extended_descriptor_sync_transfer
08034b48 g F .text 000003f8 tcp_respond
080367f0 g F .text 000002d0 udp4_sockbind
0804cca4 g O .bss 00000004 old_mode
080258d8 g F .text 0000022c igmp_joingroup
0802ad08 g F .text 00000348 so_icmpdu
08007080 g F .text 00000014 __fp_lock_all
0804cd4c g O .bss 00000004 vfs_dir_stale
080375f8 g F .text 0000004c alt_ic_irq_enabled
0805d6b8 g O .bss 00000020 pphy_profiles
0804263c g F .text 00000058 vclearerr
08026bfc g F .text 000000dc bsd_setsockopt
080020d0 g F .text 0000013c ethernet_listen
0802a1d8 g F .text 00000054 mbuf_len
08012ed8 g F .text 000000e0 OS_FlagInit
08037ebc g F .text 0000009c alt_alarm_stop
08042374 g F .text 000001cc strippath
08027a54 g F .text 0000014c tcp_sleep
08043328 g F .text 00000018 strtol
080362b0 g F .text 000000cc tcp_usrclosed
18400000 g *ABS* 00000000 __alt_mem_descriptor_memory
0804cc90 g O .bss 00000004 cticks_factor
0804060c g F .text 00000210 in_pcbbind
0804cce8 g O .bss 00000004 alt_irq_active
080156d4 g F .text 000000a0 OSSemAccept
080134d8 g F .text 000000b8 OSMemPut
08013150 g F .text 00000148 OSMemCreate
080001fc g F .exceptions 000000c8 alt_irq_handler
0804c840 g O .rwdata 00000028 alt_dev_null
0801eed8 g F .text 00000090 alt_msgdma_construct_extended_mm_to_st_descriptor
0804cb2a g O .rwdata 00000001 tcprexmtthresh
08024254 g F .text 00000090 if_killsocks
0803a9e8 g F .text 00000210 ip_write
0803b9bc g F .text 0000054c ip_rcv_phase2
0802c228 g F .text 00000044 t_getsockname
0802bf74 g F .text 00000270 t_connect
0804cb24 g O .rwdata 00000004 TCPTV_MSL
0805de6c g O .bss 00000010 memestats
0801ae0c g F .text 0000010c alt_tse_phy_init
08028d90 g F .text 00000050 getch
0804ca38 g O .rwdata 00000080 vfs_root_path
0802c1e4 g F .text 00000044 t_getpeername
0802f9d8 g F .text 00000088 soreserve
08038388 g .text 00000000 OSIntCtxSw
0802982c g F .text 00000034 npalloc
0801fd34 g F .text 000000b0 alt_msgdma_start_prefetcher_with_std_desc_list
08008cc0 g F .text 00000064 __hi0bits
0804cd24 g O .bss 00000004 ipraw_eps
080281a8 g F .text 0000028c pk_init
0803f634 g F .text 00000158 md_fread
08022048 g F .text 000001c8 tse_mac_raw_send
0800f5ac g F .text 00000080 .hidden __fixdfsi
0805e470 g O .bss 00000064 intimers
0802fab0 g F .text 0000004c sbrelease
08030a34 g F .text 000000e4 ifd_clr
08030368 g F .text 00000090 sbdroprecord
08027314 g F .text 0000007c uslash
0803826c g F .text 000000f8 alt_write
0804cc40 g O .bss 00000004 arpRepsIn
08038c74 g F .text 0000012c in_timerset
0804cbf8 g O .bss 00000004 OSTCBFreeList
08015c44 g F .text 00000140 OSSemPendAbort
08033894 g F .text 00000f9c tcp_output
0804ccf4 g O .bss 00000004 activehost
0804cb48 g O .rwdata 00000008 alt_dev_list
0802761c g F .text 000001f8 parse_args
0804cca8 g O .bss 00000004 global_TCPwakeup_setIndx
08022c3c g F .text 00000068 write
08029860 g F .text 00000040 npfree
08009910 g F .text 000000cc _putc_r
08023624 g F .text 000002c0 arpReply
08026dfc g F .text 0000007c nextarg
0804cb84 g O .rwdata 00000004 pton_error
0805daac g O .bss 00000014 rcvdq
080309b4 g F .text 00000080 tcp_notify
0800f8dc g F .text 000000b0 fstat
0802d7e4 g F .text 000000b8 soconnect
0803cae0 g F .text 00000048 ip_raw_maxalloc
0800e470 g F .text 000000f0 .hidden __ledf2
0801c8cc g F .text 00000078 DP83848C_link_status_read
08040adc g F .text 00000084 in_setpeeraddr
08028de0 g F .text 00000038 clock_init
08041558 g F .text 000000d0 vfgets
08022cec g F .text 00000180 et_send
08008ff4 g F .text 00000128 __pow5mult
0800a410 g F .text 0000132c ___vfiprintf_internal_r
0800d05c g F .text 0000005c .hidden __umodsi3
0803fc38 g F .text 00000064 inet_addr
0802e684 g F .text 000000fc sorflush
08045458 g F .text 0000001c vprintf
0805df80 g O .bss 000000fc global_tcb_ext
0805dac0 g O .bss 00000300 netstatic
0802baf0 g F .text 00000160 t_bind
08040454 g F .text 000000d8 udp_close
0801f2f8 g F .text 00000058 alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor
080293dc g F .text 000001c0 alt_iniche_init
0805e59c g *ABS* 00000000 end
08028ff4 g F .text 00000080 UNLOCK_NET_RESOURCE
08021220 g F .text 0000022c prep_tse_mac
0802c794 g F .text 000000dc t_recv
080418d4 g F .text 00000188 vfread
080248e4 g F .text 000000e0 netclose
08042ab0 g F .text 0000000c _atoi_r
0801d354 g F .text 00000234 altera_avalon_uart_write
08017e84 g F .text 000001b4 alt_tse_phy_add_profile
0804cb34 g O .rwdata 00000004 tcp_keepintvl
080002c4 g F .exceptions 00000074 alt_instruction_exception_entry
0804c7e0 g O .rwdata 00000018 tcp_protosw
080469a8 g *ABS* 00000000 __CTOR_LIST__
0804cd48 g O .bss 00000004 vfopen_error
10000000 g *ABS* 00000000 __alt_stack_pointer
0804ccdc g O .bss 00000004 tcp_maxidle
0804cd30 g O .bss 00000004 firstudp
08017aa4 g F .text 0000007c alt_avalon_timer_sc_init
0801caa0 g F .text 00000060 altera_avalon_uart_write_fd
0800f790 g F .text 00000054 .hidden __clzsi2
0801cb00 g F .text 00000050 altera_avalon_uart_close_fd
08007070 g F .text 00000004 __sfp_lock_acquire
080085d0 g F .text 000000e8 memchr
080115b0 g F .text 00000054 OS_MemClr
08002e44 g F .text 00002160 ___vfprintf_internal_r
08038458 g F .text 0000014c OSTaskStkInit
08042d44 g F .text 00000054 _sprintf_r
080202d8 g F .text 0000009c alt_onchip_flash_get_info
080071c4 g F .text 000002fc _free_r
0803e574 g F .text 0000013c igmpv2_chk4_rtr_alert_opt
08037a9c g F .text 0000022c alt_printf
080472d7 g O .rodata 00000180 _ctype_b
0800bf04 g F .text 0000000c __locale_mb_cur_max
0802ce70 g F .text 000000c0 t_socketclose
08010cd8 g F .text 00000188 OS_EventTaskRdy
080003b0 g F .text 00000068 control_pong
08045578 g F .text 00000118 __call_exitprocs
0800a0e8 g F .text 00000074 __srget_r
0805ddc0 g O .bss 00000010 nets
08028f38 g F .text 000000bc LOCK_NET_RESOURCE
080223a8 g F .text 00000060 tse_msgdmaTx_isr
080227f8 g F .text 0000014c tse_mac_rcv
0802ba70 g F .text 00000080 t_socket
0804cac0 g O .rwdata 00000004 __malloc_sbrk_base
08000338 g F .text 00000048 _start
08022ca4 g F .text 00000048 etainit
0804ccec g O .bss 00000004 _alt_tick_rate
08038a38 g F .text 00000024 mcastlist
08014c9c g F .text 00000260 OSQPend
0805de7c g O .bss 000000f0 pktlog
0803e170 g F .text 00000114 igmpv2_process_report
08030b8c g F .text 00000074 ifd_isset
0801d6cc g F .text 0000008c alt_qspi_controller_get_info
0803d020 g F .text 00000114 del_route
0801730c g F .text 00000104 OSTimeDly
080011e8 g F .text 00000054 get_mac_addr
0802d254 g F .text 000000d0 solisten
0800911c g F .text 0000013c __lshift
0804ccf0 g O .bss 00000004 _alt_nticks
0801ed98 g F .text 00000058 alt_msgdma_construct_standard_mm_to_st_descriptor
08019a98 g F .text 000000d0 alt_tse_phy_rd_mdio_reg
08022bcc g F .text 00000070 read
08017800 g F .text 0000022c alt_sys_init
08045690 g F .text 000001c0 __ssprint_r
080351d0 g F .text 0000004c tcp_quench
08002050 g F .text 00000080 ethernet_init
08027390 g F .text 00000170 ns_printf
080240f4 g F .text 000000d4 isbcast
08029074 g F .text 00000240 TK_NEWTASK
080454e8 g F .text 00000090 __register_exitproc
0804cbfc g O .bss 00000001 OSTaskCtr
0804cc24 g O .bss 00000001 phy_profile_count
08042fec g F .text 000000fc strncmp
08018b34 g F .text 0000006c alt_tse_get_mac_group_index
08017410 g F .text 000000fc OSTimeDlyHMSM
0803c714 g F .text 000000bc ip_raw_close
08008e08 g F .text 000001ec __multiply
0804c988 g O .rwdata 000000b0 mdlist
0802541c g F .text 000000d0 igmp_input
0803af6c g F .text 000000bc ip_raw_write
08041a5c g F .text 000003ac vfwrite_locked
0804cd90 g O .bss 00000028 __malloc_current_mallinfo
0803ff20 g F .text 0000006c inet_setport
080095cc g F .text 00000148 __d2b
08015d84 g F .text 00000100 OSSemPost
08033264 g F .text 00000188 tcp_dooptions
0802f1e8 g F .text 00000104 soisconnected
08010994 g F .text 000000dc OSSchedUnlock
0803c5e8 g F .text 00000028 netexit
08001434 g F .text 00000194 get_serial_number
0804cc70 g O .bss 00000004 nettick_wakes
08019914 g F .text 00000058 alt_tse_phy_wr_mdio_addr
0804ccd0 g O .bss 00000001 tcpprintfs
0803e064 g F .text 0000010c igmpv2_input
08038da0 g F .text 00000098 in_timerkill
08026dd0 g F .text 0000002c do_trap
08042920 g F .text 000000d8 alt_get_fd
0802680c g F .text 000000f0 bsd_ioctl
0804cc00 g O .bss 00000004 OSMemFreeList
0802a4a4 g F .text 000001b4 tcp_rcv
08027178 g F .text 00000048 panic
0804cd50 g O .bss 00000004 vfs_open_files
08024df4 g F .text 0000018c ip2mac
08036f5c g F .text 00000158 alt_busy_sleep
08012cdc g F .text 00000098 OSFlagQuery
08030708 g F .text 000001e8 sock_select
080349f8 g F .text 00000048 tcp_init
0804ccac g O .bss 00000004 cticks
0804cc79 g O .bss 00000001 to_nettick
0800b9d4 g F .text 00000058 _close_r
080242e4 g F .text 000004d0 Netinit
08029608 g F .text 00000038 prep_armintcp
0803c2ac g F .text 0000014c in_addmulti
08034a40 g F .text 00000108 tcp_template
0801bdb0 g F .text 0000031c alt_tse_phy_get_common_speed
0802a2c4 g F .text 00000070 remque
0804b938 g O .rwdata 00000018 sslistenertask
08045474 g F .text 00000010 _vprintf_r
08030c60 g F .text 000003f0 tcp_reass
080400c0 g F .text 00000194 tcp_cksum
08036ac0 g F .text 00000374 udp4_socksend
0801f248 g F .text 00000058 alt_msgdma_construct_prefetcher_standard_mm_to_mm_descriptor
08041310 g F .text 000001bc vfclose_locked
08030b18 g F .text 00000074 ifd_set
08042cb8 g F .text 0000008c memcmp
08010cb8 g F .text 00000020 OS_Dummy
0804cc50 g O .bss 00000004 NDEBUG
0805e59c g *ABS* 00000000 __alt_stack_base
0804cba4 g O .bss 00000004 last_flash_sector
0802fa60 g F .text 00000050 sbreserve
0804cc25 g O .bss 00000001 mac_group_count
0803c7d0 g F .text 00000214 ip_raw_input
0804cb14 g O .rwdata 00000004 lilbufsiz
08030c00 g F .text 00000060 ifd_get
0802f94c g F .text 0000008c sbwakeup
0801f350 g F .text 000000a0 alt_msgdma_construct_prefetcher_extended_st_to_mm_descriptor
0800507c g F .text 00000160 __swsetup_r
080210d8 g F .text 00000148 altera_eth_tse_init
0805bdcc g O .bss 000001e0 OSQTbl
08033518 g F .text 0000023c tcp_xmit_timer
0800da58 g F .text 000008a8 .hidden __divdf3
0802020c g F .text 000000cc alt_onchip_flash_read
08006f50 g F .text 000000fc __sfp
08001780 g F .text 00000134 generate_mac_addr
0803a148 g F .text 0000018c ip_bldhead
08009830 g F .text 0000006c __copybits
0802fafc g F .text 000000a0 sbappend
0804bea4 g O .rwdata 00000408 __malloc_av_
0800707c g F .text 00000004 __sinit_lock_release
0804cc04 g O .bss 00000004 OSTCBHighRdy
0800e560 g F .text 0000068c .hidden __muldf3
0803abf8 g F .text 00000374 ip_write2
0800a1c4 g F .text 00000054 __sread
0804cafc g O .rwdata 00000004 arp_ageout
0804cc08 g O .bss 00000004 OSQFreeList
0801a698 g F .text 0000040c alt_tse_mac_get_phy
0803a070 g F .text 000000d8 ip_init
08042818 g F .text 00000108 alt_find_file
0803ca9c g F .text 00000044 ip_raw_free
0801d5bc g F .text 00000110 alt_qspi_controller_lock
08023528 g F .text 000000fc make_arp_entry
080372a0 g F .text 000000a4 alt_dev_llist_insert
0800fe0c g F .text 00000120 __malloc_lock
0800fc38 g F .text 000000b0 sbrk
08043340 g F .text 00002118 ___svfprintf_internal_r
080363bc g F .text 0000005c udp_lookup
080100d0 g F .text 00000100 OSEventNameSet
08006cdc g F .text 00000060 _fflush_r
08018dc8 g F .text 0000008c alt_tse_mac_set_duplex
0800ba2c g F .text 000000b8 _calloc_r
0802974c g F .text 000000e0 npfree_base
0804cc0c g O .bss 00000001 OSRdyGrp
08001c08 g F .text 00000114 sensor_preconfigure
0803f5e8 g F .text 00000028 md_fopen
0804c7f8 g O .rwdata 00000018 udp_protosw
0804cac8 g O .rwdata 00000008 alt_flash_dev_list
08021f28 g F .text 00000120 tse_msgdma_write_init
08040a58 g F .text 00000084 in_setsockaddr
0804cb8c g *ABS* 00000000 __bss_start
0802fb9c g F .text 000000d8 sbappendrecord
0805e53c g O .bss 00000050 ip_mib
080088e4 g F .text 000000f0 memset
0801fe94 g F .text 00000058 alt_msgdma_open
0802d89c g F .text 00000098 sodisconnect
08001178 g F .text 00000070 main
0804cbd0 g O .bss 00000004 alt_envp
0804cbb4 g O .bss 00000004 __malloc_max_total_mem
0801f630 g F .text 00000198 alt_msgdma_prefetcher_add_extended_desc_to_list
0802a018 g F .text 000001c0 m_adj
0800b95c g F .text 00000014 __swbuf
0803f854 g F .text 000000c4 md_fgetc
08047734 g O .rodata 00000100 OSUnMapTbl
0803b0cc g F .text 000002a4 ip_dump
08027d14 g F .text 000001f8 tk_stats
0804caf4 g O .rwdata 00000008 alt_iniche_dev_list
0804cc94 g O .bss 00000004 OS_TPS
0802b2e8 g F .text 00000738 rawip_usrreq
08012970 g F .text 0000036c OSFlagPost
0800a2fc g F .text 00000008 __sclose
0803fe00 g F .text 0000005c print46_addr
10000000 g *ABS* 00000000 __alt_heap_limit
0800bbdc g F .text 00000010 fclose
08010e60 g F .text 00000108 OS_EventTaskWait
0804330c g F .text 00000004 _strtol_r
08002c38 g F .text 00000010 getchar
08027038 g F .text 00000140 print_uptime
08016b04 g F .text 00000128 OSTaskDelReq
080053ec g F .text 000016c8 _dtoa_r
0801fa24 g F .text 00000310 alt_msgdma_start_prefetcher_with_list_addr
08007ddc g F .text 000007f4 _malloc_r
0803f918 g F .text 00000024 md_unlink
08017d58 g F .text 00000088 tse_mac_SwReset
0800c3f8 g F .text 00000030 __ascii_wctomb
08001e90 g F .text 000001c0 SSListenerTask
0801389c g F .text 00000180 OSMutexCreate
080405b4 g F .text 00000058 in_pcbdetach
0804cb54 g O .rwdata 00000004 alt_errno
0804cb80 g O .rwdata 00000004 mdlist_size
0801f488 g F .text 000000b8 alt_msgdma_construct_prefetcher_extended_mm_to_mm_descriptor
08010a70 g F .text 00000068 OSStart
08020f20 g F .text 00000090 alt_onchip_flash_poll_for_status_to_go_idle
0803eef8 g F .text 00000034 u_mctest_init
0800fdac g F .text 00000060 __env_unlock
08007984 g F .text 000000a4 _fwalk
08016ec0 g F .text 000001b8 OSTaskResume
08013590 g F .text 000000c8 OSMemQuery
0803ff8c g F .text 00000134 convert_ip
080233bc g F .text 0000016c find_oldest_arp
0804cc38 g O .bss 00000004 arpReqsIn
08040f38 g F .text 00000050 vf_free_buffer
0800bf88 g F .text 0000000c _mbtowc_r
080426f4 g F .text 00000124 alt_fcntl
08015194 g F .text 00000160 OSQPostFront
08028cd4 g F .text 00000034 dtrap
0804cb20 g O .rwdata 00000004 kb_last
080099dc g F .text 000000e0 putc
080025dc g F .text 000001cc udpgen_test
0800cf00 g F .text 00000080 .hidden __divsi3
08018a80 g F .text 00000048 alt_tse_mac_set_common_speed
0804cc0d g O .bss 00000003 OSRdyTbl
08029640 g F .text 0000010c npalloc_base
0802524c g F .text 000000b0 ip_exit
080070a8 g F .text 0000011c _malloc_trim_r
080469a8 g *ABS* 00000000 __CTOR_END__
08020a80 g F .text 000004a0 altera_onchip_flash_init
08000478 g F .text 00000080 check_arp
08028e38 g F .text 0000005c cticks_hook
080389b0 g F .text 00000038 sysuptime
0800c224 g F .text 000000d8 strcmp
080015c8 g F .text 000001b8 generate_and_store_mac_addr
08014818 g F .text 000001a4 OSQCreate
08028e94 g F .text 00000060 irq_Mask
08016c2c g F .text 00000138 OSTaskNameGet
0804ccfc g O .bss 00000004 nextppp
0804cc84 g O .bss 00000004 irq_level
08002904 g F .text 00000040 reload_fpga
080247b4 g F .text 00000130 fixup_subnet_mask
080152f4 g F .text 000001fc OSQPostOpt
08010ad8 g F .text 000001c0 OSTimeTick
0803b53c g F .text 0000012c ip_copypkt
080469a8 g *ABS* 00000000 __DTOR_LIST__
08015774 g F .text 000000d8 OSSemCreate
0804cc64 g O .bss 00000004 igmp_all_hosts_group
0802f8a4 g F .text 0000003c sbselqueue
0804cc6c g O .bss 00000004 netmain_wakes
08002b08 g F .text 00000074 led_toggle
08014430 g F .text 0000014c OSMutexQuery
080238e4 g F .text 00000264 arprcv
080279e0 g F .text 00000074 TK_OSTaskResume
08025e60 g F .text 000003b4 igmp_print_stats
0800e300 g F .text 00000080 .hidden __nedf2
08029914 g F .text 00000090 pffindtype
080027a8 g F .text 00000098 swap_bytes
0804cb38 g O .rwdata 00000004 tcp_sendspace
08041fbc g F .text 0000010c vftell
0805de34 g O .bss 00000012 eth_prt_buf
08015e84 g F .text 000000f0 OSSemQuery
080149bc g F .text 00000254 OSQDel
08014efc g F .text 00000140 OSQPendAbort
080177c8 g F .text 00000038 alt_irq_init
08018a40 g F .text 00000040 alt_tse_mac_get_common_speed
0805e1ac g O .bss 00000018 app_semaphore
08037e30 g F .text 00000058 alt_release_fd
08000000 g *ABS* 00000000 __alt_mem_ddr3_ram
08020160 g F .text 0000003c alt_msgdma_standard_descriptor_sync_transfer
08029368 g F .text 00000074 post_app_sem
0802537c g F .text 000000a0 igmp_init
08042af0 g F .text 00000014 memalign
08042d98 g F .text 00000064 sprintf
08047624 g O .rodata 00000100 .hidden __clz_tab
0803f78c g F .text 00000078 md_fwrite
0804cbc4 g O .bss 00000004 _PathLocale
0804cb0c g O .rwdata 00000004 pingdata
0804cc98 g O .bss 00000004 tcp_sleep_count
0802a334 g F .text 0000007c insque
08042a90 g F .text 00000014 atexit
0804cd44 g O .bss 00000004 vfsfiles
0800b970 g F .text 00000064 _write_r
08045484 g F .text 0000004c _vsprintf_r
0803d8a0 g F .text 00000294 udp_send
08010908 g F .text 0000008c OSSchedLock
0802565c g F .text 0000027c igmp_send
0800bf10 g F .text 00000014 setlocale
0801f3f0 g F .text 00000098 alt_msgdma_construct_prefetcher_extended_mm_to_st_descriptor
08011e78 g F .text 000000f8 OSFlagCreate
08028ef4 g F .text 00000044 irq_Unmask
0802bc50 g F .text 000000d4 t_listen
0801c9a0 g F .text 000000a0 PEF7071_link_status_read
0804cabc g O .rwdata 00000004 _impure_ptr
08000950 g F .text 00000714 control_step
0804cbc8 g O .bss 00000004 alt_argc
08035a14 g F .text 000006b8 tcp_usrreq
080365b8 g F .text 00000238 udp_usrreq
080298a0 g F .text 00000034 ncpalloc
08006ab4 g F .text 00000228 __sflush_r
080373a4 g F .text 00000060 _do_dtors
0804cb6c g O .rwdata 00000004 pingdelay
08022ef4 g F .text 00000074 arp_send_pending
0803ddfc g F .text 00000268 igmpv1_input
0800c058 g F .text 000001cc __srefill_r
0802959c g F .text 0000004c pre_task_setup
0804ccb8 g O .bss 00000004 rcvdq_sem_ptr
08026454 g F .text 00000120 bsd_getsockname
08001a54 g F .text 0000012c FindLastFlashSectorOffset
08011f70 g F .text 0000021c OSFlagDel
0804cc10 g O .bss 00000004 OSEventFreeList
08000120 g .exceptions 00000000 alt_irq_entry
0804cc30 g O .bss 00000004 arpcache
08039a54 g F .text 000002d8 icmp_destun
0800bf94 g F .text 00000044 __ascii_mbtowc
0803c504 g F .text 00000064 lookup_mcast
0804232c g F .text 00000048 vfslookup
0803bf08 g F .text 000003a4 ip_demux
0800946c g F .text 0000005c __ulp
0804cc9c g O .bss 00000004 tcp_wakeup_count
08012378 g F .text 00000598 OSFlagPend
08007094 g F .text 00000014 __fp_unlock_all
080292b4 g F .text 000000b4 wait_app_sem
0804cb00 g O .rwdata 00000004 ipmcfail_str
0804ccb0 g O .bss 00000004 memtrapsize
08029d40 g F .text 000002d8 m_copy
0804cb40 g O .rwdata 00000008 alt_fs_list
0805e228 g O .bss 00000014 mfreeq
080204dc g F .text 000002d8 alt_onchip_flash_write_block
0801d758 g F .text 00000124 alt_qspi_controller_erase_block
080117a0 g F .text 00000074 OS_StrCopy
0802d1f8 g F .text 0000005c sobind
0804cadc g O .rwdata 00000004 eth_tse_name
0803f598 g F .text 00000050 init_memdev
0802a3b0 g F .text 000000f4 nptcp_init
08002abc g F .text 0000004c led_clear
0805e07c g O .bss 000000f0 global_TCPwakeup_set
08038678 g F .text 00000020 OSInitHookEnd
0802f384 g F .text 000000c4 soisdisconnected
08022e6c g F .text 00000088 arp_free_pending
08007bfc g F .text 0000000c localeconv
0802d434 g F .text 000002c8 soclose
0805df6c g O .bss 00000014 bigfreeq
08007c08 g F .text 00000098 __swhatbuf_r
0804cb68 g O .rwdata 00000004 prompt
0804cb30 g O .rwdata 00000004 tcp_keepidle
0801bc08 g F .text 000001a8 alt_tse_phy_set_adv_10
0802b124 g F .text 000001c4 rawip_soinput
08037494 g F .text 00000050 alt_ic_isr_register
08041e08 g F .text 00000060 vfwrite
0802f640 g F .text 000000ac soqinsque
0804cd1c g O .bss 00000004 so_evtmap_delete
0804cb8c g *ABS* 00000000 _edata
0801ca40 g F .text 00000060 altera_avalon_uart_read_fd
08022aa8 g F .text 00000124 iniche_devices_init
080207b4 g F .text 000002cc alt_onchip_flash_write
0805e23c g O .bss 00000028 tcp_saveti
08027544 g F .text 000000d8 con_page
0805e59c g *ABS* 00000000 _end
0802ec0c g F .text 00000520 sogetopt
08001064 g F .text 0000008c ControlTask
0800f7e4 g F .text 00000068 alt_flash_open_dev
0804cc14 g O .bss 00000001 OSIntNesting
08002c30 g F .text 00000008 _getchar_r
0801aaa4 g F .text 00000240 alt_tse_mac_associate_phy
0804c7b0 g O .rwdata 00000030 nettasks
080287f4 g F .text 00000020 pk_get_max_intrsafe_buf_len
0800bbec g F .text 00000150 __fputwc
0803b370 g F .text 000001cc iproute
0802ac18 g F .text 000000f0 np_stripoptions
0804cd20 g O .bss 00000001 so_evtmap
0801750c g F .text 000001cc OSTimeDlyResume
0803cc7c g F .text 000003a4 add_route
0801226c g F .text 0000010c OSFlagNameSet
08024d64 g F .text 00000090 c_older
0803002c g F .text 00000084 sbflush
0803f610 g F .text 00000024 md_fclose
08027ce4 g F .text 00000030 tk_yield
0803756c g F .text 0000008c alt_ic_irq_disable
0802d934 g F .text 00000560 sosend
0803b028 g F .text 000000a4 ip_mymach
0800a220 g F .text 00000080 __swrite
08002840 g F .text 000000c4 swap_quad
0804cc80 g O .bss 00000004 cticks_initialized
0804cb70 g O .rwdata 00000004 deflength
0802c9ac g F .text 000001f0 t_sendto
0804cac4 g O .rwdata 00000004 __malloc_trim_threshold
0804cc18 g O .bss 00000004 OSTCBCur
0802d050 g F .text 000001a8 socreate
08042abc g F .text 00000034 exit
0805d998 g O .bss 00000100 arp_table
08001b80 g F .text 00000088 sensor_command_bit
08014238 g F .text 000001f8 OSMutexPost
0804cd08 g O .bss 00000004 icmpdu_hook
08007a28 g F .text 000000b4 _fwalk_reent
0801f7c8 g F .text 00000110 alt_msgdma_prefetcher_set_std_list_own_by_hw_bits
08038e38 g F .text 00000024 create_apptasks
0804cb2c g O .rwdata 00000004 tcp_ttl
080092b0 g F .text 000001bc __mdiff
0800f84c g F .text 00000054 alt_flash_close_dev
080298d4 g F .text 00000040 ncpfree
0800cf80 g F .text 00000078 .hidden __modsi3
08042b04 g F .text 00000194 _memalign_r
0804cc48 g O .bss 00000004 MaxLnh
08017e34 g F .text 00000050 tse_mac_setGMIImode
0803fd7c g F .text 00000084 inet_ntop
0803dd94 g F .text 00000024 udp_maxalloc
0801c614 g F .text 000000e4 marvell_cfg_gmii
10000000 g *ABS* 00000000 __alt_data_end
08000120 g F .exceptions 00000000 alt_exception
08007074 g F .text 00000004 __sfp_lock_release
0801077c g F .text 00000050 OSInit
0801ef68 g F .text 000000a8 alt_msgdma_construct_extended_mm_to_mm_descriptor
0801ace4 g F .text 00000128 alt_tse_phy_cfg_pcs
08017220 g F .text 000000ec OSTaskQuery
080387c4 g F .text 0000008c icmp_port_du
0804cce0 g O .bss 00000004 tcp_iss
0801562c g F .text 000000a8 OS_QInit
08042aa4 g F .text 0000000c atoi
0804cb1c g O .rwdata 00000004 bigbufsiz
08011814 g F .text 00000054 OS_StrLen
0803521c g F .text 00000078 tcp_putseq
08013404 g F .text 000000d4 OSMemNameSet
080471d6 g O .rodata 00000101 _ctype_
0802fc74 g F .text 000001dc sbappendaddr
0804cd54 g O .bss 00000004 vfs_total_rw_space
0800f558 g F .text 00000054 .hidden __unorddf2
0803ed64 g F .text 00000110 ip_getmoptions
0801ee48 g F .text 00000090 alt_msgdma_construct_extended_st_to_mm_descriptor
0803db34 g F .text 000000f4 udpswap
0804cc1c g O .bss 00000004 OSTime
0804ccbc g O .bss 00000004 nextslow
08035308 g F .text 0000025c tcp_slowtimo
0801d020 g F .text 00000054 altera_avalon_uart_close
08034f40 g F .text 0000010c tcp_newtcpcb
08023b48 g F .text 0000017c send_via_arp
0805bfac g O .bss 00000800 OSTaskIdleStk
08046974 g F .text 00000034 _exit
08042540 g F .text 00000058 isvfile_locked
08026a74 g F .text 00000188 bsd_select
0801218c g F .text 000000e0 OSFlagNameGet
0803ddb8 g F .text 00000044 udp_free
080288d8 g F .text 000000b8 getq
08042694 g F .text 00000024 prep_vfs
080176d8 g F .text 0000005c OSTimeGet
0804cb64 g O .rwdata 00000004 name
08030268 g F .text 00000100 sbdropend
08007ca0 g F .text 0000013c __smakebuf_r
08023cc4 g F .text 0000010c cb_arpent_tmo
0804cae4 g O .rwdata 00000008 alt_msgdma_list
08002dac g F .text 00000098 strlen
0803e6b0 g F .text 00000114 IPADDR_TO_NETP
080268fc g F .text 00000034 bsd_inet_ntoa
080385ec g F .text 00000020 OSTaskSwHook
08037948 g F .text 00000154 open
08040254 g F .text 00000200 udp_open
0805c7ac g O .bss 00000b40 OSEventTbl
0802f7f4 g F .text 00000058 socantsendmore
0804cd58 g O .bss 00000004 vfs_total_dyna_files
0800e380 g F .text 000000f0 .hidden __gedf2
08038060 g F .text 00000044 alt_uncached_free
08037cc8 g F .text 00000030 alt_putchar
0805d2ec g O .bss 00000288 OSTCBTbl
0804cc3c g O .bss 00000004 arpReqsOut
08015f74 g F .text 000000d8 OSSemSet
0804cb88 g O .rwdata 00000004 http_root_path
0804cb9c g O .bss 00000001 to_controltask
0801da8c g F .text 000001e8 alt_qspi_controller_write
0800a3f8 g F .text 00000018 __sprint_r
08017c78 g F .text 00000070 tse_mac_aRxRead
08042dfc g F .text 00000164 strchr
0805de46 g O .bss 00000012 ipreturn
0804cd10 g O .bss 00000004 port_prep
0804c833 g O .rwdata 0000000d tcp_backoff
0802f178 g F .text 00000070 soisconnecting
080226c0 g F .text 00000138 allocate_rx_descriptor_chain
0804cb58 g O .rwdata 00000004 alt_priority_mask
0803e284 g F .text 000001c0 igmpv2_process_query
080303f8 g F .text 000001d0 t_select
08002b7c g F .text 0000004c led4_blink_enable
0801584c g F .text 00000214 OSSemDel
08000418 g F .text 00000060 control_process_snapshot
08036e34 g F .text 00000128 udp4_sockaddr
0804cc20 g O .bss 00000004 OSFlagFreeList
0804081c g F .text 000001e0 in_pcbconnect
0804ccd4 g O .bss 00000004 dropline
080374e4 g F .text 00000088 alt_ic_irq_enable
08004fa4 g F .text 00000018 __vfprintf_internal
080278f4 g F .text 00000078 tk_netmain
080409fc g F .text 0000005c in_pcbdisconnect
0805d574 g O .bss 00000054 OSTCBPrioTbl
0801d0b0 g F .text 00000268 altera_avalon_uart_read
0800c3ec g F .text 0000000c _wctomb_r
0800fce8 g F .text 000000c4 __env_lock
0804c964 g O .rwdata 00000024 mdio
08018ce8 g F .text 000000e0 alt_tse_mac_set_speed
08026214 g F .text 00000120 bsd_accept
0804cb3c g O .rwdata 00000004 tcp_recvspace
0800ebec g F .text 0000096c .hidden __subdf3
08046970 g F .text 00000004 _vfprintf_r
0803637c g F .text 00000040 tcpinit
0804cc68 g O .bss 00000004 igmp_all_rtrs_group
0802b0c8 g F .text 0000005c rawip_lookup
08038ed8 g F .text 000000a0 fcntl
080008a4 g F .text 000000ac control_get_data
08008d24 g F .text 000000b0 __lo0bits
0802fe50 g F .text 000001dc sbcompress
0804cb5c g O .rwdata 00000008 alt_alarm_list
0803504c g F .text 0000009c tcp_drop
08037344 g F .text 00000060 _do_ctors
0801b9b4 g F .text 00000254 alt_tse_phy_set_adv_100
080355c0 g F .text 00000454 tcp_timers
080252fc g F .text 00000080 if_netnumber
0803ee74 g F .text 00000084 ip_freemoptions
0802f12c g F .text 0000004c sohasoutofband
0800c368 g F .text 00000084 wcrtomb
08031050 g F .text 00002214 tcp_input
08026334 g F .text 00000120 bsd_getpeername
08026930 g F .text 00000144 bsd_recvfrom
08022a60 g F .text 00000048 close
0804cbd8 g O .bss 00000004 alt_envsem
0804c2ac g O .rwdata 0000016c __global_locale
08010c98 g F .text 00000020 OSVersion
08040db4 g F .text 0000002c set_vfopen_error
08022408 g F .text 000002b8 tse_msgdma_read_init
08018ac8 g F .text 0000006c alt_tse_get_system_index
0804c810 g O .rwdata 00000018 rawip_protosw
08001d58 g F .text 00000050 ss_initialize_connection
0802f8e0 g F .text 0000006c sbwait
08011258 g F .text 00000068 OS_EventWaitListInit
0804cd00 g O .bss 00000004 port_1s_callout
0800bd60 g F .text 0000007c fputwc
08038698 g F .text 00000020 OSTaskIdleHook
08042ca8 g F .text 00000010 free
08007078 g F .text 00000004 __sinit_lock_acquire
0804cc28 g O .bss 00000001 number_of_tse_mac
08008a9c g F .text 00000114 __multadd
08017078 g F .text 000001a8 OSTaskSuspend
08008a78 g F .text 00000024 _Bfree
08017b20 g F .text 00000030 no_printf
0802f448 g F .text 000001f8 sonewconn
08038f78 g F .text 00000adc icmprcv
080299a4 g F .text 000000cc pffindproto
08011868 g F .text 0000005c OS_TaskIdle
080154f0 g F .text 0000013c OSQQuery
Disassembly of section .entry:
14000000 <__reset>:
#if NIOS2_ICACHE_SIZE > 0 && defined(ALT_ALLOW_CODE_AT_RESET) && (!defined(ALT_SIM_OPTIMIZE) || defined(NIOS2_ECC_PRESENT))
/* Assume the instruction cache size is always a power of two. */
#if NIOS2_ICACHE_SIZE > 0x8000
movhi r2, %hi(NIOS2_ICACHE_SIZE)
#else
movui r2, NIOS2_ICACHE_SIZE
14000000: 00820014 movui r2,2048
#endif
0:
initi r2
14000004: 1001483a initi r2
addi r2, r2, -NIOS2_ICACHE_LINE_SIZE
14000008: 10bff804 addi r2,r2,-32
bgt r2, zero, 0b
1400000c: 00bffd16 blt zero,r2,14000004 <__reset+0x4>
* Jump to the _start entry point in the .text section if reset code
* is allowed or if optimizing for RTL simulation.
*/
#if defined(ALT_ALLOW_CODE_AT_RESET) || defined(ALT_SIM_OPTIMIZE)
/* Jump to the _start entry point in the .text section. */
movhi r1, %hi(_start)
14000010: 00420034 movhi at,2048
ori r1, r1, %lo(_start)
14000014: 0840ce14 ori at,at,824
jmp r1
14000018: 0800683a jmp at
1400001c: 00000000 call 10000000 <__alt_data_end>
Disassembly of section .exceptions:
08000120 <alt_exception>:
#else /* ALT_EXCEPTION_STACK disabled */
/*
* Reserve space on normal stack for registers about to be pushed.
*/
addi sp, sp, -76
8000120: deffed04 addi sp,sp,-76
* documentation for details).
*
* Leave a gap in the stack frame at 4(sp) for the muldiv handler to
* store zero into.
*/
stw ra, 0(sp)
8000124: dfc00015 stw ra,0(sp)
stw r1, 8(sp)
8000128: d8400215 stw at,8(sp)
stw r2, 12(sp)
800012c: d8800315 stw r2,12(sp)
stw r3, 16(sp)
8000130: d8c00415 stw r3,16(sp)
stw r4, 20(sp)
8000134: d9000515 stw r4,20(sp)
stw r5, 24(sp)
8000138: d9400615 stw r5,24(sp)
stw r6, 28(sp)
800013c: d9800715 stw r6,28(sp)
stw r7, 32(sp)
8000140: d9c00815 stw r7,32(sp)
rdctl r5, estatus /* Read early to avoid usage stall */
8000144: 000b307a rdctl r5,estatus
stw r8, 36(sp)
8000148: da000915 stw r8,36(sp)
stw r9, 40(sp)
800014c: da400a15 stw r9,40(sp)
stw r10, 44(sp)
8000150: da800b15 stw r10,44(sp)
stw r11, 48(sp)
8000154: dac00c15 stw r11,48(sp)
stw r12, 52(sp)
8000158: db000d15 stw r12,52(sp)
stw r13, 56(sp)
800015c: db400e15 stw r13,56(sp)
stw r14, 60(sp)
8000160: db800f15 stw r14,60(sp)
stw r15, 64(sp)
8000164: dbc01015 stw r15,64(sp)
/*
* ea-4 contains the address of the instruction being executed
* when the exception occured. For interrupt exceptions, we will
* will be re-issue the isntruction. Store it in 72(sp)
*/
stw r5, 68(sp) /* estatus */
8000168: d9401115 stw r5,68(sp)
addi r15, ea, -4 /* instruction that caused exception */
800016c: ebffff04 addi r15,ea,-4
stw r15, 72(sp)
8000170: dbc01215 stw r15,72(sp)
#else
/*
* Test to see if the exception was a software exception or caused
* by an external interrupt, and vector accordingly.
*/
rdctl r4, ipending
8000174: 0009313a rdctl r4,ipending
andi r2, r5, 1
8000178: 2880004c andi r2,r5,1
beq r2, zero, .Lnot_irq
800017c: 10000326 beq r2,zero,800018c <alt_exception+0x6c>
beq r4, zero, .Lnot_irq
8000180: 20000226 beq r4,zero,800018c <alt_exception+0x6c>
/*
* Now that all necessary registers have been preserved, call
* alt_irq_handler() to process the interrupts.
*/
call alt_irq_handler
8000184: 80001fc0 call 80001fc <alt_irq_handler>
.section .exceptions.irqreturn, "xa"
br .Lexception_exit
8000188: 00000706 br 80001a8 <alt_exception+0x88>
* upon completion, so we write ea (address of instruction *after*
* the one where the exception occured) into 72(sp). The actual
* instruction that caused the exception is written in r2, which these
* handlers will utilize.
*/
stw ea, 72(sp) /* EA is PC+4 so will skip over instruction causing exception */
800018c: df401215 stw ea,72(sp)
.Lunknown_16bit:
addi.n r4, r4, 2 /* Need PC+2 to skip over instruction causing exception */
stw r4, 72(sp)
#else /* CDX is not Enabled and all instructions are 32bits */
ldw r2, -4(ea) /* Instruction value that caused exception */
8000190: e8bfff17 ldw r2,-4(ea)
* debugger is present) or go into an infinite loop since the
* handling behavior is undefined; in that case we will not return here.
*/
/* Load exception-causing address as first argument (r4) */
addi r4, ea, -4
8000194: e93fff04 addi r4,ea,-4
/* Call the instruction-exception entry */
call alt_instruction_exception_entry
8000198: 80002c40 call 80002c4 <alt_instruction_exception_entry>
* instruction
*
* Return code was 0: Skip. The instruction after the exception is
* already stored in 72(sp).
*/
bne r2, r0, .Lexception_exit
800019c: 1000021e bne r2,zero,80001a8 <alt_exception+0x88>
/*
* Otherwise, modify 72(sp) to re-issue the instruction that caused the
* exception.
*/
addi r15, ea, -4 /* instruction that caused exception */
80001a0: ebffff04 addi r15,ea,-4
stw r15, 72(sp)
80001a4: dbc01215 stw r15,72(sp)
/*
* Restore the saved registers, so that all general purpose registers
* have been restored to their state at the time the interrupt occured.
*/
ldw r5, 68(sp)
80001a8: d9401117 ldw r5,68(sp)
ldw ea, 72(sp) /* This becomes the PC once eret is executed */
80001ac: df401217 ldw ea,72(sp)
ldw ra, 0(sp)
80001b0: dfc00017 ldw ra,0(sp)
wrctl estatus, r5
80001b4: 2801707a wrctl estatus,r5
ldw r1, 8(sp)
80001b8: d8400217 ldw at,8(sp)
ldw r2, 12(sp)
80001bc: d8800317 ldw r2,12(sp)
ldw r3, 16(sp)
80001c0: d8c00417 ldw r3,16(sp)
ldw r4, 20(sp)
80001c4: d9000517 ldw r4,20(sp)
ldw r5, 24(sp)
80001c8: d9400617 ldw r5,24(sp)
ldw r6, 28(sp)
80001cc: d9800717 ldw r6,28(sp)
ldw r7, 32(sp)
80001d0: d9c00817 ldw r7,32(sp)
#if defined(ALT_EXCEPTION_STACK) && defined(ALT_STACK_CHECK)
ldw et, %gprel(alt_exception_old_stack_limit)(gp)
#endif
ldw r8, 36(sp)
80001d4: da000917 ldw r8,36(sp)
ldw r9, 40(sp)
80001d8: da400a17 ldw r9,40(sp)
ldw r10, 44(sp)
80001dc: da800b17 ldw r10,44(sp)
ldw r11, 48(sp)
80001e0: dac00c17 ldw r11,48(sp)
ldw r12, 52(sp)
80001e4: db000d17 ldw r12,52(sp)
ldw r13, 56(sp)
80001e8: db400e17 ldw r13,56(sp)
ldw r14, 60(sp)
80001ec: db800f17 ldw r14,60(sp)
ldw r15, 64(sp)
80001f0: dbc01017 ldw r15,64(sp)
stw et, %gprel(alt_stack_limit_value)(gp)
stw zero, %gprel(alt_exception_old_stack_limit)(gp)
#endif /* ALT_STACK_CHECK */
ldw sp, 76(sp)
#else /* ALT_EXCEPTION_STACK disabled */
addi sp, sp, 76
80001f4: dec01304 addi sp,sp,76
/*
* Return to the interrupted instruction.
*/
eret
80001f8: ef80083a eret
080001fc <alt_irq_handler>:
* instruction is present if the macro ALT_CI_INTERRUPT_VECTOR defined.
*/
void alt_irq_handler (void) __attribute__ ((section (".exceptions")));
void alt_irq_handler (void)
{
80001fc: defff904 addi sp,sp,-28
8000200: dfc00615 stw ra,24(sp)
8000204: df000515 stw fp,20(sp)
8000208: df000504 addi fp,sp,20
/*
* Notify the operating system that we are at interrupt level.
*/
ALT_OS_INT_ENTER();
800020c: 80107cc0 call 80107cc <OSIntEnter>
#ifndef NIOS2_EIC_PRESENT
static ALT_INLINE alt_u32 ALT_ALWAYS_INLINE alt_irq_pending (void)
{
alt_u32 active;
NIOS2_READ_IPENDING (active);
8000210: 0005313a rdctl r2,ipending
8000214: e0bffc15 stw r2,-16(fp)
return active;
8000218: e0bffc17 ldw r2,-16(fp)
* Consider the case where the high priority interupt is asserted during
* the interrupt entry sequence for a lower priority interrupt to see why
* this is the case.
*/
active = alt_irq_pending ();
800021c: e0bfff15 stw r2,-4(fp)
do
{
i = 0;
8000220: e03ffd15 stw zero,-12(fp)
mask = 1;
8000224: 00800044 movi r2,1
8000228: e0bffe15 stw r2,-8(fp)
* called to clear the interrupt condition.
*/
do
{
if (active & mask)
800022c: e0ffff17 ldw r3,-4(fp)
8000230: e0bffe17 ldw r2,-8(fp)
8000234: 1884703a and r2,r3,r2
8000238: 10001126 beq r2,zero,8000280 <alt_irq_handler+0x84>
{
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
alt_irq[i].handler(alt_irq[i].context);
800023c: e0bffd17 ldw r2,-12(fp)
8000240: 100690fa slli r3,r2,3
8000244: 008201b4 movhi r2,2054
8000248: 1885883a add r2,r3,r2
800024c: 10f8dc17 ldw r3,-7312(r2)
8000250: e0bffd17 ldw r2,-12(fp)
8000254: 100890fa slli r4,r2,3
8000258: 008201b4 movhi r2,2054
800025c: 2085883a add r2,r4,r2
8000260: 10b8dd17 ldw r2,-7308(r2)
8000264: 1009883a mov r4,r2
8000268: 183ee83a callr r3
#else
alt_irq[i].handler(alt_irq[i].context, i);
#endif
break;
800026c: 0001883a nop
NIOS2_READ_IPENDING (active);
8000270: 0005313a rdctl r2,ipending
8000274: e0bffb15 stw r2,-20(fp)
return active;
8000278: e0bffb17 ldw r2,-20(fp)
800027c: 00000706 br 800029c <alt_irq_handler+0xa0>
}
mask <<= 1;
8000280: e0bffe17 ldw r2,-8(fp)
8000284: 1085883a add r2,r2,r2
8000288: e0bffe15 stw r2,-8(fp)
i++;
800028c: e0bffd17 ldw r2,-12(fp)
8000290: 10800044 addi r2,r2,1
8000294: e0bffd15 stw r2,-12(fp)
if (active & mask)
8000298: 003fe406 br 800022c <alt_irq_handler+0x30>
} while (1);
active = alt_irq_pending ();
800029c: e0bfff15 stw r2,-4(fp)
} while (active);
80002a0: e0bfff17 ldw r2,-4(fp)
80002a4: 103fde1e bne r2,zero,8000220 <alt_irq_handler+0x24>
/*
* Notify the operating system that interrupt processing is complete.
*/
ALT_OS_INT_EXIT();
80002a8: 80108180 call 8010818 <OSIntExit>
}
80002ac: 0001883a nop
80002b0: e037883a mov sp,fp
80002b4: dfc00117 ldw ra,4(sp)
80002b8: df000017 ldw fp,0(sp)
80002bc: dec00204 addi sp,sp,8
80002c0: f800283a ret
080002c4 <alt_instruction_exception_entry>:
* that handler if it has been registered. Absent a handler, it will
* break break or hang as discussed below.
*/
int
alt_instruction_exception_entry (alt_u32 exception_pc)
{
80002c4: defffb04 addi sp,sp,-20
80002c8: dfc00415 stw ra,16(sp)
80002cc: df000315 stw fp,12(sp)
80002d0: df000304 addi fp,sp,12
80002d4: e13ffd15 stw r4,-12(fp)
* NIOS2_EXCEPTION_CAUSE_NOT_PRESENT. Your handling routine should
* check the validity of the cause argument before proceeding.
*/
#ifdef NIOS2_HAS_EXTRA_EXCEPTION_INFO
/* Get exception cause & "badaddr" */
NIOS2_READ_EXCEPTION(cause);
80002d8: 000531fa rdctl r2,exception
80002dc: e0bfff15 stw r2,-4(fp)
cause = ( (cause & NIOS2_EXCEPTION_REG_CAUSE_MASK) >>
80002e0: e0bfff17 ldw r2,-4(fp)
80002e4: 1004d0ba srli r2,r2,2
80002e8: 108007cc andi r2,r2,31
80002ec: e0bfff15 stw r2,-4(fp)
NIOS2_EXCEPTION_REG_CAUSE_OFST );
NIOS2_READ_BADADDR(badaddr);
80002f0: 0005333a rdctl r2,badaddr
80002f4: e0bffe15 stw r2,-8(fp)
#else
cause = NIOS2_EXCEPTION_CAUSE_NOT_PRESENT;
badaddr = 0;
#endif /* NIOS2_HAS_EXTRA_EXCEPTION_INFO */
if(alt_instruction_exception_handler) {
80002f8: d0a0a917 ldw r2,-32092(gp)
80002fc: 10000726 beq r2,zero,800031c <alt_instruction_exception_entry+0x58>
* Call handler. Its return value indicates whether the exception-causing
* instruction should be re-issued. The code that called us,
* alt_eceptions_entry.S, will look at this value and adjust the ea
* register as necessary
*/
return alt_instruction_exception_handler(cause, exception_pc, badaddr);
8000300: d0a0a917 ldw r2,-32092(gp)
8000304: e0ffff17 ldw r3,-4(fp)
8000308: e1bffe17 ldw r6,-8(fp)
800030c: e17ffd17 ldw r5,-12(fp)
8000310: 1809883a mov r4,r3
8000314: 103ee83a callr r2
8000318: 00000206 br 8000324 <alt_instruction_exception_entry+0x60>
* (a peripheral which negates its interrupt output before its
* interrupt handler has been executed will cause spurious interrupts)
*/
else {
#ifdef NIOS2_HAS_DEBUG_STUB
NIOS2_BREAK();
800031c: 003da03a break 0
;
#endif /* NIOS2_HAS_DEBUG_STUB */
}
/* We should not get here. Remove compiler warning. */
return NIOS2_EXCEPTION_RETURN_REISSUE_INST;
8000320: 0005883a mov r2,zero
}
8000324: e037883a mov sp,fp
8000328: dfc00117 ldw ra,4(sp)
800032c: df000017 ldw fp,0(sp)
8000330: dec00204 addi sp,sp,8
8000334: f800283a ret
Disassembly of section .text:
08000338 <_start>:
/* Assume the data cache size is always a power of two. */
#if NIOS2_DCACHE_SIZE > 0x8000
movhi r2, %hi(NIOS2_DCACHE_SIZE)
#else
movui r2, NIOS2_DCACHE_SIZE
8000338: 00820014 movui r2,2048
#endif
0:
initd 0(r2)
800033c: 10000033 initd 0(r2)
#ifdef NIOS2_ECC_PRESENT
addi r2, r2, -4
#else
addi r2, r2, -NIOS2_DCACHE_LINE_SIZE
8000340: 10bff804 addi r2,r2,-32
#endif
bgt r2, zero, 0b
8000344: 00bffd16 blt zero,r2,800033c <_start+0x4>
/*
* Now that the caches are initialized, set up the stack pointer and global pointer.
* The values provided by the linker are assumed to be correctly aligned.
*/
movhi sp, %hi(__alt_stack_pointer)
8000348: 06c40034 movhi sp,4096
ori sp, sp, %lo(__alt_stack_pointer)
800034c: dec00014 ori sp,sp,0
movhi gp, %hi(_gp)
8000350: 06820174 movhi gp,2053
ori gp, gp, %lo(_gp)
8000354: d692ae14 ori gp,gp,19128
*/
#ifndef ALT_SIM_OPTIMIZE
/* Log that the BSS is about to be cleared. */
ALT_LOG_PUTS(alt_log_msg_bss)
movhi r2, %hi(__bss_start)
8000358: 00820134 movhi r2,2052
ori r2, r2, %lo(__bss_start)
800035c: 10b2e314 ori r2,r2,52108
movhi r3, %hi(__bss_end)
8000360: 00c20174 movhi r3,2053
ori r3, r3, %lo(__bss_end)
8000364: 18f96714 ori r3,r3,58780
beq r2, r3, 1f
8000368: 10c00326 beq r2,r3,8000378 <_start+0x40>
0:
stw zero, (r2)
800036c: 10000015 stw zero,0(r2)
addi r2, r2, 4
8000370: 10800104 addi r2,r2,4
bltu r2, r3, 0b
8000374: 10fffd36 bltu r2,r3,800036c <_start+0x34>
/* Log that alt_main is about to be called. */
ALT_LOG_PUTS(alt_log_msg_alt_main)
/* Call the C entry point. It should never return. */
call alt_main
8000378: 800fb7c0 call 800fb7c <alt_main>
0800037c <alt_after_alt_main>:
/* Wait in infinite loop in case alt_main does return. */
alt_after_alt_main:
br alt_after_alt_main
800037c: 003fff06 br 800037c <alt_after_alt_main>
08000380 <control_delay>:
extern NET nets[MAXNETS]; /* pointers to the static network structs */
// ****************************
void control_delay()
{
8000380: defffe04 addi sp,sp,-8
8000384: dfc00115 stw ra,4(sp)
8000388: df000015 stw fp,0(sp)
800038c: d839883a mov fp,sp
TK_SLEEP(1);
8000390: 01000084 movi r4,2
8000394: 801730c0 call 801730c <OSTimeDly>
}
8000398: 0001883a nop
800039c: e037883a mov sp,fp
80003a0: dfc00117 ldw ra,4(sp)
80003a4: df000017 ldw fp,0(sp)
80003a8: dec00204 addi sp,sp,8
80003ac: f800283a ret
080003b0 <control_pong>:
// ****************************
//simple reply
void control_pong(command_header* header)
{
80003b0: defffb04 addi sp,sp,-20
80003b4: dfc00415 stw ra,16(sp)
80003b8: df000315 stw fp,12(sp)
80003bc: df000304 addi fp,sp,12
80003c0: e13ffd15 stw r4,-12(fp)
command_header tmp;
tmp = *header;
80003c4: e0bffd17 ldw r2,-12(fp)
80003c8: 10c0000b ldhu r3,0(r2)
80003cc: e0fffe8d sth r3,-6(fp)
80003d0: 10c0008b ldhu r3,2(r2)
80003d4: e0ffff0d sth r3,-4(fp)
80003d8: 1080010b ldhu r2,4(r2)
80003dc: e0bfff8d sth r2,-2(fp)
swap_bytes((char*)(void*)(&tmp), sizeof(tmp));
80003e0: e0bffe84 addi r2,fp,-6
80003e4: 01400184 movi r5,6
80003e8: 1009883a mov r4,r2
80003ec: 80027a80 call 80027a8 <swap_bytes>
ethernet_write(0, sizeof(command_header), (unsigned char*)(header));
80003f0: e1bffd17 ldw r6,-12(fp)
80003f4: 01400184 movi r5,6
80003f8: 0009883a mov r4,zero
80003fc: 800220c0 call 800220c <ethernet_write>
}
8000400: 0001883a nop
8000404: e037883a mov sp,fp
8000408: dfc00117 ldw ra,4(sp)
800040c: df000017 ldw fp,0(sp)
8000410: dec00204 addi sp,sp,8
8000414: f800283a ret
08000418 <control_process_snapshot>:
void control_process_snapshot()
{
8000418: defffc04 addi sp,sp,-16
800041c: dfc00315 stw ra,12(sp)
8000420: df000215 stw fp,8(sp)
8000424: df000204 addi fp,sp,8
command_header header = {.marker = 0x5555, .command = COMMAND_SLOWCTRL_SNAPSHOT,
8000428: 00955544 movi r2,21845
800042c: e0bffe8d sth r2,-6(fp)
8000430: 00810404 movi r2,1040
8000434: e0bfff0d sth r2,-4(fp)
8000438: e03fff8d sth zero,-2(fp)
.length = 0}; //SLOWCTRL_ADC_CHANNEL_COUNT * sizeof(SLOWCTRL_ADC_DATA_TYPE) / sizeof(unsigned short)};
swap_bytes((char*)(void*)(&header), sizeof(header));
800043c: e0bffe84 addi r2,fp,-6
8000440: 01400184 movi r5,6
8000444: 1009883a mov r4,r2
8000448: 80027a80 call 80027a8 <swap_bytes>
ethernet_write(0, sizeof(command_header), (unsigned char*)(&header));
800044c: e0bffe84 addi r2,fp,-6
8000450: 100d883a mov r6,r2
8000454: 01400184 movi r5,6
8000458: 0009883a mov r4,zero
800045c: 800220c0 call 800220c <ethernet_write>
//ethernet_write(0, SLOWCTRL_ADC_CHANNEL_COUNT*sizeof(SLOWCTRL_ADC_DATA_TYPE), (unsigned char*)slowctrl_adc_buffer);
}
8000460: 0001883a nop
8000464: e037883a mov sp,fp
8000468: dfc00117 ldw ra,4(sp)
800046c: df000017 ldw fp,0(sp)
8000470: dec00204 addi sp,sp,8
8000474: f800283a ret
08000478 <check_arp>:
//helper for the one below
int check_arp(struct arptabent * arp_entry, ip_addr ip)
{
8000478: defffc04 addi sp,sp,-16
800047c: df000315 stw fp,12(sp)
8000480: df000304 addi fp,sp,12
8000484: e13ffe15 stw r4,-8(fp)
8000488: e17ffd15 stw r5,-12(fp)
if (arp_entry->t_pro_addr != ip)
800048c: e0bffe17 ldw r2,-8(fp)
8000490: 10800017 ldw r2,0(r2)
8000494: e0fffd17 ldw r3,-12(fp)
8000498: 18800226 beq r3,r2,80004a4 <check_arp+0x2c>
return 0; //bad IP
800049c: 0005883a mov r2,zero
80004a0: 00001106 br 80004e8 <check_arp+0x70>
for (int i = 0; i < 6; i++)
80004a4: e03fff15 stw zero,-4(fp)
80004a8: 00000b06 br 80004d8 <check_arp+0x60>
if (arp_entry->t_phy_addr[i] != 0)
80004ac: e0fffe17 ldw r3,-8(fp)
80004b0: e0bfff17 ldw r2,-4(fp)
80004b4: 1885883a add r2,r3,r2
80004b8: 10800103 ldbu r2,4(r2)
80004bc: 10803fcc andi r2,r2,255
80004c0: 10000226 beq r2,zero,80004cc <check_arp+0x54>
return 1; //non-zero MAC
80004c4: 00800044 movi r2,1
80004c8: 00000706 br 80004e8 <check_arp+0x70>
for (int i = 0; i < 6; i++)
80004cc: e0bfff17 ldw r2,-4(fp)
80004d0: 10800044 addi r2,r2,1
80004d4: e0bfff15 stw r2,-4(fp)
80004d8: e0bfff17 ldw r2,-4(fp)
80004dc: 10800190 cmplti r2,r2,6
80004e0: 103ff21e bne r2,zero,80004ac <check_arp+0x34>
return 0;
80004e4: 0005883a mov r2,zero
}
80004e8: e037883a mov sp,fp
80004ec: df000017 ldw fp,0(sp)
80004f0: dec00104 addi sp,sp,4
80004f4: f800283a ret
080004f8 <control_process_config_peer>:
void control_process_config_peer(unsigned short* data)
{
80004f8: defff104 addi sp,sp,-60
80004fc: dfc00e15 stw ra,56(sp)
8000500: df000d15 stw fp,52(sp)
8000504: df000d04 addi fp,sp,52
8000508: e13ff615 stw r4,-40(fp)
ip_addr ip = 0;
800050c: e03ffa15 stw zero,-24(fp)
ip_addr srcip = 0;
8000510: e03ff915 stw zero,-28(fp)
int i;
command_header header = {.marker = 0x5555, .command = COMMAND_DAQ_CONFIG_PEER, .length = 0};
8000514: 00955544 movi r2,21845
8000518: e0bff78d sth r2,-34(fp)
800051c: 0080cc44 movi r2,817
8000520: e0bff80d sth r2,-32(fp)
8000524: e03ff88d sth zero,-30(fp)
for (i = 0; i < 4; i++)
8000528: e03fff15 stw zero,-4(fp)
800052c: 00001006 br 8000570 <control_process_config_peer+0x78>
ip = (ip << 8) | (unsigned char)(data[3-i] & 0x00FF);
8000530: e0bffa17 ldw r2,-24(fp)
8000534: 1006923a slli r3,r2,8
8000538: 010000c4 movi r4,3
800053c: e0bfff17 ldw r2,-4(fp)
8000540: 2085c83a sub r2,r4,r2
8000544: 1085883a add r2,r2,r2
8000548: 1009883a mov r4,r2
800054c: e0bff617 ldw r2,-40(fp)
8000550: 1105883a add r2,r2,r4
8000554: 1080000b ldhu r2,0(r2)
8000558: 10803fcc andi r2,r2,255
800055c: 1884b03a or r2,r3,r2
8000560: e0bffa15 stw r2,-24(fp)
for (i = 0; i < 4; i++)
8000564: e0bfff17 ldw r2,-4(fp)
8000568: 10800044 addi r2,r2,1
800056c: e0bfff15 stw r2,-4(fp)
8000570: e0bfff17 ldw r2,-4(fp)
8000574: 10800110 cmplti r2,r2,4
8000578: 103fed1e bne r2,zero,8000530 <control_process_config_peer+0x38>
//daq_configure_peer_addr(ip, data[4]);
printf("Querying ARP for %d.%d.%d.%d ...\n",data[0],data[1],data[2],data[3]);
800057c: e0bff617 ldw r2,-40(fp)
8000580: 1080000b ldhu r2,0(r2)
8000584: 10ffffcc andi r3,r2,65535
8000588: e0bff617 ldw r2,-40(fp)
800058c: 10800084 addi r2,r2,2
8000590: 1080000b ldhu r2,0(r2)
8000594: 113fffcc andi r4,r2,65535
8000598: e0bff617 ldw r2,-40(fp)
800059c: 10800104 addi r2,r2,4
80005a0: 1080000b ldhu r2,0(r2)
80005a4: 117fffcc andi r5,r2,65535
80005a8: e0bff617 ldw r2,-40(fp)
80005ac: 10800184 addi r2,r2,6
80005b0: 1080000b ldhu r2,0(r2)
80005b4: 10bfffcc andi r2,r2,65535
80005b8: d8800015 stw r2,0(sp)
80005bc: 280f883a mov r7,r5
80005c0: 200d883a mov r6,r4
80005c4: 180b883a mov r5,r3
80005c8: 01020134 movhi r4,2052
80005cc: 211a6a04 addi r4,r4,27048
80005d0: 8002c780 call 8002c78 <printf>
struct arptabent * arp_entry = find_oldest_arp(ip);
80005d4: e0bffa17 ldw r2,-24(fp)
80005d8: 1009883a mov r4,r2
80005dc: 80233bc0 call 80233bc <find_oldest_arp>
80005e0: e0bffe15 stw r2,-8(fp)
int pingseq = 0;
80005e4: e03ffd15 stw zero,-12(fp)
while (!check_arp(arp_entry, ip)) //big loop for pinging 10 times
80005e8: 00002606 br 8000684 <control_process_config_peer+0x18c>
{
printf("ARP entry could not be found, pinging!\n");
80005ec: 01020134 movhi r4,2052
80005f0: 211a7304 addi r4,r4,27084
80005f4: 8002d9c0 call 8002d9c <puts>
//ping the peer to ARP it.
icmpEcho(ip, NULL, 8, pingseq++);
80005f8: e13ffa17 ldw r4,-24(fp)
80005fc: e0bffd17 ldw r2,-12(fp)
8000600: 10c00044 addi r3,r2,1
8000604: e0fffd15 stw r3,-12(fp)
8000608: 10bfffcc andi r2,r2,65535
800060c: 100f883a mov r7,r2
8000610: 01800204 movi r6,8
8000614: 000b883a mov r5,zero
8000618: 8027f0c0 call 8027f0c <icmpEcho>
for (int i = 0; (i < 5) && (!check_arp(arp_entry, ip)); i++) //small loop for waiting 5 times after each ping
800061c: e03ffc15 stw zero,-16(fp)
8000620: 00000906 br 8000648 <control_process_config_peer+0x150>
{
TK_SLEEP(10);
8000624: 010002c4 movi r4,11
8000628: 801730c0 call 801730c <OSTimeDly>
arp_entry = find_oldest_arp(ip);
800062c: e0bffa17 ldw r2,-24(fp)
8000630: 1009883a mov r4,r2
8000634: 80233bc0 call 80233bc <find_oldest_arp>
8000638: e0bffe15 stw r2,-8(fp)
for (int i = 0; (i < 5) && (!check_arp(arp_entry, ip)); i++) //small loop for waiting 5 times after each ping
800063c: e0bffc17 ldw r2,-16(fp)
8000640: 10800044 addi r2,r2,1
8000644: e0bffc15 stw r2,-16(fp)
8000648: e0bffc17 ldw r2,-16(fp)
800064c: 10800148 cmpgei r2,r2,5
8000650: 1000051e bne r2,zero,8000668 <control_process_config_peer+0x170>
8000654: e0bffa17 ldw r2,-24(fp)
8000658: 100b883a mov r5,r2
800065c: e13ffe17 ldw r4,-8(fp)
8000660: 80004780 call 8000478 <check_arp>
8000664: 103fef26 beq r2,zero,8000624 <control_process_config_peer+0x12c>
}
if (pingseq > 10)
8000668: e0bffd17 ldw r2,-12(fp)
800066c: 108002d0 cmplti r2,r2,11
8000670: 1000041e bne r2,zero,8000684 <control_process_config_peer+0x18c>
{
printf("Could not resolve MAC! The result below is random!\n");
8000674: 01020134 movhi r4,2052
8000678: 211a7d04 addi r4,r4,27124
800067c: 8002d9c0 call 8002d9c <puts>
break;
8000680: 00000506 br 8000698 <control_process_config_peer+0x1a0>
while (!check_arp(arp_entry, ip)) //big loop for pinging 10 times
8000684: e0bffa17 ldw r2,-24(fp)
8000688: 100b883a mov r5,r2
800068c: e13ffe17 ldw r4,-8(fp)
8000690: 80004780 call 8000478 <check_arp>
8000694: 103fd526 beq r2,zero,80005ec <control_process_config_peer+0xf4>
}
}
printf("Peer MAC is %02x %02x %02x %02x %02x %02x\n",
arp_entry->t_phy_addr[0], arp_entry->t_phy_addr[1], arp_entry->t_phy_addr[2],
8000698: e0bffe17 ldw r2,-8(fp)
800069c: 10800103 ldbu r2,4(r2)
printf("Peer MAC is %02x %02x %02x %02x %02x %02x\n",
80006a0: 11403fcc andi r5,r2,255
arp_entry->t_phy_addr[0], arp_entry->t_phy_addr[1], arp_entry->t_phy_addr[2],
80006a4: e0bffe17 ldw r2,-8(fp)
80006a8: 10800143 ldbu r2,5(r2)
printf("Peer MAC is %02x %02x %02x %02x %02x %02x\n",
80006ac: 11803fcc andi r6,r2,255
arp_entry->t_phy_addr[0], arp_entry->t_phy_addr[1], arp_entry->t_phy_addr[2],
80006b0: e0bffe17 ldw r2,-8(fp)
80006b4: 10800183 ldbu r2,6(r2)
printf("Peer MAC is %02x %02x %02x %02x %02x %02x\n",
80006b8: 11c03fcc andi r7,r2,255
arp_entry->t_phy_addr[3], arp_entry->t_phy_addr[4], arp_entry->t_phy_addr[5]);
80006bc: e0bffe17 ldw r2,-8(fp)
80006c0: 108001c3 ldbu r2,7(r2)
printf("Peer MAC is %02x %02x %02x %02x %02x %02x\n",
80006c4: 10803fcc andi r2,r2,255
arp_entry->t_phy_addr[3], arp_entry->t_phy_addr[4], arp_entry->t_phy_addr[5]);
80006c8: e0fffe17 ldw r3,-8(fp)
80006cc: 18c00203 ldbu r3,8(r3)
printf("Peer MAC is %02x %02x %02x %02x %02x %02x\n",
80006d0: 18c03fcc andi r3,r3,255
arp_entry->t_phy_addr[3], arp_entry->t_phy_addr[4], arp_entry->t_phy_addr[5]);
80006d4: e13ffe17 ldw r4,-8(fp)
80006d8: 21000243 ldbu r4,9(r4)
printf("Peer MAC is %02x %02x %02x %02x %02x %02x\n",
80006dc: 21003fcc andi r4,r4,255
80006e0: d9000215 stw r4,8(sp)
80006e4: d8c00115 stw r3,4(sp)
80006e8: d8800015 stw r2,0(sp)
80006ec: 01020134 movhi r4,2052
80006f0: 211a8a04 addi r4,r4,27176
80006f4: 8002c780 call 8002c78 <printf>
srcip = nets[0]->n_ipaddr;
80006f8: 008201b4 movhi r2,2054
80006fc: 10b77017 ldw r2,-8768(r2)
8000700: 10800a17 ldw r2,40(r2)
8000704: e0bff915 stw r2,-28(fp)
swap_quad((unsigned char*)(void*)(&srcip), 4); //UDP generator needs such a format
8000708: e0bff904 addi r2,fp,-28
800070c: 01400104 movi r5,4
8000710: 1009883a mov r4,r2
8000714: 80028400 call 8002840 <swap_quad>
swap_quad((unsigned char*)(void*)(&ip), 4);
8000718: e0bffa04 addi r2,fp,-24
800071c: 01400104 movi r5,4
8000720: 1009883a mov r4,r2
8000724: 80028400 call 8002840 <swap_quad>
//set up udpgen with correct values
udpgen_set_size(UDP_GENERATOR_BASE, 167); //sensor_interface.v:39
8000728: 00c029c4 movi r3,167
800072c: 00861034 movhi r2,6208
8000730: 10cf30ad sthio r3,15554(r2)
udpgen_set_srcip(UDP_GENERATOR_BASE, srcip);
8000734: e0bff917 ldw r2,-28(fp)
8000738: 1007883a mov r3,r2
800073c: 00861034 movhi r2,6208
8000740: 10cf3135 stwio r3,15556(r2)
udpgen_set_dstip(UDP_GENERATOR_BASE, ip);
8000744: e0bffa17 ldw r2,-24(fp)
8000748: 1007883a mov r3,r2
800074c: 00861034 movhi r2,6208
8000750: 10cf3235 stwio r3,15560(r2)
udpgen_set_srcport(UDP_GENERATOR_BASE, DATA_PORT);
8000754: 00c3e844 movi r3,4001
8000758: 00861034 movhi r2,6208
800075c: 10cf33ad sthio r3,15566(r2)
udpgen_set_dstport(UDP_GENERATOR_BASE, data[4]);
8000760: e0bff617 ldw r2,-40(fp)
8000764: 10800204 addi r2,r2,8
8000768: 1080000b ldhu r2,0(r2)
800076c: 10ffffcc andi r3,r2,65535
8000770: 00861034 movhi r2,6208
8000774: 10cf332d sthio r3,15564(r2)
udpgen_set_dstmac_a(UDP_GENERATOR_BASE, arp_entry->t_phy_addr);
8000778: e03ffb15 stw zero,-20(fp)
800077c: 00001106 br 80007c4 <control_process_config_peer+0x2cc>
8000780: e0bffb17 ldw r2,-20(fp)
8000784: 10800404 addi r2,r2,16
8000788: 1007883a mov r3,r2
800078c: 00861034 movhi r2,6208
8000790: 108f3004 addi r2,r2,15552
8000794: 1885883a add r2,r3,r2
8000798: 01000144 movi r4,5
800079c: e0fffb17 ldw r3,-20(fp)
80007a0: 20c7c83a sub r3,r4,r3
80007a4: e13ffe17 ldw r4,-8(fp)
80007a8: 20c7883a add r3,r4,r3
80007ac: 18c00103 ldbu r3,4(r3)
80007b0: 18c03fcc andi r3,r3,255
80007b4: 10c00025 stbio r3,0(r2)
80007b8: e0bffb17 ldw r2,-20(fp)
80007bc: 10800044 addi r2,r2,1
80007c0: e0bffb15 stw r2,-20(fp)
80007c4: e0bffb17 ldw r2,-20(fp)
80007c8: 10800190 cmplti r2,r2,6
80007cc: 103fec1e bne r2,zero,8000780 <control_process_config_peer+0x288>
swap_bytes((unsigned char*)(void*)(&header), sizeof(header));
80007d0: e0bff784 addi r2,fp,-34
80007d4: 01400184 movi r5,6
80007d8: 1009883a mov r4,r2
80007dc: 80027a80 call 80027a8 <swap_bytes>
ethernet_write(0, sizeof(command_header), (unsigned char*)(&header));
80007e0: e0bff784 addi r2,fp,-34
80007e4: 100d883a mov r6,r2
80007e8: 01400184 movi r5,6
80007ec: 0009883a mov r4,zero
80007f0: 800220c0 call 800220c <ethernet_write>
}
80007f4: 0001883a nop
80007f8: e037883a mov sp,fp
80007fc: dfc00117 ldw ra,4(sp)
8000800: df000017 ldw fp,0(sp)
8000804: dec00204 addi sp,sp,8
8000808: f800283a ret
0800080c <control_get_header>:
// ****************************
//Receive command header. Return (without loosing data!) if number of received bytes is insufficient.
unsigned char control_get_header(command_header** result)
{
800080c: defffd04 addi sp,sp,-12
8000810: dfc00215 stw ra,8(sp)
8000814: df000115 stw fp,4(sp)
8000818: df000104 addi fp,sp,4
800081c: e13fff15 stw r4,-4(fp)
static command_header header;
static unsigned int bytes_received = 0;
bytes_received += ethernet_read(0, sizeof(command_header)-bytes_received, (unsigned char*)(&header) + bytes_received);
8000820: d0a03517 ldw r2,-32556(gp)
8000824: 00c00184 movi r3,6
8000828: 1885c83a sub r2,r3,r2
800082c: 1009883a mov r4,r2
8000830: d0e03517 ldw r3,-32556(gp)
8000834: d0a03604 addi r2,gp,-32552
8000838: 1885883a add r2,r3,r2
800083c: 100d883a mov r6,r2
8000840: 200b883a mov r5,r4
8000844: 0009883a mov r4,zero
8000848: 80023140 call 8002314 <ethernet_read>
800084c: 1007883a mov r3,r2
8000850: d0a03517 ldw r2,-32556(gp)
8000854: 1885883a add r2,r3,r2
8000858: d0a03515 stw r2,-32556(gp)
if (bytes_received < sizeof(command_header))
800085c: d0a03517 ldw r2,-32556(gp)
8000860: 108001a8 cmpgeui r2,r2,6
8000864: 1000021e bne r2,zero,8000870 <control_get_header+0x64>
return 0;
8000868: 0005883a mov r2,zero
800086c: 00000806 br 8000890 <control_get_header+0x84>
swap_bytes((unsigned char*)(void*)(&header),sizeof(header)); //if the header is complete, swap bytes and return it
8000870: 01400184 movi r5,6
8000874: d1203604 addi r4,gp,-32552
8000878: 80027a80 call 80027a8 <swap_bytes>
*result = &header;
800087c: e0bfff17 ldw r2,-4(fp)
8000880: d0e03604 addi r3,gp,-32552
8000884: 10c00015 stw r3,0(r2)
bytes_received = 0;
8000888: d0203515 stw zero,-32556(gp)
return 1;
800088c: 00800044 movi r2,1
}
8000890: e037883a mov sp,fp
8000894: dfc00117 ldw ra,4(sp)
8000898: df000017 ldw fp,0(sp)
800089c: dec00204 addi sp,sp,8
80008a0: f800283a ret
080008a4 <control_get_data>:
//Receive command data. Return (without loosing data!) if number of received bytes is insufficient.
//Expected data length is given in words!
unsigned char control_get_data(unsigned short expected_length, unsigned short** data)
{
80008a4: defffc04 addi sp,sp,-16
80008a8: dfc00315 stw ra,12(sp)
80008ac: df000215 stw fp,8(sp)
80008b0: df000204 addi fp,sp,8
80008b4: 2005883a mov r2,r4
80008b8: e17ffe15 stw r5,-8(fp)
80008bc: e0bfff0d sth r2,-4(fp)
static unsigned short packet_data[CONTROL_MAX_DATA_LENGTH];
static unsigned int bytes_received = 0;
bytes_received += ethernet_read(0, 2*expected_length - bytes_received, (unsigned char*)(&packet_data) + bytes_received);
80008c0: e0bfff0b ldhu r2,-4(fp)
80008c4: 1085883a add r2,r2,r2
80008c8: 1007883a mov r3,r2
80008cc: d0a03817 ldw r2,-32544(gp)
80008d0: 1885c83a sub r2,r3,r2
80008d4: 1009883a mov r4,r2
80008d8: d0e03817 ldw r3,-32544(gp)
80008dc: 00820174 movhi r2,2053
80008e0: 10b35804 addi r2,r2,-12960
80008e4: 1885883a add r2,r3,r2
80008e8: 100d883a mov r6,r2
80008ec: 200b883a mov r5,r4
80008f0: 0009883a mov r4,zero
80008f4: 80023140 call 8002314 <ethernet_read>
80008f8: 1007883a mov r3,r2
80008fc: d0a03817 ldw r2,-32544(gp)
8000900: 1885883a add r2,r3,r2
8000904: d0a03815 stw r2,-32544(gp)
if (bytes_received < (2*expected_length))
8000908: e0bfff0b ldhu r2,-4(fp)
800090c: 1085883a add r2,r2,r2
8000910: 1007883a mov r3,r2
8000914: d0a03817 ldw r2,-32544(gp)
8000918: 10c0022e bgeu r2,r3,8000924 <control_get_data+0x80>
return 0;
800091c: 0005883a mov r2,zero
8000920: 00000606 br 800093c <control_get_data+0x98>
*data = packet_data;
8000924: e0fffe17 ldw r3,-8(fp)
8000928: 00820174 movhi r2,2053
800092c: 10b35804 addi r2,r2,-12960
8000930: 18800015 stw r2,0(r3)
bytes_received = 0;
8000934: d0203815 stw zero,-32544(gp)
return 1;
8000938: 00800044 movi r2,1
}
800093c: e037883a mov sp,fp
8000940: dfc00117 ldw ra,4(sp)
8000944: df000017 ldw fp,0(sp)
8000948: dec00204 addi sp,sp,8
800094c: f800283a ret
08000950 <control_step>:
// ****************************
void control_step()
{
8000950: defffb04 addi sp,sp,-20
8000954: dfc00415 stw ra,16(sp)
8000958: df000315 stw fp,12(sp)
800095c: df000304 addi fp,sp,12
command_header* header;
unsigned short* data;
unsigned int loop_ctr = 0;
8000960: e03fff15 stw zero,-4(fp)
//get header - at this moment this is blocking!
while (!control_get_header(&header))
8000964: 00000706 br 8000984 <control_step+0x34>
{
control_delay();
8000968: 80003800 call 8000380 <control_delay>
if (++loop_ctr > CONTROL_TIMEOUT)
800096c: e0bfff17 ldw r2,-4(fp)
8000970: 10800044 addi r2,r2,1
8000974: e0bfff15 stw r2,-4(fp)
8000978: e0bfff17 ldw r2,-4(fp)
800097c: 1080fa70 cmpltui r2,r2,1001
8000980: 1001ae26 beq r2,zero,800103c <control_step+0x6ec>
while (!control_get_header(&header))
8000984: e0bffe04 addi r2,fp,-8
8000988: 1009883a mov r4,r2
800098c: 800080c0 call 800080c <control_get_header>
8000990: 10803fcc andi r2,r2,255
8000994: 103ff426 beq r2,zero,8000968 <control_step+0x18>
return;
}
}
//check start marker
if (header->marker != 0x5555)
8000998: e0bffe17 ldw r2,-8(fp)
800099c: 1080000b ldhu r2,0(r2)
80009a0: 10bfffcc andi r2,r2,65535
80009a4: 10955560 cmpeqi r2,r2,21845
80009a8: 1001a626 beq r2,zero,8001044 <control_step+0x6f4>
return;
//get packet data - at this moment this is blocking!
while (!control_get_data(header->length, &data))
80009ac: 00000706 br 80009cc <control_step+0x7c>
{
control_delay();
80009b0: 80003800 call 8000380 <control_delay>
if (++loop_ctr > CONTROL_TIMEOUT)
80009b4: e0bfff17 ldw r2,-4(fp)
80009b8: 10800044 addi r2,r2,1
80009bc: e0bfff15 stw r2,-4(fp)
80009c0: e0bfff17 ldw r2,-4(fp)
80009c4: 1080fa70 cmpltui r2,r2,1001
80009c8: 1001a026 beq r2,zero,800104c <control_step+0x6fc>
while (!control_get_data(header->length, &data))
80009cc: e0bffe17 ldw r2,-8(fp)
80009d0: 1080010b ldhu r2,4(r2)
80009d4: 10bfffcc andi r2,r2,65535
80009d8: e0fffd04 addi r3,fp,-12
80009dc: 180b883a mov r5,r3
80009e0: 1009883a mov r4,r2
80009e4: 80008a40 call 80008a4 <control_get_data>
80009e8: 10803fcc andi r2,r2,255
80009ec: 103ff026 beq r2,zero,80009b0 <control_step+0x60>
{
return;
}
}
//swap data bytes
swap_bytes((unsigned char*)(void*)data, header->length*2);
80009f0: e0fffd17 ldw r3,-12(fp)
80009f4: e0bffe17 ldw r2,-8(fp)
80009f8: 1080010b ldhu r2,4(r2)
80009fc: 10bfffcc andi r2,r2,65535
8000a00: 1085883a add r2,r2,r2
8000a04: 100b883a mov r5,r2
8000a08: 1809883a mov r4,r3
8000a0c: 80027a80 call 80027a8 <swap_bytes>
switch(header->command)
8000a10: e0bffe17 ldw r2,-8(fp)
8000a14: 1080008b ldhu r2,2(r2)
8000a18: 10bfffcc andi r2,r2,65535
8000a1c: 10c09420 cmpeqi r3,r2,592
8000a20: 1800b51e bne r3,zero,8000cf8 <control_step+0x3a8>
8000a24: 10c09448 cmpgei r3,r2,593
8000a28: 1800201e bne r3,zero,8000aac <control_step+0x15c>
8000a2c: 10c08420 cmpeqi r3,r2,528
8000a30: 1800691e bne r3,zero,8000bd8 <control_step+0x288>
8000a34: 10c08448 cmpgei r3,r2,529
8000a38: 18000e1e bne r3,zero,8000a74 <control_step+0x124>
8000a3c: 10c00460 cmpeqi r3,r2,17
8000a40: 18004a1e bne r3,zero,8000b6c <control_step+0x21c>
8000a44: 10c00488 cmpgei r3,r2,18
8000a48: 1800051e bne r3,zero,8000a60 <control_step+0x110>
8000a4c: 10c00060 cmpeqi r3,r2,1
8000a50: 1800361e bne r3,zero,8000b2c <control_step+0x1dc>
8000a54: 10800420 cmpeqi r2,r2,16
8000a58: 10003b1e bne r2,zero,8000b48 <control_step+0x1f8>
control_pong(header);
break;
default:
break;
8000a5c: 00017c06 br 8001050 <control_step+0x700>
switch(header->command)
8000a60: 10c04420 cmpeqi r3,r2,272
8000a64: 18004a1e bne r3,zero,8000b90 <control_step+0x240>
8000a68: 10804460 cmpeqi r2,r2,273
8000a6c: 1000511e bne r2,zero,8000bb4 <control_step+0x264>
break;
8000a70: 00017706 br 8001050 <control_step+0x700>
switch(header->command)
8000a74: 10c08860 cmpeqi r3,r2,545
8000a78: 1800721e bne r3,zero,8000c44 <control_step+0x2f4>
8000a7c: 10c08888 cmpgei r3,r2,546
8000a80: 1800051e bne r3,zero,8000a98 <control_step+0x148>
8000a84: 10c08460 cmpeqi r3,r2,529
8000a88: 18005c1e bne r3,zero,8000bfc <control_step+0x2ac>
8000a8c: 10808820 cmpeqi r2,r2,544
8000a90: 1000631e bne r2,zero,8000c20 <control_step+0x2d0>
break;
8000a94: 00016e06 br 8001050 <control_step+0x700>
switch(header->command)
8000a98: 10c08c20 cmpeqi r3,r2,560
8000a9c: 1800721e bne r3,zero,8000c68 <control_step+0x318>
8000aa0: 10809020 cmpeqi r2,r2,576
8000aa4: 1000821e bne r2,zero,8000cb0 <control_step+0x360>
break;
8000aa8: 00016906 br 8001050 <control_step+0x700>
switch(header->command)
8000aac: 10c0c8a0 cmpeqi r3,r2,802
8000ab0: 1800ff1e bne r3,zero,8000eb0 <control_step+0x560>
8000ab4: 10c0c8c8 cmpgei r3,r2,803
8000ab8: 18000e1e bne r3,zero,8000af4 <control_step+0x1a4>
8000abc: 10c0c420 cmpeqi r3,r2,784
8000ac0: 1800c81e bne r3,zero,8000de4 <control_step+0x494>
8000ac4: 10c0c448 cmpgei r3,r2,785
8000ac8: 1800051e bne r3,zero,8000ae0 <control_step+0x190>
8000acc: 10c09820 cmpeqi r3,r2,608
8000ad0: 18009e1e bne r3,zero,8000d4c <control_step+0x3fc>
8000ad4: 10809c20 cmpeqi r2,r2,624
8000ad8: 1000af1e bne r2,zero,8000d98 <control_step+0x448>
break;
8000adc: 00015c06 br 8001050 <control_step+0x700>
switch(header->command)
8000ae0: 10c0c460 cmpeqi r3,r2,785
8000ae4: 1800d01e bne r3,zero,8000e28 <control_step+0x4d8>
8000ae8: 1080c860 cmpeqi r2,r2,801
8000aec: 1000df1e bne r2,zero,8000e6c <control_step+0x51c>
break;
8000af0: 00015706 br 8001050 <control_step+0x700>
switch(header->command)
8000af4: 10d00060 cmpeqi r3,r2,16385
8000af8: 1801001e bne r3,zero,8000efc <control_step+0x5ac>
8000afc: 10d00088 cmpgei r3,r2,16386
8000b00: 1800051e bne r3,zero,8000b18 <control_step+0x1c8>
8000b04: 10c0cc60 cmpeqi r3,r2,817
8000b08: 1800f01e bne r3,zero,8000ecc <control_step+0x57c>
8000b0c: 10810420 cmpeqi r2,r2,1040
8000b10: 1000f51e bne r2,zero,8000ee8 <control_step+0x598>
break;
8000b14: 00014e06 br 8001050 <control_step+0x700>
switch(header->command)
8000b18: 10d000a0 cmpeqi r3,r2,16386
8000b1c: 1801091e bne r3,zero,8000f44 <control_step+0x5f4>
8000b20: 109000e0 cmpeqi r2,r2,16387
8000b24: 1001191e bne r2,zero,8000f8c <control_step+0x63c>
break;
8000b28: 00014906 br 8001050 <control_step+0x700>
printf("COMMAND_PING\n");
8000b2c: 01020134 movhi r4,2052
8000b30: 211a9504 addi r4,r4,27220
8000b34: 8002d9c0 call 8002d9c <puts>
control_pong(header);
8000b38: e0bffe17 ldw r2,-8(fp)
8000b3c: 1009883a mov r4,r2
8000b40: 80003b00 call 80003b0 <control_pong>
break;
8000b44: 00014206 br 8001050 <control_step+0x700>
printf("COMMAND_DEBUG_LED_OFF\n");
8000b48: 01020134 movhi r4,2052
8000b4c: 211a9904 addi r4,r4,27236
8000b50: 8002d9c0 call 8002d9c <puts>
led_clear(0);
8000b54: 0009883a mov r4,zero
8000b58: 8002abc0 call 8002abc <led_clear>
control_pong(header);
8000b5c: e0bffe17 ldw r2,-8(fp)
8000b60: 1009883a mov r4,r2
8000b64: 80003b00 call 80003b0 <control_pong>
break;
8000b68: 00013906 br 8001050 <control_step+0x700>
printf("COMMAND_DEBUG_LED_ON\n");
8000b6c: 01020134 movhi r4,2052
8000b70: 211a9f04 addi r4,r4,27260
8000b74: 8002d9c0 call 8002d9c <puts>
led_set(0);
8000b78: 0009883a mov r4,zero
8000b7c: 8002a700 call 8002a70 <led_set>
control_pong(header);
8000b80: e0bffe17 ldw r2,-8(fp)
8000b84: 1009883a mov r4,r2
8000b88: 80003b00 call 80003b0 <control_pong>
break;
8000b8c: 00013006 br 8001050 <control_step+0x700>
printf("COMMAND_LEDS_DISABLE\n");
8000b90: 01020134 movhi r4,2052
8000b94: 211aa504 addi r4,r4,27284
8000b98: 8002d9c0 call 8002d9c <puts>
led4_blink_enable(0);
8000b9c: 0009883a mov r4,zero
8000ba0: 8002b7c0 call 8002b7c <led4_blink_enable>
control_pong(header);
8000ba4: e0bffe17 ldw r2,-8(fp)
8000ba8: 1009883a mov r4,r2
8000bac: 80003b00 call 80003b0 <control_pong>
break;
8000bb0: 00012706 br 8001050 <control_step+0x700>
printf("COMMAND_LEDS_ENABLE\n");
8000bb4: 01020134 movhi r4,2052
8000bb8: 211aab04 addi r4,r4,27308
8000bbc: 8002d9c0 call 8002d9c <puts>
led4_blink_enable(1);
8000bc0: 01000044 movi r4,1
8000bc4: 8002b7c0 call 8002b7c <led4_blink_enable>
control_pong(header);
8000bc8: e0bffe17 ldw r2,-8(fp)
8000bcc: 1009883a mov r4,r2
8000bd0: 80003b00 call 80003b0 <control_pong>
break;
8000bd4: 00011e06 br 8001050 <control_step+0x700>
printf("COMMAND_TRIGGER_DISABLE\n");
8000bd8: 01020134 movhi r4,2052
8000bdc: 211ab004 addi r4,r4,27328
8000be0: 8002d9c0 call 8002d9c <puts>
master_clock_enable(0);
8000be4: 0009883a mov r4,zero
8000be8: 8002a140 call 8002a14 <master_clock_enable>
control_pong(header);
8000bec: e0bffe17 ldw r2,-8(fp)
8000bf0: 1009883a mov r4,r2
8000bf4: 80003b00 call 80003b0 <control_pong>
break;
8000bf8: 00011506 br 8001050 <control_step+0x700>
printf("COMMAND_TRIGGER_ENABLE\n");
8000bfc: 01020134 movhi r4,2052
8000c00: 211ab604 addi r4,r4,27352
8000c04: 8002d9c0 call 8002d9c <puts>
master_clock_enable(1);
8000c08: 01000044 movi r4,1
8000c0c: 8002a140 call 8002a14 <master_clock_enable>
control_pong(header);
8000c10: e0bffe17 ldw r2,-8(fp)
8000c14: 1009883a mov r4,r2
8000c18: 80003b00 call 80003b0 <control_pong>
break;
8000c1c: 00010c06 br 8001050 <control_step+0x700>
printf("COMMAND_TRIGGER_SET_SLAVE\n");
8000c20: 01020134 movhi r4,2052
8000c24: 211abc04 addi r4,r4,27376
8000c28: 8002d9c0 call 8002d9c <puts>
masterslave(TRIGGER_SLAVE);
8000c2c: 0009883a mov r4,zero
8000c30: 80029440 call 8002944 <masterslave>
control_pong(header);
8000c34: e0bffe17 ldw r2,-8(fp)
8000c38: 1009883a mov r4,r2
8000c3c: 80003b00 call 80003b0 <control_pong>
break;
8000c40: 00010306 br 8001050 <control_step+0x700>
printf("COMMAND_TRIGGER_SET_MASTER\n");
8000c44: 01020134 movhi r4,2052
8000c48: 211ac304 addi r4,r4,27404
8000c4c: 8002d9c0 call 8002d9c <puts>
masterslave(TRIGGER_MASTER);
8000c50: 01000044 movi r4,1
8000c54: 80029440 call 8002944 <masterslave>
control_pong(header);
8000c58: e0bffe17 ldw r2,-8(fp)
8000c5c: 1009883a mov r4,r2
8000c60: 80003b00 call 80003b0 <control_pong>
break;
8000c64: 0000fa06 br 8001050 <control_step+0x700>
printf("COMMAND_TRIGGER_SET_PERIOD: %d\n", data[0]);
8000c68: e0bffd17 ldw r2,-12(fp)
8000c6c: 1080000b ldhu r2,0(r2)
8000c70: 10bfffcc andi r2,r2,65535
8000c74: 100b883a mov r5,r2
8000c78: 01020134 movhi r4,2052
8000c7c: 211aca04 addi r4,r4,27432
8000c80: 8002c780 call 8002c78 <printf>
master_clock_period((alt_u32)data[0]); //we set only 16 lsbs!
8000c84: e0bffd17 ldw r2,-12(fp)
8000c88: 1080000b ldhu r2,0(r2)
8000c8c: 10bfffcc andi r2,r2,65535
8000c90: 1009883a mov r4,r2
8000c94: 80029cc0 call 80029cc <master_clock_period>
header->length = 0;
8000c98: e0bffe17 ldw r2,-8(fp)
8000c9c: 1000010d sth zero,4(r2)
control_pong(header);
8000ca0: e0bffe17 ldw r2,-8(fp)
8000ca4: 1009883a mov r4,r2
8000ca8: 80003b00 call 80003b0 <control_pong>
break;
8000cac: 0000e806 br 8001050 <control_step+0x700>
printf("COMMAND_TRIGGER_SET_TINT: %d\n", data[0]);
8000cb0: e0bffd17 ldw r2,-12(fp)
8000cb4: 1080000b ldhu r2,0(r2)
8000cb8: 10bfffcc andi r2,r2,65535
8000cbc: 100b883a mov r5,r2
8000cc0: 01020134 movhi r4,2052
8000cc4: 211ad204 addi r4,r4,27464
8000cc8: 8002c780 call 8002c78 <printf>
sensor_set_shutter(SENSOR_INTERFACE_BASE, data[0]);
8000ccc: e0bffd17 ldw r2,-12(fp)
8000cd0: 1080000b ldhu r2,0(r2)
8000cd4: 10ffffcc andi r3,r2,65535
8000cd8: 00861034 movhi r2,6208
8000cdc: 10cf55ad sthio r3,15702(r2)
header->length = 0;
8000ce0: e0bffe17 ldw r2,-8(fp)
8000ce4: 1000010d sth zero,4(r2)
control_pong(header);
8000ce8: e0bffe17 ldw r2,-8(fp)
8000cec: 1009883a mov r4,r2
8000cf0: 80003b00 call 80003b0 <control_pong>
break;
8000cf4: 0000d606 br 8001050 <control_step+0x700>
printf("COMMAND_SET_GAIN: %d\n", data[0]);
8000cf8: e0bffd17 ldw r2,-12(fp)
8000cfc: 1080000b ldhu r2,0(r2)
8000d00: 10bfffcc andi r2,r2,65535
8000d04: 100b883a mov r5,r2
8000d08: 01020134 movhi r4,2052
8000d0c: 211ada04 addi r4,r4,27496
8000d10: 8002c780 call 8002c78 <printf>
sensor_set_gain(SENSOR_INTERFACE_BASE, data[0]);
8000d14: e0bffd17 ldw r2,-12(fp)
8000d18: 1080000b ldhu r2,0(r2)
8000d1c: 10803fcc andi r2,r2,255
8000d20: 100d883a mov r6,r2
8000d24: 01400084 movi r5,2
8000d28: 01061034 movhi r4,6208
8000d2c: 210f5404 addi r4,r4,15696
8000d30: 8001b800 call 8001b80 <sensor_command_bit>
header->length = 0;
8000d34: e0bffe17 ldw r2,-8(fp)
8000d38: 1000010d sth zero,4(r2)
control_pong(header);
8000d3c: e0bffe17 ldw r2,-8(fp)
8000d40: 1009883a mov r4,r2
8000d44: 80003b00 call 80003b0 <control_pong>
break;
8000d48: 0000c106 br 8001050 <control_step+0x700>
printf("COMMAND_TRIGGER_SET_MASTER_DELAY: %d\n", data[0]);
8000d4c: e0bffd17 ldw r2,-12(fp)
8000d50: 1080000b ldhu r2,0(r2)
8000d54: 10bfffcc andi r2,r2,65535
8000d58: 100b883a mov r5,r2
8000d5c: 01020134 movhi r4,2052
8000d60: 211ae004 addi r4,r4,27520
8000d64: 8002c780 call 8002c78 <printf>
set_delay(TRIGGER_MASTER, data[0]);
8000d68: e0bffd17 ldw r2,-12(fp)
8000d6c: 1080000b ldhu r2,0(r2)
8000d70: 10bfffcc andi r2,r2,65535
8000d74: 100b883a mov r5,r2
8000d78: 01000044 movi r4,1
8000d7c: 8002bc80 call 8002bc8 <set_delay>
header->length = 0;
8000d80: e0bffe17 ldw r2,-8(fp)
8000d84: 1000010d sth zero,4(r2)
control_pong(header);
8000d88: e0bffe17 ldw r2,-8(fp)
8000d8c: 1009883a mov r4,r2
8000d90: 80003b00 call 80003b0 <control_pong>
break;
8000d94: 0000ae06 br 8001050 <control_step+0x700>
printf("COMMAND_TRIGGER_SET_SLAVE_DELAY: %d\n", data[0]);
8000d98: e0bffd17 ldw r2,-12(fp)
8000d9c: 1080000b ldhu r2,0(r2)
8000da0: 10bfffcc andi r2,r2,65535
8000da4: 100b883a mov r5,r2
8000da8: 01020134 movhi r4,2052
8000dac: 211aea04 addi r4,r4,27560
8000db0: 8002c780 call 8002c78 <printf>
set_delay(TRIGGER_SLAVE, data[0]);
8000db4: e0bffd17 ldw r2,-12(fp)
8000db8: 1080000b ldhu r2,0(r2)
8000dbc: 10bfffcc andi r2,r2,65535
8000dc0: 100b883a mov r5,r2
8000dc4: 0009883a mov r4,zero
8000dc8: 8002bc80 call 8002bc8 <set_delay>
header->length = 0;
8000dcc: e0bffe17 ldw r2,-8(fp)
8000dd0: 1000010d sth zero,4(r2)
control_pong(header);
8000dd4: e0bffe17 ldw r2,-8(fp)
8000dd8: 1009883a mov r4,r2
8000ddc: 80003b00 call 80003b0 <control_pong>
break;
8000de0: 00009b06 br 8001050 <control_step+0x700>
printf("COMMAND_DAQ_DISABLE\n");
8000de4: 01020134 movhi r4,2052
8000de8: 211af404 addi r4,r4,27600
8000dec: 8002d9c0 call 8002d9c <puts>
sensor_set_enable(SENSOR_INTERFACE_BASE, 0);
8000df0: 000d883a mov r6,zero
8000df4: 01400044 movi r5,1
8000df8: 01061034 movhi r4,6208
8000dfc: 210f5404 addi r4,r4,15696
8000e00: 8001b800 call 8001b80 <sensor_command_bit>
udpgen_command_bit(UDP_GENERATOR_BASE, UDPGEN_CSR_EN_BITMASK,0);
8000e04: 000d883a mov r6,zero
8000e08: 01400044 movi r5,1
8000e0c: 01061034 movhi r4,6208
8000e10: 210f3004 addi r4,r4,15552
8000e14: 80025540 call 8002554 <udpgen_command_bit>
control_pong(header);
8000e18: e0bffe17 ldw r2,-8(fp)
8000e1c: 1009883a mov r4,r2
8000e20: 80003b00 call 80003b0 <control_pong>
break;
8000e24: 00008a06 br 8001050 <control_step+0x700>
printf("COMMAND_DAQ_ENABLE\n");
8000e28: 01020134 movhi r4,2052
8000e2c: 211af904 addi r4,r4,27620
8000e30: 8002d9c0 call 8002d9c <puts>
udpgen_command_bit(UDP_GENERATOR_BASE, UDPGEN_CSR_EN_BITMASK,1);
8000e34: 01800044 movi r6,1
8000e38: 01400044 movi r5,1
8000e3c: 01061034 movhi r4,6208
8000e40: 210f3004 addi r4,r4,15552
8000e44: 80025540 call 8002554 <udpgen_command_bit>
sensor_set_enable(SENSOR_INTERFACE_BASE, 1);
8000e48: 01800044 movi r6,1
8000e4c: 01400044 movi r5,1
8000e50: 01061034 movhi r4,6208
8000e54: 210f5404 addi r4,r4,15696
8000e58: 8001b800 call 8001b80 <sensor_command_bit>
control_pong(header);
8000e5c: e0bffe17 ldw r2,-8(fp)
8000e60: 1009883a mov r4,r2
8000e64: 80003b00 call 80003b0 <control_pong>
break;
8000e68: 00007906 br 8001050 <control_step+0x700>
printf("COMMAND_DAQ_RESET_COUNTERS\n");
8000e6c: 01020134 movhi r4,2052
8000e70: 211afe04 addi r4,r4,27640
8000e74: 8002d9c0 call 8002d9c <puts>
sensor_reset(SENSOR_INTERFACE_BASE);
8000e78: 01800044 movi r6,1
8000e7c: 01400204 movi r5,8
8000e80: 01061034 movhi r4,6208
8000e84: 210f5404 addi r4,r4,15696
8000e88: 8001b800 call 8001b80 <sensor_command_bit>
8000e8c: 000d883a mov r6,zero
8000e90: 01400204 movi r5,8
8000e94: 01061034 movhi r4,6208
8000e98: 210f5404 addi r4,r4,15696
8000e9c: 8001b800 call 8001b80 <sensor_command_bit>
control_pong(header);
8000ea0: e0bffe17 ldw r2,-8(fp)
8000ea4: 1009883a mov r4,r2
8000ea8: 80003b00 call 80003b0 <control_pong>
break;
8000eac: 00006806 br 8001050 <control_step+0x700>
printf("COMMAND_DAQ_FLUSH_DATA\n");
8000eb0: 01020134 movhi r4,2052
8000eb4: 211b0504 addi r4,r4,27668
8000eb8: 8002d9c0 call 8002d9c <puts>
control_pong(header);
8000ebc: e0bffe17 ldw r2,-8(fp)
8000ec0: 1009883a mov r4,r2
8000ec4: 80003b00 call 80003b0 <control_pong>
break;
8000ec8: 00006106 br 8001050 <control_step+0x700>
printf("COMMAND_DAQ_CONFIG_PEER\n");
8000ecc: 01020134 movhi r4,2052
8000ed0: 211b0b04 addi r4,r4,27692
8000ed4: 8002d9c0 call 8002d9c <puts>
control_process_config_peer(data);
8000ed8: e0bffd17 ldw r2,-12(fp)
8000edc: 1009883a mov r4,r2
8000ee0: 80004f80 call 80004f8 <control_process_config_peer>
break;
8000ee4: 00005a06 br 8001050 <control_step+0x700>
printf("COMMAND_SLOWCTRL_SNAPSHOT\n");
8000ee8: 01020134 movhi r4,2052
8000eec: 211b1104 addi r4,r4,27716
8000ef0: 8002d9c0 call 8002d9c <puts>
control_process_snapshot();
8000ef4: 80004180 call 8000418 <control_process_snapshot>
break;
8000ef8: 00005506 br 8001050 <control_step+0x700>
printf("COMMAND_SET_CLUSTER_THRESHOLD: %d\n", data[0]);
8000efc: e0bffd17 ldw r2,-12(fp)
8000f00: 1080000b ldhu r2,0(r2)
8000f04: 10bfffcc andi r2,r2,65535
8000f08: 100b883a mov r5,r2
8000f0c: 01020134 movhi r4,2052
8000f10: 211b1804 addi r4,r4,27744
8000f14: 8002c780 call 8002c78 <printf>
sensor_set_cluster_threshold(SENSOR_INTERFACE_BASE,data[0]);
8000f18: e0bffd17 ldw r2,-12(fp)
8000f1c: 1080000b ldhu r2,0(r2)
8000f20: 10ffffcc andi r3,r2,65535
8000f24: 00861034 movhi r2,6208
8000f28: 10cf5725 stbio r3,15708(r2)
header->length = 0;
8000f2c: e0bffe17 ldw r2,-8(fp)
8000f30: 1000010d sth zero,4(r2)
control_pong(header);
8000f34: e0bffe17 ldw r2,-8(fp)
8000f38: 1009883a mov r4,r2
8000f3c: 80003b00 call 80003b0 <control_pong>
break;
8000f40: 00004306 br 8001050 <control_step+0x700>
printf("COMMAND_SET_CLUSTER_SIZE: %d\n", data[0]);
8000f44: e0bffd17 ldw r2,-12(fp)
8000f48: 1080000b ldhu r2,0(r2)
8000f4c: 10bfffcc andi r2,r2,65535
8000f50: 100b883a mov r5,r2
8000f54: 01020134 movhi r4,2052
8000f58: 211b2104 addi r4,r4,27780
8000f5c: 8002c780 call 8002c78 <printf>
sensor_set_cluster_size(SENSOR_INTERFACE_BASE,data[0]);
8000f60: e0bffd17 ldw r2,-12(fp)
8000f64: 1080000b ldhu r2,0(r2)
8000f68: 10ffffcc andi r3,r2,65535
8000f6c: 00861034 movhi r2,6208
8000f70: 10cf5765 stbio r3,15709(r2)
header->length = 0;
8000f74: e0bffe17 ldw r2,-8(fp)
8000f78: 1000010d sth zero,4(r2)
control_pong(header);
8000f7c: e0bffe17 ldw r2,-8(fp)
8000f80: 1009883a mov r4,r2
8000f84: 80003b00 call 80003b0 <control_pong>
break;
8000f88: 00003106 br 8001050 <control_step+0x700>
if (header->length>=2){
8000f8c: e0bffe17 ldw r2,-8(fp)
8000f90: 1080010b ldhu r2,4(r2)
8000f94: 10bfffcc andi r2,r2,65535
8000f98: 108000b0 cmpltui r2,r2,2
8000f9c: 10001a1e bne r2,zero,8001008 <control_step+0x6b8>
calibration_ram_set_factor(CALIBRATION_RAM_BASE,data[0],data[1]); //i is channelID
8000fa0: e0bffd17 ldw r2,-12(fp)
8000fa4: 1080000b ldhu r2,0(r2)
8000fa8: 10bfffcc andi r2,r2,65535
8000fac: 1085883a add r2,r2,r2
8000fb0: 1007883a mov r3,r2
8000fb4: 00861034 movhi r2,6208
8000fb8: 108d0004 addi r2,r2,13312
8000fbc: 1885883a add r2,r3,r2
8000fc0: e0fffd17 ldw r3,-12(fp)
8000fc4: 18c00084 addi r3,r3,2
8000fc8: 18c0000b ldhu r3,0(r3)
8000fcc: 18ffffcc andi r3,r3,65535
8000fd0: 10c0002d sthio r3,0(r2)
printf("COMMAND_SET_CALIBRATION_FACTOR ChannelIP%d : %d\n", data[0],data[1]);
8000fd4: e0bffd17 ldw r2,-12(fp)
8000fd8: 1080000b ldhu r2,0(r2)
8000fdc: 10ffffcc andi r3,r2,65535
8000fe0: e0bffd17 ldw r2,-12(fp)
8000fe4: 10800084 addi r2,r2,2
8000fe8: 1080000b ldhu r2,0(r2)
8000fec: 10bfffcc andi r2,r2,65535
8000ff0: 100d883a mov r6,r2
8000ff4: 180b883a mov r5,r3
8000ff8: 01020134 movhi r4,2052
8000ffc: 211b2904 addi r4,r4,27812
8001000: 8002c780 call 8002c78 <printf>
8001004: 00000706 br 8001024 <control_step+0x6d4>
printf("COMMAND_SET_CALIBRATION_FACTOR length: %d\n", header->length);
8001008: e0bffe17 ldw r2,-8(fp)
800100c: 1080010b ldhu r2,4(r2)
8001010: 10bfffcc andi r2,r2,65535
8001014: 100b883a mov r5,r2
8001018: 01020134 movhi r4,2052
800101c: 211b3604 addi r4,r4,27864
8001020: 8002c780 call 8002c78 <printf>
header->length = 0;
8001024: e0bffe17 ldw r2,-8(fp)
8001028: 1000010d sth zero,4(r2)
control_pong(header);
800102c: e0bffe17 ldw r2,-8(fp)
8001030: 1009883a mov r4,r2
8001034: 80003b00 call 80003b0 <control_pong>
break;
8001038: 00000506 br 8001050 <control_step+0x700>
return;
800103c: 0001883a nop
8001040: 00000306 br 8001050 <control_step+0x700>
return;
8001044: 0001883a nop
8001048: 00000106 br 8001050 <control_step+0x700>
return;
800104c: 0001883a nop
}
}
8001050: e037883a mov sp,fp
8001054: dfc00117 ldw ra,4(sp)
8001058: df000017 ldw fp,0(sp)
800105c: dec00204 addi sp,sp,8
8001060: f800283a ret
08001064 <ControlTask>:
CONTROL_STACK_SIZE,
};
void ControlTask(void* param)
{
8001064: defffc04 addi sp,sp,-16
8001068: dfc00315 stw ra,12(sp)
800106c: df000215 stw fp,8(sp)
8001070: df000204 addi fp,sp,8
8001074: e13ffe15 stw r4,-8(fp)
printf ("::: Control task started ::: \n");
8001078: 01020134 movhi r4,2052
800107c: 211b4504 addi r4,r4,27924
8001080: 8002d9c0 call 8002d9c <puts>
ethernet_listen(0, CONTROL_PORT);
8001084: 0143e804 movi r5,4000
8001088: 0009883a mov r4,zero
800108c: 80020d00 call 80020d0 <ethernet_listen>
sensor_preconfigure(SENSOR_INTERFACE_BASE);
8001090: 01061034 movhi r4,6208
8001094: 210f5404 addi r4,r4,15696
8001098: 8001c080 call 8001c08 <sensor_preconfigure>
//initial calibration factor here
printf("Initiate Calibration Factor 1 to 320 from channel1 to channel320 \n");
800109c: 01020134 movhi r4,2052
80010a0: 211b4d04 addi r4,r4,27956
80010a4: 8002d9c0 call 8002d9c <puts>
for (alt_u32 i = 0; i < 320; i++) {
80010a8: e03fff15 stw zero,-4(fp)
80010ac: 00000b06 br 80010dc <ControlTask+0x78>
//pow(2,13)=8192. represent calibration factor 1; range[0.00012,8)
//default calibration factor is 1.
calibration_ram_set_factor(CALIBRATION_RAM_BASE,i,8192); //i is channelID
80010b0: e0bfff17 ldw r2,-4(fp)
80010b4: 1085883a add r2,r2,r2
80010b8: 1007883a mov r3,r2
80010bc: 00861034 movhi r2,6208
80010c0: 108d0004 addi r2,r2,13312
80010c4: 1885883a add r2,r3,r2
80010c8: 00c80004 movi r3,8192
80010cc: 10c0002d sthio r3,0(r2)
for (alt_u32 i = 0; i < 320; i++) {
80010d0: e0bfff17 ldw r2,-4(fp)
80010d4: 10800044 addi r2,r2,1
80010d8: e0bfff15 stw r2,-4(fp)
80010dc: e0bfff17 ldw r2,-4(fp)
80010e0: 10805030 cmpltui r2,r2,320
80010e4: 103ff21e bne r2,zero,80010b0 <ControlTask+0x4c>
}
while(1)
control_step();
80010e8: 80009500 call 8000950 <control_step>
80010ec: 003ffe06 br 80010e8 <ControlTask+0x84>
080010f0 <control_init>:
}
void control_init()
{
80010f0: defffe04 addi sp,sp,-8
80010f4: dfc00115 stw ra,4(sp)
80010f8: df000015 stw fp,0(sp)
80010fc: d839883a mov fp,sp
TK_NEWTASK(&controltask);
8001100: 01020174 movhi r4,2053
8001104: 212e4804 addi r4,r4,-18144
8001108: 80290740 call 8029074 <TK_NEWTASK>
}
800110c: 0001883a nop
8001110: e037883a mov sp,fp
8001114: dfc00117 ldw ra,4(sp)
8001118: df000017 ldw fp,0(sp)
800111c: dec00204 addi sp,sp,8
8001120: f800283a ret
08001124 <InitialTask>:
/* InitialTask will initialize the NicheStack
* TCP/IP Stack and then initialize the rest of the Simple Socket Server example
* RTOS structures and tasks.
*/
void InitialTask(void *task_data)
{
8001124: defffc04 addi sp,sp,-16
8001128: dfc00315 stw ra,12(sp)
800112c: df000215 stw fp,8(sp)
8001130: df000204 addi fp,sp,8
8001134: e13ffe15 stw r4,-8(fp)
* I/O drivers are available. Two tasks are created:
* "Inet main" task with priority 2
* "clock tick" task with priority 3
*/
alt_iniche_init();
8001138: 80293dc0 call 80293dc <alt_iniche_init>
netmain();
800113c: 80278140 call 8027814 <netmain>
/* Wait for the network stack to be ready before proceeding.
* iniche_net_ready indicates that TCP/IP stack is ready, and IP address is obtained.
*/
while (!iniche_net_ready){
8001140: 00000206 br 800114c <InitialTask+0x28>
TK_SLEEP(1);
8001144: 01000084 movi r4,2
8001148: 801730c0 call 801730c <OSTimeDly>
while (!iniche_net_ready){
800114c: d0a06f17 ldw r2,-32324(gp)
8001150: 103ffc26 beq r2,zero,8001144 <InitialTask+0x20>
/* Now that the stack is running, perform the application initialization steps */
/* Application Specific Task Launching Code Block Begin */
printf("\nSocket Server starting up\n");
8001154: 01020134 movhi r4,2052
8001158: 211b5e04 addi r4,r4,28024
800115c: 8002d9c0 call 8002d9c <puts>
/* Create tasks */
ethernet_init();
8001160: 80020500 call 8002050 <ethernet_init>
control_init();
8001164: 80010f00 call 80010f0 <control_init>
//TK_NEWTASK(&ssconntask);
/* Application Specific Task Launching Code Block End */
/*This task is deleted because there is no need for it to run again */
error_code = OSTaskDel(OS_PRIO_SELF);
8001168: 01003fc4 movi r4,255
800116c: 80167f00 call 80167f0 <OSTaskDel>
8001170: e0bfffc5 stb r2,-1(fp)
//alt_uCOSIIErrorHandler(error_code, 0);
while (1); /* Correct Program Flow should never get here */
8001174: 003fff06 br 8001174 <InitialTask+0x50>
08001178 <main>:
/* Main creates a single task, SSSInitialTask, and starts task scheduler.
*/
int main (int argc, char* argv[], char* envp[])
{
8001178: defff504 addi sp,sp,-44
800117c: dfc00a15 stw ra,40(sp)
8001180: df000915 stw fp,36(sp)
8001184: df000904 addi fp,sp,36
8001188: e13ffe15 stw r4,-8(fp)
800118c: e17ffd15 stw r5,-12(fp)
8001190: e1bffc15 stw r6,-16(fp)
INT8U error_code;
/* Clear the RTOS timer */
OSTimeSet(0);
8001194: 0009883a mov r4,zero
8001198: 80177340 call 8017734 <OSTimeSet>
/* SSSInitialTask will initialize the NicheStack
* TCP/IP Stack and then initialize the rest of the Simple Socket Server example
* RTOS structures and tasks.
*/
error_code = OSTaskCreateExt(InitialTask,
800119c: d8000415 stw zero,16(sp)
80011a0: d8000315 stw zero,12(sp)
80011a4: 008e0004 movi r2,14336
80011a8: d8800215 stw r2,8(sp)
80011ac: 00820174 movhi r2,2053
80011b0: 10b38b04 addi r2,r2,-12756
80011b4: d8800115 stw r2,4(sp)
80011b8: 00800144 movi r2,5
80011bc: d8800015 stw r2,0(sp)
80011c0: 01c00144 movi r7,5
80011c4: 018201b4 movhi r6,2054
80011c8: 31ab8b04 addi r6,r6,-20948
80011cc: 000b883a mov r5,zero
80011d0: 01020034 movhi r4,2048
80011d4: 21044904 addi r4,r4,4388
80011d8: 801664c0 call 801664c <OSTaskCreateExt>
80011dc: e0bfffc5 stb r2,-1(fp)
/*
* As with all MicroC/OS-II designs, once the initial thread(s) and
* associated RTOS resources are declared, we start the RTOS. That's it!
*/
OSStart();
80011e0: 8010a700 call 8010a70 <OSStart>
while(1); /* Correct Program Flow never gets here. */
80011e4: 003fff06 br 80011e4 <main+0x6c>
080011e8 <get_mac_addr>:
* Read the MAC address in a board specific way. Prompt user to enter serial
* number to generate MAC address if failed to read from flash.
*
*/
int get_mac_addr(NET net, unsigned char mac_addr[6])
{
80011e8: defffb04 addi sp,sp,-20
80011ec: dfc00415 stw ra,16(sp)
80011f0: df000315 stw fp,12(sp)
80011f4: df000304 addi fp,sp,12
80011f8: e13ffe15 stw r4,-8(fp)
80011fc: e17ffd15 stw r5,-12(fp)
error_t error = 0;
8001200: e03fff15 stw zero,-4(fp)
error = get_board_mac_addr(mac_addr);
8001204: e13ffd17 ldw r4,-12(fp)
8001208: 80018b40 call 80018b4 <get_board_mac_addr>
800120c: e0bfff15 stw r2,-4(fp)
if(error)
8001210: e0bfff17 ldw r2,-4(fp)
8001214: 10000326 beq r2,zero,8001224 <get_mac_addr+0x3c>
{
/* Failed read MAC address from flash, prompt user to enter serial
number to generate MAC address. */
error = generate_mac_addr(mac_addr);
8001218: e13ffd17 ldw r4,-12(fp)
800121c: 80017800 call 8001780 <generate_mac_addr>
8001220: e0bfff15 stw r2,-4(fp)
}
return error;
8001224: e0bfff17 ldw r2,-4(fp)
}
8001228: e037883a mov sp,fp
800122c: dfc00117 ldw ra,4(sp)
8001230: df000017 ldw fp,0(sp)
8001234: dec00204 addi sp,sp,8
8001238: f800283a ret
0800123c <get_ip_addr>:
int get_ip_addr(alt_iniche_dev *p_dev,
ip_addr* ipaddr,
ip_addr* netmask,
ip_addr* gw,
int* use_dhcp)
{
800123c: defff804 addi sp,sp,-32
8001240: dfc00715 stw ra,28(sp)
8001244: df000615 stw fp,24(sp)
8001248: df000604 addi fp,sp,24
800124c: e13ffe15 stw r4,-8(fp)
8001250: e17ffd15 stw r5,-12(fp)
8001254: e1bffc15 stw r6,-16(fp)
8001258: e1fffb15 stw r7,-20(fp)
alt_u32 sw_state = ~(IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE));
800125c: 00861034 movhi r2,6208
8001260: 108f5037 ldwio r2,15680(r2)
8001264: 0084303a nor r2,zero,r2
8001268: e0bfff15 stw r2,-4(fp)
printf("Input state: 0x%08lx\n", sw_state);
800126c: e17fff17 ldw r5,-4(fp)
8001270: 01020134 movhi r4,2052
8001274: 211b6504 addi r4,r4,28052
8001278: 8002c780 call 8002c78 <printf>
IP4_ADDR(*netmask, 0, 0, 0, 0);
printf("DHCP enabled.\n");
}
else
{*/
*use_dhcp = 0;
800127c: e0800217 ldw r2,8(fp)
8001280: 10000015 stw zero,0(r2)
IP4_ADDR(*ipaddr, IPADDR0, IPADDR1, IPADDR2, IPADDR3+((sw_state>>4)&0x0F));
8001284: e0bfff17 ldw r2,-4(fp)
8001288: 1004d13a srli r2,r2,4
800128c: 108003cc andi r2,r2,15
8001290: 10800404 addi r2,r2,16
8001294: 1006963a slli r3,r2,24
8001298: 008001f4 movhi r2,7
800129c: 10800284 addi r2,r2,10
80012a0: 1886b03a or r3,r3,r2
80012a4: e0bffd17 ldw r2,-12(fp)
80012a8: 10c00015 stw r3,0(r2)
IP4_ADDR(*gw, GWADDR0, GWADDR1, GWADDR2, GWADDR3);
80012ac: e0fffb17 ldw r3,-20(fp)
80012b0: 008041f4 movhi r2,263
80012b4: 10800284 addi r2,r2,10
80012b8: 18800015 stw r2,0(r3)
IP4_ADDR(*netmask, MSKADDR0, MSKADDR1, MSKADDR2, MSKADDR3);
80012bc: e0fffc17 ldw r3,-16(fp)
80012c0: 00804034 movhi r2,256
80012c4: 10bfffc4 addi r2,r2,-1
80012c8: 18800015 stw r2,0(r3)
printf("DHCP disabled.\n");
80012cc: 01020134 movhi r4,2052
80012d0: 211b6b04 addi r4,r4,28076
80012d4: 8002d9c0 call 8002d9c <puts>
printf("Static IP Address is %d.%d.%d.%d\n",
ip4_addr1(*ipaddr),
80012d8: e0bffd17 ldw r2,-12(fp)
80012dc: 10800017 ldw r2,0(r2)
80012e0: 1006d63a srli r3,r2,24
80012e4: e0bffd17 ldw r2,-12(fp)
80012e8: 10800017 ldw r2,0(r2)
80012ec: 1004d23a srli r2,r2,8
80012f0: 10bfc00c andi r2,r2,65280
80012f4: 1886b03a or r3,r3,r2
80012f8: e0bffd17 ldw r2,-12(fp)
80012fc: 10800017 ldw r2,0(r2)
8001300: 1004923a slli r2,r2,8
8001304: 10803fec andhi r2,r2,255
8001308: 1886b03a or r3,r3,r2
800130c: e0bffd17 ldw r2,-12(fp)
8001310: 10800017 ldw r2,0(r2)
8001314: 1004963a slli r2,r2,24
8001318: 1884b03a or r2,r3,r2
800131c: 1008d63a srli r4,r2,24
ip4_addr2(*ipaddr),
8001320: e0bffd17 ldw r2,-12(fp)
8001324: 10800017 ldw r2,0(r2)
8001328: 1006d63a srli r3,r2,24
800132c: e0bffd17 ldw r2,-12(fp)
8001330: 10800017 ldw r2,0(r2)
8001334: 1004d23a srli r2,r2,8
8001338: 10bfc00c andi r2,r2,65280
800133c: 1886b03a or r3,r3,r2
8001340: e0bffd17 ldw r2,-12(fp)
8001344: 10800017 ldw r2,0(r2)
8001348: 1004923a slli r2,r2,8
800134c: 10803fec andhi r2,r2,255
8001350: 1886b03a or r3,r3,r2
8001354: e0bffd17 ldw r2,-12(fp)
8001358: 10800017 ldw r2,0(r2)
800135c: 1004963a slli r2,r2,24
8001360: 1884b03a or r2,r3,r2
8001364: 1004d43a srli r2,r2,16
printf("Static IP Address is %d.%d.%d.%d\n",
8001368: 11403fcc andi r5,r2,255
ip4_addr3(*ipaddr),
800136c: e0bffd17 ldw r2,-12(fp)
8001370: 10800017 ldw r2,0(r2)
8001374: 1006d63a srli r3,r2,24
8001378: e0bffd17 ldw r2,-12(fp)
800137c: 10800017 ldw r2,0(r2)
8001380: 1004d23a srli r2,r2,8
8001384: 10bfc00c andi r2,r2,65280
8001388: 1886b03a or r3,r3,r2
800138c: e0bffd17 ldw r2,-12(fp)
8001390: 10800017 ldw r2,0(r2)
8001394: 1004923a slli r2,r2,8
8001398: 10803fec andhi r2,r2,255
800139c: 1886b03a or r3,r3,r2
80013a0: e0bffd17 ldw r2,-12(fp)
80013a4: 10800017 ldw r2,0(r2)
80013a8: 1004963a slli r2,r2,24
80013ac: 1884b03a or r2,r3,r2
80013b0: 1004d23a srli r2,r2,8
printf("Static IP Address is %d.%d.%d.%d\n",
80013b4: 11803fcc andi r6,r2,255
ip4_addr4(*ipaddr));
80013b8: e0bffd17 ldw r2,-12(fp)
80013bc: 10800017 ldw r2,0(r2)
80013c0: 1006d63a srli r3,r2,24
80013c4: e0bffd17 ldw r2,-12(fp)
80013c8: 10800017 ldw r2,0(r2)
80013cc: 1004d23a srli r2,r2,8
80013d0: 10bfc00c andi r2,r2,65280
80013d4: 1886b03a or r3,r3,r2
80013d8: e0bffd17 ldw r2,-12(fp)
80013dc: 10800017 ldw r2,0(r2)
80013e0: 1004923a slli r2,r2,8
80013e4: 10803fec andhi r2,r2,255
80013e8: 1886b03a or r3,r3,r2
80013ec: e0bffd17 ldw r2,-12(fp)
80013f0: 10800017 ldw r2,0(r2)
80013f4: 1004963a slli r2,r2,24
80013f8: 1884b03a or r2,r3,r2
printf("Static IP Address is %d.%d.%d.%d\n",
80013fc: 10803fcc andi r2,r2,255
8001400: d8800015 stw r2,0(sp)
8001404: 300f883a mov r7,r6
8001408: 280d883a mov r6,r5
800140c: 200b883a mov r5,r4
8001410: 01020134 movhi r4,2052
8001414: 211b6f04 addi r4,r4,28092
8001418: 8002c780 call 8002c78 <printf>
//}
/* Non-standard API: return 1 for success */
return 1;
800141c: 00800044 movi r2,1
}
8001420: e037883a mov sp,fp
8001424: dfc00117 ldw ra,4(sp)
8001428: df000017 ldw fp,0(sp)
800142c: dec00204 addi sp,sp,8
8001430: f800283a ret
08001434 <get_serial_number>:
*
* Prompt user to enter 9-digit serial number.
*
*/
alt_u32 get_serial_number (void)
{
8001434: defff904 addi sp,sp,-28
8001438: dfc00615 stw ra,24(sp)
800143c: df000515 stw fp,20(sp)
8001440: df000504 addi fp,sp,20
alt_u32 ser_num = 0;
8001444: e03fff15 stw zero,-4(fp)
char serial_number[9];
int i = 0;
8001448: e03ffe15 stw zero,-8(fp)
while(!ser_num)
800144c: 00005606 br 80015a8 <get_serial_number+0x174>
{
printf("Please enter your 9-digit serial number. This is printed on a \n");
8001450: 01020134 movhi r4,2052
8001454: 211b7804 addi r4,r4,28128
8001458: 8002d9c0 call 8002d9c <puts>
printf("label under your Nios dev. board. The first 3 digits of the \n");
800145c: 01020134 movhi r4,2052
8001460: 211b8804 addi r4,r4,28192
8001464: 8002d9c0 call 8002d9c <puts>
printf("label are ASJ and the serial number follows this.\n -->");
8001468: 01020134 movhi r4,2052
800146c: 211b9804 addi r4,r4,28256
8001470: 8002c780 call 8002c78 <printf>
for(i=0; i<9; i++)
8001474: e03ffe15 stw zero,-8(fp)
8001478: 00001d06 br 80014f0 <get_serial_number+0xbc>
{
serial_number[i] = getchar();
800147c: 8002c380 call 8002c38 <getchar>
8001480: 1007883a mov r3,r2
8001484: e0bffe17 ldw r2,-8(fp)
8001488: e085883a add r2,fp,r2
800148c: 10fffbc5 stb r3,-17(r2)
putchar(serial_number[i]);
8001490: e0bffe17 ldw r2,-8(fp)
8001494: e085883a add r2,fp,r2
8001498: 10bffbc3 ldbu r2,-17(r2)
800149c: 10803fcc andi r2,r2,255
80014a0: 1080201c xori r2,r2,128
80014a4: 10bfe004 addi r2,r2,-128
80014a8: 1009883a mov r4,r2
80014ac: 8002cb80 call 8002cb8 <putchar>
/* Handle backspaces. How civilized. */
if ((serial_number[i] == 0x08) && (i >= 0))
80014b0: e0bffe17 ldw r2,-8(fp)
80014b4: e085883a add r2,fp,r2
80014b8: 10bffbc3 ldbu r2,-17(r2)
80014bc: 10803fcc andi r2,r2,255
80014c0: 1080201c xori r2,r2,128
80014c4: 10bfe004 addi r2,r2,-128
80014c8: 10800218 cmpnei r2,r2,8
80014cc: 1000051e bne r2,zero,80014e4 <get_serial_number+0xb0>
80014d0: e0bffe17 ldw r2,-8(fp)
80014d4: 10000316 blt r2,zero,80014e4 <get_serial_number+0xb0>
{
i--;
80014d8: e0bffe17 ldw r2,-8(fp)
80014dc: 10bfffc4 addi r2,r2,-1
80014e0: e0bffe15 stw r2,-8(fp)
for(i=0; i<9; i++)
80014e4: e0bffe17 ldw r2,-8(fp)
80014e8: 10800044 addi r2,r2,1
80014ec: e0bffe15 stw r2,-8(fp)
80014f0: e0bffe17 ldw r2,-8(fp)
80014f4: 10800250 cmplti r2,r2,9
80014f8: 103fe01e bne r2,zero,800147c <get_serial_number+0x48>
}
}
printf("\n");
80014fc: 01000284 movi r4,10
8001500: 8002cb80 call 8002cb8 <putchar>
for(i=0; i<9; i++)
8001504: e03ffe15 stw zero,-8(fp)
8001508: 00002406 br 800159c <get_serial_number+0x168>
{
if (isdigit(serial_number[i]))
800150c: e0bffe17 ldw r2,-8(fp)
8001510: e085883a add r2,fp,r2
8001514: 10bffbc3 ldbu r2,-17(r2)
8001518: 10803fcc andi r2,r2,255
800151c: 1080201c xori r2,r2,128
8001520: 10bfe004 addi r2,r2,-128
8001524: 10c00044 addi r3,r2,1
8001528: 00820134 movhi r2,2052
800152c: 109c7584 addi r2,r2,29142
8001530: 1885883a add r2,r3,r2
8001534: 10800003 ldbu r2,0(r2)
8001538: 10803fcc andi r2,r2,255
800153c: 1080010c andi r2,r2,4
8001540: 10000e26 beq r2,zero,800157c <get_serial_number+0x148>
{
ser_num *= 10;
8001544: e0bfff17 ldw r2,-4(fp)
8001548: 108002a4 muli r2,r2,10
800154c: e0bfff15 stw r2,-4(fp)
ser_num += serial_number[i] - '0';
8001550: e0bffe17 ldw r2,-8(fp)
8001554: e085883a add r2,fp,r2
8001558: 10bffbc3 ldbu r2,-17(r2)
800155c: 10c03fcc andi r3,r2,255
8001560: 18c0201c xori r3,r3,128
8001564: 18ffe004 addi r3,r3,-128
8001568: e0bfff17 ldw r2,-4(fp)
800156c: 1885883a add r2,r3,r2
8001570: 10bff404 addi r2,r2,-48
8001574: e0bfff15 stw r2,-4(fp)
8001578: 00000506 br 8001590 <get_serial_number+0x15c>
}
else
{
ser_num = 0;
800157c: e03fff15 stw zero,-4(fp)
printf("Serial number only contains decimal digits and is non-zero\n");
8001580: 01020134 movhi r4,2052
8001584: 211ba604 addi r4,r4,28312
8001588: 8002d9c0 call 8002d9c <puts>
break;
800158c: 00000606 br 80015a8 <get_serial_number+0x174>
for(i=0; i<9; i++)
8001590: e0bffe17 ldw r2,-8(fp)
8001594: 10800044 addi r2,r2,1
8001598: e0bffe15 stw r2,-8(fp)
800159c: e0bffe17 ldw r2,-8(fp)
80015a0: 10800250 cmplti r2,r2,9
80015a4: 103fd91e bne r2,zero,800150c <get_serial_number+0xd8>
while(!ser_num)
80015a8: e0bfff17 ldw r2,-4(fp)
80015ac: 103fa826 beq r2,zero,8001450 <get_serial_number+0x1c>
}
}
}
return ser_num;
80015b0: e0bfff17 ldw r2,-4(fp)
}
80015b4: e037883a mov sp,fp
80015b8: dfc00117 ldw ra,4(sp)
80015bc: df000017 ldw fp,0(sp)
80015c0: dec00204 addi sp,sp,8
80015c4: f800283a ret
080015c8 <generate_and_store_mac_addr>:
* sections. These fail-safe static settings are compatible with previous
* Nios Ethernet designs, and allow the "factory-safe" design to behave
* as expected if the last flash sector is erased.
*/
error_t generate_and_store_mac_addr()
{
80015c8: deffef04 addi sp,sp,-68
80015cc: dfc01015 stw ra,64(sp)
80015d0: df000f15 stw fp,60(sp)
80015d4: df000f04 addi fp,sp,60
error_t error = -1;
80015d8: 00bfffc4 movi r2,-1
80015dc: e0bfff15 stw r2,-4(fp)
alt_u32 ser_num = 0;
80015e0: e03ffe15 stw zero,-8(fp)
char flash_content[32];
alt_flash_fd* flash_handle;
printf("Can't read the MAC address from your board (this probably means\n");
80015e4: 01020134 movhi r4,2052
80015e8: 211bb504 addi r4,r4,28372
80015ec: 8002d9c0 call 8002d9c <puts>
printf("that your flash was erased). We will assign you a MAC address and\n");
80015f0: 01020134 movhi r4,2052
80015f4: 211bc504 addi r4,r4,28436
80015f8: 8002d9c0 call 8002d9c <puts>
printf("static network settings\n\n");
80015fc: 01020134 movhi r4,2052
8001600: 211bd604 addi r4,r4,28504
8001604: 8002d9c0 call 8002d9c <puts>
ser_num = get_serial_number();
8001608: 80014340 call 8001434 <get_serial_number>
800160c: e0bffe15 stw r2,-8(fp)
if (ser_num)
8001610: e0bffe17 ldw r2,-8(fp)
8001614: 10005426 beq r2,zero,8001768 <generate_and_store_mac_addr+0x1a0>
{
/* This says the image is safe */
flash_content[0] = 0xfe;
8001618: 00bfff84 movi r2,-2
800161c: e0bff105 stb r2,-60(fp)
flash_content[1] = 0x5a;
8001620: 00801684 movi r2,90
8001624: e0bff145 stb r2,-59(fp)
flash_content[2] = 0x0;
8001628: e03ff185 stb zero,-58(fp)
flash_content[3] = 0x0;
800162c: e03ff1c5 stb zero,-57(fp)
/* This is the Altera Vendor ID */
flash_content[4] = 0x0;
8001630: e03ff205 stb zero,-56(fp)
flash_content[5] = 0x7;
8001634: 008001c4 movi r2,7
8001638: e0bff245 stb r2,-55(fp)
flash_content[6] = 0xed;
800163c: 00bffb44 movi r2,-19
8001640: e0bff285 stb r2,-54(fp)
/* Reserverd Board identifier for erase boards */
flash_content[7] = 0xFF;
8001644: 00bfffc4 movi r2,-1
8001648: e0bff2c5 stb r2,-53(fp)
flash_content[8] = (ser_num & 0xff00) >> 8;
800164c: e0bffe17 ldw r2,-8(fp)
8001650: 1004d23a srli r2,r2,8
8001654: e0bff305 stb r2,-52(fp)
flash_content[9] = ser_num & 0xff;
8001658: e0bffe17 ldw r2,-8(fp)
800165c: e0bff345 stb r2,-51(fp)
/* Then comes a 16-bit "flags" field */
flash_content[10] = 0xFF;
8001660: 00bfffc4 movi r2,-1
8001664: e0bff385 stb r2,-50(fp)
flash_content[11] = 0xFF;
8001668: 00bfffc4 movi r2,-1
800166c: e0bff3c5 stb r2,-49(fp)
/* Then comes the static IP address */
flash_content[12] = IPADDR0;
8001670: 00800284 movi r2,10
8001674: e0bff405 stb r2,-48(fp)
flash_content[13] = IPADDR1;
8001678: e03ff445 stb zero,-47(fp)
flash_content[14] = IPADDR2;
800167c: 008001c4 movi r2,7
8001680: e0bff485 stb r2,-46(fp)
flash_content[15] = IPADDR3;
8001684: 00800404 movi r2,16
8001688: e0bff4c5 stb r2,-45(fp)
/* Then comes the static nameserver address */
flash_content[16] = 0xFF;
800168c: 00bfffc4 movi r2,-1
8001690: e0bff505 stb r2,-44(fp)
flash_content[17] = 0xFF;
8001694: 00bfffc4 movi r2,-1
8001698: e0bff545 stb r2,-43(fp)
flash_content[18] = 0xFF;
800169c: 00bfffc4 movi r2,-1
80016a0: e0bff585 stb r2,-42(fp)
flash_content[19] = 0xFF;
80016a4: 00bfffc4 movi r2,-1
80016a8: e0bff5c5 stb r2,-41(fp)
/* Then comes the static subnet mask */
flash_content[20] = MSKADDR0;
80016ac: 00bfffc4 movi r2,-1
80016b0: e0bff605 stb r2,-40(fp)
flash_content[21] = MSKADDR1;
80016b4: 00bfffc4 movi r2,-1
80016b8: e0bff645 stb r2,-39(fp)
flash_content[22] = MSKADDR2;
80016bc: 00bfffc4 movi r2,-1
80016c0: e0bff685 stb r2,-38(fp)
flash_content[23] = MSKADDR3;
80016c4: e03ff6c5 stb zero,-37(fp)
/* Then comes the static gateway address */
flash_content[24] = GWADDR0;
80016c8: 00800284 movi r2,10
80016cc: e0bff705 stb r2,-36(fp)
flash_content[25] = GWADDR1;
80016d0: e03ff745 stb zero,-35(fp)
flash_content[26] = GWADDR2;
80016d4: 008001c4 movi r2,7
80016d8: e0bff785 stb r2,-34(fp)
flash_content[27] = GWADDR3;
80016dc: 00800044 movi r2,1
80016e0: e0bff7c5 stb r2,-33(fp)
/* And finally whether to use DHCP - set all bits to be safe */
flash_content[28] = 0xFF;
80016e4: 00bfffc4 movi r2,-1
80016e8: e0bff805 stb r2,-32(fp)
flash_content[29] = 0xFF;
80016ec: 00bfffc4 movi r2,-1
80016f0: e0bff845 stb r2,-31(fp)
flash_content[30] = 0xFF;
80016f4: 00bfffc4 movi r2,-1
80016f8: e0bff885 stb r2,-30(fp)
flash_content[31] = 0xFF;
80016fc: 00bfffc4 movi r2,-1
8001700: e0bff8c5 stb r2,-29(fp)
/* Write the MAC address to flash */
flash_handle = alt_flash_open_dev(EXT_FLASH_AVL_MEM_NAME);
8001704: 01020134 movhi r4,2052
8001708: 211bdd04 addi r4,r4,28532
800170c: 800f7e40 call 800f7e4 <alt_flash_open_dev>
8001710: e0bffd15 stw r2,-12(fp)
if (flash_handle)
8001714: e0bffd17 ldw r2,-12(fp)
8001718: 10001326 beq r2,zero,8001768 <generate_and_store_mac_addr+0x1a0>
{
alt_write_flash(flash_handle,
800171c: d0a03a17 ldw r2,-32536(gp)
8001720: 1007883a mov r3,r2
8001724: e0bffd17 ldw r2,-12(fp)
8001728: e0bffc15 stw r2,-16(fp)
800172c: e0fffb15 stw r3,-20(fp)
8001730: e0bff104 addi r2,fp,-60
8001734: e0bffa15 stw r2,-24(fp)
8001738: 00800804 movi r2,32
800173c: e0bff915 stw r2,-28(fp)
alt_flash_fd* fd,
int offset,
const void* src_addr,
int length )
{
return fd->write( fd, offset, src_addr, length );
8001740: e0bffc17 ldw r2,-16(fp)
8001744: 10800517 ldw r2,20(r2)
8001748: e1fff917 ldw r7,-28(fp)
800174c: e1bffa17 ldw r6,-24(fp)
8001750: e17ffb17 ldw r5,-20(fp)
8001754: e13ffc17 ldw r4,-16(fp)
8001758: 103ee83a callr r2
last_flash_sector_offset,
flash_content,
32);
alt_flash_close_dev(flash_handle);
800175c: e13ffd17 ldw r4,-12(fp)
8001760: 800f84c0 call 800f84c <alt_flash_close_dev>
error = 0;
8001764: e03fff15 stw zero,-4(fp)
}
}
return error;
8001768: e0bfff17 ldw r2,-4(fp)
}
800176c: e037883a mov sp,fp
8001770: dfc00117 ldw ra,4(sp)
8001774: df000017 ldw fp,0(sp)
8001778: dec00204 addi sp,sp,8
800177c: f800283a ret
08001780 <generate_mac_addr>:
* Development Board serial number is 040800017, the corresponding ethernet
* number generated will be 00:07:ED:FF:8F:11.
*
*/
error_t generate_mac_addr(unsigned char mac_addr[6])
{
8001780: defff804 addi sp,sp,-32
8001784: dfc00715 stw ra,28(sp)
8001788: df000615 stw fp,24(sp)
800178c: df000604 addi fp,sp,24
8001790: e13ffd15 stw r4,-12(fp)
error_t error = -1;
8001794: 00bfffc4 movi r2,-1
8001798: e0bfff15 stw r2,-4(fp)
alt_u32 ser_num = 0;
800179c: e03ffe15 stw zero,-8(fp)
printf("\nCan't read the MAC address from your board. We will assign you\n");
80017a0: 01020134 movhi r4,2052
80017a4: 211be304 addi r4,r4,28556
80017a8: 8002d9c0 call 8002d9c <puts>
printf("a MAC address.\n\n");
80017ac: 01020134 movhi r4,2052
80017b0: 211bf304 addi r4,r4,28620
80017b4: 8002d9c0 call 8002d9c <puts>
ser_num = get_serial_number();
80017b8: 80014340 call 8001434 <get_serial_number>
80017bc: e0bffe15 stw r2,-8(fp)
if (ser_num)
80017c0: e0bffe17 ldw r2,-8(fp)
80017c4: 10003526 beq r2,zero,800189c <generate_mac_addr+0x11c>
{
/* This is the Altera Vendor ID */
mac_addr[0] = 0x0;
80017c8: e0bffd17 ldw r2,-12(fp)
80017cc: 10000005 stb zero,0(r2)
mac_addr[1] = 0x7;
80017d0: e0bffd17 ldw r2,-12(fp)
80017d4: 10800044 addi r2,r2,1
80017d8: 00c001c4 movi r3,7
80017dc: 10c00005 stb r3,0(r2)
mac_addr[2] = 0xed;
80017e0: e0bffd17 ldw r2,-12(fp)
80017e4: 10800084 addi r2,r2,2
80017e8: 00fffb44 movi r3,-19
80017ec: 10c00005 stb r3,0(r2)
/* Reserverd Board identifier */
mac_addr[3] = 0xFF;
80017f0: e0bffd17 ldw r2,-12(fp)
80017f4: 108000c4 addi r2,r2,3
80017f8: 00ffffc4 movi r3,-1
80017fc: 10c00005 stb r3,0(r2)
mac_addr[4] = (ser_num & 0xff00) >> 8;
8001800: e0bffe17 ldw r2,-8(fp)
8001804: 1006d23a srli r3,r2,8
8001808: e0bffd17 ldw r2,-12(fp)
800180c: 10800104 addi r2,r2,4
8001810: 10c00005 stb r3,0(r2)
mac_addr[5] = ser_num & 0xff;
8001814: e0bffd17 ldw r2,-12(fp)
8001818: 10800144 addi r2,r2,5
800181c: e0fffe17 ldw r3,-8(fp)
8001820: 10c00005 stb r3,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
mac_addr[0],
8001824: e0bffd17 ldw r2,-12(fp)
8001828: 10800003 ldbu r2,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
800182c: 11403fcc andi r5,r2,255
mac_addr[1],
8001830: e0bffd17 ldw r2,-12(fp)
8001834: 10800044 addi r2,r2,1
8001838: 10800003 ldbu r2,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
800183c: 11803fcc andi r6,r2,255
mac_addr[2],
8001840: e0bffd17 ldw r2,-12(fp)
8001844: 10800084 addi r2,r2,2
8001848: 10800003 ldbu r2,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
800184c: 11c03fcc andi r7,r2,255
mac_addr[3],
8001850: e0bffd17 ldw r2,-12(fp)
8001854: 108000c4 addi r2,r2,3
8001858: 10800003 ldbu r2,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
800185c: 10803fcc andi r2,r2,255
mac_addr[4],
8001860: e0fffd17 ldw r3,-12(fp)
8001864: 18c00104 addi r3,r3,4
8001868: 18c00003 ldbu r3,0(r3)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
800186c: 18c03fcc andi r3,r3,255
mac_addr[5]);
8001870: e13ffd17 ldw r4,-12(fp)
8001874: 21000144 addi r4,r4,5
8001878: 21000003 ldbu r4,0(r4)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
800187c: 21003fcc andi r4,r4,255
8001880: d9000215 stw r4,8(sp)
8001884: d8c00115 stw r3,4(sp)
8001888: d8800015 stw r2,0(sp)
800188c: 01020134 movhi r4,2052
8001890: 211bf704 addi r4,r4,28636
8001894: 8002c780 call 8002c78 <printf>
error = 0;
8001898: e03fff15 stw zero,-4(fp)
}
return error;
800189c: e0bfff17 ldw r2,-4(fp)
}
80018a0: e037883a mov sp,fp
80018a4: dfc00117 ldw ra,4(sp)
80018a8: df000017 ldw fp,0(sp)
80018ac: dec00204 addi sp,sp,8
80018b0: f800283a ret
080018b4 <get_board_mac_addr>:
*
* Read the MAC address in a board specific way
*
*/
error_t get_board_mac_addr(unsigned char mac_addr[6])
{
80018b4: defff804 addi sp,sp,-32
80018b8: dfc00715 stw ra,28(sp)
80018bc: df000615 stw fp,24(sp)
80018c0: df000604 addi fp,sp,24
80018c4: e13ffd15 stw r4,-12(fp)
error_t error = 0;
80018c8: e03fff15 stw zero,-4(fp)
alt_u32 signature;
/* Get the flash sector with the MAC address. */
error = FindLastFlashSectorOffset(&last_flash_sector_offset);
80018cc: d1203a04 addi r4,gp,-32536
80018d0: 8001a540 call 8001a54 <FindLastFlashSectorOffset>
80018d4: e0bfff15 stw r2,-4(fp)
if (!error)
80018d8: e0bfff17 ldw r2,-4(fp)
80018dc: 1000041e bne r2,zero,80018f0 <get_board_mac_addr+0x3c>
last_flash_sector = EXT_FLASH_AVL_MEM_BASE + last_flash_sector_offset;
80018e0: d0e03a17 ldw r3,-32536(gp)
80018e4: 00850034 movhi r2,5120
80018e8: 1885883a add r2,r3,r2
80018ec: d0a03b15 stw r2,-32532(gp)
* valid network settings are present, indicated by a signature of 0x00005afe at
* the first address of the last flash sector. This hex value is chosen as the
* signature since it looks like the english word "SAFE", meaning that it is
* safe to use these network address values.
*/
if (!error)
80018f0: e0bfff17 ldw r2,-4(fp)
80018f4: 1000081e bne r2,zero,8001918 <get_board_mac_addr+0x64>
{
signature = IORD_32DIRECT(last_flash_sector, 0);
80018f8: d0a03b17 ldw r2,-32532(gp)
80018fc: 10800037 ldwio r2,0(r2)
8001900: e0bffe15 stw r2,-8(fp)
if (signature != 0x00005afe)
8001904: e0bffe17 ldw r2,-8(fp)
8001908: 1096bfa0 cmpeqi r2,r2,23294
800190c: 1000021e bne r2,zero,8001918 <get_board_mac_addr+0x64>
{
error = generate_and_store_mac_addr();
8001910: 80015c80 call 80015c8 <generate_and_store_mac_addr>
8001914: e0bfff15 stw r2,-4(fp)
}
}
if (!error)
8001918: e0bfff17 ldw r2,-4(fp)
800191c: 1000471e bne r2,zero,8001a3c <get_board_mac_addr+0x188>
{
mac_addr[0] = IORD_8DIRECT(last_flash_sector, 4);
8001920: d0a03b17 ldw r2,-32532(gp)
8001924: 10800104 addi r2,r2,4
8001928: 10800023 ldbuio r2,0(r2)
800192c: 10803fcc andi r2,r2,255
8001930: 1007883a mov r3,r2
8001934: e0bffd17 ldw r2,-12(fp)
8001938: 10c00005 stb r3,0(r2)
mac_addr[1] = IORD_8DIRECT(last_flash_sector, 5);
800193c: d0a03b17 ldw r2,-32532(gp)
8001940: 10800144 addi r2,r2,5
8001944: 10800023 ldbuio r2,0(r2)
8001948: 10c03fcc andi r3,r2,255
800194c: e0bffd17 ldw r2,-12(fp)
8001950: 10800044 addi r2,r2,1
8001954: 10c00005 stb r3,0(r2)
mac_addr[2] = IORD_8DIRECT(last_flash_sector, 6);
8001958: d0a03b17 ldw r2,-32532(gp)
800195c: 10800184 addi r2,r2,6
8001960: 10800023 ldbuio r2,0(r2)
8001964: 10c03fcc andi r3,r2,255
8001968: e0bffd17 ldw r2,-12(fp)
800196c: 10800084 addi r2,r2,2
8001970: 10c00005 stb r3,0(r2)
mac_addr[3] = IORD_8DIRECT(last_flash_sector, 7);
8001974: d0a03b17 ldw r2,-32532(gp)
8001978: 108001c4 addi r2,r2,7
800197c: 10800023 ldbuio r2,0(r2)
8001980: 10c03fcc andi r3,r2,255
8001984: e0bffd17 ldw r2,-12(fp)
8001988: 108000c4 addi r2,r2,3
800198c: 10c00005 stb r3,0(r2)
mac_addr[4] = IORD_8DIRECT(last_flash_sector, 8);
8001990: d0a03b17 ldw r2,-32532(gp)
8001994: 10800204 addi r2,r2,8
8001998: 10800023 ldbuio r2,0(r2)
800199c: 10c03fcc andi r3,r2,255
80019a0: e0bffd17 ldw r2,-12(fp)
80019a4: 10800104 addi r2,r2,4
80019a8: 10c00005 stb r3,0(r2)
mac_addr[5] = IORD_8DIRECT(last_flash_sector, 9);
80019ac: d0a03b17 ldw r2,-32532(gp)
80019b0: 10800244 addi r2,r2,9
80019b4: 10800023 ldbuio r2,0(r2)
80019b8: 10c03fcc andi r3,r2,255
80019bc: e0bffd17 ldw r2,-12(fp)
80019c0: 10800144 addi r2,r2,5
80019c4: 10c00005 stb r3,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
mac_addr[0],
80019c8: e0bffd17 ldw r2,-12(fp)
80019cc: 10800003 ldbu r2,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
80019d0: 11403fcc andi r5,r2,255
mac_addr[1],
80019d4: e0bffd17 ldw r2,-12(fp)
80019d8: 10800044 addi r2,r2,1
80019dc: 10800003 ldbu r2,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
80019e0: 11803fcc andi r6,r2,255
mac_addr[2],
80019e4: e0bffd17 ldw r2,-12(fp)
80019e8: 10800084 addi r2,r2,2
80019ec: 10800003 ldbu r2,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
80019f0: 11c03fcc andi r7,r2,255
mac_addr[3],
80019f4: e0bffd17 ldw r2,-12(fp)
80019f8: 108000c4 addi r2,r2,3
80019fc: 10800003 ldbu r2,0(r2)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
8001a00: 10803fcc andi r2,r2,255
mac_addr[4],
8001a04: e0fffd17 ldw r3,-12(fp)
8001a08: 18c00104 addi r3,r3,4
8001a0c: 18c00003 ldbu r3,0(r3)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
8001a10: 18c03fcc andi r3,r3,255
mac_addr[5]);
8001a14: e13ffd17 ldw r4,-12(fp)
8001a18: 21000144 addi r4,r4,5
8001a1c: 21000003 ldbu r4,0(r4)
printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n",
8001a20: 21003fcc andi r4,r4,255
8001a24: d9000215 stw r4,8(sp)
8001a28: d8c00115 stw r3,4(sp)
8001a2c: d8800015 stw r2,0(sp)
8001a30: 01020134 movhi r4,2052
8001a34: 211bf704 addi r4,r4,28636
8001a38: 8002c780 call 8002c78 <printf>
}
return error;
8001a3c: e0bfff17 ldw r2,-4(fp)
}
8001a40: e037883a mov sp,fp
8001a44: dfc00117 ldw ra,4(sp)
8001a48: df000017 ldw fp,0(sp)
8001a4c: dec00204 addi sp,sp,8
8001a50: f800283a ret
08001a54 <FindLastFlashSectorOffset>:
* in pLastFlashSectorOffset.
*/
int FindLastFlashSectorOffset(
alt_u32 *pLastFlashSectorOffset)
{
8001a54: defff304 addi sp,sp,-52
8001a58: dfc00c15 stw ra,48(sp)
8001a5c: df000b15 stw fp,44(sp)
8001a60: df000b04 addi fp,sp,44
8001a64: e13ff515 stw r4,-44(fp)
flash_region *regions;
int numRegions;
flash_region *pLastRegion;
int lastFlashSectorOffset;
int n;
int error = 0;
8001a68: e03ffc15 stw zero,-16(fp)
/* Open the flash device. */
fd = alt_flash_open_dev(EXT_FLASH_AVL_MEM_NAME);
8001a6c: 01020134 movhi r4,2052
8001a70: 211bdd04 addi r4,r4,28532
8001a74: 800f7e40 call 800f7e4 <alt_flash_open_dev>
8001a78: e0bffb15 stw r2,-20(fp)
if (fd <= 0)
8001a7c: e0bffb17 ldw r2,-20(fp)
8001a80: 1000021e bne r2,zero,8001a8c <FindLastFlashSectorOffset+0x38>
error = -1;
8001a84: 00bfffc4 movi r2,-1
8001a88: e0bffc15 stw r2,-16(fp)
/* Get the flash info. */
if (!error)
8001a8c: e0bffc17 ldw r2,-16(fp)
8001a90: 10000d1e bne r2,zero,8001ac8 <FindLastFlashSectorOffset+0x74>
8001a94: e0bffb17 ldw r2,-20(fp)
8001a98: e0bffa15 stw r2,-24(fp)
8001a9c: e0bff704 addi r2,fp,-36
8001aa0: e0bff915 stw r2,-28(fp)
8001aa4: e0bff604 addi r2,fp,-40
8001aa8: e0bff815 stw r2,-32(fp)
*/
static __inline__ int __attribute__ ((always_inline)) alt_get_flash_info(
alt_flash_fd* fd, flash_region** info,
int* number_of_regions)
{
return fd->get_info( fd, info, number_of_regions);
8001aac: e0bffa17 ldw r2,-24(fp)
8001ab0: 10800717 ldw r2,28(r2)
8001ab4: e1bff817 ldw r6,-32(fp)
8001ab8: e17ff917 ldw r5,-28(fp)
8001abc: e13ffa17 ldw r4,-24(fp)
8001ac0: 103ee83a callr r2
error = alt_get_flash_info(fd, &regions, &numRegions);
8001ac4: e0bffc15 stw r2,-16(fp)
/* Find the last flash sector. */
if (!error)
8001ac8: e0bffc17 ldw r2,-16(fp)
8001acc: 1000211e bne r2,zero,8001b54 <FindLastFlashSectorOffset+0x100>
{
pLastRegion = &(regions[0]);
8001ad0: e0bff717 ldw r2,-36(fp)
8001ad4: e0bfff15 stw r2,-4(fp)
for (n = 1; n < numRegions; n++)
8001ad8: 00800044 movi r2,1
8001adc: e0bffd15 stw r2,-12(fp)
8001ae0: 00001006 br 8001b24 <FindLastFlashSectorOffset+0xd0>
{
if (regions[n].offset > pLastRegion->offset)
8001ae4: e0fff717 ldw r3,-36(fp)
8001ae8: e0bffd17 ldw r2,-12(fp)
8001aec: 1004913a slli r2,r2,4
8001af0: 1885883a add r2,r3,r2
8001af4: 10800017 ldw r2,0(r2)
8001af8: e0ffff17 ldw r3,-4(fp)
8001afc: 18c00017 ldw r3,0(r3)
8001b00: 1880050e bge r3,r2,8001b18 <FindLastFlashSectorOffset+0xc4>
pLastRegion = &(regions[n]);
8001b04: e0fff717 ldw r3,-36(fp)
8001b08: e0bffd17 ldw r2,-12(fp)
8001b0c: 1004913a slli r2,r2,4
8001b10: 1885883a add r2,r3,r2
8001b14: e0bfff15 stw r2,-4(fp)
for (n = 1; n < numRegions; n++)
8001b18: e0bffd17 ldw r2,-12(fp)
8001b1c: 10800044 addi r2,r2,1
8001b20: e0bffd15 stw r2,-12(fp)
8001b24: e0bff617 ldw r2,-40(fp)
8001b28: e0fffd17 ldw r3,-12(fp)
8001b2c: 18bfed16 blt r3,r2,8001ae4 <FindLastFlashSectorOffset+0x90>
}
lastFlashSectorOffset = pLastRegion->offset
8001b30: e0bfff17 ldw r2,-4(fp)
8001b34: 10c00017 ldw r3,0(r2)
+ pLastRegion->region_size
8001b38: e0bfff17 ldw r2,-4(fp)
8001b3c: 10800117 ldw r2,4(r2)
8001b40: 1887883a add r3,r3,r2
- pLastRegion->block_size;
8001b44: e0bfff17 ldw r2,-4(fp)
8001b48: 10800317 ldw r2,12(r2)
lastFlashSectorOffset = pLastRegion->offset
8001b4c: 1885c83a sub r2,r3,r2
8001b50: e0bffe15 stw r2,-8(fp)
}
/* Return results. */
if (!error)
8001b54: e0bffc17 ldw r2,-16(fp)
8001b58: 1000031e bne r2,zero,8001b68 <FindLastFlashSectorOffset+0x114>
*pLastFlashSectorOffset = lastFlashSectorOffset;
8001b5c: e0fffe17 ldw r3,-8(fp)
8001b60: e0bff517 ldw r2,-44(fp)
8001b64: 10c00015 stw r3,0(r2)
return (error);
8001b68: e0bffc17 ldw r2,-16(fp)
}
8001b6c: e037883a mov sp,fp
8001b70: dfc00117 ldw ra,4(sp)
8001b74: df000017 ldw fp,0(sp)
8001b78: dec00204 addi sp,sp,8
8001b7c: f800283a ret
08001b80 <sensor_command_bit>:
#include "dev_commands.h"
#include "sensor.h"
void sensor_command_bit(alt_u32 base, alt_u8 bitmask, alt_u8 state)
{
8001b80: defffb04 addi sp,sp,-20
8001b84: df000415 stw fp,16(sp)
8001b88: df000404 addi fp,sp,16
8001b8c: e13ffe15 stw r4,-8(fp)
8001b90: 2805883a mov r2,r5
8001b94: 3007883a mov r3,r6
8001b98: e0bffd05 stb r2,-12(fp)
8001b9c: 1805883a mov r2,r3
8001ba0: e0bffc05 stb r2,-16(fp)
alt_u8 tmp = IORD_8DIRECT(base, SENSOR_REG_COMMAND);
8001ba4: e0bffe17 ldw r2,-8(fp)
8001ba8: 10800023 ldbuio r2,0(r2)
8001bac: 10803fcc andi r2,r2,255
8001bb0: e0bfffc5 stb r2,-1(fp)
if (state)
8001bb4: e0bffc03 ldbu r2,-16(fp)
8001bb8: 10000526 beq r2,zero,8001bd0 <sensor_command_bit+0x50>
tmp |= bitmask;
8001bbc: e0ffffc3 ldbu r3,-1(fp)
8001bc0: e0bffd03 ldbu r2,-12(fp)
8001bc4: 1884b03a or r2,r3,r2
8001bc8: e0bfffc5 stb r2,-1(fp)
8001bcc: 00000606 br 8001be8 <sensor_command_bit+0x68>
else
tmp &= ~bitmask;
8001bd0: e0bffd03 ldbu r2,-12(fp)
8001bd4: 0084303a nor r2,zero,r2
8001bd8: 1007883a mov r3,r2
8001bdc: e0bfffc3 ldbu r2,-1(fp)
8001be0: 1884703a and r2,r3,r2
8001be4: e0bfffc5 stb r2,-1(fp)
IOWR_8DIRECT(base, SENSOR_REG_COMMAND, tmp);
8001be8: e0bffe17 ldw r2,-8(fp)
8001bec: e0ffffc3 ldbu r3,-1(fp)
8001bf0: 10c00025 stbio r3,0(r2)
}
8001bf4: 0001883a nop
8001bf8: e037883a mov sp,fp
8001bfc: df000017 ldw fp,0(sp)
8001c00: dec00104 addi sp,sp,4
8001c04: f800283a ret
08001c08 <sensor_preconfigure>:
void sensor_preconfigure(alt_u32 base)
{
8001c08: defffd04 addi sp,sp,-12
8001c0c: dfc00215 stw ra,8(sp)
8001c10: df000115 stw fp,4(sp)
8001c14: df000104 addi fp,sp,4
8001c18: e13fff15 stw r4,-4(fp)
printf(" *** Preconfiguring sensor module... \n");
8001c1c: 01020134 movhi r4,2052
8001c20: 211c0604 addi r4,r4,28696
8001c24: 8002d9c0 call 8002d9c <puts>
sensor_command(base, 0); //disable
8001c28: e0bfff17 ldw r2,-4(fp)
8001c2c: 0007883a mov r3,zero
8001c30: 10c00025 stbio r3,0(r2)
sensor_set_sensorclk(base, 6); //sensor clock - 3.57 MHz
8001c34: e0bfff17 ldw r2,-4(fp)
8001c38: 10800084 addi r2,r2,2
8001c3c: 1007883a mov r3,r2
8001c40: 00800184 movi r2,6
8001c44: 18800025 stbio r2,0(r3)
sensor_set_adccnv(base, 31); //conversion delay - default
8001c48: e0bfff17 ldw r2,-4(fp)
8001c4c: 108000c4 addi r2,r2,3
8001c50: 1007883a mov r3,r2
8001c54: 008007c4 movi r2,31
8001c58: 18800025 stbio r2,0(r3)
sensor_set_delay(base, 1); //trigger delay - default
8001c5c: e0bfff17 ldw r2,-4(fp)
8001c60: 10800104 addi r2,r2,4
8001c64: 1007883a mov r3,r2
8001c68: 00800044 movi r2,1
8001c6c: 1880002d sthio r2,0(r3)
sensor_set_shutter(base, 100); //integration time - dummy default
8001c70: e0bfff17 ldw r2,-4(fp)
8001c74: 10800184 addi r2,r2,6
8001c78: 1007883a mov r3,r2
8001c7c: 00801904 movi r2,100
8001c80: 1880002d sthio r2,0(r3)
sensor_set_serspeed(base, 50); //synchro serial port - 1 Mbps
8001c84: e0bfff17 ldw r2,-4(fp)
8001c88: 10800204 addi r2,r2,8
8001c8c: 1007883a mov r3,r2
8001c90: 00800c84 movi r2,50
8001c94: 18800025 stbio r2,0(r3)
sensor_set_header_anydata(base, 0x00); //should be 0
8001c98: e0bfff17 ldw r2,-4(fp)
8001c9c: 10800244 addi r2,r2,9
8001ca0: 0007883a mov r3,zero
8001ca4: 10c00025 stbio r3,0(r2)
sensor_set_header_cmd(base, COMMAND_DATA_TRANSFER); //command header, must be this one
8001ca8: e0bfff17 ldw r2,-4(fp)
8001cac: 10800284 addi r2,r2,10
8001cb0: 1007883a mov r3,r2
8001cb4: 00a00004 movi r2,-32768
8001cb8: 1880002d sthio r2,0(r3)
sensor_command(base, 1); //enable, gain low, SCLK full
8001cbc: e0bfff17 ldw r2,-4(fp)
8001cc0: 00c00044 movi r3,1
8001cc4: 10c00025 stbio r3,0(r2)
sensor_set_cluster_threshold(base, 10); //default cluster threshold 10
8001cc8: e0bfff17 ldw r2,-4(fp)
8001ccc: 10800304 addi r2,r2,12
8001cd0: 1007883a mov r3,r2
8001cd4: 00800284 movi r2,10
8001cd8: 18800025 stbio r2,0(r3)
sensor_set_cluster_size(base, 4); //default cluster size 4
8001cdc: e0bfff17 ldw r2,-4(fp)
8001ce0: 10800344 addi r2,r2,13
8001ce4: 1007883a mov r3,r2
8001ce8: 00800104 movi r2,4
8001cec: 18800025 stbio r2,0(r3)
sensor_set_in_algo_threshold(base, 4); //default algo threshold 4
8001cf0: e0bfff17 ldw r2,-4(fp)
8001cf4: 10800384 addi r2,r2,14
8001cf8: 1007883a mov r3,r2
8001cfc: 00800104 movi r2,4
8001d00: 18800025 stbio r2,0(r3)
}
8001d04: 0001883a nop
8001d08: e037883a mov sp,fp
8001d0c: dfc00117 ldw ra,4(sp)
8001d10: df000017 ldw fp,0(sp)
8001d14: dec00204 addi sp,sp,8
8001d18: f800283a ret
08001d1c <ss_reset_connection>:
// ********************************************************
void ss_reset_connection(SSConn* conn) //called e.g. after closing a socket
{
8001d1c: defffe04 addi sp,sp,-8
8001d20: df000115 stw fp,4(sp)
8001d24: df000104 addi fp,sp,4
8001d28: e13fff15 stw r4,-4(fp)
conn->fd_conn = -1;
8001d2c: e0bfff17 ldw r2,-4(fp)
8001d30: 00ffffc4 movi r3,-1
8001d34: 10c00215 stw r3,8(r2)
conn->state = LISTENING;
8001d38: e0bfff17 ldw r2,-4(fp)
8001d3c: 00c00044 movi r3,1
8001d40: 10c00015 stw r3,0(r2)
return;
8001d44: 0001883a nop
}
8001d48: e037883a mov sp,fp
8001d4c: df000017 ldw fp,0(sp)
8001d50: dec00104 addi sp,sp,4
8001d54: f800283a ret
08001d58 <ss_initialize_connection>:
void ss_initialize_connection(SSConn* conn) //called only at initialization
{
8001d58: defffe04 addi sp,sp,-8
8001d5c: df000115 stw fp,4(sp)
8001d60: df000104 addi fp,sp,4
8001d64: e13fff15 stw r4,-4(fp)
conn->fd_conn = -1;
8001d68: e0bfff17 ldw r2,-4(fp)
8001d6c: 00ffffc4 movi r3,-1
8001d70: 10c00215 stw r3,8(r2)
conn->fd_listen = -1;
8001d74: e0bfff17 ldw r2,-4(fp)
8001d78: 00ffffc4 movi r3,-1
8001d7c: 10c00115 stw r3,4(r2)
conn->listenport = -1;
8001d80: e0bfff17 ldw r2,-4(fp)
8001d84: 00ffffc4 movi r3,-1
8001d88: 10c00315 stw r3,12(r2)
conn->state = FREE;
8001d8c: e0bfff17 ldw r2,-4(fp)
8001d90: 10000015 stw zero,0(r2)
return;
8001d94: 0001883a nop
}
8001d98: e037883a mov sp,fp
8001d9c: df000017 ldw fp,0(sp)
8001da0: dec00104 addi sp,sp,4
8001da4: f800283a ret
08001da8 <ss_handle_accept>:
void ss_handle_accept(SSConn* conn)
{
8001da8: defff604 addi sp,sp,-40
8001dac: dfc00915 stw ra,36(sp)
8001db0: df000815 stw fp,32(sp)
8001db4: df000804 addi fp,sp,32
8001db8: e13ff815 stw r4,-32(fp)
int socket;
int len;
struct sockaddr_in incoming_addr;
INT8U err;
OSMutexPend(mutex, 0, &err);
8001dbc: d0a03c17 ldw r2,-32528(gp)
8001dc0: e0fff9c4 addi r3,fp,-25
8001dc4: 180d883a mov r6,r3
8001dc8: 000b883a mov r5,zero
8001dcc: 1009883a mov r4,r2
8001dd0: 8013cdc0 call 8013cdc <OSMutexPend>
len = sizeof(incoming_addr);
8001dd4: 00800404 movi r2,16
8001dd8: e0bffe15 stw r2,-8(fp)
//Close old connection if needed
if ((conn)->fd_conn != -1)
8001ddc: e0bff817 ldw r2,-32(fp)
8001de0: 10800217 ldw r2,8(r2)
8001de4: 10bfffe0 cmpeqi r2,r2,-1
8001de8: 1000091e bne r2,zero,8001e10 <ss_handle_accept+0x68>
{
printf("[ss_handle_accept] closing old connection\n");
8001dec: 01020134 movhi r4,2052
8001df0: 211c1604 addi r4,r4,28760
8001df4: 8002d9c0 call 8002d9c <puts>
close(conn->fd_conn);
8001df8: e0bff817 ldw r2,-32(fp)
8001dfc: 10800217 ldw r2,8(r2)
8001e00: 1009883a mov r4,r2
8001e04: 8022a600 call 8022a60 <close>
ss_reset_connection(conn);
8001e08: e13ff817 ldw r4,-32(fp)
8001e0c: 8001d1c0 call 8001d1c <ss_reset_connection>
}
if((socket=accept(conn->fd_listen,(struct sockaddr*)&incoming_addr,&len))<0)
8001e10: e0bff817 ldw r2,-32(fp)
8001e14: 10800117 ldw r2,4(r2)
8001e18: e13ffe04 addi r4,fp,-8
8001e1c: e0fffa04 addi r3,fp,-24
8001e20: 200d883a mov r6,r4
8001e24: 180b883a mov r5,r3
8001e28: 1009883a mov r4,r2
8001e2c: 80262140 call 8026214 <bsd_accept>
8001e30: e0bfff15 stw r2,-4(fp)
8001e34: e0bfff17 ldw r2,-4(fp)
8001e38: 10000c16 blt r2,zero,8001e6c <ss_handle_accept+0xc4>
//alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE,
// "[ss_handle_accept] accept failed");
}
else
{
(conn)->fd_conn = socket;
8001e3c: e0bff817 ldw r2,-32(fp)
8001e40: e0ffff17 ldw r3,-4(fp)
8001e44: 10c00215 stw r3,8(r2)
(conn)->state = CONNECTED;
8001e48: e0bff817 ldw r2,-32(fp)
8001e4c: 00c00084 movi r3,2
8001e50: 10c00015 stw r3,0(r2)
printf("[ss_handle_accept] accepted connection request from %s\n",
8001e54: e13ffb17 ldw r4,-20(fp)
8001e58: 80268fc0 call 80268fc <bsd_inet_ntoa>
8001e5c: 100b883a mov r5,r2
8001e60: 01020134 movhi r4,2052
8001e64: 211c2104 addi r4,r4,28804
8001e68: 8002c780 call 8002c78 <printf>
inet_ntoa(incoming_addr.sin_addr));
}
OSMutexPost(mutex);
8001e6c: d0a03c17 ldw r2,-32528(gp)
8001e70: 1009883a mov r4,r2
8001e74: 80142380 call 8014238 <OSMutexPost>
return;
8001e78: 0001883a nop
}
8001e7c: e037883a mov sp,fp
8001e80: dfc00117 ldw ra,4(sp)
8001e84: df000017 ldw fp,0(sp)
8001e88: dec00204 addi sp,sp,8
8001e8c: f800283a ret
08001e90 <SSListenerTask>:
/*
* Listener Task()
*/
void SSListenerTask(void* param)
{
8001e90: deffb304 addi sp,sp,-308
8001e94: dfc04c15 stw ra,304(sp)
8001e98: df004b15 stw fp,300(sp)
8001e9c: df004b04 addi fp,sp,300
8001ea0: e13fb615 stw r4,-296(fp)
int max_socket = 0;
8001ea4: e03fff15 stw zero,-4(fp)
BSD_TIMEVAL_T timeout;
INT8U err;
OSMutexPend(mutex, 0, &err); //wrap initialization in a mutex - just in case...
8001ea8: d0a03c17 ldw r2,-32528(gp)
8001eac: e0fff8c4 addi r3,fp,-29
8001eb0: 180d883a mov r6,r3
8001eb4: 000b883a mov r5,zero
8001eb8: 1009883a mov r4,r2
8001ebc: 8013cdc0 call 8013cdc <OSMutexPend>
timeout.tv_sec = 0;
8001ec0: e03ff915 stw zero,-28(fp)
8001ec4: e03ffa15 stw zero,-24(fp)
timeout.tv_usec = 100000;
8001ec8: 008000b4 movhi r2,2
8001ecc: 10a1a804 addi r2,r2,-31072
8001ed0: e0bffb15 stw r2,-20(fp)
fd_set readfds; //set of descriptors
for (int ch = 0; ch < NR_CHANNELS; ch++)
8001ed4: e03ffe15 stw zero,-8(fp)
8001ed8: 00000d06 br 8001f10 <SSListenerTask+0x80>
if ((connections[ch].fd_listen = socket(AF_INET, SOCK_STREAM, 0)) < 0)
8001edc: 000d883a mov r6,zero
8001ee0: 01400044 movi r5,1
8001ee4: 01000084 movi r4,2
8001ee8: 802ba700 call 802ba70 <t_socket>
8001eec: 1009883a mov r4,r2
8001ef0: e0bffe17 ldw r2,-8(fp)
8001ef4: 1006913a slli r3,r2,4
8001ef8: 00820174 movhi r2,2053
8001efc: 1885883a add r2,r3,r2
8001f00: 11336115 stw r4,-12924(r2)
for (int ch = 0; ch < NR_CHANNELS; ch++)
8001f04: e0bffe17 ldw r2,-8(fp)
8001f08: 10800044 addi r2,r2,1
8001f0c: e0bffe15 stw r2,-8(fp)
8001f10: e0bffe17 ldw r2,-8(fp)
8001f14: 00bff10e bge zero,r2,8001edc <SSListenerTask+0x4c>
//alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE,"[sss_task] Socket creation failed");
}
//Binding etc. is done by ethernet_listen()
OSMutexPost(mutex);
8001f18: d0a03c17 ldw r2,-32528(gp)
8001f1c: 1009883a mov r4,r2
8001f20: 80142380 call 8014238 <OSMutexPost>
//Now run in loop to handle incoming requests on all listening ports
while(1)
{
FD_ZERO(&readfds);
8001f24: e03fb715 stw zero,-292(fp)
for (int ch = 0; ch < NR_CHANNELS; ch++)
8001f28: e03ffd15 stw zero,-12(fp)
8001f2c: 00002006 br 8001fb0 <SSListenerTask+0x120>
if (connections[ch].listenport >= 0)
8001f30: e0bffd17 ldw r2,-12(fp)
8001f34: 1006913a slli r3,r2,4
8001f38: 00820174 movhi r2,2053
8001f3c: 1885883a add r2,r3,r2
8001f40: 10b36317 ldw r2,-12916(r2)
8001f44: 10001716 blt r2,zero,8001fa4 <SSListenerTask+0x114>
{
FD_SET(connections[ch].fd_listen, &readfds);
8001f48: e0bffd17 ldw r2,-12(fp)
8001f4c: 1006913a slli r3,r2,4
8001f50: 00820174 movhi r2,2053
8001f54: 1885883a add r2,r3,r2
8001f58: 10b36117 ldw r2,-12924(r2)
8001f5c: e0ffb704 addi r3,fp,-292
8001f60: 180b883a mov r5,r3
8001f64: 1009883a mov r4,r2
8001f68: 8030b180 call 8030b18 <ifd_set>
if (connections[ch].fd_listen >= max_socket)
8001f6c: e0bffd17 ldw r2,-12(fp)
8001f70: 1006913a slli r3,r2,4
8001f74: 00820174 movhi r2,2053
8001f78: 1885883a add r2,r3,r2
8001f7c: 10f36117 ldw r3,-12924(r2)
8001f80: e0bfff17 ldw r2,-4(fp)
8001f84: 18800716 blt r3,r2,8001fa4 <SSListenerTask+0x114>
max_socket = connections[ch].fd_listen+1;
8001f88: e0bffd17 ldw r2,-12(fp)
8001f8c: 1006913a slli r3,r2,4
8001f90: 00820174 movhi r2,2053
8001f94: 1885883a add r2,r3,r2
8001f98: 10b36117 ldw r2,-12924(r2)
8001f9c: 10800044 addi r2,r2,1
8001fa0: e0bfff15 stw r2,-4(fp)
for (int ch = 0; ch < NR_CHANNELS; ch++)
8001fa4: e0bffd17 ldw r2,-12(fp)
8001fa8: 10800044 addi r2,r2,1
8001fac: e0bffd15 stw r2,-12(fp)
8001fb0: e0bffd17 ldw r2,-12(fp)
8001fb4: 00bfde0e bge zero,r2,8001f30 <SSListenerTask+0xa0>
}
if (max_socket == 0)
8001fb8: e0bfff17 ldw r2,-4(fp)
8001fbc: 1000031e bne r2,zero,8001fcc <SSListenerTask+0x13c>
TK_SLEEP(10); //just sleep a bit if nothing to do
8001fc0: 010002c4 movi r4,11
8001fc4: 801730c0 call 801730c <OSTimeDly>
8001fc8: 003fd606 br 8001f24 <SSListenerTask+0x94>
else
{
select(max_socket, &readfds, NULL, NULL, &timeout); //we must timeout from time to time to find newly set-up channels
8001fcc: e0ffb704 addi r3,fp,-292
8001fd0: e0bff904 addi r2,fp,-28
8001fd4: d8800015 stw r2,0(sp)
8001fd8: 000f883a mov r7,zero
8001fdc: 000d883a mov r6,zero
8001fe0: 180b883a mov r5,r3
8001fe4: e13fff17 ldw r4,-4(fp)
8001fe8: 8026a740 call 8026a74 <bsd_select>
for (int ch = 0; ch < NR_CHANNELS; ch++)
8001fec: e03ffc15 stw zero,-16(fp)
8001ff0: 00001406 br 8002044 <SSListenerTask+0x1b4>
if (FD_ISSET(connections[ch].fd_listen, &readfds))
8001ff4: e0bffc17 ldw r2,-16(fp)
8001ff8: 1006913a slli r3,r2,4
8001ffc: 00820174 movhi r2,2053
8002000: 1885883a add r2,r3,r2
8002004: 10b36117 ldw r2,-12924(r2)
8002008: e0ffb704 addi r3,fp,-292
800200c: 180b883a mov r5,r3
8002010: 1009883a mov r4,r2
8002014: 8030b8c0 call 8030b8c <ifd_isset>
8002018: 10000726 beq r2,zero,8002038 <SSListenerTask+0x1a8>
ss_handle_accept(&(connections[ch]));
800201c: e0bffc17 ldw r2,-16(fp)
8002020: 1006913a slli r3,r2,4
8002024: 00820174 movhi r2,2053
8002028: 10b36004 addi r2,r2,-12928
800202c: 1885883a add r2,r3,r2
8002030: 1009883a mov r4,r2
8002034: 8001da80 call 8001da8 <ss_handle_accept>
for (int ch = 0; ch < NR_CHANNELS; ch++)
8002038: e0bffc17 ldw r2,-16(fp)
800203c: 10800044 addi r2,r2,1
8002040: e0bffc15 stw r2,-16(fp)
8002044: e0bffc17 ldw r2,-16(fp)
8002048: 00bfea0e bge zero,r2,8001ff4 <SSListenerTask+0x164>
FD_ZERO(&readfds);
800204c: 003fb506 br 8001f24 <SSListenerTask+0x94>
08002050 <ethernet_init>:
// ****************** User interface ********************
int ethernet_init()
{
8002050: defffc04 addi sp,sp,-16
8002054: dfc00315 stw ra,12(sp)
8002058: df000215 stw fp,8(sp)
800205c: df000204 addi fp,sp,8
INT8U err;
mutex = OSMutexCreate(SS_LISTENER_TASK_PRIORITY-1, &err);
8002060: e0bffec4 addi r2,fp,-5
8002064: 100b883a mov r5,r2
8002068: 01000204 movi r4,8
800206c: 801389c0 call 801389c <OSMutexCreate>
8002070: d0a03c15 stw r2,-32528(gp)
for (int ch = 0; ch < NR_CHANNELS; ch++)
8002074: e03fff15 stw zero,-4(fp)
8002078: 00000a06 br 80020a4 <ethernet_init+0x54>
ss_initialize_connection(&(connections[ch]));
800207c: e0bfff17 ldw r2,-4(fp)
8002080: 1006913a slli r3,r2,4
8002084: 00820174 movhi r2,2053
8002088: 10b36004 addi r2,r2,-12928
800208c: 1885883a add r2,r3,r2
8002090: 1009883a mov r4,r2
8002094: 8001d580 call 8001d58 <ss_initialize_connection>
for (int ch = 0; ch < NR_CHANNELS; ch++)
8002098: e0bfff17 ldw r2,-4(fp)
800209c: 10800044 addi r2,r2,1
80020a0: e0bfff15 stw r2,-4(fp)
80020a4: e0bfff17 ldw r2,-4(fp)
80020a8: 00bff40e bge zero,r2,800207c <ethernet_init+0x2c>
TK_NEWTASK(&sslistenertask);
80020ac: 01020174 movhi r4,2053
80020b0: 212e4e04 addi r4,r4,-18120
80020b4: 80290740 call 8029074 <TK_NEWTASK>
return 0;
80020b8: 0005883a mov r2,zero
}
80020bc: e037883a mov sp,fp
80020c0: dfc00117 ldw ra,4(sp)
80020c4: df000017 ldw fp,0(sp)
80020c8: dec00204 addi sp,sp,8
80020cc: f800283a ret
080020d0 <ethernet_listen>:
int ethernet_listen(int channel, int port)
{
80020d0: defff704 addi sp,sp,-36
80020d4: dfc00815 stw ra,32(sp)
80020d8: df000715 stw fp,28(sp)
80020dc: df000704 addi fp,sp,28
80020e0: e13ffa15 stw r4,-24(fp)
80020e4: e17ff915 stw r5,-28(fp)
struct sockaddr_in addr;
INT8U err;
OSMutexPend(mutex, 0, &err);
80020e8: d0a03c17 ldw r2,-32528(gp)
80020ec: e0fffbc4 addi r3,fp,-17
80020f0: 180d883a mov r6,r3
80020f4: 000b883a mov r5,zero
80020f8: 1009883a mov r4,r2
80020fc: 8013cdc0 call 8013cdc <OSMutexPend>
addr.sin_family = AF_INET;
8002100: 00800084 movi r2,2
8002104: e0bffc0d sth r2,-16(fp)
addr.sin_port = htons(port);
8002108: e0bff917 ldw r2,-28(fp)
800210c: 1005d23a srai r2,r2,8
8002110: 10803fcc andi r2,r2,255
8002114: 1007883a mov r3,r2
8002118: e0bff917 ldw r2,-28(fp)
800211c: 1004923a slli r2,r2,8
8002120: 1884b03a or r2,r3,r2
8002124: e0bffc8d sth r2,-14(fp)
addr.sin_addr.s_addr = INADDR_ANY;
8002128: e03ffd15 stw zero,-12(fp)
if (bind(connections[channel].fd_listen,(struct sockaddr *)&addr,sizeof(addr)) < 0)
800212c: e0bffa17 ldw r2,-24(fp)
8002130: 1006913a slli r3,r2,4
8002134: 00820174 movhi r2,2053
8002138: 1885883a add r2,r3,r2
800213c: 10b36117 ldw r2,-12924(r2)
8002140: e0fffc04 addi r3,fp,-16
8002144: 01800404 movi r6,16
8002148: 180b883a mov r5,r3
800214c: 1009883a mov r4,r2
8002150: 802baf00 call 802baf0 <t_bind>
8002154: 1000050e bge r2,zero,800216c <ethernet_listen+0x9c>
{
//alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE,"[sss_task] Bind failed");
OSMutexPost(mutex);
8002158: d0a03c17 ldw r2,-32528(gp)
800215c: 1009883a mov r4,r2
8002160: 80142380 call 8014238 <OSMutexPost>
return -1;
8002164: 00bfffc4 movi r2,-1
8002168: 00002306 br 80021f8 <ethernet_listen+0x128>
}
if (listen(connections[channel].fd_listen,1) < 0)
800216c: e0bffa17 ldw r2,-24(fp)
8002170: 1006913a slli r3,r2,4
8002174: 00820174 movhi r2,2053
8002178: 1885883a add r2,r3,r2
800217c: 10b36117 ldw r2,-12924(r2)
8002180: 01400044 movi r5,1
8002184: 1009883a mov r4,r2
8002188: 802bc500 call 802bc50 <t_listen>
800218c: 1000050e bge r2,zero,80021a4 <ethernet_listen+0xd4>
{
//alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE,"[sss_task] Listen failed");
OSMutexPost(mutex);
8002190: d0a03c17 ldw r2,-32528(gp)
8002194: 1009883a mov r4,r2
8002198: 80142380 call 8014238 <OSMutexPost>
return -2;
800219c: 00bfff84 movi r2,-2
80021a0: 00001506 br 80021f8 <ethernet_listen+0x128>
}
ss_reset_connection(&(connections[channel]));
80021a4: e0bffa17 ldw r2,-24(fp)
80021a8: 1006913a slli r3,r2,4
80021ac: 00820174 movhi r2,2053
80021b0: 10b36004 addi r2,r2,-12928
80021b4: 1885883a add r2,r3,r2
80021b8: 1009883a mov r4,r2
80021bc: 8001d1c0 call 8001d1c <ss_reset_connection>
connections[channel].listenport = port;
80021c0: e0bffa17 ldw r2,-24(fp)
80021c4: 1008913a slli r4,r2,4
80021c8: e0fff917 ldw r3,-28(fp)
80021cc: 00820174 movhi r2,2053
80021d0: 2085883a add r2,r4,r2
80021d4: 10f36315 stw r3,-12916(r2)
printf("[sss_task] Simple Socket Server listening on port %d\n", port);
80021d8: e17ff917 ldw r5,-28(fp)
80021dc: 01020134 movhi r4,2052
80021e0: 211c2f04 addi r4,r4,28860
80021e4: 8002c780 call 8002c78 <printf>
OSMutexPost(mutex);
80021e8: d0a03c17 ldw r2,-32528(gp)
80021ec: 1009883a mov r4,r2
80021f0: 80142380 call 8014238 <OSMutexPost>
return 0;
80021f4: 0005883a mov r2,zero
}
80021f8: e037883a mov sp,fp
80021fc: dfc00117 ldw ra,4(sp)
8002200: df000017 ldw fp,0(sp)
8002204: dec00204 addi sp,sp,8
8002208: f800283a ret
0800220c <ethernet_write>:
int ethernet_write(int channel, int size, unsigned char* data)
{
800220c: defff904 addi sp,sp,-28
8002210: dfc00615 stw ra,24(sp)
8002214: df000515 stw fp,20(sp)
8002218: df000504 addi fp,sp,20
800221c: e13ffd15 stw r4,-12(fp)
8002220: e17ffc15 stw r5,-16(fp)
8002224: e1bffb15 stw r6,-20(fp)
int result;
INT8U err;
OSMutexPend(mutex, 0, &err);
8002228: d0a03c17 ldw r2,-32528(gp)
800222c: e0fffec4 addi r3,fp,-5
8002230: 180d883a mov r6,r3
8002234: 000b883a mov r5,zero
8002238: 1009883a mov r4,r2
800223c: 8013cdc0 call 8013cdc <OSMutexPend>
if (connections[channel].fd_conn == -1) //socket is closed or channel unconfigured
8002240: e0bffd17 ldw r2,-12(fp)
8002244: 1006913a slli r3,r2,4
8002248: 00820174 movhi r2,2053
800224c: 1885883a add r2,r3,r2
8002250: 10b36217 ldw r2,-12920(r2)
8002254: 10bfffd8 cmpnei r2,r2,-1
8002258: 1000051e bne r2,zero,8002270 <ethernet_write+0x64>
{
OSMutexPost(mutex);
800225c: d0a03c17 ldw r2,-32528(gp)
8002260: 1009883a mov r4,r2
8002264: 80142380 call 8014238 <OSMutexPost>
return 0;
8002268: 0005883a mov r2,zero
800226c: 00002406 br 8002300 <ethernet_write+0xf4>
}
result = (int)send(connections[channel].fd_conn, data, size, 0);
8002270: e0bffd17 ldw r2,-12(fp)
8002274: 1006913a slli r3,r2,4
8002278: 00820174 movhi r2,2053
800227c: 1885883a add r2,r3,r2
8002280: 10b36217 ldw r2,-12920(r2)
8002284: 000f883a mov r7,zero
8002288: e1bffc17 ldw r6,-16(fp)
800228c: e17ffb17 ldw r5,-20(fp)
8002290: 1009883a mov r4,r2
8002294: 802cb9c0 call 802cb9c <t_send>
8002298: e0bfff15 stw r2,-4(fp)
if (result == -1)
800229c: e0bfff17 ldw r2,-4(fp)
80022a0: 10bfffd8 cmpnei r2,r2,-1
80022a4: 1000121e bne r2,zero,80022f0 <ethernet_write+0xe4>
{
printf("[ethernet_write] closing connection due to error\n");
80022a8: 01020134 movhi r4,2052
80022ac: 211c3d04 addi r4,r4,28916
80022b0: 8002d9c0 call 8002d9c <puts>
close(connections[channel].fd_conn); //close connection on error
80022b4: e0bffd17 ldw r2,-12(fp)
80022b8: 1006913a slli r3,r2,4
80022bc: 00820174 movhi r2,2053
80022c0: 1885883a add r2,r3,r2
80022c4: 10b36217 ldw r2,-12920(r2)
80022c8: 1009883a mov r4,r2
80022cc: 8022a600 call 8022a60 <close>
ss_reset_connection(&(connections[channel]));
80022d0: e0bffd17 ldw r2,-12(fp)
80022d4: 1006913a slli r3,r2,4
80022d8: 00820174 movhi r2,2053
80022dc: 10b36004 addi r2,r2,-12928
80022e0: 1885883a add r2,r3,r2
80022e4: 1009883a mov r4,r2
80022e8: 8001d1c0 call 8001d1c <ss_reset_connection>
result = 0;
80022ec: e03fff15 stw zero,-4(fp)
}
OSMutexPost(mutex);
80022f0: d0a03c17 ldw r2,-32528(gp)
80022f4: 1009883a mov r4,r2
80022f8: 80142380 call 8014238 <OSMutexPost>
return result;
80022fc: e0bfff17 ldw r2,-4(fp)
}
8002300: e037883a mov sp,fp
8002304: dfc00117 ldw ra,4(sp)
8002308: df000017 ldw fp,0(sp)
800230c: dec00204 addi sp,sp,8
8002310: f800283a ret
08002314 <ethernet_read>:
int ethernet_read(int channel, int size, unsigned char* data)
{
8002314: deffb304 addi sp,sp,-308
8002318: dfc04c15 stw ra,304(sp)
800231c: df004b15 stw fp,300(sp)
8002320: df004b04 addi fp,sp,300
8002324: e13fb815 stw r4,-288(fp)
8002328: e17fb715 stw r5,-292(fp)
800232c: e1bfb615 stw r6,-296(fp)
int max_socket;
BSD_TIMEVAL_T timeout;
int result;
INT8U err;
OSMutexPend(mutex, 0, &err);
8002330: d0a03c17 ldw r2,-32528(gp)
8002334: e0ffb9c4 addi r3,fp,-281
8002338: 180d883a mov r6,r3
800233c: 000b883a mov r5,zero
8002340: 1009883a mov r4,r2
8002344: 8013cdc0 call 8013cdc <OSMutexPend>
if (connections[channel].fd_conn == -1) //socket is closed or channel unconfigured
8002348: e0bfb817 ldw r2,-288(fp)
800234c: 1006913a slli r3,r2,4
8002350: 00820174 movhi r2,2053
8002354: 1885883a add r2,r3,r2
8002358: 10b36217 ldw r2,-12920(r2)
800235c: 10bfffd8 cmpnei r2,r2,-1
8002360: 1000051e bne r2,zero,8002378 <ethernet_read+0x64>
{
OSMutexPost(mutex);
8002364: d0a03c17 ldw r2,-32528(gp)
8002368: 1009883a mov r4,r2
800236c: 80142380 call 8014238 <OSMutexPost>
return 0;
8002370: 0005883a mov r2,zero
8002374: 00005006 br 80024b8 <ethernet_read+0x1a4>
}
//prepare call parameters
FD_ZERO(&readfds);
8002378: e03fbd15 stw zero,-268(fp)
FD_SET(connections[channel].fd_conn, &readfds);
800237c: e0bfb817 ldw r2,-288(fp)
8002380: 1006913a slli r3,r2,4
8002384: 00820174 movhi r2,2053
8002388: 1885883a add r2,r3,r2
800238c: 10b36217 ldw r2,-12920(r2)
8002390: e0ffbd04 addi r3,fp,-268
8002394: 180b883a mov r5,r3
8002398: 1009883a mov r4,r2
800239c: 8030b180 call 8030b18 <ifd_set>
max_socket = connections[channel].fd_conn+1;
80023a0: e0bfb817 ldw r2,-288(fp)
80023a4: 1006913a slli r3,r2,4
80023a8: 00820174 movhi r2,2053
80023ac: 1885883a add r2,r3,r2
80023b0: 10b36217 ldw r2,-12920(r2)
80023b4: 10800044 addi r2,r2,1
80023b8: e0bffe15 stw r2,-8(fp)
timeout.tv_sec = 0;
80023bc: e03fba15 stw zero,-280(fp)
80023c0: e03fbb15 stw zero,-276(fp)
timeout.tv_usec = 0;
80023c4: e03fbc15 stw zero,-272(fp)
//check for data
if (select(max_socket, &readfds, NULL, NULL, &timeout))
80023c8: e0ffbd04 addi r3,fp,-268
80023cc: e0bfba04 addi r2,fp,-280
80023d0: d8800015 stw r2,0(sp)
80023d4: 000f883a mov r7,zero
80023d8: 000d883a mov r6,zero
80023dc: 180b883a mov r5,r3
80023e0: e13ffe17 ldw r4,-8(fp)
80023e4: 8026a740 call 8026a74 <bsd_select>
80023e8: 10002f26 beq r2,zero,80024a8 <ethernet_read+0x194>
if (FD_ISSET(connections[channel].fd_conn, &readfds))
80023ec: e0bfb817 ldw r2,-288(fp)
80023f0: 1006913a slli r3,r2,4
80023f4: 00820174 movhi r2,2053
80023f8: 1885883a add r2,r3,r2
80023fc: 10b36217 ldw r2,-12920(r2)
8002400: e0ffbd04 addi r3,fp,-268
8002404: 180b883a mov r5,r3
8002408: 1009883a mov r4,r2
800240c: 8030b8c0 call 8030b8c <ifd_isset>
8002410: 10002526 beq r2,zero,80024a8 <ethernet_read+0x194>
{
result = (int)recv(connections[channel].fd_conn, data, size, 0);
8002414: e0bfb817 ldw r2,-288(fp)
8002418: 1006913a slli r3,r2,4
800241c: 00820174 movhi r2,2053
8002420: 1885883a add r2,r3,r2
8002424: 10b36217 ldw r2,-12920(r2)
8002428: 000f883a mov r7,zero
800242c: e1bfb717 ldw r6,-292(fp)
8002430: e17fb617 ldw r5,-296(fp)
8002434: 1009883a mov r4,r2
8002438: 802c7940 call 802c794 <t_recv>
800243c: e0bfff15 stw r2,-4(fp)
if (result == -1)
8002440: e0bfff17 ldw r2,-4(fp)
8002444: 10bfffd8 cmpnei r2,r2,-1
8002448: 1000121e bne r2,zero,8002494 <ethernet_read+0x180>
{
printf("[ethernet_read] closing connection due to error\n");
800244c: 01020134 movhi r4,2052
8002450: 211c4a04 addi r4,r4,28968
8002454: 8002d9c0 call 8002d9c <puts>
close(connections[channel].fd_conn); //close connection on error
8002458: e0bfb817 ldw r2,-288(fp)
800245c: 1006913a slli r3,r2,4
8002460: 00820174 movhi r2,2053
8002464: 1885883a add r2,r3,r2
8002468: 10b36217 ldw r2,-12920(r2)
800246c: 1009883a mov r4,r2
8002470: 8022a600 call 8022a60 <close>
ss_reset_connection(&(connections[channel]));
8002474: e0bfb817 ldw r2,-288(fp)
8002478: 1006913a slli r3,r2,4
800247c: 00820174 movhi r2,2053
8002480: 10b36004 addi r2,r2,-12928
8002484: 1885883a add r2,r3,r2
8002488: 1009883a mov r4,r2
800248c: 8001d1c0 call 8001d1c <ss_reset_connection>
result = 0;
8002490: e03fff15 stw zero,-4(fp)
}
OSMutexPost(mutex);
8002494: d0a03c17 ldw r2,-32528(gp)
8002498: 1009883a mov r4,r2
800249c: 80142380 call 8014238 <OSMutexPost>
return result;
80024a0: e0bfff17 ldw r2,-4(fp)
80024a4: 00000406 br 80024b8 <ethernet_read+0x1a4>
}
OSMutexPost(mutex);
80024a8: d0a03c17 ldw r2,-32528(gp)
80024ac: 1009883a mov r4,r2
80024b0: 80142380 call 8014238 <OSMutexPost>
return 0;
80024b4: 0005883a mov r2,zero
}
80024b8: e037883a mov sp,fp
80024bc: dfc00117 ldw ra,4(sp)
80024c0: df000017 ldw fp,0(sp)
80024c4: dec00204 addi sp,sp,8
80024c8: f800283a ret
080024cc <ethernet_close>:
int ethernet_close(int channel)
{
80024cc: defffc04 addi sp,sp,-16
80024d0: dfc00315 stw ra,12(sp)
80024d4: df000215 stw fp,8(sp)
80024d8: df000204 addi fp,sp,8
80024dc: e13ffe15 stw r4,-8(fp)
INT8U err;
OSMutexPend(mutex, 0, &err);
80024e0: d0a03c17 ldw r2,-32528(gp)
80024e4: e0ffffc4 addi r3,fp,-1
80024e8: 180d883a mov r6,r3
80024ec: 000b883a mov r5,zero
80024f0: 1009883a mov r4,r2
80024f4: 8013cdc0 call 8013cdc <OSMutexPend>
close(connections[channel].fd_conn);
80024f8: e0bffe17 ldw r2,-8(fp)
80024fc: 1006913a slli r3,r2,4
8002500: 00820174 movhi r2,2053
8002504: 1885883a add r2,r3,r2
8002508: 10b36217 ldw r2,-12920(r2)
800250c: 1009883a mov r4,r2
8002510: 8022a600 call 8022a60 <close>
ss_reset_connection(&(connections[channel]));
8002514: e0bffe17 ldw r2,-8(fp)
8002518: 1006913a slli r3,r2,4
800251c: 00820174 movhi r2,2053
8002520: 10b36004 addi r2,r2,-12928
8002524: 1885883a add r2,r3,r2
8002528: 1009883a mov r4,r2
800252c: 8001d1c0 call 8001d1c <ss_reset_connection>
OSMutexPost(mutex);
8002530: d0a03c17 ldw r2,-32528(gp)
8002534: 1009883a mov r4,r2
8002538: 80142380 call 8014238 <OSMutexPost>
return 0;
800253c: 0005883a mov r2,zero
}
8002540: e037883a mov sp,fp
8002544: dfc00117 ldw ra,4(sp)
8002548: df000017 ldw fp,0(sp)
800254c: dec00204 addi sp,sp,8
8002550: f800283a ret
08002554 <udpgen_command_bit>:
//*******************************************************************
void udpgen_command_bit(alt_u32 base, alt_u8 bitmask, alt_u8 state)
{
8002554: defffb04 addi sp,sp,-20
8002558: df000415 stw fp,16(sp)
800255c: df000404 addi fp,sp,16
8002560: e13ffe15 stw r4,-8(fp)
8002564: 2805883a mov r2,r5
8002568: 3007883a mov r3,r6
800256c: e0bffd05 stb r2,-12(fp)
8002570: 1805883a mov r2,r3
8002574: e0bffc05 stb r2,-16(fp)
alt_u8 tmp = IORD_8DIRECT(base, UDPGEN_REG_CSR);
8002578: e0bffe17 ldw r2,-8(fp)
800257c: 10800023 ldbuio r2,0(r2)
8002580: 10803fcc andi r2,r2,255
8002584: e0bfffc5 stb r2,-1(fp)
if (state)
8002588: e0bffc03 ldbu r2,-16(fp)
800258c: 10000526 beq r2,zero,80025a4 <udpgen_command_bit+0x50>
tmp |= bitmask;
8002590: e0ffffc3 ldbu r3,-1(fp)
8002594: e0bffd03 ldbu r2,-12(fp)
8002598: 1884b03a or r2,r3,r2
800259c: e0bfffc5 stb r2,-1(fp)
80025a0: 00000606 br 80025bc <udpgen_command_bit+0x68>
else
tmp &= ~bitmask;
80025a4: e0bffd03 ldbu r2,-12(fp)
80025a8: 0084303a nor r2,zero,r2
80025ac: 1007883a mov r3,r2
80025b0: e0bfffc3 ldbu r2,-1(fp)
80025b4: 1884703a and r2,r3,r2
80025b8: e0bfffc5 stb r2,-1(fp)
IOWR_8DIRECT(base, UDPGEN_REG_CSR, tmp);
80025bc: e0bffe17 ldw r2,-8(fp)
80025c0: e0ffffc3 ldbu r3,-1(fp)
80025c4: 10c00025 stbio r3,0(r2)
}
80025c8: 0001883a nop
80025cc: e037883a mov sp,fp
80025d0: df000017 ldw fp,0(sp)
80025d4: dec00104 addi sp,sp,4
80025d8: f800283a ret
080025dc <udpgen_test>:
void udpgen_test(alt_u32 base)
{
80025dc: defff604 addi sp,sp,-40
80025e0: dfc00915 stw ra,36(sp)
80025e4: df000815 stw fp,32(sp)
80025e8: df000804 addi fp,sp,32
80025ec: e13ff815 stw r4,-32(fp)
printf (" *** Setting up UDP generator... \n");
80025f0: 01020134 movhi r4,2052
80025f4: 211c6004 addi r4,r4,29056
80025f8: 8002d9c0 call 8002d9c <puts>
unsigned char dstmac[] = {0x18, 0xd6, 0xc7, 0x05, 0xaa, 0x63};
80025fc: 00800604 movi r2,24
8002600: e0bffb85 stb r2,-18(fp)
8002604: 00bff584 movi r2,-42
8002608: e0bffbc5 stb r2,-17(fp)
800260c: 00bff1c4 movi r2,-57
8002610: e0bffc05 stb r2,-16(fp)
8002614: 00800144 movi r2,5
8002618: e0bffc45 stb r2,-15(fp)
800261c: 00bfea84 movi r2,-86
8002620: e0bffc85 stb r2,-14(fp)
8002624: 008018c4 movi r2,99
8002628: e0bffcc5 stb r2,-13(fp)
unsigned char srcip[] = {10,0,7,17};
800262c: 00800284 movi r2,10
8002630: e0bffa85 stb r2,-22(fp)
8002634: e03ffac5 stb zero,-21(fp)
8002638: 008001c4 movi r2,7
800263c: e0bffb05 stb r2,-20(fp)
8002640: 00800444 movi r2,17
8002644: e0bffb45 stb r2,-19(fp)
unsigned char dstip[] = {10,0,7,1};
8002648: 00800284 movi r2,10
800264c: e0bff985 stb r2,-26(fp)
8002650: e03ff9c5 stb zero,-25(fp)
8002654: 008001c4 movi r2,7
8002658: e0bffa05 stb r2,-24(fp)
800265c: 00800044 movi r2,1
8002660: e0bffa45 stb r2,-23(fp)
udpgen_command(UDP_GENERATOR_BASE, 0x01);
8002664: 00c00044 movi r3,1
8002668: 00861034 movhi r2,6208
800266c: 10cf3025 stbio r3,15552(r2)
udpgen_set_size(UDP_GENERATOR_BASE, 16);
8002670: 00c00404 movi r3,16
8002674: 00861034 movhi r2,6208
8002678: 10cf30ad sthio r3,15554(r2)
udpgen_set_srcip_a(UDP_GENERATOR_BASE, srcip);
800267c: e03fff15 stw zero,-4(fp)
8002680: 00001006 br 80026c4 <udpgen_test+0xe8>
8002684: e0bfff17 ldw r2,-4(fp)
8002688: 10800104 addi r2,r2,4
800268c: 1007883a mov r3,r2
8002690: 00861034 movhi r2,6208
8002694: 108f3004 addi r2,r2,15552
8002698: 1885883a add r2,r3,r2
800269c: 010000c4 movi r4,3
80026a0: e0ffff17 ldw r3,-4(fp)
80026a4: 20c7c83a sub r3,r4,r3
80026a8: e0c7883a add r3,fp,r3
80026ac: 18fffa83 ldbu r3,-22(r3)
80026b0: 18c03fcc andi r3,r3,255
80026b4: 10c00025 stbio r3,0(r2)
80026b8: e0bfff17 ldw r2,-4(fp)
80026bc: 10800044 addi r2,r2,1
80026c0: e0bfff15 stw r2,-4(fp)
80026c4: e0bfff17 ldw r2,-4(fp)
80026c8: 10800110 cmplti r2,r2,4
80026cc: 103fed1e bne r2,zero,8002684 <udpgen_test+0xa8>
udpgen_set_dstip_a(UDP_GENERATOR_BASE, dstip);
80026d0: e03ffe15 stw zero,-8(fp)
80026d4: 00001006 br 8002718 <udpgen_test+0x13c>
80026d8: e0bffe17 ldw r2,-8(fp)
80026dc: 10800204 addi r2,r2,8
80026e0: 1007883a mov r3,r2
80026e4: 00861034 movhi r2,6208
80026e8: 108f3004 addi r2,r2,15552
80026ec: 1885883a add r2,r3,r2
80026f0: 010000c4 movi r4,3
80026f4: e0fffe17 ldw r3,-8(fp)
80026f8: 20c7c83a sub r3,r4,r3
80026fc: e0c7883a add r3,fp,r3
8002700: 18fff983 ldbu r3,-26(r3)
8002704: 18c03fcc andi r3,r3,255
8002708: 10c00025 stbio r3,0(r2)
800270c: e0bffe17 ldw r2,-8(fp)
8002710: 10800044 addi r2,r2,1
8002714: e0bffe15 stw r2,-8(fp)
8002718: e0bffe17 ldw r2,-8(fp)
800271c: 10800110 cmplti r2,r2,4
8002720: 103fed1e bne r2,zero,80026d8 <udpgen_test+0xfc>
udpgen_set_srcport(UDP_GENERATOR_BASE, 4096);
8002724: 00c40004 movi r3,4096
8002728: 00861034 movhi r2,6208
800272c: 10cf33ad sthio r3,15566(r2)
udpgen_set_dstport(UDP_GENERATOR_BASE, 4097);
8002730: 00c40044 movi r3,4097
8002734: 00861034 movhi r2,6208
8002738: 10cf332d sthio r3,15564(r2)
udpgen_set_dstmac_a(UDP_GENERATOR_BASE, dstmac);
800273c: e03ffd15 stw zero,-12(fp)
8002740: 00001006 br 8002784 <udpgen_test+0x1a8>
8002744: e0bffd17 ldw r2,-12(fp)
8002748: 10800404 addi r2,r2,16
800274c: 1007883a mov r3,r2
8002750: 00861034 movhi r2,6208
8002754: 108f3004 addi r2,r2,15552
8002758: 1885883a add r2,r3,r2
800275c: 01000144 movi r4,5
8002760: e0fffd17 ldw r3,-12(fp)
8002764: 20c7c83a sub r3,r4,r3
8002768: e0c7883a add r3,fp,r3
800276c: 18fffb83 ldbu r3,-18(r3)
8002770: 18c03fcc andi r3,r3,255
8002774: 10c00025 stbio r3,0(r2)
8002778: e0bffd17 ldw r2,-12(fp)
800277c: 10800044 addi r2,r2,1
8002780: e0bffd15 stw r2,-12(fp)
8002784: e0bffd17 ldw r2,-12(fp)
8002788: 10800190 cmplti r2,r2,6
800278c: 103fed1e bne r2,zero,8002744 <udpgen_test+0x168>
}
8002790: 0001883a nop
8002794: e037883a mov sp,fp
8002798: dfc00117 ldw ra,4(sp)
800279c: df000017 ldw fp,0(sp)
80027a0: dec00204 addi sp,sp,8
80027a4: f800283a ret
080027a8 <swap_bytes>:
//******************************************************
//Swap odd/even bytes in a bunch of data to align endianness of shorts
void swap_bytes(unsigned char* array, int size_bytes)
{
80027a8: defffb04 addi sp,sp,-20
80027ac: df000415 stw fp,16(sp)
80027b0: df000404 addi fp,sp,16
80027b4: e13ffd15 stw r4,-12(fp)
80027b8: e17ffc15 stw r5,-16(fp)
for (int i = 0; i < size_bytes; i+= 2)
80027bc: e03fff15 stw zero,-4(fp)
80027c0: 00001706 br 8002820 <swap_bytes+0x78>
{
unsigned char tmp = array[i];
80027c4: e0bfff17 ldw r2,-4(fp)
80027c8: e0fffd17 ldw r3,-12(fp)
80027cc: 1885883a add r2,r3,r2
80027d0: 10800003 ldbu r2,0(r2)
80027d4: e0bffec5 stb r2,-5(fp)
array[i] = array[i+1];
80027d8: e0bfff17 ldw r2,-4(fp)
80027dc: 10800044 addi r2,r2,1
80027e0: e0fffd17 ldw r3,-12(fp)
80027e4: 1887883a add r3,r3,r2
80027e8: e0bfff17 ldw r2,-4(fp)
80027ec: e13ffd17 ldw r4,-12(fp)
80027f0: 2085883a add r2,r4,r2
80027f4: 18c00003 ldbu r3,0(r3)
80027f8: 10c00005 stb r3,0(r2)
array[i+1] = tmp;
80027fc: e0bfff17 ldw r2,-4(fp)
8002800: 10800044 addi r2,r2,1
8002804: e0fffd17 ldw r3,-12(fp)
8002808: 1885883a add r2,r3,r2
800280c: e0fffec3 ldbu r3,-5(fp)
8002810: 10c00005 stb r3,0(r2)
for (int i = 0; i < size_bytes; i+= 2)
8002814: e0bfff17 ldw r2,-4(fp)
8002818: 10800084 addi r2,r2,2
800281c: e0bfff15 stw r2,-4(fp)
8002820: e0ffff17 ldw r3,-4(fp)
8002824: e0bffc17 ldw r2,-16(fp)
8002828: 18bfe616 blt r3,r2,80027c4 <swap_bytes+0x1c>
}
}
800282c: 0001883a nop
8002830: e037883a mov sp,fp
8002834: df000017 ldw fp,0(sp)
8002838: dec00104 addi sp,sp,4
800283c: f800283a ret
08002840 <swap_quad>:
//The same, but four-byte-wise
void swap_quad(unsigned char* array, int size_bytes)
{
8002840: defffa04 addi sp,sp,-24
8002844: df000515 stw fp,20(sp)
8002848: df000504 addi fp,sp,20
800284c: e13ffc15 stw r4,-16(fp)
8002850: e17ffb15 stw r5,-20(fp)
unsigned char buf[4];
for (int i = 0; i < size_bytes; i+= 4)
8002854: e03fff15 stw zero,-4(fp)
8002858: 00002206 br 80028e4 <swap_quad+0xa4>
{
memcpy(buf, array+i, 4);
800285c: e0bfff17 ldw r2,-4(fp)
8002860: e0fffc17 ldw r3,-16(fp)
8002864: 1885883a add r2,r3,r2
8002868: 10c00003 ldbu r3,0(r2)
800286c: e0fffd05 stb r3,-12(fp)
8002870: 10c00043 ldbu r3,1(r2)
8002874: e0fffd45 stb r3,-11(fp)
8002878: 10c00083 ldbu r3,2(r2)
800287c: e0fffd85 stb r3,-10(fp)
8002880: 108000c3 ldbu r2,3(r2)
8002884: e0bffdc5 stb r2,-9(fp)
for (int j = 0; j < 4; j++)
8002888: e03ffe15 stw zero,-8(fp)
800288c: 00000f06 br 80028cc <swap_quad+0x8c>
array[i+j] = buf[3-j];
8002890: 00c000c4 movi r3,3
8002894: e0bffe17 ldw r2,-8(fp)
8002898: 1887c83a sub r3,r3,r2
800289c: e13fff17 ldw r4,-4(fp)
80028a0: e0bffe17 ldw r2,-8(fp)
80028a4: 2085883a add r2,r4,r2
80028a8: 1009883a mov r4,r2
80028ac: e0bffc17 ldw r2,-16(fp)
80028b0: 1105883a add r2,r2,r4
80028b4: e0c7883a add r3,fp,r3
80028b8: 18fffd03 ldbu r3,-12(r3)
80028bc: 10c00005 stb r3,0(r2)
for (int j = 0; j < 4; j++)
80028c0: e0bffe17 ldw r2,-8(fp)
80028c4: 10800044 addi r2,r2,1
80028c8: e0bffe15 stw r2,-8(fp)
80028cc: e0bffe17 ldw r2,-8(fp)
80028d0: 10800110 cmplti r2,r2,4
80028d4: 103fee1e bne r2,zero,8002890 <swap_quad+0x50>
for (int i = 0; i < size_bytes; i+= 4)
80028d8: e0bfff17 ldw r2,-4(fp)
80028dc: 10800104 addi r2,r2,4
80028e0: e0bfff15 stw r2,-4(fp)
80028e4: e0ffff17 ldw r3,-4(fp)
80028e8: e0bffb17 ldw r2,-20(fp)
80028ec: 18bfdb16 blt r3,r2,800285c <swap_quad+0x1c>
}
}
80028f0: 0001883a nop
80028f4: e037883a mov sp,fp
80028f8: df000017 ldw fp,0(sp)
80028fc: dec00104 addi sp,sp,4
8002900: f800283a ret
08002904 <reload_fpga>:
//trigger FPGA reload
void reload_fpga()
{
8002904: defffe04 addi sp,sp,-8
8002908: dfc00115 stw ra,4(sp)
800290c: df000015 stw fp,0(sp)
8002910: d839883a mov fp,sp
printf("$$$$ RECONFIGURING FPGA!!! $$$$\n");
8002914: 01020134 movhi r4,2052
8002918: 211c6904 addi r4,r4,29092
800291c: 8002d9c0 call 8002d9c <puts>
//TK_SLEEP(100); //let it print the message before dying
//IOWR(DUAL_BOOT_BASE, 0, 0x1);
printf("*** DISABLED! ***\n");
8002920: 01020134 movhi r4,2052
8002924: 211c7104 addi r4,r4,29124
8002928: 8002d9c0 call 8002d9c <puts>
}
800292c: 0001883a nop
8002930: e037883a mov sp,fp
8002934: dfc00117 ldw ra,4(sp)
8002938: df000017 ldw fp,0(sp)
800293c: dec00204 addi sp,sp,8
8002940: f800283a ret
08002944 <masterslave>:
void masterslave(alt_u8 master)
{
8002944: defffd04 addi sp,sp,-12
8002948: dfc00215 stw ra,8(sp)
800294c: df000115 stw fp,4(sp)
8002950: df000104 addi fp,sp,4
8002954: 2005883a mov r2,r4
8002958: e0bfff05 stb r2,-4(fp)
if (master)
800295c: e0bfff03 ldbu r2,-4(fp)
8002960: 10000426 beq r2,zero,8002974 <masterslave+0x30>
IOWR_ALTERA_AVALON_PIO_SET_BITS(OUTPUT_PIO_BASE, 0x80);
8002964: 00c02004 movi r3,128
8002968: 00861034 movhi r2,6208
800296c: 10cf1435 stwio r3,15440(r2)
8002970: 00000306 br 8002980 <masterslave+0x3c>
else
IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(OUTPUT_PIO_BASE, 0x80);
8002974: 00c02004 movi r3,128
8002978: 00861034 movhi r2,6208
800297c: 10cf1535 stwio r3,15444(r2)
mastermode = master;
8002980: e0bfff03 ldbu r2,-4(fp)
8002984: d0a03d85 stb r2,-32522(gp)
set_delay(mastermode, delays[mastermode]); //update sensor delay setting
8002988: d0a03d83 ldbu r2,-32522(gp)
800298c: 11003fcc andi r4,r2,255
8002990: d0a03d83 ldbu r2,-32522(gp)
8002994: 10803fcc andi r2,r2,255
8002998: 1087883a add r3,r2,r2
800299c: d0a03e04 addi r2,gp,-32520
80029a0: 1885883a add r2,r3,r2
80029a4: 1080000b ldhu r2,0(r2)
80029a8: 10bfffcc andi r2,r2,65535
80029ac: 100b883a mov r5,r2
80029b0: 8002bc80 call 8002bc8 <set_delay>
}
80029b4: 0001883a nop
80029b8: e037883a mov sp,fp
80029bc: dfc00117 ldw ra,4(sp)
80029c0: df000017 ldw fp,0(sp)
80029c4: dec00204 addi sp,sp,8
80029c8: f800283a ret
080029cc <master_clock_period>:
void master_clock_period(alt_u32 period)
{
80029cc: defffe04 addi sp,sp,-8
80029d0: df000115 stw fp,4(sp)
80029d4: df000104 addi fp,sp,4
80029d8: e13fff15 stw r4,-4(fp)
//set period
IOWR_ALTERA_AVALON_TIMER_PERIODL(FRAME_TIMER_BASE, (alt_u16)(period & 0xFFFF));
80029dc: e0bfff17 ldw r2,-4(fp)
80029e0: 10ffffcc andi r3,r2,65535
80029e4: 00861034 movhi r2,6208
80029e8: 10cf0235 stwio r3,15368(r2)
IOWR_ALTERA_AVALON_TIMER_PERIODH(FRAME_TIMER_BASE, (alt_u16)((period>>16) & 0xFFFF));
80029ec: e0bfff17 ldw r2,-4(fp)
80029f0: 1004d43a srli r2,r2,16
80029f4: 10ffffcc andi r3,r2,65535
80029f8: 00861034 movhi r2,6208
80029fc: 10cf0335 stwio r3,15372(r2)
//start timer in continuous mode
//IOWR_ALTERA_AVALON_TIMER_CONTROL(FRAME_TIMER_BASE,
// ALTERA_AVALON_TIMER_CONTROL_CONT_MSK);
}
8002a00: 0001883a nop
8002a04: e037883a mov sp,fp
8002a08: df000017 ldw fp,0(sp)
8002a0c: dec00104 addi sp,sp,4
8002a10: f800283a ret
08002a14 <master_clock_enable>:
void master_clock_enable(alt_u8 en)
{
8002a14: defffd04 addi sp,sp,-12
8002a18: df000215 stw fp,8(sp)
8002a1c: df000204 addi fp,sp,8
8002a20: 2005883a mov r2,r4
8002a24: e0bffe05 stb r2,-8(fp)
alt_u16 tmp = 0; // = IORD_ALTERA_AVALON_TIMER_CONTROL(FRAME_TIMER_BASE);
8002a28: e03fff8d sth zero,-2(fp)
if (en)
8002a2c: e0bffe03 ldbu r2,-8(fp)
8002a30: 10000426 beq r2,zero,8002a44 <master_clock_enable+0x30>
tmp |= ALTERA_AVALON_TIMER_CONTROL_START_MSK | ALTERA_AVALON_TIMER_CONTROL_CONT_MSK;
8002a34: e0bfff8b ldhu r2,-2(fp)
8002a38: 10800194 ori r2,r2,6
8002a3c: e0bfff8d sth r2,-2(fp)
8002a40: 00000306 br 8002a50 <master_clock_enable+0x3c>
else
tmp |= ALTERA_AVALON_TIMER_CONTROL_STOP_MSK;
8002a44: e0bfff8b ldhu r2,-2(fp)
8002a48: 10800214 ori r2,r2,8
8002a4c: e0bfff8d sth r2,-2(fp)
IOWR_ALTERA_AVALON_TIMER_CONTROL(FRAME_TIMER_BASE,tmp);
8002a50: e0ffff8b ldhu r3,-2(fp)
8002a54: 00861034 movhi r2,6208
8002a58: 10cf0135 stwio r3,15364(r2)
}
8002a5c: 0001883a nop
8002a60: e037883a mov sp,fp
8002a64: df000017 ldw fp,0(sp)
8002a68: dec00104 addi sp,sp,4
8002a6c: f800283a ret
08002a70 <led_set>:
void led_set(alt_u8 led_nr)
{
8002a70: defffe04 addi sp,sp,-8
8002a74: df000115 stw fp,4(sp)
8002a78: df000104 addi fp,sp,4
8002a7c: 2005883a mov r2,r4
8002a80: e0bfff05 stb r2,-4(fp)
if (led_nr > 4)
8002a84: e0bfff03 ldbu r2,-4(fp)
8002a88: 10800170 cmpltui r2,r2,5
8002a8c: 10000626 beq r2,zero,8002aa8 <led_set+0x38>
return;
IOWR_ALTERA_AVALON_PIO_SET_BITS(OUTPUT_PIO_BASE, 1<<led_nr);
8002a90: e0bfff03 ldbu r2,-4(fp)
8002a94: 00c00044 movi r3,1
8002a98: 1886983a sll r3,r3,r2
8002a9c: 00861034 movhi r2,6208
8002aa0: 10cf1435 stwio r3,15440(r2)
8002aa4: 00000106 br 8002aac <led_set+0x3c>
return;
8002aa8: 0001883a nop
}
8002aac: e037883a mov sp,fp
8002ab0: df000017 ldw fp,0(sp)
8002ab4: dec00104 addi sp,sp,4
8002ab8: f800283a ret
08002abc <led_clear>:
void led_clear(alt_u8 led_nr)
{
8002abc: defffe04 addi sp,sp,-8
8002ac0: df000115 stw fp,4(sp)
8002ac4: df000104 addi fp,sp,4
8002ac8: 2005883a mov r2,r4
8002acc: e0bfff05 stb r2,-4(fp)
if (led_nr > 4)
8002ad0: e0bfff03 ldbu r2,-4(fp)
8002ad4: 10800170 cmpltui r2,r2,5
8002ad8: 10000626 beq r2,zero,8002af4 <led_clear+0x38>
return;
IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(OUTPUT_PIO_BASE, 1<<led_nr);
8002adc: e0bfff03 ldbu r2,-4(fp)
8002ae0: 00c00044 movi r3,1
8002ae4: 1886983a sll r3,r3,r2
8002ae8: 00861034 movhi r2,6208
8002aec: 10cf1535 stwio r3,15444(r2)
8002af0: 00000106 br 8002af8 <led_clear+0x3c>
return;
8002af4: 0001883a nop
}
8002af8: e037883a mov sp,fp
8002afc: df000017 ldw fp,0(sp)
8002b00: dec00104 addi sp,sp,4
8002b04: f800283a ret
08002b08 <led_toggle>:
void led_toggle(alt_u8 led_nr)
{
8002b08: defffd04 addi sp,sp,-12
8002b0c: df000215 stw fp,8(sp)
8002b10: df000204 addi fp,sp,8
8002b14: 2005883a mov r2,r4
8002b18: e0bffe05 stb r2,-8(fp)
if (led_nr > 4)
8002b1c: e0bffe03 ldbu r2,-8(fp)
8002b20: 10800170 cmpltui r2,r2,5
8002b24: 10001026 beq r2,zero,8002b68 <led_toggle+0x60>
return;
alt_u32 tmp = IORD_ALTERA_AVALON_PIO_DATA(OUTPUT_PIO_BASE);
8002b28: 00861034 movhi r2,6208
8002b2c: 108f1037 ldwio r2,15424(r2)
8002b30: e0bfff15 stw r2,-4(fp)
tmp ^= (1<<led_nr);
8002b34: e0bffe03 ldbu r2,-8(fp)
8002b38: 00c00044 movi r3,1
8002b3c: 1884983a sll r2,r3,r2
8002b40: 1007883a mov r3,r2
8002b44: e0bfff17 ldw r2,-4(fp)
8002b48: 10c4f03a xor r2,r2,r3
8002b4c: e0bfff15 stw r2,-4(fp)
IOWR_ALTERA_AVALON_PIO_DATA(OUTPUT_PIO_BASE, 1<<led_nr);
8002b50: e0bffe03 ldbu r2,-8(fp)
8002b54: 00c00044 movi r3,1
8002b58: 1886983a sll r3,r3,r2
8002b5c: 00861034 movhi r2,6208
8002b60: 10cf1035 stwio r3,15424(r2)
8002b64: 00000106 br 8002b6c <led_toggle+0x64>
return;
8002b68: 0001883a nop
}
8002b6c: e037883a mov sp,fp
8002b70: df000017 ldw fp,0(sp)
8002b74: dec00104 addi sp,sp,4
8002b78: f800283a ret
08002b7c <led4_blink_enable>:
void led4_blink_enable(alt_u8 en)
{
8002b7c: defffe04 addi sp,sp,-8
8002b80: df000115 stw fp,4(sp)
8002b84: df000104 addi fp,sp,4
8002b88: 2005883a mov r2,r4
8002b8c: e0bfff05 stb r2,-4(fp)
if (en)
8002b90: e0bfff03 ldbu r2,-4(fp)
8002b94: 10000426 beq r2,zero,8002ba8 <led4_blink_enable+0x2c>
IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(OUTPUT_PIO_BASE, 1<<5);
8002b98: 00c00804 movi r3,32
8002b9c: 00861034 movhi r2,6208
8002ba0: 10cf1535 stwio r3,15444(r2)
else
IOWR_ALTERA_AVALON_PIO_SET_BITS(OUTPUT_PIO_BASE, 1<<5);
}
8002ba4: 00000306 br 8002bb4 <led4_blink_enable+0x38>
IOWR_ALTERA_AVALON_PIO_SET_BITS(OUTPUT_PIO_BASE, 1<<5);
8002ba8: 00c00804 movi r3,32
8002bac: 00861034 movhi r2,6208
8002bb0: 10cf1435 stwio r3,15440(r2)
}
8002bb4: 0001883a nop
8002bb8: e037883a mov sp,fp
8002bbc: df000017 ldw fp,0(sp)
8002bc0: dec00104 addi sp,sp,4
8002bc4: f800283a ret
08002bc8 <set_delay>:
void set_delay(alt_u8 master, alt_u16 value)
{
8002bc8: defffd04 addi sp,sp,-12
8002bcc: df000215 stw fp,8(sp)
8002bd0: df000204 addi fp,sp,8
8002bd4: 2005883a mov r2,r4
8002bd8: 2807883a mov r3,r5
8002bdc: e0bfff05 stb r2,-4(fp)
8002be0: 1805883a mov r2,r3
8002be4: e0bffe0d sth r2,-8(fp)
delays[master] = value;
8002be8: e0bfff03 ldbu r2,-4(fp)
8002bec: 1087883a add r3,r2,r2
8002bf0: d0a03e04 addi r2,gp,-32520
8002bf4: 1885883a add r2,r3,r2
8002bf8: e0fffe0b ldhu r3,-8(fp)
8002bfc: 10c0000d sth r3,0(r2)
if (master == mastermode)
8002c00: d0a03d83 ldbu r2,-32522(gp)
8002c04: e0ffff03 ldbu r3,-4(fp)
8002c08: 10803fcc andi r2,r2,255
8002c0c: 1880031e bne r3,r2,8002c1c <set_delay+0x54>
sensor_set_delay(SENSOR_INTERFACE_BASE, value); //update sensor setting only if right mode
8002c10: e0fffe0b ldhu r3,-8(fp)
8002c14: 00861034 movhi r2,6208
8002c18: 10cf552d sthio r3,15700(r2)
}
8002c1c: 0001883a nop
8002c20: e037883a mov sp,fp
8002c24: df000017 ldw fp,0(sp)
8002c28: dec00104 addi sp,sp,4
8002c2c: f800283a ret
08002c30 <_getchar_r>:
8002c30: 21400117 ldw r5,4(r4)
8002c34: 8007adc1 jmpi 8007adc <_getc_r>
08002c38 <getchar>:
8002c38: 00820174 movhi r2,2053
8002c3c: 1132af17 ldw r4,-13636(r2)
8002c40: 21400117 ldw r5,4(r4)
8002c44: 8007adc1 jmpi 8007adc <_getc_r>
08002c48 <_printf_r>:
8002c48: defffd04 addi sp,sp,-12
8002c4c: 2805883a mov r2,r5
8002c50: dfc00015 stw ra,0(sp)
8002c54: d9800115 stw r6,4(sp)
8002c58: d9c00215 stw r7,8(sp)
8002c5c: 21400217 ldw r5,8(r4)
8002c60: d9c00104 addi r7,sp,4
8002c64: 100d883a mov r6,r2
8002c68: 8002e440 call 8002e44 <___vfprintf_internal_r>
8002c6c: dfc00017 ldw ra,0(sp)
8002c70: dec00304 addi sp,sp,12
8002c74: f800283a ret
08002c78 <printf>:
8002c78: defffc04 addi sp,sp,-16
8002c7c: dfc00015 stw ra,0(sp)
8002c80: d9400115 stw r5,4(sp)
8002c84: d9800215 stw r6,8(sp)
8002c88: d9c00315 stw r7,12(sp)
8002c8c: 00820174 movhi r2,2053
8002c90: 10b2af17 ldw r2,-13636(r2)
8002c94: 200b883a mov r5,r4
8002c98: d9800104 addi r6,sp,4
8002c9c: 11000217 ldw r4,8(r2)
8002ca0: 8004fa40 call 8004fa4 <__vfprintf_internal>
8002ca4: dfc00017 ldw ra,0(sp)
8002ca8: dec00404 addi sp,sp,16
8002cac: f800283a ret
08002cb0 <_putchar_r>:
8002cb0: 21800217 ldw r6,8(r4)
8002cb4: 80099101 jmpi 8009910 <_putc_r>
08002cb8 <putchar>:
8002cb8: 00820174 movhi r2,2053
8002cbc: 10b2af17 ldw r2,-13636(r2)
8002cc0: 200b883a mov r5,r4
8002cc4: 11800217 ldw r6,8(r2)
8002cc8: 1009883a mov r4,r2
8002ccc: 80099101 jmpi 8009910 <_putc_r>
08002cd0 <_puts_r>:
8002cd0: defff504 addi sp,sp,-44
8002cd4: dc000815 stw r16,32(sp)
8002cd8: 2021883a mov r16,r4
8002cdc: 2809883a mov r4,r5
8002ce0: dc400915 stw r17,36(sp)
8002ce4: dfc00a15 stw ra,40(sp)
8002ce8: 2823883a mov r17,r5
8002cec: 8002dac0 call 8002dac <strlen>
8002cf0: 11000044 addi r4,r2,1
8002cf4: d8800515 stw r2,20(sp)
8002cf8: 00800044 movi r2,1
8002cfc: 00c20134 movhi r3,2052
8002d00: d8800715 stw r2,28(sp)
8002d04: d8800404 addi r2,sp,16
8002d08: 18dd1604 addi r3,r3,29784
8002d0c: d8800115 stw r2,4(sp)
8002d10: 00800084 movi r2,2
8002d14: dc400415 stw r17,16(sp)
8002d18: d8c00615 stw r3,24(sp)
8002d1c: d9000315 stw r4,12(sp)
8002d20: d8800215 stw r2,8(sp)
8002d24: 81400217 ldw r5,8(r16)
8002d28: 80000226 beq r16,zero,8002d34 <_puts_r+0x64>
8002d2c: 80800e17 ldw r2,56(r16)
8002d30: 10001326 beq r2,zero,8002d80 <_puts_r+0xb0>
8002d34: 2880030b ldhu r2,12(r5)
8002d38: 10c8000c andi r3,r2,8192
8002d3c: 1800061e bne r3,zero,8002d58 <_puts_r+0x88>
8002d40: 28c01917 ldw r3,100(r5)
8002d44: 0137ffc4 movi r4,-8193
8002d48: 10880014 ori r2,r2,8192
8002d4c: 1906703a and r3,r3,r4
8002d50: 2880030d sth r2,12(r5)
8002d54: 28c01915 stw r3,100(r5)
8002d58: d9800104 addi r6,sp,4
8002d5c: 8009883a mov r4,r16
8002d60: 80074c00 call 80074c0 <__sfvwrite_r>
8002d64: 10000b1e bne r2,zero,8002d94 <_puts_r+0xc4>
8002d68: 00800284 movi r2,10
8002d6c: dfc00a17 ldw ra,40(sp)
8002d70: dc400917 ldw r17,36(sp)
8002d74: dc000817 ldw r16,32(sp)
8002d78: dec00b04 addi sp,sp,44
8002d7c: f800283a ret
8002d80: 8009883a mov r4,r16
8002d84: d9400015 stw r5,0(sp)
8002d88: 80070600 call 8007060 <__sinit>
8002d8c: d9400017 ldw r5,0(sp)
8002d90: 003fe806 br 8002d34 <_puts_r+0x64>
8002d94: 00bfffc4 movi r2,-1
8002d98: 003ff406 br 8002d6c <_puts_r+0x9c>
08002d9c <puts>:
8002d9c: 00820174 movhi r2,2053
8002da0: 200b883a mov r5,r4
8002da4: 1132af17 ldw r4,-13636(r2)
8002da8: 8002cd01 jmpi 8002cd0 <_puts_r>
08002dac <strlen>:
8002dac: 208000cc andi r2,r4,3
8002db0: 10002026 beq r2,zero,8002e34 <strlen+0x88>
8002db4: 20800007 ldb r2,0(r4)
8002db8: 10002026 beq r2,zero,8002e3c <strlen+0x90>
8002dbc: 2005883a mov r2,r4
8002dc0: 00000206 br 8002dcc <strlen+0x20>
8002dc4: 10c00007 ldb r3,0(r2)
8002dc8: 18001826 beq r3,zero,8002e2c <strlen+0x80>
8002dcc: 10800044 addi r2,r2,1
8002dd0: 10c000cc andi r3,r2,3
8002dd4: 183ffb1e bne r3,zero,8002dc4 <strlen+0x18>
8002dd8: 11400017 ldw r5,0(r2)
8002ddc: 01ffbff4 movhi r7,65279
8002de0: 39ffbfc4 addi r7,r7,-257
8002de4: 29c7883a add r3,r5,r7
8002de8: 01a02074 movhi r6,32897
8002dec: 014a303a nor r5,zero,r5
8002df0: 1946703a and r3,r3,r5
8002df4: 31a02004 addi r6,r6,-32640
8002df8: 1986703a and r3,r3,r6
8002dfc: 1800091e bne r3,zero,8002e24 <strlen+0x78>
8002e00: 10800104 addi r2,r2,4
8002e04: 11400017 ldw r5,0(r2)
8002e08: 29c7883a add r3,r5,r7
8002e0c: 014a303a nor r5,zero,r5
8002e10: 1946703a and r3,r3,r5
8002e14: 1986703a and r3,r3,r6
8002e18: 183ff926 beq r3,zero,8002e00 <strlen+0x54>
8002e1c: 00000106 br 8002e24 <strlen+0x78>
8002e20: 10800044 addi r2,r2,1
8002e24: 10c00007 ldb r3,0(r2)
8002e28: 183ffd1e bne r3,zero,8002e20 <strlen+0x74>
8002e2c: 1105c83a sub r2,r2,r4
8002e30: f800283a ret
8002e34: 2005883a mov r2,r4
8002e38: 003fe706 br 8002dd8 <strlen+0x2c>
8002e3c: 0005883a mov r2,zero
8002e40: f800283a ret
08002e44 <___vfprintf_internal_r>:
8002e44: deffbd04 addi sp,sp,-268
8002e48: dfc04215 stw ra,264(sp)
8002e4c: dd003d15 stw r20,244(sp)
8002e50: dcc03c15 stw r19,240(sp)
8002e54: dc003915 stw r16,228(sp)
8002e58: d9000515 stw r4,20(sp)
8002e5c: 2021883a mov r16,r4
8002e60: 2827883a mov r19,r5
8002e64: 3029883a mov r20,r6
8002e68: d9c00615 stw r7,24(sp)
8002e6c: df004115 stw fp,260(sp)
8002e70: ddc04015 stw r23,256(sp)
8002e74: dd803f15 stw r22,252(sp)
8002e78: dd403e15 stw r21,248(sp)
8002e7c: dc803b15 stw r18,236(sp)
8002e80: dc403a15 stw r17,232(sp)
8002e84: 8007bf00 call 8007bf0 <_localeconv_r>
8002e88: 10800017 ldw r2,0(r2)
8002e8c: 1009883a mov r4,r2
8002e90: d8800d15 stw r2,52(sp)
8002e94: 8002dac0 call 8002dac <strlen>
8002e98: d8800b15 stw r2,44(sp)
8002e9c: 80000226 beq r16,zero,8002ea8 <___vfprintf_internal_r+0x64>
8002ea0: 80800e17 ldw r2,56(r16)
8002ea4: 1002da26 beq r2,zero,8003a10 <___vfprintf_internal_r+0xbcc>
8002ea8: 9880030b ldhu r2,12(r19)
8002eac: 10c8000c andi r3,r2,8192
8002eb0: 1800061e bne r3,zero,8002ecc <___vfprintf_internal_r+0x88>
8002eb4: 98c01917 ldw r3,100(r19)
8002eb8: 0137ffc4 movi r4,-8193
8002ebc: 10880014 ori r2,r2,8192
8002ec0: 1906703a and r3,r3,r4
8002ec4: 9880030d sth r2,12(r19)
8002ec8: 98c01915 stw r3,100(r19)
8002ecc: 10c0020c andi r3,r2,8
8002ed0: 18009a26 beq r3,zero,800313c <___vfprintf_internal_r+0x2f8>
8002ed4: 98c00417 ldw r3,16(r19)
8002ed8: 18009826 beq r3,zero,800313c <___vfprintf_internal_r+0x2f8>
8002edc: 1080068c andi r2,r2,26
8002ee0: 10800298 cmpnei r2,r2,10
8002ee4: 10009d26 beq r2,zero,800315c <___vfprintf_internal_r+0x318>
8002ee8: ddc02904 addi r23,sp,164
8002eec: ddc01c15 stw r23,112(sp)
8002ef0: d8001e15 stw zero,120(sp)
8002ef4: d8001d15 stw zero,116(sp)
8002ef8: d8000815 stw zero,32(sp)
8002efc: d8000915 stw zero,36(sp)
8002f00: d8000a15 stw zero,40(sp)
8002f04: b811883a mov r8,r23
8002f08: d8000c15 stw zero,48(sp)
8002f0c: d8001115 stw zero,68(sp)
8002f10: d8000415 stw zero,16(sp)
8002f14: a02d883a mov r22,r20
8002f18: b0800007 ldb r2,0(r22)
8002f1c: 1000a226 beq r2,zero,80031a8 <___vfprintf_internal_r+0x364>
8002f20: 10800960 cmpeqi r2,r2,37
8002f24: 10052e1e bne r2,zero,80043e0 <___vfprintf_internal_r+0x159c>
8002f28: b021883a mov r16,r22
8002f2c: 00000206 br 8002f38 <___vfprintf_internal_r+0xf4>
8002f30: 18009326 beq r3,zero,8003180 <___vfprintf_internal_r+0x33c>
8002f34: 9021883a mov r16,r18
8002f38: 80800047 ldb r2,1(r16)
8002f3c: 84800044 addi r18,r16,1
8002f40: 10c00958 cmpnei r3,r2,37
8002f44: 103ffa1e bne r2,zero,8002f30 <___vfprintf_internal_r+0xec>
8002f48: 95a3c83a sub r17,r18,r22
8002f4c: 88009626 beq r17,zero,80031a8 <___vfprintf_internal_r+0x364>
8002f50: d8c01e17 ldw r3,120(sp)
8002f54: d8801d17 ldw r2,116(sp)
8002f58: 45800015 stw r22,0(r8)
8002f5c: 1c47883a add r3,r3,r17
8002f60: 10800044 addi r2,r2,1
8002f64: d8801d15 stw r2,116(sp)
8002f68: 44400115 stw r17,4(r8)
8002f6c: d8c01e15 stw r3,120(sp)
8002f70: 10800208 cmpgei r2,r2,8
8002f74: 1000851e bne r2,zero,800318c <___vfprintf_internal_r+0x348>
8002f78: 42000204 addi r8,r8,8
8002f7c: d8c00417 ldw r3,16(sp)
8002f80: 80800047 ldb r2,1(r16)
8002f84: 1c47883a add r3,r3,r17
8002f88: d8c00415 stw r3,16(sp)
8002f8c: 10008626 beq r2,zero,80031a8 <___vfprintf_internal_r+0x364>
8002f90: 92800047 ldb r10,1(r18)
8002f94: 95800044 addi r22,r18,1
8002f98: d8001545 stb zero,85(sp)
8002f9c: 0009883a mov r4,zero
8002fa0: 000b883a mov r5,zero
8002fa4: 02ffffc4 movi r11,-1
8002fa8: 0023883a mov r17,zero
8002fac: 0019883a mov r12,zero
8002fb0: b5800044 addi r22,r22,1
8002fb4: 5039883a mov fp,r10
8002fb8: e0bff804 addi r2,fp,-32
8002fbc: 10c01668 cmpgeui r3,r2,89
8002fc0: 18009b1e bne r3,zero,8003230 <___vfprintf_internal_r+0x3ec>
8002fc4: 100490ba slli r2,r2,2
8002fc8: 00c20034 movhi r3,2048
8002fcc: 10c7883a add r3,r2,r3
8002fd0: 188bf617 ldw r2,12248(r3)
8002fd4: 1000683a jmp r2
8002fd8: 08003300 call 800330 <OSCtxSw_SWITCH_PC+0x8002f0>
8002fdc: 08003230 cmpltui zero,at,200
8002fe0: 08003230 cmpltui zero,at,200
8002fe4: 080032f4 orhi zero,at,203
8002fe8: 08003230 cmpltui zero,at,200
8002fec: 08003230 cmpltui zero,at,200
8002ff0: 08003230 cmpltui zero,at,200
8002ff4: 08003230 cmpltui zero,at,200
8002ff8: 08003230 cmpltui zero,at,200
8002ffc: 08003230 cmpltui zero,at,200
8003000: 080032cc andi zero,at,203
8003004: 080032bc xorhi zero,at,202
8003008: 08003230 cmpltui zero,at,200
800300c: 080032a4 muli zero,at,202
8003010: 08003260 cmpeqi zero,at,201
8003014: 08003230 cmpltui zero,at,200
8003018: 08003254 ori zero,at,201
800301c: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
8003020: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
8003024: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
8003028: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
800302c: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
8003030: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
8003034: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
8003038: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
800303c: 08003200 call 800320 <OSCtxSw_SWITCH_PC+0x8002e0>
8003040: 08003230 cmpltui zero,at,200
8003044: 08003230 cmpltui zero,at,200
8003048: 08003230 cmpltui zero,at,200
800304c: 08003230 cmpltui zero,at,200
8003050: 08003230 cmpltui zero,at,200
8003054: 08003230 cmpltui zero,at,200
8003058: 08003230 cmpltui zero,at,200
800305c: 08003230 cmpltui zero,at,200
8003060: 08003230 cmpltui zero,at,200
8003064: 08003230 cmpltui zero,at,200
8003068: 08003814 ori zero,at,224
800306c: 08003734 orhi zero,at,220
8003070: 08003230 cmpltui zero,at,200
8003074: 08003734 orhi zero,at,220
8003078: 08003230 cmpltui zero,at,200
800307c: 08003230 cmpltui zero,at,200
8003080: 08003230 cmpltui zero,at,200
8003084: 08003230 cmpltui zero,at,200
8003088: 08003728 cmpgeui zero,at,220
800308c: 08003230 cmpltui zero,at,200
8003090: 08003230 cmpltui zero,at,200
8003094: 080036f4 orhi zero,at,219
8003098: 08003230 cmpltui zero,at,200
800309c: 08003230 cmpltui zero,at,200
80030a0: 08003230 cmpltui zero,at,200
80030a4: 08003230 cmpltui zero,at,200
80030a8: 08003230 cmpltui zero,at,200
80030ac: 08003934 orhi zero,at,228
80030b0: 08003230 cmpltui zero,at,200
80030b4: 08003230 cmpltui zero,at,200
80030b8: 080038ec andhi zero,at,227
80030bc: 08003230 cmpltui zero,at,200
80030c0: 08003230 cmpltui zero,at,200
80030c4: 08003230 cmpltui zero,at,200
80030c8: 08003230 cmpltui zero,at,200
80030cc: 08003230 cmpltui zero,at,200
80030d0: 08003230 cmpltui zero,at,200
80030d4: 08003230 cmpltui zero,at,200
80030d8: 08003230 cmpltui zero,at,200
80030dc: 08003230 cmpltui zero,at,200
80030e0: 08003230 cmpltui zero,at,200
80030e4: 08003484 addi zero,at,210
80030e8: 08003410 cmplti zero,at,208
80030ec: 08003734 orhi zero,at,220
80030f0: 08003734 orhi zero,at,220
80030f4: 08003734 orhi zero,at,220
80030f8: 08003a04 addi zero,at,232
80030fc: 08003410 cmplti zero,at,208
8003100: 08003230 cmpltui zero,at,200
8003104: 08003230 cmpltui zero,at,200
8003108: 080039f0 cmpltui zero,at,231
800310c: 08003230 cmpltui zero,at,200
8003110: 080036b4 orhi zero,at,218
8003114: 08003674 orhi zero,at,217
8003118: 08003974 orhi zero,at,229
800311c: 08003968 cmpgeui zero,at,229
8003120: 08003230 cmpltui zero,at,200
8003124: 080033b4 orhi zero,at,206
8003128: 08003230 cmpltui zero,at,200
800312c: 08003374 orhi zero,at,205
8003130: 08003230 cmpltui zero,at,200
8003134: 08003230 cmpltui zero,at,200
8003138: 0800332c andhi zero,at,204
800313c: d9000517 ldw r4,20(sp)
8003140: 980b883a mov r5,r19
8003144: 800507c0 call 800507c <__swsetup_r>
8003148: 10074c1e bne r2,zero,8004e7c <___vfprintf_internal_r+0x2038>
800314c: 9880030b ldhu r2,12(r19)
8003150: 1080068c andi r2,r2,26
8003154: 10800298 cmpnei r2,r2,10
8003158: 103f631e bne r2,zero,8002ee8 <___vfprintf_internal_r+0xa4>
800315c: 9880038f ldh r2,14(r19)
8003160: 103f6116 blt r2,zero,8002ee8 <___vfprintf_internal_r+0xa4>
8003164: d9c00617 ldw r7,24(sp)
8003168: d9000517 ldw r4,20(sp)
800316c: a00d883a mov r6,r20
8003170: 980b883a mov r5,r19
8003174: 8004fbc0 call 8004fbc <__sbprintf>
8003178: d8800415 stw r2,16(sp)
800317c: 00001306 br 80031cc <___vfprintf_internal_r+0x388>
8003180: 95a3c83a sub r17,r18,r22
8003184: 883f8226 beq r17,zero,8002f90 <___vfprintf_internal_r+0x14c>
8003188: 003f7106 br 8002f50 <___vfprintf_internal_r+0x10c>
800318c: d9000517 ldw r4,20(sp)
8003190: d9801c04 addi r6,sp,112
8003194: 980b883a mov r5,r19
8003198: 800a3f80 call 800a3f8 <__sprint_r>
800319c: 1000081e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80031a0: b811883a mov r8,r23
80031a4: 003f7506 br 8002f7c <___vfprintf_internal_r+0x138>
80031a8: d8801e17 ldw r2,120(sp)
80031ac: 10000426 beq r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80031b0: d9000517 ldw r4,20(sp)
80031b4: d9801c04 addi r6,sp,112
80031b8: 980b883a mov r5,r19
80031bc: 800a3f80 call 800a3f8 <__sprint_r>
80031c0: 9880030b ldhu r2,12(r19)
80031c4: 1080100c andi r2,r2,64
80031c8: 10072c1e bne r2,zero,8004e7c <___vfprintf_internal_r+0x2038>
80031cc: d8800417 ldw r2,16(sp)
80031d0: dfc04217 ldw ra,264(sp)
80031d4: df004117 ldw fp,260(sp)
80031d8: ddc04017 ldw r23,256(sp)
80031dc: dd803f17 ldw r22,252(sp)
80031e0: dd403e17 ldw r21,248(sp)
80031e4: dd003d17 ldw r20,244(sp)
80031e8: dcc03c17 ldw r19,240(sp)
80031ec: dc803b17 ldw r18,236(sp)
80031f0: dc403a17 ldw r17,232(sp)
80031f4: dc003917 ldw r16,228(sp)
80031f8: dec04304 addi sp,sp,268
80031fc: f800283a ret
8003200: 0023883a mov r17,zero
8003204: e0bff404 addi r2,fp,-48
8003208: b5800044 addi r22,r22,1
800320c: 8c4002a4 muli r17,r17,10
8003210: b73fffc7 ldb fp,-1(r22)
8003214: 1463883a add r17,r2,r17
8003218: e0bff404 addi r2,fp,-48
800321c: 10c002b0 cmpltui r3,r2,10
8003220: 183ff91e bne r3,zero,8003208 <___vfprintf_internal_r+0x3c4>
8003224: e0bff804 addi r2,fp,-32
8003228: 10c01668 cmpgeui r3,r2,89
800322c: 183f6526 beq r3,zero,8002fc4 <___vfprintf_internal_r+0x180>
8003230: 21003fcc andi r4,r4,255
8003234: 20066d1e bne r4,zero,8004bec <___vfprintf_internal_r+0x1da8>
8003238: e03fdb26 beq fp,zero,80031a8 <___vfprintf_internal_r+0x364>
800323c: df001f05 stb fp,124(sp)
8003240: d8001545 stb zero,85(sp)
8003244: 05400044 movi r21,1
8003248: 05000044 movi r20,1
800324c: dc001f04 addi r16,sp,124
8003250: 00009506 br 80034a8 <___vfprintf_internal_r+0x664>
8003254: 63002014 ori r12,r12,128
8003258: b2800007 ldb r10,0(r22)
800325c: 003f5406 br 8002fb0 <___vfprintf_internal_r+0x16c>
8003260: b7000007 ldb fp,0(r22)
8003264: b0c00044 addi r3,r22,1
8003268: e0800aa0 cmpeqi r2,fp,42
800326c: 1007411e bne r2,zero,8004f74 <___vfprintf_internal_r+0x2130>
8003270: e0bff404 addi r2,fp,-48
8003274: 118002b0 cmpltui r6,r2,10
8003278: 182d883a mov r22,r3
800327c: 0017883a mov r11,zero
8003280: 303f4d26 beq r6,zero,8002fb8 <___vfprintf_internal_r+0x174>
8003284: b5800044 addi r22,r22,1
8003288: 5ac002a4 muli r11,r11,10
800328c: b73fffc7 ldb fp,-1(r22)
8003290: 5897883a add r11,r11,r2
8003294: e0bff404 addi r2,fp,-48
8003298: 10c002b0 cmpltui r3,r2,10
800329c: 183ff91e bne r3,zero,8003284 <___vfprintf_internal_r+0x440>
80032a0: 003f4506 br 8002fb8 <___vfprintf_internal_r+0x174>
80032a4: b7000003 ldbu fp,0(r22)
80032a8: e2803fcc andi r10,fp,255
80032ac: 5280201c xori r10,r10,128
80032b0: 63000114 ori r12,r12,4
80032b4: 52bfe004 addi r10,r10,-128
80032b8: 003f3d06 br 8002fb0 <___vfprintf_internal_r+0x16c>
80032bc: 01000044 movi r4,1
80032c0: 01400ac4 movi r5,43
80032c4: b2800007 ldb r10,0(r22)
80032c8: 003f3906 br 8002fb0 <___vfprintf_internal_r+0x16c>
80032cc: d8800617 ldw r2,24(sp)
80032d0: b7000003 ldbu fp,0(r22)
80032d4: 14400017 ldw r17,0(r2)
80032d8: 10800104 addi r2,r2,4
80032dc: 8804d716 blt r17,zero,800463c <___vfprintf_internal_r+0x17f8>
80032e0: d8800615 stw r2,24(sp)
80032e4: e2803fcc andi r10,fp,255
80032e8: 5280201c xori r10,r10,128
80032ec: 52bfe004 addi r10,r10,-128
80032f0: 003f2f06 br 8002fb0 <___vfprintf_internal_r+0x16c>
80032f4: 63000054 ori r12,r12,1
80032f8: b2800007 ldb r10,0(r22)
80032fc: 003f2c06 br 8002fb0 <___vfprintf_internal_r+0x16c>
8003300: 28803fcc andi r2,r5,255
8003304: 1080201c xori r2,r2,128
8003308: 10bfe004 addi r2,r2,-128
800330c: b7000003 ldbu fp,0(r22)
8003310: 103ff41e bne r2,zero,80032e4 <___vfprintf_internal_r+0x4a0>
8003314: e2803fcc andi r10,fp,255
8003318: 5280201c xori r10,r10,128
800331c: 01000044 movi r4,1
8003320: 01400804 movi r5,32
8003324: 52bfe004 addi r10,r10,-128
8003328: 003f2106 br 8002fb0 <___vfprintf_internal_r+0x16c>
800332c: 21003fcc andi r4,r4,255
8003330: 2006b31e bne r4,zero,8004e00 <___vfprintf_internal_r+0x1fbc>
8003334: 00820134 movhi r2,2052
8003338: 109d2004 addi r2,r2,29824
800333c: d8800c15 stw r2,48(sp)
8003340: 6080080c andi r2,r12,32
8003344: 10017026 beq r2,zero,8003908 <___vfprintf_internal_r+0xac4>
8003348: d8800617 ldw r2,24(sp)
800334c: 15400017 ldw r21,0(r2)
8003350: 15000117 ldw r20,4(r2)
8003354: 10800204 addi r2,r2,8
8003358: d8800615 stw r2,24(sp)
800335c: 6080004c andi r2,r12,1
8003360: 10000226 beq r2,zero,800336c <___vfprintf_internal_r+0x528>
8003364: ad04b03a or r2,r21,r20
8003368: 1004a71e bne r2,zero,8004608 <___vfprintf_internal_r+0x17c4>
800336c: 00800084 movi r2,2
8003370: 00018f06 br 80039b0 <___vfprintf_internal_r+0xb6c>
8003374: 21003fcc andi r4,r4,255
8003378: 20069f1e bne r4,zero,8004df8 <___vfprintf_internal_r+0x1fb4>
800337c: 6080080c andi r2,r12,32
8003380: 1001b41e bne r2,zero,8003a54 <___vfprintf_internal_r+0xc10>
8003384: d8800617 ldw r2,24(sp)
8003388: 60c0040c andi r3,r12,16
800338c: 15400017 ldw r21,0(r2)
8003390: 10800104 addi r2,r2,4
8003394: 18016e1e bne r3,zero,8003950 <___vfprintf_internal_r+0xb0c>
8003398: 60c0100c andi r3,r12,64
800339c: 18059f26 beq r3,zero,8004a1c <___vfprintf_internal_r+0x1bd8>
80033a0: d8800615 stw r2,24(sp)
80033a4: ad7fffcc andi r21,r21,65535
80033a8: 0029883a mov r20,zero
80033ac: 00800044 movi r2,1
80033b0: 00017f06 br 80039b0 <___vfprintf_internal_r+0xb6c>
80033b4: d8800617 ldw r2,24(sp)
80033b8: d8001545 stb zero,85(sp)
80033bc: 14000017 ldw r16,0(r2)
80033c0: 14800104 addi r18,r2,4
80033c4: 8004c726 beq r16,zero,80046e4 <___vfprintf_internal_r+0x18a0>
80033c8: da000e15 stw r8,56(sp)
80033cc: db000715 stw r12,28(sp)
80033d0: 58bfffe0 cmpeqi r2,r11,-1
80033d4: 1005691e bne r2,zero,800497c <___vfprintf_internal_r+0x1b38>
80033d8: 580d883a mov r6,r11
80033dc: 000b883a mov r5,zero
80033e0: 8009883a mov r4,r16
80033e4: dac00615 stw r11,24(sp)
80033e8: 80085d00 call 80085d0 <memchr>
80033ec: dac00617 ldw r11,24(sp)
80033f0: db000717 ldw r12,28(sp)
80033f4: da000e17 ldw r8,56(sp)
80033f8: 10066726 beq r2,zero,8004d98 <___vfprintf_internal_r+0x1f54>
80033fc: 1429c83a sub r20,r2,r16
8003400: a02b883a mov r21,r20
8003404: a005f716 blt r20,zero,8004be4 <___vfprintf_internal_r+0x1da0>
8003408: dc800615 stw r18,24(sp)
800340c: 00002606 br 80034a8 <___vfprintf_internal_r+0x664>
8003410: 21003fcc andi r4,r4,255
8003414: 2006761e bne r4,zero,8004df0 <___vfprintf_internal_r+0x1fac>
8003418: 6080080c andi r2,r12,32
800341c: 10017f1e bne r2,zero,8003a1c <___vfprintf_internal_r+0xbd8>
8003420: d8800617 ldw r2,24(sp)
8003424: 60c0040c andi r3,r12,16
8003428: 10800104 addi r2,r2,4
800342c: 1801001e bne r3,zero,8003830 <___vfprintf_internal_r+0x9ec>
8003430: 60c0100c andi r3,r12,64
8003434: 1800fe26 beq r3,zero,8003830 <___vfprintf_internal_r+0x9ec>
8003438: d8c00617 ldw r3,24(sp)
800343c: d8800615 stw r2,24(sp)
8003440: 1d40000f ldh r21,0(r3)
8003444: a829d7fa srai r20,r21,31
8003448: a005883a mov r2,r20
800344c: 1000fe16 blt r2,zero,8003848 <___vfprintf_internal_r+0xa04>
8003450: 58bfffd8 cmpnei r2,r11,-1
8003454: db401543 ldbu r13,85(sp)
8003458: 10018526 beq r2,zero,8003a70 <___vfprintf_internal_r+0xc2c>
800345c: 00ffdfc4 movi r3,-129
8003460: ad04b03a or r2,r21,r20
8003464: 60d8703a and r12,r12,r3
8003468: 1001811e bne r2,zero,8003a70 <___vfprintf_internal_r+0xc2c>
800346c: 5801831e bne r11,zero,8003a7c <___vfprintf_internal_r+0xc38>
8003470: 6025883a mov r18,r12
8003474: 0017883a mov r11,zero
8003478: 0029883a mov r20,zero
800347c: b821883a mov r16,r23
8003480: 00018306 br 8003a90 <___vfprintf_internal_r+0xc4c>
8003484: d8c00617 ldw r3,24(sp)
8003488: d8001545 stb zero,85(sp)
800348c: 05400044 movi r21,1
8003490: 18800017 ldw r2,0(r3)
8003494: 18c00104 addi r3,r3,4
8003498: d8c00615 stw r3,24(sp)
800349c: d8801f05 stb r2,124(sp)
80034a0: 05000044 movi r20,1
80034a4: dc001f04 addi r16,sp,124
80034a8: 6025883a mov r18,r12
80034ac: 0017883a mov r11,zero
80034b0: d8000715 stw zero,28(sp)
80034b4: 9380008c andi r14,r18,2
80034b8: 70000126 beq r14,zero,80034c0 <___vfprintf_internal_r+0x67c>
80034bc: ad400084 addi r21,r21,2
80034c0: 9340210c andi r13,r18,132
80034c4: d8c01e17 ldw r3,120(sp)
80034c8: 6800021e bne r13,zero,80034d4 <___vfprintf_internal_r+0x690>
80034cc: 8d4fc83a sub r7,r17,r21
80034d0: 01c2ce16 blt zero,r7,800400c <___vfprintf_internal_r+0x11c8>
80034d4: d8801547 ldb r2,85(sp)
80034d8: 10000c26 beq r2,zero,800350c <___vfprintf_internal_r+0x6c8>
80034dc: d8801d17 ldw r2,116(sp)
80034e0: d9001544 addi r4,sp,85
80034e4: 18c00044 addi r3,r3,1
80034e8: 10800044 addi r2,r2,1
80034ec: 41000015 stw r4,0(r8)
80034f0: 01000044 movi r4,1
80034f4: d8801d15 stw r2,116(sp)
80034f8: 41000115 stw r4,4(r8)
80034fc: d8c01e15 stw r3,120(sp)
8003500: 10800208 cmpgei r2,r2,8
8003504: 1002fb1e bne r2,zero,80040f4 <___vfprintf_internal_r+0x12b0>
8003508: 42000204 addi r8,r8,8
800350c: 70000c26 beq r14,zero,8003540 <___vfprintf_internal_r+0x6fc>
8003510: d8801d17 ldw r2,116(sp)
8003514: d9001584 addi r4,sp,86
8003518: 18c00084 addi r3,r3,2
800351c: 10800044 addi r2,r2,1
8003520: 41000015 stw r4,0(r8)
8003524: 01000084 movi r4,2
8003528: d8801d15 stw r2,116(sp)
800352c: 41000115 stw r4,4(r8)
8003530: d8c01e15 stw r3,120(sp)
8003534: 10800208 cmpgei r2,r2,8
8003538: 1002fc1e bne r2,zero,800412c <___vfprintf_internal_r+0x12e8>
800353c: 42000204 addi r8,r8,8
8003540: 6b402018 cmpnei r13,r13,128
8003544: 6801cf26 beq r13,zero,8003c84 <___vfprintf_internal_r+0xe40>
8003548: 5d0fc83a sub r7,r11,r20
800354c: 01c20616 blt zero,r7,8003d68 <___vfprintf_internal_r+0xf24>
8003550: 9080400c andi r2,r18,256
8003554: 10017c1e bne r2,zero,8003b48 <___vfprintf_internal_r+0xd04>
8003558: d8801d17 ldw r2,116(sp)
800355c: 1d07883a add r3,r3,r20
8003560: 44000015 stw r16,0(r8)
8003564: 10800044 addi r2,r2,1
8003568: d8801d15 stw r2,116(sp)
800356c: 45000115 stw r20,4(r8)
8003570: d8c01e15 stw r3,120(sp)
8003574: 10800208 cmpgei r2,r2,8
8003578: 1002571e bne r2,zero,8003ed8 <___vfprintf_internal_r+0x1094>
800357c: 42000204 addi r8,r8,8
8003580: 9480010c andi r18,r18,4
8003584: 90000226 beq r18,zero,8003590 <___vfprintf_internal_r+0x74c>
8003588: 8d61c83a sub r16,r17,r21
800358c: 04000916 blt zero,r16,80035b4 <___vfprintf_internal_r+0x770>
8003590: 8d40010e bge r17,r21,8003598 <___vfprintf_internal_r+0x754>
8003594: a823883a mov r17,r21
8003598: d8800417 ldw r2,16(sp)
800359c: 1445883a add r2,r2,r17
80035a0: d8800415 stw r2,16(sp)
80035a4: 1802241e bne r3,zero,8003e38 <___vfprintf_internal_r+0xff4>
80035a8: d8001d15 stw zero,116(sp)
80035ac: b811883a mov r8,r23
80035b0: 003e5906 br 8002f18 <___vfprintf_internal_r+0xd4>
80035b4: 03020134 movhi r12,2052
80035b8: 81000450 cmplti r4,r16,17
80035bc: 631d2b84 addi r12,r12,29870
80035c0: d8801d17 ldw r2,116(sp)
80035c4: 20001c1e bne r4,zero,8003638 <___vfprintf_internal_r+0x7f4>
80035c8: 04800404 movi r18,16
80035cc: dd000517 ldw r20,20(sp)
80035d0: 6039883a mov fp,r12
80035d4: 00000406 br 80035e8 <___vfprintf_internal_r+0x7a4>
80035d8: 843ffc04 addi r16,r16,-16
80035dc: 81000448 cmpgei r4,r16,17
80035e0: 42000204 addi r8,r8,8
80035e4: 20001326 beq r4,zero,8003634 <___vfprintf_internal_r+0x7f0>
80035e8: 10800044 addi r2,r2,1
80035ec: 18c00404 addi r3,r3,16
80035f0: 47000015 stw fp,0(r8)
80035f4: 44800115 stw r18,4(r8)
80035f8: d8c01e15 stw r3,120(sp)
80035fc: d8801d15 stw r2,116(sp)
8003600: 11000208 cmpgei r4,r2,8
8003604: 203ff426 beq r4,zero,80035d8 <___vfprintf_internal_r+0x794>
8003608: d9801c04 addi r6,sp,112
800360c: 980b883a mov r5,r19
8003610: a009883a mov r4,r20
8003614: 800a3f80 call 800a3f8 <__sprint_r>
8003618: 103ee91e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
800361c: 843ffc04 addi r16,r16,-16
8003620: 81000448 cmpgei r4,r16,17
8003624: d8c01e17 ldw r3,120(sp)
8003628: d8801d17 ldw r2,116(sp)
800362c: b811883a mov r8,r23
8003630: 203fed1e bne r4,zero,80035e8 <___vfprintf_internal_r+0x7a4>
8003634: e019883a mov r12,fp
8003638: 10800044 addi r2,r2,1
800363c: 1c07883a add r3,r3,r16
8003640: d8801d15 stw r2,116(sp)
8003644: 43000015 stw r12,0(r8)
8003648: 44000115 stw r16,4(r8)
800364c: d8c01e15 stw r3,120(sp)
8003650: 10800210 cmplti r2,r2,8
8003654: 103fce1e bne r2,zero,8003590 <___vfprintf_internal_r+0x74c>
8003658: d9000517 ldw r4,20(sp)
800365c: d9801c04 addi r6,sp,112
8003660: 980b883a mov r5,r19
8003664: 800a3f80 call 800a3f8 <__sprint_r>
8003668: 103ed51e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
800366c: d8c01e17 ldw r3,120(sp)
8003670: 003fc706 br 8003590 <___vfprintf_internal_r+0x74c>
8003674: 21003fcc andi r4,r4,255
8003678: 2005d91e bne r4,zero,8004de0 <___vfprintf_internal_r+0x1f9c>
800367c: 6080080c andi r2,r12,32
8003680: 1000ed1e bne r2,zero,8003a38 <___vfprintf_internal_r+0xbf4>
8003684: d8800617 ldw r2,24(sp)
8003688: 60c0040c andi r3,r12,16
800368c: 15400017 ldw r21,0(r2)
8003690: 10800104 addi r2,r2,4
8003694: 18001e1e bne r3,zero,8003710 <___vfprintf_internal_r+0x8cc>
8003698: 60c0100c andi r3,r12,64
800369c: 1804db26 beq r3,zero,8004a0c <___vfprintf_internal_r+0x1bc8>
80036a0: d8800615 stw r2,24(sp)
80036a4: ad7fffcc andi r21,r21,65535
80036a8: 0029883a mov r20,zero
80036ac: 0005883a mov r2,zero
80036b0: 0000bf06 br 80039b0 <___vfprintf_internal_r+0xb6c>
80036b4: 21003fcc andi r4,r4,255
80036b8: 2005cb1e bne r4,zero,8004de8 <___vfprintf_internal_r+0x1fa4>
80036bc: d9000617 ldw r4,24(sp)
80036c0: 6080080c andi r2,r12,32
80036c4: 20c00104 addi r3,r4,4
80036c8: 1003d51e bne r2,zero,8004620 <___vfprintf_internal_r+0x17dc>
80036cc: 6080040c andi r2,r12,16
80036d0: 1004301e bne r2,zero,8004794 <___vfprintf_internal_r+0x1950>
80036d4: 6300100c andi r12,r12,64
80036d8: 60042e26 beq r12,zero,8004794 <___vfprintf_internal_r+0x1950>
80036dc: d8800617 ldw r2,24(sp)
80036e0: d8c00615 stw r3,24(sp)
80036e4: d8c00417 ldw r3,16(sp)
80036e8: 10800017 ldw r2,0(r2)
80036ec: 10c0000d sth r3,0(r2)
80036f0: 003e0906 br 8002f18 <___vfprintf_internal_r+0xd4>
80036f4: 21003fcc andi r4,r4,255
80036f8: 2005c31e bne r4,zero,8004e08 <___vfprintf_internal_r+0x1fc4>
80036fc: 6080080c andi r2,r12,32
8003700: 63000414 ori r12,r12,16
8003704: 1000cc1e bne r2,zero,8003a38 <___vfprintf_internal_r+0xbf4>
8003708: d8800617 ldw r2,24(sp)
800370c: 10800104 addi r2,r2,4
8003710: d8c00617 ldw r3,24(sp)
8003714: 0029883a mov r20,zero
8003718: d8800615 stw r2,24(sp)
800371c: 1d400017 ldw r21,0(r3)
8003720: 0005883a mov r2,zero
8003724: 0000a206 br 80039b0 <___vfprintf_internal_r+0xb6c>
8003728: 63000214 ori r12,r12,8
800372c: b2800007 ldb r10,0(r22)
8003730: 003e1f06 br 8002fb0 <___vfprintf_internal_r+0x16c>
8003734: 21003fcc andi r4,r4,255
8003738: 2005b71e bne r4,zero,8004e18 <___vfprintf_internal_r+0x1fd4>
800373c: d8c00617 ldw r3,24(sp)
8003740: 00a00034 movhi r2,32768
8003744: 10bfffc4 addi r2,r2,-1
8003748: 1d000117 ldw r20,4(r3)
800374c: 1c800017 ldw r18,0(r3)
8003750: 01dffc34 movhi r7,32752
8003754: a0a0703a and r16,r20,r2
8003758: 01bfffc4 movi r6,-1
800375c: 18800204 addi r2,r3,8
8003760: 39ffffc4 addi r7,r7,-1
8003764: 9009883a mov r4,r18
8003768: 800b883a mov r5,r16
800376c: da000f15 stw r8,60(sp)
8003770: dac00e15 stw r11,56(sp)
8003774: db000715 stw r12,28(sp)
8003778: dd000a15 stw r20,40(sp)
800377c: dc800915 stw r18,36(sp)
8003780: d8800615 stw r2,24(sp)
8003784: 800f5580 call 800f558 <__unorddf2>
8003788: db000717 ldw r12,28(sp)
800378c: dac00e17 ldw r11,56(sp)
8003790: da000f17 ldw r8,60(sp)
8003794: 1003161e bne r2,zero,80043f0 <___vfprintf_internal_r+0x15ac>
8003798: 01dffc34 movhi r7,32752
800379c: 01bfffc4 movi r6,-1
80037a0: 39ffffc4 addi r7,r7,-1
80037a4: 9009883a mov r4,r18
80037a8: 800b883a mov r5,r16
80037ac: 800e4700 call 800e470 <__ledf2>
80037b0: db000717 ldw r12,28(sp)
80037b4: dac00e17 ldw r11,56(sp)
80037b8: da000f17 ldw r8,60(sp)
80037bc: 00830c0e bge zero,r2,80043f0 <___vfprintf_internal_r+0x15ac>
80037c0: 000d883a mov r6,zero
80037c4: 000f883a mov r7,zero
80037c8: 9009883a mov r4,r18
80037cc: a00b883a mov r5,r20
80037d0: da000e15 stw r8,56(sp)
80037d4: 800e4700 call 800e470 <__ledf2>
80037d8: db000717 ldw r12,28(sp)
80037dc: da000e17 ldw r8,56(sp)
80037e0: 1004e216 blt r2,zero,8004b6c <___vfprintf_internal_r+0x1d28>
80037e4: db401543 ldbu r13,85(sp)
80037e8: e0801210 cmplti r2,fp,72
80037ec: 1004cb1e bne r2,zero,8004b1c <___vfprintf_internal_r+0x1cd8>
80037f0: 04020134 movhi r16,2052
80037f4: 841d1804 addi r16,r16,29792
80037f8: 04bfdfc4 movi r18,-129
80037fc: 64a4703a and r18,r12,r18
8003800: 054000c4 movi r21,3
8003804: 050000c4 movi r20,3
8003808: 0017883a mov r11,zero
800380c: d8000715 stw zero,28(sp)
8003810: 0000a306 br 8003aa0 <___vfprintf_internal_r+0xc5c>
8003814: 21003fcc andi r4,r4,255
8003818: 20057d1e bne r4,zero,8004e10 <___vfprintf_internal_r+0x1fcc>
800381c: 6080080c andi r2,r12,32
8003820: 63000414 ori r12,r12,16
8003824: 10007d1e bne r2,zero,8003a1c <___vfprintf_internal_r+0xbd8>
8003828: d8800617 ldw r2,24(sp)
800382c: 10800104 addi r2,r2,4
8003830: d8c00617 ldw r3,24(sp)
8003834: 1d400017 ldw r21,0(r3)
8003838: d8800615 stw r2,24(sp)
800383c: a829d7fa srai r20,r21,31
8003840: a005883a mov r2,r20
8003844: 103f020e bge r2,zero,8003450 <___vfprintf_internal_r+0x60c>
8003848: 056bc83a sub r21,zero,r21
800384c: a804c03a cmpne r2,r21,zero
8003850: 0529c83a sub r20,zero,r20
8003854: a0a9c83a sub r20,r20,r2
8003858: 00800b44 movi r2,45
800385c: d8801545 stb r2,85(sp)
8003860: 58ffffe0 cmpeqi r3,r11,-1
8003864: 03400b44 movi r13,45
8003868: 00800044 movi r2,1
800386c: 18005426 beq r3,zero,80039c0 <___vfprintf_internal_r+0xb7c>
8003870: 10c00060 cmpeqi r3,r2,1
8003874: 18007e1e bne r3,zero,8003a70 <___vfprintf_internal_r+0xc2c>
8003878: 108000a0 cmpeqi r2,r2,2
800387c: 1002371e bne r2,zero,800415c <___vfprintf_internal_r+0x1318>
8003880: b807883a mov r3,r23
8003884: 00000106 br 800388c <___vfprintf_internal_r+0xa48>
8003888: 8007883a mov r3,r16
800388c: a808d0fa srli r4,r21,3
8003890: a00a977a slli r5,r20,29
8003894: a028d0fa srli r20,r20,3
8003898: ad4001cc andi r21,r21,7
800389c: a8800c04 addi r2,r21,48
80038a0: 292ab03a or r21,r5,r4
80038a4: 18bfffc5 stb r2,-1(r3)
80038a8: ad08b03a or r4,r21,r20
80038ac: 1c3fffc4 addi r16,r3,-1
80038b0: 203ff51e bne r4,zero,8003888 <___vfprintf_internal_r+0xa44>
80038b4: 6100004c andi r4,r12,1
80038b8: 2000a026 beq r4,zero,8003b3c <___vfprintf_internal_r+0xcf8>
80038bc: 10803fcc andi r2,r2,255
80038c0: 1080201c xori r2,r2,128
80038c4: 10bfe004 addi r2,r2,-128
80038c8: 10800c18 cmpnei r2,r2,48
80038cc: 10009b26 beq r2,zero,8003b3c <___vfprintf_internal_r+0xcf8>
80038d0: 18ffff84 addi r3,r3,-2
80038d4: 00800c04 movi r2,48
80038d8: 80bfffc5 stb r2,-1(r16)
80038dc: b8e9c83a sub r20,r23,r3
80038e0: 6025883a mov r18,r12
80038e4: 1821883a mov r16,r3
80038e8: 00006906 br 8003a90 <___vfprintf_internal_r+0xc4c>
80038ec: 21003fcc andi r4,r4,255
80038f0: 2005391e bne r4,zero,8004dd8 <___vfprintf_internal_r+0x1f94>
80038f4: 00820134 movhi r2,2052
80038f8: 109d1b04 addi r2,r2,29804
80038fc: d8800c15 stw r2,48(sp)
8003900: 6080080c andi r2,r12,32
8003904: 103e901e bne r2,zero,8003348 <___vfprintf_internal_r+0x504>
8003908: d8c00617 ldw r3,24(sp)
800390c: 6080040c andi r2,r12,16
8003910: 1d400017 ldw r21,0(r3)
8003914: 18c00104 addi r3,r3,4
8003918: d8c00615 stw r3,24(sp)
800391c: 1002ae1e bne r2,zero,80043d8 <___vfprintf_internal_r+0x1594>
8003920: 6080100c andi r2,r12,64
8003924: 1002ac26 beq r2,zero,80043d8 <___vfprintf_internal_r+0x1594>
8003928: ad7fffcc andi r21,r21,65535
800392c: 0029883a mov r20,zero
8003930: 003e8a06 br 800335c <___vfprintf_internal_r+0x518>
8003934: 21003fcc andi r4,r4,255
8003938: 2005391e bne r4,zero,8004e20 <___vfprintf_internal_r+0x1fdc>
800393c: 6080080c andi r2,r12,32
8003940: 63000414 ori r12,r12,16
8003944: 1000431e bne r2,zero,8003a54 <___vfprintf_internal_r+0xc10>
8003948: d8800617 ldw r2,24(sp)
800394c: 10800104 addi r2,r2,4
8003950: d8c00617 ldw r3,24(sp)
8003954: 0029883a mov r20,zero
8003958: d8800615 stw r2,24(sp)
800395c: 1d400017 ldw r21,0(r3)
8003960: 00800044 movi r2,1
8003964: 00001206 br 80039b0 <___vfprintf_internal_r+0xb6c>
8003968: 63000814 ori r12,r12,32
800396c: b2800007 ldb r10,0(r22)
8003970: 003d8f06 br 8002fb0 <___vfprintf_internal_r+0x16c>
8003974: d8c00617 ldw r3,24(sp)
8003978: 00800c04 movi r2,48
800397c: d8801585 stb r2,86(sp)
8003980: 00801e04 movi r2,120
8003984: 01020134 movhi r4,2052
8003988: d88015c5 stb r2,87(sp)
800398c: 1d400017 ldw r21,0(r3)
8003990: 18800104 addi r2,r3,4
8003994: d8800615 stw r2,24(sp)
8003998: 209d2004 addi r2,r4,29824
800399c: d8800c15 stw r2,48(sp)
80039a0: 0029883a mov r20,zero
80039a4: 63000094 ori r12,r12,2
80039a8: 00800084 movi r2,2
80039ac: 07001e04 movi fp,120
80039b0: d8001545 stb zero,85(sp)
80039b4: 58ffffe0 cmpeqi r3,r11,-1
80039b8: 001b883a mov r13,zero
80039bc: 183fac1e bne r3,zero,8003870 <___vfprintf_internal_r+0xa2c>
80039c0: 04bfdfc4 movi r18,-129
80039c4: ad06b03a or r3,r21,r20
80039c8: 64a4703a and r18,r12,r18
80039cc: 18018d1e bne r3,zero,8004004 <___vfprintf_internal_r+0x11c0>
80039d0: 5803b91e bne r11,zero,80048b8 <___vfprintf_internal_r+0x1a74>
80039d4: 103ea71e bne r2,zero,8003474 <___vfprintf_internal_r+0x630>
80039d8: 6500004c andi r20,r12,1
80039dc: a0028226 beq r20,zero,80043e8 <___vfprintf_internal_r+0x15a4>
80039e0: 00800c04 movi r2,48
80039e4: d88028c5 stb r2,163(sp)
80039e8: dc0028c4 addi r16,sp,163
80039ec: 00002806 br 8003a90 <___vfprintf_internal_r+0xc4c>
80039f0: b2800007 ldb r10,0(r22)
80039f4: 50801b18 cmpnei r2,r10,108
80039f8: 10032926 beq r2,zero,80046a0 <___vfprintf_internal_r+0x185c>
80039fc: 63000414 ori r12,r12,16
8003a00: 003d6b06 br 8002fb0 <___vfprintf_internal_r+0x16c>
8003a04: 63001014 ori r12,r12,64
8003a08: b2800007 ldb r10,0(r22)
8003a0c: 003d6806 br 8002fb0 <___vfprintf_internal_r+0x16c>
8003a10: d9000517 ldw r4,20(sp)
8003a14: 80070600 call 8007060 <__sinit>
8003a18: 003d2306 br 8002ea8 <___vfprintf_internal_r+0x64>
8003a1c: d8c00617 ldw r3,24(sp)
8003a20: 18800117 ldw r2,4(r3)
8003a24: 1d400017 ldw r21,0(r3)
8003a28: 18c00204 addi r3,r3,8
8003a2c: d8c00615 stw r3,24(sp)
8003a30: 1029883a mov r20,r2
8003a34: 003e8506 br 800344c <___vfprintf_internal_r+0x608>
8003a38: d8c00617 ldw r3,24(sp)
8003a3c: 0005883a mov r2,zero
8003a40: 1d400017 ldw r21,0(r3)
8003a44: 1d000117 ldw r20,4(r3)
8003a48: 18c00204 addi r3,r3,8
8003a4c: d8c00615 stw r3,24(sp)
8003a50: 003fd706 br 80039b0 <___vfprintf_internal_r+0xb6c>
8003a54: d8c00617 ldw r3,24(sp)
8003a58: 00800044 movi r2,1
8003a5c: 1d400017 ldw r21,0(r3)
8003a60: 1d000117 ldw r20,4(r3)
8003a64: 18c00204 addi r3,r3,8
8003a68: d8c00615 stw r3,24(sp)
8003a6c: 003fd006 br 80039b0 <___vfprintf_internal_r+0xb6c>
8003a70: a000111e bne r20,zero,8003ab8 <___vfprintf_internal_r+0xc74>
8003a74: a88002a8 cmpgeui r2,r21,10
8003a78: 10000f1e bne r2,zero,8003ab8 <___vfprintf_internal_r+0xc74>
8003a7c: ad400c04 addi r21,r21,48
8003a80: dd4028c5 stb r21,163(sp)
8003a84: 6025883a mov r18,r12
8003a88: 05000044 movi r20,1
8003a8c: dc0028c4 addi r16,sp,163
8003a90: 582b883a mov r21,r11
8003a94: 5d00010e bge r11,r20,8003a9c <___vfprintf_internal_r+0xc58>
8003a98: a02b883a mov r21,r20
8003a9c: d8000715 stw zero,28(sp)
8003aa0: 6b403fcc andi r13,r13,255
8003aa4: 6b40201c xori r13,r13,128
8003aa8: 6b7fe004 addi r13,r13,-128
8003aac: 683e8126 beq r13,zero,80034b4 <___vfprintf_internal_r+0x670>
8003ab0: ad400044 addi r21,r21,1
8003ab4: 003e7f06 br 80034b4 <___vfprintf_internal_r+0x670>
8003ab8: dc400e15 stw r17,56(sp)
8003abc: b821883a mov r16,r23
8003ac0: a023883a mov r17,r20
8003ac4: db000715 stw r12,28(sp)
8003ac8: 9829883a mov r20,r19
8003acc: dac00f15 stw r11,60(sp)
8003ad0: 4025883a mov r18,r8
8003ad4: 6827883a mov r19,r13
8003ad8: 00000206 br 8003ae4 <___vfprintf_internal_r+0xca0>
8003adc: 102b883a mov r21,r2
8003ae0: 1823883a mov r17,r3
8003ae4: a809883a mov r4,r21
8003ae8: 880b883a mov r5,r17
8003aec: 01800284 movi r6,10
8003af0: 000f883a mov r7,zero
8003af4: 800c9c00 call 800c9c0 <__umoddi3>
8003af8: 10800c04 addi r2,r2,48
8003afc: 843fffc4 addi r16,r16,-1
8003b00: a809883a mov r4,r21
8003b04: 880b883a mov r5,r17
8003b08: 80800005 stb r2,0(r16)
8003b0c: 01800284 movi r6,10
8003b10: 000f883a mov r7,zero
8003b14: 800c4280 call 800c428 <__udivdi3>
8003b18: 883ff01e bne r17,zero,8003adc <___vfprintf_internal_r+0xc98>
8003b1c: ad4002a8 cmpgeui r21,r21,10
8003b20: a83fee1e bne r21,zero,8003adc <___vfprintf_internal_r+0xc98>
8003b24: db000717 ldw r12,28(sp)
8003b28: dc400e17 ldw r17,56(sp)
8003b2c: dac00f17 ldw r11,60(sp)
8003b30: 981b883a mov r13,r19
8003b34: 9011883a mov r8,r18
8003b38: a027883a mov r19,r20
8003b3c: bc29c83a sub r20,r23,r16
8003b40: 6025883a mov r18,r12
8003b44: 003fd206 br 8003a90 <___vfprintf_internal_r+0xc4c>
8003b48: e2801990 cmplti r10,fp,102
8003b4c: 5000ea1e bne r10,zero,8003ef8 <___vfprintf_internal_r+0x10b4>
8003b50: d9000917 ldw r4,36(sp)
8003b54: d9400a17 ldw r5,40(sp)
8003b58: 000d883a mov r6,zero
8003b5c: 000f883a mov r7,zero
8003b60: da000f15 stw r8,60(sp)
8003b64: d8c00e15 stw r3,56(sp)
8003b68: 800e3000 call 800e300 <__eqdf2>
8003b6c: d8c00e17 ldw r3,56(sp)
8003b70: da000f17 ldw r8,60(sp)
8003b74: 1001891e bne r2,zero,800419c <___vfprintf_internal_r+0x1358>
8003b78: d8801d17 ldw r2,116(sp)
8003b7c: 01020134 movhi r4,2052
8003b80: 211d2704 addi r4,r4,29852
8003b84: 10800044 addi r2,r2,1
8003b88: 18c00044 addi r3,r3,1
8003b8c: 41000015 stw r4,0(r8)
8003b90: 01000044 movi r4,1
8003b94: d8801d15 stw r2,116(sp)
8003b98: 41000115 stw r4,4(r8)
8003b9c: d8c01e15 stw r3,120(sp)
8003ba0: 10800208 cmpgei r2,r2,8
8003ba4: 1003331e bne r2,zero,8004874 <___vfprintf_internal_r+0x1a30>
8003ba8: 42000204 addi r8,r8,8
8003bac: d8801617 ldw r2,88(sp)
8003bb0: d8c00817 ldw r3,32(sp)
8003bb4: 10c00416 blt r2,r3,8003bc8 <___vfprintf_internal_r+0xd84>
8003bb8: 9080004c andi r2,r18,1
8003bbc: 1000021e bne r2,zero,8003bc8 <___vfprintf_internal_r+0xd84>
8003bc0: d8c01e17 ldw r3,120(sp)
8003bc4: 003e6e06 br 8003580 <___vfprintf_internal_r+0x73c>
8003bc8: d8800d17 ldw r2,52(sp)
8003bcc: d8c01e17 ldw r3,120(sp)
8003bd0: d9000b17 ldw r4,44(sp)
8003bd4: 40800015 stw r2,0(r8)
8003bd8: d8801d17 ldw r2,116(sp)
8003bdc: 20c7883a add r3,r4,r3
8003be0: 41000115 stw r4,4(r8)
8003be4: 10800044 addi r2,r2,1
8003be8: d8801d15 stw r2,116(sp)
8003bec: d8c01e15 stw r3,120(sp)
8003bf0: 10800208 cmpgei r2,r2,8
8003bf4: 1002b11e bne r2,zero,80046bc <___vfprintf_internal_r+0x1878>
8003bf8: 42000204 addi r8,r8,8
8003bfc: d8800817 ldw r2,32(sp)
8003c00: 143fffc4 addi r16,r2,-1
8003c04: 043e5e0e bge zero,r16,8003580 <___vfprintf_internal_r+0x73c>
8003c08: 03020134 movhi r12,2052
8003c0c: 81000450 cmplti r4,r16,17
8003c10: 631d2784 addi r12,r12,29854
8003c14: d8801d17 ldw r2,116(sp)
8003c18: 2003731e bne r4,zero,80049e8 <___vfprintf_internal_r+0x1ba4>
8003c1c: dc400715 stw r17,28(sp)
8003c20: 05000404 movi r20,16
8003c24: df000517 ldw fp,20(sp)
8003c28: 6023883a mov r17,r12
8003c2c: 00000406 br 8003c40 <___vfprintf_internal_r+0xdfc>
8003c30: 42000204 addi r8,r8,8
8003c34: 843ffc04 addi r16,r16,-16
8003c38: 81000448 cmpgei r4,r16,17
8003c3c: 20036826 beq r4,zero,80049e0 <___vfprintf_internal_r+0x1b9c>
8003c40: 10800044 addi r2,r2,1
8003c44: 18c00404 addi r3,r3,16
8003c48: 44400015 stw r17,0(r8)
8003c4c: 45000115 stw r20,4(r8)
8003c50: d8c01e15 stw r3,120(sp)
8003c54: d8801d15 stw r2,116(sp)
8003c58: 11000208 cmpgei r4,r2,8
8003c5c: 203ff426 beq r4,zero,8003c30 <___vfprintf_internal_r+0xdec>
8003c60: d9801c04 addi r6,sp,112
8003c64: 980b883a mov r5,r19
8003c68: e009883a mov r4,fp
8003c6c: 800a3f80 call 800a3f8 <__sprint_r>
8003c70: 103d531e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8003c74: d8c01e17 ldw r3,120(sp)
8003c78: d8801d17 ldw r2,116(sp)
8003c7c: b811883a mov r8,r23
8003c80: 003fec06 br 8003c34 <___vfprintf_internal_r+0xdf0>
8003c84: 8d4fc83a sub r7,r17,r21
8003c88: 01fe2f0e bge zero,r7,8003548 <___vfprintf_internal_r+0x704>
8003c8c: 03020134 movhi r12,2052
8003c90: 39000450 cmplti r4,r7,17
8003c94: 631d2784 addi r12,r12,29854
8003c98: d8801d17 ldw r2,116(sp)
8003c9c: 2000271e bne r4,zero,8003d3c <___vfprintf_internal_r+0xef8>
8003ca0: dc000e15 stw r16,56(sp)
8003ca4: dc800f15 stw r18,60(sp)
8003ca8: dc401015 stw r17,64(sp)
8003cac: 03400404 movi r13,16
8003cb0: 3821883a mov r16,r7
8003cb4: dac01215 stw r11,72(sp)
8003cb8: dc400517 ldw r17,20(sp)
8003cbc: 6025883a mov r18,r12
8003cc0: 00000406 br 8003cd4 <___vfprintf_internal_r+0xe90>
8003cc4: 843ffc04 addi r16,r16,-16
8003cc8: 81000448 cmpgei r4,r16,17
8003ccc: 42000204 addi r8,r8,8
8003cd0: 20001426 beq r4,zero,8003d24 <___vfprintf_internal_r+0xee0>
8003cd4: 10800044 addi r2,r2,1
8003cd8: 18c00404 addi r3,r3,16
8003cdc: 44800015 stw r18,0(r8)
8003ce0: 43400115 stw r13,4(r8)
8003ce4: d8c01e15 stw r3,120(sp)
8003ce8: d8801d15 stw r2,116(sp)
8003cec: 11000208 cmpgei r4,r2,8
8003cf0: 203ff426 beq r4,zero,8003cc4 <___vfprintf_internal_r+0xe80>
8003cf4: d9801c04 addi r6,sp,112
8003cf8: 980b883a mov r5,r19
8003cfc: 8809883a mov r4,r17
8003d00: 800a3f80 call 800a3f8 <__sprint_r>
8003d04: 103d2e1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8003d08: 843ffc04 addi r16,r16,-16
8003d0c: 81000448 cmpgei r4,r16,17
8003d10: d8c01e17 ldw r3,120(sp)
8003d14: d8801d17 ldw r2,116(sp)
8003d18: b811883a mov r8,r23
8003d1c: 03400404 movi r13,16
8003d20: 203fec1e bne r4,zero,8003cd4 <___vfprintf_internal_r+0xe90>
8003d24: 800f883a mov r7,r16
8003d28: 9019883a mov r12,r18
8003d2c: dc000e17 ldw r16,56(sp)
8003d30: dc401017 ldw r17,64(sp)
8003d34: dac01217 ldw r11,72(sp)
8003d38: dc800f17 ldw r18,60(sp)
8003d3c: 10800044 addi r2,r2,1
8003d40: 19c7883a add r3,r3,r7
8003d44: d8801d15 stw r2,116(sp)
8003d48: 43000015 stw r12,0(r8)
8003d4c: 41c00115 stw r7,4(r8)
8003d50: d8c01e15 stw r3,120(sp)
8003d54: 10800208 cmpgei r2,r2,8
8003d58: 1002cd1e bne r2,zero,8004890 <___vfprintf_internal_r+0x1a4c>
8003d5c: 5d0fc83a sub r7,r11,r20
8003d60: 42000204 addi r8,r8,8
8003d64: 01fdfa0e bge zero,r7,8003550 <___vfprintf_internal_r+0x70c>
8003d68: 03020134 movhi r12,2052
8003d6c: 39000450 cmplti r4,r7,17
8003d70: 631d2784 addi r12,r12,29854
8003d74: d8801d17 ldw r2,116(sp)
8003d78: 2000251e bne r4,zero,8003e10 <___vfprintf_internal_r+0xfcc>
8003d7c: dc000e15 stw r16,56(sp)
8003d80: dc800f15 stw r18,60(sp)
8003d84: dc401015 stw r17,64(sp)
8003d88: 02c00404 movi r11,16
8003d8c: 3821883a mov r16,r7
8003d90: dc400517 ldw r17,20(sp)
8003d94: 6025883a mov r18,r12
8003d98: 00000406 br 8003dac <___vfprintf_internal_r+0xf68>
8003d9c: 843ffc04 addi r16,r16,-16
8003da0: 81000448 cmpgei r4,r16,17
8003da4: 42000204 addi r8,r8,8
8003da8: 20001426 beq r4,zero,8003dfc <___vfprintf_internal_r+0xfb8>
8003dac: 10800044 addi r2,r2,1
8003db0: 18c00404 addi r3,r3,16
8003db4: 44800015 stw r18,0(r8)
8003db8: 42c00115 stw r11,4(r8)
8003dbc: d8c01e15 stw r3,120(sp)
8003dc0: d8801d15 stw r2,116(sp)
8003dc4: 11000208 cmpgei r4,r2,8
8003dc8: 203ff426 beq r4,zero,8003d9c <___vfprintf_internal_r+0xf58>
8003dcc: d9801c04 addi r6,sp,112
8003dd0: 980b883a mov r5,r19
8003dd4: 8809883a mov r4,r17
8003dd8: 800a3f80 call 800a3f8 <__sprint_r>
8003ddc: 103cf81e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8003de0: 843ffc04 addi r16,r16,-16
8003de4: 81000448 cmpgei r4,r16,17
8003de8: d8c01e17 ldw r3,120(sp)
8003dec: d8801d17 ldw r2,116(sp)
8003df0: b811883a mov r8,r23
8003df4: 02c00404 movi r11,16
8003df8: 203fec1e bne r4,zero,8003dac <___vfprintf_internal_r+0xf68>
8003dfc: 800f883a mov r7,r16
8003e00: 9019883a mov r12,r18
8003e04: dc401017 ldw r17,64(sp)
8003e08: dc000e17 ldw r16,56(sp)
8003e0c: dc800f17 ldw r18,60(sp)
8003e10: 10800044 addi r2,r2,1
8003e14: 19c7883a add r3,r3,r7
8003e18: d8801d15 stw r2,116(sp)
8003e1c: 43000015 stw r12,0(r8)
8003e20: 41c00115 stw r7,4(r8)
8003e24: d8c01e15 stw r3,120(sp)
8003e28: 10800208 cmpgei r2,r2,8
8003e2c: 1001621e bne r2,zero,80043b8 <___vfprintf_internal_r+0x1574>
8003e30: 42000204 addi r8,r8,8
8003e34: 003dc606 br 8003550 <___vfprintf_internal_r+0x70c>
8003e38: d9000517 ldw r4,20(sp)
8003e3c: d9801c04 addi r6,sp,112
8003e40: 980b883a mov r5,r19
8003e44: 800a3f80 call 800a3f8 <__sprint_r>
8003e48: 103dd726 beq r2,zero,80035a8 <___vfprintf_internal_r+0x764>
8003e4c: 003cdc06 br 80031c0 <___vfprintf_internal_r+0x37c>
8003e50: d9000517 ldw r4,20(sp)
8003e54: d9801c04 addi r6,sp,112
8003e58: 980b883a mov r5,r19
8003e5c: 800a3f80 call 800a3f8 <__sprint_r>
8003e60: 103cd71e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8003e64: d9001617 ldw r4,88(sp)
8003e68: d8c01e17 ldw r3,120(sp)
8003e6c: b811883a mov r8,r23
8003e70: 2002951e bne r4,zero,80048c8 <___vfprintf_internal_r+0x1a84>
8003e74: d9000817 ldw r4,32(sp)
8003e78: 9080004c andi r2,r18,1
8003e7c: 1104b03a or r2,r2,r4
8003e80: 103dbf26 beq r2,zero,8003580 <___vfprintf_internal_r+0x73c>
8003e84: d8800d17 ldw r2,52(sp)
8003e88: d9000b17 ldw r4,44(sp)
8003e8c: 40800015 stw r2,0(r8)
8003e90: d8801d17 ldw r2,116(sp)
8003e94: 20c7883a add r3,r4,r3
8003e98: 41000115 stw r4,4(r8)
8003e9c: 10800044 addi r2,r2,1
8003ea0: d8c01e15 stw r3,120(sp)
8003ea4: d8801d15 stw r2,116(sp)
8003ea8: 11000208 cmpgei r4,r2,8
8003eac: 2003641e bne r4,zero,8004c40 <___vfprintf_internal_r+0x1dfc>
8003eb0: 42000204 addi r8,r8,8
8003eb4: d9000817 ldw r4,32(sp)
8003eb8: 10800044 addi r2,r2,1
8003ebc: d8801d15 stw r2,116(sp)
8003ec0: 20c7883a add r3,r4,r3
8003ec4: 44000015 stw r16,0(r8)
8003ec8: 41000115 stw r4,4(r8)
8003ecc: d8c01e15 stw r3,120(sp)
8003ed0: 10800208 cmpgei r2,r2,8
8003ed4: 103da926 beq r2,zero,800357c <___vfprintf_internal_r+0x738>
8003ed8: d9000517 ldw r4,20(sp)
8003edc: d9801c04 addi r6,sp,112
8003ee0: 980b883a mov r5,r19
8003ee4: 800a3f80 call 800a3f8 <__sprint_r>
8003ee8: 103cb51e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8003eec: d8c01e17 ldw r3,120(sp)
8003ef0: b811883a mov r8,r23
8003ef4: 003da206 br 8003580 <___vfprintf_internal_r+0x73c>
8003ef8: d8800817 ldw r2,32(sp)
8003efc: df001d17 ldw fp,116(sp)
8003f00: 18c00044 addi r3,r3,1
8003f04: 10800088 cmpgei r2,r2,2
8003f08: e5000044 addi r20,fp,1
8003f0c: 42800204 addi r10,r8,8
8003f10: 1000fb26 beq r2,zero,8004300 <___vfprintf_internal_r+0x14bc>
8003f14: 00800044 movi r2,1
8003f18: 40800115 stw r2,4(r8)
8003f1c: 44000015 stw r16,0(r8)
8003f20: d8c01e15 stw r3,120(sp)
8003f24: dd001d15 stw r20,116(sp)
8003f28: a0800210 cmplti r2,r20,8
8003f2c: 10022c26 beq r2,zero,80047e0 <___vfprintf_internal_r+0x199c>
8003f30: d8800b17 ldw r2,44(sp)
8003f34: d9000d17 ldw r4,52(sp)
8003f38: a5000044 addi r20,r20,1
8003f3c: 1887883a add r3,r3,r2
8003f40: 50800115 stw r2,4(r10)
8003f44: 51000015 stw r4,0(r10)
8003f48: d8c01e15 stw r3,120(sp)
8003f4c: dd001d15 stw r20,116(sp)
8003f50: a0800208 cmpgei r2,r20,8
8003f54: 1002191e bne r2,zero,80047bc <___vfprintf_internal_r+0x1978>
8003f58: 52800204 addi r10,r10,8
8003f5c: d8800817 ldw r2,32(sp)
8003f60: d9000917 ldw r4,36(sp)
8003f64: d9400a17 ldw r5,40(sp)
8003f68: 52000204 addi r8,r10,8
8003f6c: 12ffffc4 addi r11,r2,-1
8003f70: a7000044 addi fp,r20,1
8003f74: 000d883a mov r6,zero
8003f78: 000f883a mov r7,zero
8003f7c: d8c01215 stw r3,72(sp)
8003f80: da800f15 stw r10,60(sp)
8003f84: da000e15 stw r8,56(sp)
8003f88: dac00715 stw r11,28(sp)
8003f8c: df001015 stw fp,64(sp)
8003f90: 800e3000 call 800e300 <__eqdf2>
8003f94: dac00717 ldw r11,28(sp)
8003f98: da000e17 ldw r8,56(sp)
8003f9c: da800f17 ldw r10,60(sp)
8003fa0: db401017 ldw r13,64(sp)
8003fa4: d8c01217 ldw r3,72(sp)
8003fa8: 1000e126 beq r2,zero,8004330 <___vfprintf_internal_r+0x14ec>
8003fac: 84000044 addi r16,r16,1
8003fb0: 1ac7883a add r3,r3,r11
8003fb4: df001d15 stw fp,116(sp)
8003fb8: 54000015 stw r16,0(r10)
8003fbc: 52c00115 stw r11,4(r10)
8003fc0: d8c01e15 stw r3,120(sp)
8003fc4: e7000208 cmpgei fp,fp,8
8003fc8: e001aa1e bne fp,zero,8004674 <___vfprintf_internal_r+0x1830>
8003fcc: 50800404 addi r2,r10,16
8003fd0: a7000084 addi fp,r20,2
8003fd4: 4015883a mov r10,r8
8003fd8: 1011883a mov r8,r2
8003fdc: d9001117 ldw r4,68(sp)
8003fe0: d8801844 addi r2,sp,97
8003fe4: df001d15 stw fp,116(sp)
8003fe8: 20c7883a add r3,r4,r3
8003fec: 50800015 stw r2,0(r10)
8003ff0: 51000115 stw r4,4(r10)
8003ff4: d8c01e15 stw r3,120(sp)
8003ff8: e7000210 cmplti fp,fp,8
8003ffc: e03d601e bne fp,zero,8003580 <___vfprintf_internal_r+0x73c>
8004000: 003fb506 br 8003ed8 <___vfprintf_internal_r+0x1094>
8004004: 9019883a mov r12,r18
8004008: 003e1906 br 8003870 <___vfprintf_internal_r+0xa2c>
800400c: 03020134 movhi r12,2052
8004010: 39000450 cmplti r4,r7,17
8004014: 631d2b84 addi r12,r12,29870
8004018: d8801d17 ldw r2,116(sp)
800401c: 20002b1e bne r4,zero,80040cc <___vfprintf_internal_r+0x1288>
8004020: dc001015 stw r16,64(sp)
8004024: dc801215 stw r18,72(sp)
8004028: dc401315 stw r17,76(sp)
800402c: 03c00404 movi r15,16
8004030: db800e15 stw r14,56(sp)
8004034: db400f15 stw r13,60(sp)
8004038: dac01415 stw r11,80(sp)
800403c: 3821883a mov r16,r7
8004040: dc400517 ldw r17,20(sp)
8004044: 6025883a mov r18,r12
8004048: 00000406 br 800405c <___vfprintf_internal_r+0x1218>
800404c: 843ffc04 addi r16,r16,-16
8004050: 81000448 cmpgei r4,r16,17
8004054: 42000204 addi r8,r8,8
8004058: 20001426 beq r4,zero,80040ac <___vfprintf_internal_r+0x1268>
800405c: 10800044 addi r2,r2,1
8004060: 18c00404 addi r3,r3,16
8004064: 44800015 stw r18,0(r8)
8004068: 43c00115 stw r15,4(r8)
800406c: d8c01e15 stw r3,120(sp)
8004070: d8801d15 stw r2,116(sp)
8004074: 11000208 cmpgei r4,r2,8
8004078: 203ff426 beq r4,zero,800404c <___vfprintf_internal_r+0x1208>
800407c: d9801c04 addi r6,sp,112
8004080: 980b883a mov r5,r19
8004084: 8809883a mov r4,r17
8004088: 800a3f80 call 800a3f8 <__sprint_r>
800408c: 103c4c1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004090: 843ffc04 addi r16,r16,-16
8004094: 81000448 cmpgei r4,r16,17
8004098: d8c01e17 ldw r3,120(sp)
800409c: d8801d17 ldw r2,116(sp)
80040a0: b811883a mov r8,r23
80040a4: 03c00404 movi r15,16
80040a8: 203fec1e bne r4,zero,800405c <___vfprintf_internal_r+0x1218>
80040ac: 800f883a mov r7,r16
80040b0: 9019883a mov r12,r18
80040b4: db800e17 ldw r14,56(sp)
80040b8: db400f17 ldw r13,60(sp)
80040bc: dc401317 ldw r17,76(sp)
80040c0: dac01417 ldw r11,80(sp)
80040c4: dc001017 ldw r16,64(sp)
80040c8: dc801217 ldw r18,72(sp)
80040cc: 10800044 addi r2,r2,1
80040d0: 19c7883a add r3,r3,r7
80040d4: d8801d15 stw r2,116(sp)
80040d8: 43000015 stw r12,0(r8)
80040dc: 41c00115 stw r7,4(r8)
80040e0: d8c01e15 stw r3,120(sp)
80040e4: 10800208 cmpgei r2,r2,8
80040e8: 1001d41e bne r2,zero,800483c <___vfprintf_internal_r+0x19f8>
80040ec: 42000204 addi r8,r8,8
80040f0: 003cf806 br 80034d4 <___vfprintf_internal_r+0x690>
80040f4: d9000517 ldw r4,20(sp)
80040f8: d9801c04 addi r6,sp,112
80040fc: 980b883a mov r5,r19
8004100: dac01015 stw r11,64(sp)
8004104: db400f15 stw r13,60(sp)
8004108: db800e15 stw r14,56(sp)
800410c: 800a3f80 call 800a3f8 <__sprint_r>
8004110: 103c2b1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004114: d8c01e17 ldw r3,120(sp)
8004118: b811883a mov r8,r23
800411c: dac01017 ldw r11,64(sp)
8004120: db400f17 ldw r13,60(sp)
8004124: db800e17 ldw r14,56(sp)
8004128: 003cf806 br 800350c <___vfprintf_internal_r+0x6c8>
800412c: d9000517 ldw r4,20(sp)
8004130: d9801c04 addi r6,sp,112
8004134: 980b883a mov r5,r19
8004138: dac00f15 stw r11,60(sp)
800413c: db400e15 stw r13,56(sp)
8004140: 800a3f80 call 800a3f8 <__sprint_r>
8004144: 103c1e1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004148: d8c01e17 ldw r3,120(sp)
800414c: b811883a mov r8,r23
8004150: dac00f17 ldw r11,60(sp)
8004154: db400e17 ldw r13,56(sp)
8004158: 003cf906 br 8003540 <___vfprintf_internal_r+0x6fc>
800415c: d9000c17 ldw r4,48(sp)
8004160: b821883a mov r16,r23
8004164: a88003cc andi r2,r21,15
8004168: a006973a slli r3,r20,28
800416c: 2085883a add r2,r4,r2
8004170: a82ad13a srli r21,r21,4
8004174: 10800003 ldbu r2,0(r2)
8004178: a028d13a srli r20,r20,4
800417c: 843fffc4 addi r16,r16,-1
8004180: 1d6ab03a or r21,r3,r21
8004184: 80800005 stb r2,0(r16)
8004188: ad04b03a or r2,r21,r20
800418c: 103ff51e bne r2,zero,8004164 <___vfprintf_internal_r+0x1320>
8004190: bc29c83a sub r20,r23,r16
8004194: 6025883a mov r18,r12
8004198: 003e3d06 br 8003a90 <___vfprintf_internal_r+0xc4c>
800419c: d9001617 ldw r4,88(sp)
80041a0: 0101980e bge zero,r4,8004804 <___vfprintf_internal_r+0x19c0>
80041a4: d8800717 ldw r2,28(sp)
80041a8: d9000817 ldw r4,32(sp)
80041ac: 1039883a mov fp,r2
80041b0: 20812516 blt r4,r2,8004648 <___vfprintf_internal_r+0x1804>
80041b4: 07000a0e bge zero,fp,80041e0 <___vfprintf_internal_r+0x139c>
80041b8: d8801d17 ldw r2,116(sp)
80041bc: 1f07883a add r3,r3,fp
80041c0: 44000015 stw r16,0(r8)
80041c4: 10800044 addi r2,r2,1
80041c8: d8801d15 stw r2,116(sp)
80041cc: 47000115 stw fp,4(r8)
80041d0: d8c01e15 stw r3,120(sp)
80041d4: 10800208 cmpgei r2,r2,8
80041d8: 1002d91e bne r2,zero,8004d40 <___vfprintf_internal_r+0x1efc>
80041dc: 42000204 addi r8,r8,8
80041e0: e0013e16 blt fp,zero,80046dc <___vfprintf_internal_r+0x1898>
80041e4: d8800717 ldw r2,28(sp)
80041e8: 1739c83a sub fp,r2,fp
80041ec: 07014516 blt zero,fp,8004704 <___vfprintf_internal_r+0x18c0>
80041f0: d9001617 ldw r4,88(sp)
80041f4: d8800817 ldw r2,32(sp)
80041f8: 2081160e bge r4,r2,8004654 <___vfprintf_internal_r+0x1810>
80041fc: d8800d17 ldw r2,52(sp)
8004200: d9400b17 ldw r5,44(sp)
8004204: 40800015 stw r2,0(r8)
8004208: d8801d17 ldw r2,116(sp)
800420c: 1947883a add r3,r3,r5
8004210: 41400115 stw r5,4(r8)
8004214: 10800044 addi r2,r2,1
8004218: d8801d15 stw r2,116(sp)
800421c: d8c01e15 stw r3,120(sp)
8004220: 10800208 cmpgei r2,r2,8
8004224: 1002601e bne r2,zero,8004ba8 <___vfprintf_internal_r+0x1d64>
8004228: 42000204 addi r8,r8,8
800422c: d8800817 ldw r2,32(sp)
8004230: d9400717 ldw r5,28(sp)
8004234: 1105c83a sub r2,r2,r4
8004238: 29015c0e bge r5,r4,80047ac <___vfprintf_internal_r+0x1968>
800423c: 1039883a mov fp,r2
8004240: 07000c0e bge zero,fp,8004274 <___vfprintf_internal_r+0x1430>
8004244: d9000717 ldw r4,28(sp)
8004248: 1f07883a add r3,r3,fp
800424c: 47000115 stw fp,4(r8)
8004250: 8121883a add r16,r16,r4
8004254: d9001d17 ldw r4,116(sp)
8004258: 44000015 stw r16,0(r8)
800425c: d8c01e15 stw r3,120(sp)
8004260: 21000044 addi r4,r4,1
8004264: d9001d15 stw r4,116(sp)
8004268: 21000208 cmpgei r4,r4,8
800426c: 2002bf1e bne r4,zero,8004d6c <___vfprintf_internal_r+0x1f28>
8004270: 42000204 addi r8,r8,8
8004274: e000010e bge fp,zero,800427c <___vfprintf_internal_r+0x1438>
8004278: 0039883a mov fp,zero
800427c: 1739c83a sub fp,r2,fp
8004280: 073cbf0e bge zero,fp,8003580 <___vfprintf_internal_r+0x73c>
8004284: 03020134 movhi r12,2052
8004288: e1000450 cmplti r4,fp,17
800428c: 631d2784 addi r12,r12,29854
8004290: d8801d17 ldw r2,116(sp)
8004294: 20023b1e bne r4,zero,8004b84 <___vfprintf_internal_r+0x1d40>
8004298: dc400715 stw r17,28(sp)
800429c: 05000404 movi r20,16
80042a0: dc000517 ldw r16,20(sp)
80042a4: 6023883a mov r17,r12
80042a8: 00000406 br 80042bc <___vfprintf_internal_r+0x1478>
80042ac: 42000204 addi r8,r8,8
80042b0: e73ffc04 addi fp,fp,-16
80042b4: e1000448 cmpgei r4,fp,17
80042b8: 20023026 beq r4,zero,8004b7c <___vfprintf_internal_r+0x1d38>
80042bc: 10800044 addi r2,r2,1
80042c0: 18c00404 addi r3,r3,16
80042c4: 44400015 stw r17,0(r8)
80042c8: 45000115 stw r20,4(r8)
80042cc: d8c01e15 stw r3,120(sp)
80042d0: d8801d15 stw r2,116(sp)
80042d4: 11000208 cmpgei r4,r2,8
80042d8: 203ff426 beq r4,zero,80042ac <___vfprintf_internal_r+0x1468>
80042dc: d9801c04 addi r6,sp,112
80042e0: 980b883a mov r5,r19
80042e4: 8009883a mov r4,r16
80042e8: 800a3f80 call 800a3f8 <__sprint_r>
80042ec: 103bb41e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80042f0: d8c01e17 ldw r3,120(sp)
80042f4: d8801d17 ldw r2,116(sp)
80042f8: b811883a mov r8,r23
80042fc: 003fec06 br 80042b0 <___vfprintf_internal_r+0x146c>
8004300: 9080004c andi r2,r18,1
8004304: 103f031e bne r2,zero,8003f14 <___vfprintf_internal_r+0x10d0>
8004308: 00800044 movi r2,1
800430c: dd001d15 stw r20,116(sp)
8004310: 44000015 stw r16,0(r8)
8004314: 40800115 stw r2,4(r8)
8004318: d8c01e15 stw r3,120(sp)
800431c: a5000208 cmpgei r20,r20,8
8004320: a000d41e bne r20,zero,8004674 <___vfprintf_internal_r+0x1830>
8004324: e7000084 addi fp,fp,2
8004328: 42000404 addi r8,r8,16
800432c: 003f2b06 br 8003fdc <___vfprintf_internal_r+0x1198>
8004330: 02ff2a0e bge zero,r11,8003fdc <___vfprintf_internal_r+0x1198>
8004334: 58800450 cmplti r2,r11,17
8004338: 03020134 movhi r12,2052
800433c: 1002f81e bne r2,zero,8004f20 <___vfprintf_internal_r+0x20dc>
8004340: 631d2784 addi r12,r12,29854
8004344: dc800715 stw r18,28(sp)
8004348: dc400e15 stw r17,56(sp)
800434c: 04000404 movi r16,16
8004350: 5823883a mov r17,r11
8004354: df000517 ldw fp,20(sp)
8004358: 6025883a mov r18,r12
800435c: 6829883a mov r20,r13
8004360: 00000506 br 8004378 <___vfprintf_internal_r+0x1534>
8004364: 52800204 addi r10,r10,8
8004368: 8c7ffc04 addi r17,r17,-16
800436c: 88800448 cmpgei r2,r17,17
8004370: 10018a26 beq r2,zero,800499c <___vfprintf_internal_r+0x1b58>
8004374: a5000044 addi r20,r20,1
8004378: 18c00404 addi r3,r3,16
800437c: 54800015 stw r18,0(r10)
8004380: 54000115 stw r16,4(r10)
8004384: d8c01e15 stw r3,120(sp)
8004388: dd001d15 stw r20,116(sp)
800438c: a0800208 cmpgei r2,r20,8
8004390: 103ff426 beq r2,zero,8004364 <___vfprintf_internal_r+0x1520>
8004394: d9801c04 addi r6,sp,112
8004398: 980b883a mov r5,r19
800439c: e009883a mov r4,fp
80043a0: 800a3f80 call 800a3f8 <__sprint_r>
80043a4: 103b861e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80043a8: dd001d17 ldw r20,116(sp)
80043ac: d8c01e17 ldw r3,120(sp)
80043b0: b815883a mov r10,r23
80043b4: 003fec06 br 8004368 <___vfprintf_internal_r+0x1524>
80043b8: d9000517 ldw r4,20(sp)
80043bc: d9801c04 addi r6,sp,112
80043c0: 980b883a mov r5,r19
80043c4: 800a3f80 call 800a3f8 <__sprint_r>
80043c8: 103b7d1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80043cc: d8c01e17 ldw r3,120(sp)
80043d0: b811883a mov r8,r23
80043d4: 003c5e06 br 8003550 <___vfprintf_internal_r+0x70c>
80043d8: 0029883a mov r20,zero
80043dc: 003bdf06 br 800335c <___vfprintf_internal_r+0x518>
80043e0: b025883a mov r18,r22
80043e4: 003aea06 br 8002f90 <___vfprintf_internal_r+0x14c>
80043e8: b821883a mov r16,r23
80043ec: 003da806 br 8003a90 <___vfprintf_internal_r+0xc4c>
80043f0: d9000917 ldw r4,36(sp)
80043f4: d9400a17 ldw r5,40(sp)
80043f8: da000f15 stw r8,60(sp)
80043fc: 200d883a mov r6,r4
8004400: 280f883a mov r7,r5
8004404: dac00e15 stw r11,56(sp)
8004408: db000715 stw r12,28(sp)
800440c: 800f5580 call 800f558 <__unorddf2>
8004410: db000717 ldw r12,28(sp)
8004414: dac00e17 ldw r11,56(sp)
8004418: da000f17 ldw r8,60(sp)
800441c: 1002af1e bne r2,zero,8004edc <___vfprintf_internal_r+0x2098>
8004420: 00fff7c4 movi r3,-33
8004424: e0c6703a and r3,fp,r3
8004428: 58bfffe0 cmpeqi r2,r11,-1
800442c: d8c00715 stw r3,28(sp)
8004430: 10024c1e bne r2,zero,8004d64 <___vfprintf_internal_r+0x1f20>
8004434: 188011d8 cmpnei r2,r3,71
8004438: 1001fe26 beq r2,zero,8004c34 <___vfprintf_internal_r+0x1df0>
800443c: d8800a17 ldw r2,40(sp)
8004440: 64804014 ori r18,r12,256
8004444: 1001e116 blt r2,zero,8004bcc <___vfprintf_internal_r+0x1d88>
8004448: dd400a17 ldw r21,40(sp)
800444c: d8000e05 stb zero,56(sp)
8004450: e08019a0 cmpeqi r2,fp,102
8004454: d8800f15 stw r2,60(sp)
8004458: 1001741e bne r2,zero,8004a2c <___vfprintf_internal_r+0x1be8>
800445c: e08011a0 cmpeqi r2,fp,70
8004460: 1001721e bne r2,zero,8004a2c <___vfprintf_internal_r+0x1be8>
8004464: d8800717 ldw r2,28(sp)
8004468: da001215 stw r8,72(sp)
800446c: db001015 stw r12,64(sp)
8004470: 10801158 cmpnei r2,r2,69
8004474: 10020526 beq r2,zero,8004c8c <___vfprintf_internal_r+0x1e48>
8004478: d8801a04 addi r2,sp,104
800447c: d8800315 stw r2,12(sp)
8004480: d9400917 ldw r5,36(sp)
8004484: d8801704 addi r2,sp,92
8004488: d9000517 ldw r4,20(sp)
800448c: d8800215 stw r2,8(sp)
8004490: d8801604 addi r2,sp,88
8004494: dac00015 stw r11,0(sp)
8004498: d8800115 stw r2,4(sp)
800449c: 01c00084 movi r7,2
80044a0: a80d883a mov r6,r21
80044a4: dac00815 stw r11,32(sp)
80044a8: 80053ec0 call 80053ec <_dtoa_r>
80044ac: dac00817 ldw r11,32(sp)
80044b0: 1021883a mov r16,r2
80044b4: e08019d8 cmpnei r2,fp,103
80044b8: db001017 ldw r12,64(sp)
80044bc: da001217 ldw r8,72(sp)
80044c0: 5829883a mov r20,r11
80044c4: 1002031e bne r2,zero,8004cd4 <___vfprintf_internal_r+0x1e90>
80044c8: 6080004c andi r2,r12,1
80044cc: 1002031e bne r2,zero,8004cdc <___vfprintf_internal_r+0x1e98>
80044d0: d8c01617 ldw r3,88(sp)
80044d4: d8800717 ldw r2,28(sp)
80044d8: d8c00715 stw r3,28(sp)
80044dc: d8c01a17 ldw r3,104(sp)
80044e0: 108011e0 cmpeqi r2,r2,71
80044e4: 1c07c83a sub r3,r3,r16
80044e8: d8c00815 stw r3,32(sp)
80044ec: 10000526 beq r2,zero,8004504 <___vfprintf_internal_r+0x16c0>
80044f0: d8c00717 ldw r3,28(sp)
80044f4: 18bfff50 cmplti r2,r3,-3
80044f8: 1000011e bne r2,zero,8004500 <___vfprintf_internal_r+0x16bc>
80044fc: 58c2050e bge r11,r3,8004d14 <___vfprintf_internal_r+0x1ed0>
8004500: e73fff84 addi fp,fp,-2
8004504: d8800717 ldw r2,28(sp)
8004508: df001845 stb fp,97(sp)
800450c: 153fffc4 addi r20,r2,-1
8004510: dd001615 stw r20,88(sp)
8004514: a0027916 blt r20,zero,8004efc <___vfprintf_internal_r+0x20b8>
8004518: 00800ac4 movi r2,43
800451c: d8801885 stb r2,98(sp)
8004520: a0800290 cmplti r2,r20,10
8004524: 1002581e bne r2,zero,8004e88 <___vfprintf_internal_r+0x2044>
8004528: dc000715 stw r16,28(sp)
800452c: dd401bc4 addi r21,sp,111
8004530: a021883a mov r16,r20
8004534: db000f15 stw r12,60(sp)
8004538: 9829883a mov r20,r19
800453c: 4027883a mov r19,r8
8004540: 00000206 br 800454c <___vfprintf_internal_r+0x1708>
8004544: 202b883a mov r21,r4
8004548: 1021883a mov r16,r2
800454c: 8009883a mov r4,r16
8004550: 01400284 movi r5,10
8004554: 800cf800 call 800cf80 <__modsi3>
8004558: 10800c04 addi r2,r2,48
800455c: 8009883a mov r4,r16
8004560: a8bfffc5 stb r2,-1(r21)
8004564: 01400284 movi r5,10
8004568: 800cf000 call 800cf00 <__divsi3>
800456c: 80c01908 cmpgei r3,r16,100
8004570: a93fffc4 addi r4,r21,-1
8004574: 183ff31e bne r3,zero,8004544 <___vfprintf_internal_r+0x1700>
8004578: 10800c04 addi r2,r2,48
800457c: 20bfffc5 stb r2,-1(r4)
8004580: a8ffff84 addi r3,r21,-2
8004584: d9001bc4 addi r4,sp,111
8004588: 9811883a mov r8,r19
800458c: dc000717 ldw r16,28(sp)
8004590: db000f17 ldw r12,60(sp)
8004594: a027883a mov r19,r20
8004598: 1902732e bgeu r3,r4,8004f68 <___vfprintf_internal_r+0x2124>
800459c: d90018c4 addi r4,sp,99
80045a0: 00000106 br 80045a8 <___vfprintf_internal_r+0x1764>
80045a4: 18800003 ldbu r2,0(r3)
80045a8: 21000044 addi r4,r4,1
80045ac: 20bfffc5 stb r2,-1(r4)
80045b0: 18c00044 addi r3,r3,1
80045b4: d8801bc4 addi r2,sp,111
80045b8: 18bffa1e bne r3,r2,80045a4 <___vfprintf_internal_r+0x1760>
80045bc: d8801c44 addi r2,sp,113
80045c0: d8c018c4 addi r3,sp,99
80045c4: 1545c83a sub r2,r2,r21
80045c8: 1885883a add r2,r3,r2
80045cc: d8c01844 addi r3,sp,97
80045d0: 10c5c83a sub r2,r2,r3
80045d4: d8801115 stw r2,68(sp)
80045d8: d8c00817 ldw r3,32(sp)
80045dc: d9001117 ldw r4,68(sp)
80045e0: 18800088 cmpgei r2,r3,2
80045e4: 1929883a add r20,r3,r4
80045e8: 10024926 beq r2,zero,8004f10 <___vfprintf_internal_r+0x20cc>
80045ec: d8800b17 ldw r2,44(sp)
80045f0: a0a9883a add r20,r20,r2
80045f4: a02b883a mov r21,r20
80045f8: a000010e bge r20,zero,8004600 <___vfprintf_internal_r+0x17bc>
80045fc: 002b883a mov r21,zero
8004600: d8000715 stw zero,28(sp)
8004604: 00013f06 br 8004b04 <___vfprintf_internal_r+0x1cc0>
8004608: 00800c04 movi r2,48
800460c: d8801585 stb r2,86(sp)
8004610: df0015c5 stb fp,87(sp)
8004614: 63000094 ori r12,r12,2
8004618: 00800084 movi r2,2
800461c: 003ce406 br 80039b0 <___vfprintf_internal_r+0xb6c>
8004620: d9400417 ldw r5,16(sp)
8004624: 20800017 ldw r2,0(r4)
8004628: d8c00615 stw r3,24(sp)
800462c: 2809d7fa srai r4,r5,31
8004630: 11400015 stw r5,0(r2)
8004634: 11000115 stw r4,4(r2)
8004638: 003a3706 br 8002f18 <___vfprintf_internal_r+0xd4>
800463c: 0463c83a sub r17,zero,r17
8004640: d8800615 stw r2,24(sp)
8004644: 003b1806 br 80032a8 <___vfprintf_internal_r+0x464>
8004648: 2039883a mov fp,r4
800464c: 073eda16 blt zero,fp,80041b8 <___vfprintf_internal_r+0x1374>
8004650: 003ee306 br 80041e0 <___vfprintf_internal_r+0x139c>
8004654: 9080004c andi r2,r18,1
8004658: 103ee81e bne r2,zero,80041fc <___vfprintf_internal_r+0x13b8>
800465c: d8800817 ldw r2,32(sp)
8004660: d9400717 ldw r5,28(sp)
8004664: 1105c83a sub r2,r2,r4
8004668: 2900500e bge r5,r4,80047ac <___vfprintf_internal_r+0x1968>
800466c: 1039883a mov fp,r2
8004670: 003f0006 br 8004274 <___vfprintf_internal_r+0x1430>
8004674: d9000517 ldw r4,20(sp)
8004678: d9801c04 addi r6,sp,112
800467c: 980b883a mov r5,r19
8004680: 800a3f80 call 800a3f8 <__sprint_r>
8004684: 103ace1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004688: df001d17 ldw fp,116(sp)
800468c: d8c01e17 ldw r3,120(sp)
8004690: da002b04 addi r8,sp,172
8004694: e7000044 addi fp,fp,1
8004698: b815883a mov r10,r23
800469c: 003e4f06 br 8003fdc <___vfprintf_internal_r+0x1198>
80046a0: b7000043 ldbu fp,1(r22)
80046a4: 63000814 ori r12,r12,32
80046a8: b5800044 addi r22,r22,1
80046ac: e2803fcc andi r10,fp,255
80046b0: 5280201c xori r10,r10,128
80046b4: 52bfe004 addi r10,r10,-128
80046b8: 003a3d06 br 8002fb0 <___vfprintf_internal_r+0x16c>
80046bc: d9000517 ldw r4,20(sp)
80046c0: d9801c04 addi r6,sp,112
80046c4: 980b883a mov r5,r19
80046c8: 800a3f80 call 800a3f8 <__sprint_r>
80046cc: 103abc1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80046d0: d8c01e17 ldw r3,120(sp)
80046d4: b811883a mov r8,r23
80046d8: 003d4806 br 8003bfc <___vfprintf_internal_r+0xdb8>
80046dc: 0039883a mov fp,zero
80046e0: 003ec006 br 80041e4 <___vfprintf_internal_r+0x13a0>
80046e4: 588001f0 cmpltui r2,r11,7
80046e8: 5829883a mov r20,r11
80046ec: 10013b26 beq r2,zero,8004bdc <___vfprintf_internal_r+0x1d98>
80046f0: 04020134 movhi r16,2052
80046f4: a02b883a mov r21,r20
80046f8: dc800615 stw r18,24(sp)
80046fc: 841d2504 addi r16,r16,29844
8004700: 003b6906 br 80034a8 <___vfprintf_internal_r+0x664>
8004704: 03020134 movhi r12,2052
8004708: e1000450 cmplti r4,fp,17
800470c: 631d2784 addi r12,r12,29854
8004710: d8801d17 ldw r2,116(sp)
8004714: 20010b1e bne r4,zero,8004b44 <___vfprintf_internal_r+0x1d00>
8004718: b009883a mov r4,r22
800471c: dc000e15 stw r16,56(sp)
8004720: dc800f15 stw r18,60(sp)
8004724: 882d883a mov r22,r17
8004728: 05000404 movi r20,16
800472c: e023883a mov r17,fp
8004730: dc000517 ldw r16,20(sp)
8004734: 6025883a mov r18,r12
8004738: 2039883a mov fp,r4
800473c: 00000406 br 8004750 <___vfprintf_internal_r+0x190c>
8004740: 42000204 addi r8,r8,8
8004744: 8c7ffc04 addi r17,r17,-16
8004748: 89000448 cmpgei r4,r17,17
800474c: 2000f626 beq r4,zero,8004b28 <___vfprintf_internal_r+0x1ce4>
8004750: 10800044 addi r2,r2,1
8004754: 18c00404 addi r3,r3,16
8004758: 44800015 stw r18,0(r8)
800475c: 45000115 stw r20,4(r8)
8004760: d8c01e15 stw r3,120(sp)
8004764: d8801d15 stw r2,116(sp)
8004768: 11000208 cmpgei r4,r2,8
800476c: 203ff426 beq r4,zero,8004740 <___vfprintf_internal_r+0x18fc>
8004770: d9801c04 addi r6,sp,112
8004774: 980b883a mov r5,r19
8004778: 8009883a mov r4,r16
800477c: 800a3f80 call 800a3f8 <__sprint_r>
8004780: 103a8f1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004784: d8c01e17 ldw r3,120(sp)
8004788: d8801d17 ldw r2,116(sp)
800478c: b811883a mov r8,r23
8004790: 003fec06 br 8004744 <___vfprintf_internal_r+0x1900>
8004794: d8800617 ldw r2,24(sp)
8004798: 10800017 ldw r2,0(r2)
800479c: d8c00615 stw r3,24(sp)
80047a0: d8c00417 ldw r3,16(sp)
80047a4: 10c00015 stw r3,0(r2)
80047a8: 0039db06 br 8002f18 <___vfprintf_internal_r+0xd4>
80047ac: d9000817 ldw r4,32(sp)
80047b0: d9400717 ldw r5,28(sp)
80047b4: 2179c83a sub fp,r4,r5
80047b8: 003ea106 br 8004240 <___vfprintf_internal_r+0x13fc>
80047bc: d9000517 ldw r4,20(sp)
80047c0: d9801c04 addi r6,sp,112
80047c4: 980b883a mov r5,r19
80047c8: 800a3f80 call 800a3f8 <__sprint_r>
80047cc: 103a7c1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80047d0: d8c01e17 ldw r3,120(sp)
80047d4: dd001d17 ldw r20,116(sp)
80047d8: b815883a mov r10,r23
80047dc: 003ddf06 br 8003f5c <___vfprintf_internal_r+0x1118>
80047e0: d9000517 ldw r4,20(sp)
80047e4: d9801c04 addi r6,sp,112
80047e8: 980b883a mov r5,r19
80047ec: 800a3f80 call 800a3f8 <__sprint_r>
80047f0: 103a731e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80047f4: d8c01e17 ldw r3,120(sp)
80047f8: dd001d17 ldw r20,116(sp)
80047fc: b815883a mov r10,r23
8004800: 003dcb06 br 8003f30 <___vfprintf_internal_r+0x10ec>
8004804: d8801d17 ldw r2,116(sp)
8004808: 01420134 movhi r5,2052
800480c: 295d2704 addi r5,r5,29852
8004810: 10800044 addi r2,r2,1
8004814: 18c00044 addi r3,r3,1
8004818: 41400015 stw r5,0(r8)
800481c: 01400044 movi r5,1
8004820: d8801d15 stw r2,116(sp)
8004824: 41400115 stw r5,4(r8)
8004828: d8c01e15 stw r3,120(sp)
800482c: 10800208 cmpgei r2,r2,8
8004830: 103d871e bne r2,zero,8003e50 <___vfprintf_internal_r+0x100c>
8004834: 42000204 addi r8,r8,8
8004838: 003d8d06 br 8003e70 <___vfprintf_internal_r+0x102c>
800483c: d9000517 ldw r4,20(sp)
8004840: d9801c04 addi r6,sp,112
8004844: 980b883a mov r5,r19
8004848: dac01015 stw r11,64(sp)
800484c: db400f15 stw r13,60(sp)
8004850: db800e15 stw r14,56(sp)
8004854: 800a3f80 call 800a3f8 <__sprint_r>
8004858: 103a591e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
800485c: d8c01e17 ldw r3,120(sp)
8004860: b811883a mov r8,r23
8004864: dac01017 ldw r11,64(sp)
8004868: db400f17 ldw r13,60(sp)
800486c: db800e17 ldw r14,56(sp)
8004870: 003b1806 br 80034d4 <___vfprintf_internal_r+0x690>
8004874: d9000517 ldw r4,20(sp)
8004878: d9801c04 addi r6,sp,112
800487c: 980b883a mov r5,r19
8004880: 800a3f80 call 800a3f8 <__sprint_r>
8004884: 103a4e1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004888: b811883a mov r8,r23
800488c: 003cc706 br 8003bac <___vfprintf_internal_r+0xd68>
8004890: d9000517 ldw r4,20(sp)
8004894: d9801c04 addi r6,sp,112
8004898: 980b883a mov r5,r19
800489c: dac00e15 stw r11,56(sp)
80048a0: 800a3f80 call 800a3f8 <__sprint_r>
80048a4: 103a461e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
80048a8: d8c01e17 ldw r3,120(sp)
80048ac: b811883a mov r8,r23
80048b0: dac00e17 ldw r11,56(sp)
80048b4: 003b2406 br 8003548 <___vfprintf_internal_r+0x704>
80048b8: 10c00060 cmpeqi r3,r2,1
80048bc: 9019883a mov r12,r18
80048c0: 183bed26 beq r3,zero,8003878 <___vfprintf_internal_r+0xa34>
80048c4: 003c6d06 br 8003a7c <___vfprintf_internal_r+0xc38>
80048c8: d8800d17 ldw r2,52(sp)
80048cc: d9400b17 ldw r5,44(sp)
80048d0: 40800015 stw r2,0(r8)
80048d4: d8801d17 ldw r2,116(sp)
80048d8: 28c7883a add r3,r5,r3
80048dc: 41400115 stw r5,4(r8)
80048e0: 10800044 addi r2,r2,1
80048e4: d8c01e15 stw r3,120(sp)
80048e8: d8801d15 stw r2,116(sp)
80048ec: 11400208 cmpgei r5,r2,8
80048f0: 2800d31e bne r5,zero,8004c40 <___vfprintf_internal_r+0x1dfc>
80048f4: 42000204 addi r8,r8,8
80048f8: 203d6e0e bge r4,zero,8003eb4 <___vfprintf_internal_r+0x1070>
80048fc: 03020134 movhi r12,2052
8004900: 217ffc08 cmpgei r5,r4,-16
8004904: 631d2784 addi r12,r12,29854
8004908: 0129c83a sub r20,zero,r4
800490c: 28014a1e bne r5,zero,8004e38 <___vfprintf_internal_r+0x1ff4>
8004910: dc000715 stw r16,28(sp)
8004914: 07000404 movi fp,16
8004918: a021883a mov r16,r20
800491c: 8829883a mov r20,r17
8004920: 6023883a mov r17,r12
8004924: 00000406 br 8004938 <___vfprintf_internal_r+0x1af4>
8004928: 42000204 addi r8,r8,8
800492c: 843ffc04 addi r16,r16,-16
8004930: 81000448 cmpgei r4,r16,17
8004934: 20013c26 beq r4,zero,8004e28 <___vfprintf_internal_r+0x1fe4>
8004938: 10800044 addi r2,r2,1
800493c: 18c00404 addi r3,r3,16
8004940: 44400015 stw r17,0(r8)
8004944: 47000115 stw fp,4(r8)
8004948: d8c01e15 stw r3,120(sp)
800494c: d8801d15 stw r2,116(sp)
8004950: 11000208 cmpgei r4,r2,8
8004954: 203ff426 beq r4,zero,8004928 <___vfprintf_internal_r+0x1ae4>
8004958: d9000517 ldw r4,20(sp)
800495c: d9801c04 addi r6,sp,112
8004960: 980b883a mov r5,r19
8004964: 800a3f80 call 800a3f8 <__sprint_r>
8004968: 103a151e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
800496c: d8c01e17 ldw r3,120(sp)
8004970: d8801d17 ldw r2,116(sp)
8004974: b811883a mov r8,r23
8004978: 003fec06 br 800492c <___vfprintf_internal_r+0x1ae8>
800497c: 8009883a mov r4,r16
8004980: 8002dac0 call 8002dac <strlen>
8004984: 1029883a mov r20,r2
8004988: 102b883a mov r21,r2
800498c: dc800615 stw r18,24(sp)
8004990: db000717 ldw r12,28(sp)
8004994: da000e17 ldw r8,56(sp)
8004998: 003ac306 br 80034a8 <___vfprintf_internal_r+0x664>
800499c: 8817883a mov r11,r17
80049a0: 9019883a mov r12,r18
80049a4: dc400e17 ldw r17,56(sp)
80049a8: dc800717 ldw r18,28(sp)
80049ac: a7000044 addi fp,r20,1
80049b0: 50800204 addi r2,r10,8
80049b4: 1ac7883a add r3,r3,r11
80049b8: 53000015 stw r12,0(r10)
80049bc: 52c00115 stw r11,4(r10)
80049c0: d8c01e15 stw r3,120(sp)
80049c4: df001d15 stw fp,116(sp)
80049c8: e1000208 cmpgei r4,fp,8
80049cc: 203f291e bne r4,zero,8004674 <___vfprintf_internal_r+0x1830>
80049d0: e7000044 addi fp,fp,1
80049d4: 12000204 addi r8,r2,8
80049d8: 1015883a mov r10,r2
80049dc: 003d7f06 br 8003fdc <___vfprintf_internal_r+0x1198>
80049e0: 8819883a mov r12,r17
80049e4: dc400717 ldw r17,28(sp)
80049e8: 10800044 addi r2,r2,1
80049ec: 1c07883a add r3,r3,r16
80049f0: d8801d15 stw r2,116(sp)
80049f4: 43000015 stw r12,0(r8)
80049f8: 44000115 stw r16,4(r8)
80049fc: d8c01e15 stw r3,120(sp)
8004a00: 10800208 cmpgei r2,r2,8
8004a04: 103add26 beq r2,zero,800357c <___vfprintf_internal_r+0x738>
8004a08: 003d3306 br 8003ed8 <___vfprintf_internal_r+0x1094>
8004a0c: d8800615 stw r2,24(sp)
8004a10: 0029883a mov r20,zero
8004a14: 0005883a mov r2,zero
8004a18: 003be506 br 80039b0 <___vfprintf_internal_r+0xb6c>
8004a1c: d8800615 stw r2,24(sp)
8004a20: 0029883a mov r20,zero
8004a24: 00800044 movi r2,1
8004a28: 003be106 br 80039b0 <___vfprintf_internal_r+0xb6c>
8004a2c: d8801a04 addi r2,sp,104
8004a30: d8800315 stw r2,12(sp)
8004a34: d9400917 ldw r5,36(sp)
8004a38: d8801704 addi r2,sp,92
8004a3c: d9000517 ldw r4,20(sp)
8004a40: d8800215 stw r2,8(sp)
8004a44: d8801604 addi r2,sp,88
8004a48: dac00015 stw r11,0(sp)
8004a4c: d8800115 stw r2,4(sp)
8004a50: 01c000c4 movi r7,3
8004a54: a80d883a mov r6,r21
8004a58: da001215 stw r8,72(sp)
8004a5c: db001015 stw r12,64(sp)
8004a60: dac00815 stw r11,32(sp)
8004a64: 80053ec0 call 80053ec <_dtoa_r>
8004a68: dac00817 ldw r11,32(sp)
8004a6c: 1021883a mov r16,r2
8004a70: db001017 ldw r12,64(sp)
8004a74: 12e9883a add r20,r2,r11
8004a78: 80800007 ldb r2,0(r16)
8004a7c: da001217 ldw r8,72(sp)
8004a80: 10800c20 cmpeqi r2,r2,48
8004a84: 10005b1e bne r2,zero,8004bf4 <___vfprintf_internal_r+0x1db0>
8004a88: d8801617 ldw r2,88(sp)
8004a8c: a0a9883a add r20,r20,r2
8004a90: d9000917 ldw r4,36(sp)
8004a94: 000d883a mov r6,zero
8004a98: 000f883a mov r7,zero
8004a9c: a80b883a mov r5,r21
8004aa0: da001215 stw r8,72(sp)
8004aa4: dac01015 stw r11,64(sp)
8004aa8: db000815 stw r12,32(sp)
8004aac: 800e3000 call 800e300 <__eqdf2>
8004ab0: db000817 ldw r12,32(sp)
8004ab4: dac01017 ldw r11,64(sp)
8004ab8: da001217 ldw r8,72(sp)
8004abc: 1000891e bne r2,zero,8004ce4 <___vfprintf_internal_r+0x1ea0>
8004ac0: a005883a mov r2,r20
8004ac4: 1405c83a sub r2,r2,r16
8004ac8: d8c00717 ldw r3,28(sp)
8004acc: d8800815 stw r2,32(sp)
8004ad0: d8801617 ldw r2,88(sp)
8004ad4: 18c011d8 cmpnei r3,r3,71
8004ad8: d8800715 stw r2,28(sp)
8004adc: 183e8426 beq r3,zero,80044f0 <___vfprintf_internal_r+0x16ac>
8004ae0: d8800f17 ldw r2,60(sp)
8004ae4: 103e8726 beq r2,zero,8004504 <___vfprintf_internal_r+0x16c0>
8004ae8: d8c00717 ldw r3,28(sp)
8004aec: 6080004c andi r2,r12,1
8004af0: 12c4b03a or r2,r2,r11
8004af4: 00c10d0e bge zero,r3,8004f2c <___vfprintf_internal_r+0x20e8>
8004af8: 1000f11e bne r2,zero,8004ec0 <___vfprintf_internal_r+0x207c>
8004afc: dd000717 ldw r20,28(sp)
8004b00: a02b883a mov r21,r20
8004b04: d8800e07 ldb r2,56(sp)
8004b08: 10007f26 beq r2,zero,8004d08 <___vfprintf_internal_r+0x1ec4>
8004b0c: 00800b44 movi r2,45
8004b10: d8801545 stb r2,85(sp)
8004b14: 0017883a mov r11,zero
8004b18: 003be506 br 8003ab0 <___vfprintf_internal_r+0xc6c>
8004b1c: 04020134 movhi r16,2052
8004b20: 841d1704 addi r16,r16,29788
8004b24: 003b3406 br 80037f8 <___vfprintf_internal_r+0x9b4>
8004b28: 9019883a mov r12,r18
8004b2c: dc000e17 ldw r16,56(sp)
8004b30: dc800f17 ldw r18,60(sp)
8004b34: e009883a mov r4,fp
8004b38: 8839883a mov fp,r17
8004b3c: b023883a mov r17,r22
8004b40: 202d883a mov r22,r4
8004b44: 10800044 addi r2,r2,1
8004b48: 1f07883a add r3,r3,fp
8004b4c: d8801d15 stw r2,116(sp)
8004b50: 43000015 stw r12,0(r8)
8004b54: 47000115 stw fp,4(r8)
8004b58: d8c01e15 stw r3,120(sp)
8004b5c: 10800208 cmpgei r2,r2,8
8004b60: 1000421e bne r2,zero,8004c6c <___vfprintf_internal_r+0x1e28>
8004b64: 42000204 addi r8,r8,8
8004b68: 003da106 br 80041f0 <___vfprintf_internal_r+0x13ac>
8004b6c: 00800b44 movi r2,45
8004b70: d8801545 stb r2,85(sp)
8004b74: 03400b44 movi r13,45
8004b78: 003b1b06 br 80037e8 <___vfprintf_internal_r+0x9a4>
8004b7c: 8819883a mov r12,r17
8004b80: dc400717 ldw r17,28(sp)
8004b84: 10800044 addi r2,r2,1
8004b88: 1f07883a add r3,r3,fp
8004b8c: d8801d15 stw r2,116(sp)
8004b90: 43000015 stw r12,0(r8)
8004b94: 47000115 stw fp,4(r8)
8004b98: d8c01e15 stw r3,120(sp)
8004b9c: 10800208 cmpgei r2,r2,8
8004ba0: 103a7626 beq r2,zero,800357c <___vfprintf_internal_r+0x738>
8004ba4: 003ccc06 br 8003ed8 <___vfprintf_internal_r+0x1094>
8004ba8: d9000517 ldw r4,20(sp)
8004bac: d9801c04 addi r6,sp,112
8004bb0: 980b883a mov r5,r19
8004bb4: 800a3f80 call 800a3f8 <__sprint_r>
8004bb8: 1039811e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004bbc: d9001617 ldw r4,88(sp)
8004bc0: d8c01e17 ldw r3,120(sp)
8004bc4: b811883a mov r8,r23
8004bc8: 003d9806 br 800422c <___vfprintf_internal_r+0x13e8>
8004bcc: 1560003c xorhi r21,r2,32768
8004bd0: 00800b44 movi r2,45
8004bd4: d8800e05 stb r2,56(sp)
8004bd8: 003e1d06 br 8004450 <___vfprintf_internal_r+0x160c>
8004bdc: 05000184 movi r20,6
8004be0: 003ec306 br 80046f0 <___vfprintf_internal_r+0x18ac>
8004be4: 002b883a mov r21,zero
8004be8: 003a0706 br 8003408 <___vfprintf_internal_r+0x5c4>
8004bec: d9401545 stb r5,85(sp)
8004bf0: 00399106 br 8003238 <___vfprintf_internal_r+0x3f4>
8004bf4: d9000917 ldw r4,36(sp)
8004bf8: 000d883a mov r6,zero
8004bfc: 000f883a mov r7,zero
8004c00: a80b883a mov r5,r21
8004c04: da001215 stw r8,72(sp)
8004c08: dac01015 stw r11,64(sp)
8004c0c: db000815 stw r12,32(sp)
8004c10: 800e3000 call 800e300 <__eqdf2>
8004c14: db000817 ldw r12,32(sp)
8004c18: dac01017 ldw r11,64(sp)
8004c1c: da001217 ldw r8,72(sp)
8004c20: 103f9926 beq r2,zero,8004a88 <___vfprintf_internal_r+0x1c44>
8004c24: 00800044 movi r2,1
8004c28: 12c5c83a sub r2,r2,r11
8004c2c: d8801615 stw r2,88(sp)
8004c30: 003f9606 br 8004a8c <___vfprintf_internal_r+0x1c48>
8004c34: 583e011e bne r11,zero,800443c <___vfprintf_internal_r+0x15f8>
8004c38: 02c00044 movi r11,1
8004c3c: 003dff06 br 800443c <___vfprintf_internal_r+0x15f8>
8004c40: d9000517 ldw r4,20(sp)
8004c44: d9801c04 addi r6,sp,112
8004c48: 980b883a mov r5,r19
8004c4c: 800a3f80 call 800a3f8 <__sprint_r>
8004c50: 10395b1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004c54: d9001617 ldw r4,88(sp)
8004c58: d8c01e17 ldw r3,120(sp)
8004c5c: d8801d17 ldw r2,116(sp)
8004c60: b811883a mov r8,r23
8004c64: 203c930e bge r4,zero,8003eb4 <___vfprintf_internal_r+0x1070>
8004c68: 003f2406 br 80048fc <___vfprintf_internal_r+0x1ab8>
8004c6c: d9000517 ldw r4,20(sp)
8004c70: d9801c04 addi r6,sp,112
8004c74: 980b883a mov r5,r19
8004c78: 800a3f80 call 800a3f8 <__sprint_r>
8004c7c: 1039501e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004c80: d8c01e17 ldw r3,120(sp)
8004c84: b811883a mov r8,r23
8004c88: 003d5906 br 80041f0 <___vfprintf_internal_r+0x13ac>
8004c8c: d8801a04 addi r2,sp,104
8004c90: d8800315 stw r2,12(sp)
8004c94: d9400917 ldw r5,36(sp)
8004c98: d8801704 addi r2,sp,92
8004c9c: d9000517 ldw r4,20(sp)
8004ca0: 5d000044 addi r20,r11,1
8004ca4: d8800215 stw r2,8(sp)
8004ca8: d8801604 addi r2,sp,88
8004cac: d8800115 stw r2,4(sp)
8004cb0: dd000015 stw r20,0(sp)
8004cb4: 01c00084 movi r7,2
8004cb8: a80d883a mov r6,r21
8004cbc: dac00815 stw r11,32(sp)
8004cc0: 80053ec0 call 80053ec <_dtoa_r>
8004cc4: dac00817 ldw r11,32(sp)
8004cc8: db001017 ldw r12,64(sp)
8004ccc: da001217 ldw r8,72(sp)
8004cd0: 1021883a mov r16,r2
8004cd4: e08011d8 cmpnei r2,fp,71
8004cd8: 103dfb26 beq r2,zero,80044c8 <___vfprintf_internal_r+0x1684>
8004cdc: 8529883a add r20,r16,r20
8004ce0: 003f6b06 br 8004a90 <___vfprintf_internal_r+0x1c4c>
8004ce4: d8801a17 ldw r2,104(sp)
8004ce8: 01000c04 movi r4,48
8004cec: 153f752e bgeu r2,r20,8004ac4 <___vfprintf_internal_r+0x1c80>
8004cf0: 10c00044 addi r3,r2,1
8004cf4: d8c01a15 stw r3,104(sp)
8004cf8: 11000005 stb r4,0(r2)
8004cfc: d8801a17 ldw r2,104(sp)
8004d00: 153ffb36 bltu r2,r20,8004cf0 <___vfprintf_internal_r+0x1eac>
8004d04: 003f6f06 br 8004ac4 <___vfprintf_internal_r+0x1c80>
8004d08: db401543 ldbu r13,85(sp)
8004d0c: 0017883a mov r11,zero
8004d10: 003b6306 br 8003aa0 <___vfprintf_internal_r+0xc5c>
8004d14: d8800717 ldw r2,28(sp)
8004d18: d8c00817 ldw r3,32(sp)
8004d1c: 10c02216 blt r2,r3,8004da8 <___vfprintf_internal_r+0x1f64>
8004d20: 6300004c andi r12,r12,1
8004d24: 60005f1e bne r12,zero,8004ea4 <___vfprintf_internal_r+0x2060>
8004d28: 102b883a mov r21,r2
8004d2c: 1000010e bge r2,zero,8004d34 <___vfprintf_internal_r+0x1ef0>
8004d30: 002b883a mov r21,zero
8004d34: dd000717 ldw r20,28(sp)
8004d38: 070019c4 movi fp,103
8004d3c: 003f7106 br 8004b04 <___vfprintf_internal_r+0x1cc0>
8004d40: d9000517 ldw r4,20(sp)
8004d44: d9801c04 addi r6,sp,112
8004d48: 980b883a mov r5,r19
8004d4c: 800a3f80 call 800a3f8 <__sprint_r>
8004d50: 10391b1e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004d54: d8c01e17 ldw r3,120(sp)
8004d58: b811883a mov r8,r23
8004d5c: e03d210e bge fp,zero,80041e4 <___vfprintf_internal_r+0x13a0>
8004d60: 003e5e06 br 80046dc <___vfprintf_internal_r+0x1898>
8004d64: 02c00184 movi r11,6
8004d68: 003db406 br 800443c <___vfprintf_internal_r+0x15f8>
8004d6c: d9000517 ldw r4,20(sp)
8004d70: d9801c04 addi r6,sp,112
8004d74: 980b883a mov r5,r19
8004d78: 800a3f80 call 800a3f8 <__sprint_r>
8004d7c: 1039101e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004d80: d8801617 ldw r2,88(sp)
8004d84: d9000817 ldw r4,32(sp)
8004d88: d8c01e17 ldw r3,120(sp)
8004d8c: b811883a mov r8,r23
8004d90: 2085c83a sub r2,r4,r2
8004d94: 003d3706 br 8004274 <___vfprintf_internal_r+0x1430>
8004d98: 582b883a mov r21,r11
8004d9c: dc800615 stw r18,24(sp)
8004da0: 5829883a mov r20,r11
8004da4: 0039c006 br 80034a8 <___vfprintf_internal_r+0x664>
8004da8: d8800817 ldw r2,32(sp)
8004dac: d8c00b17 ldw r3,44(sp)
8004db0: 10e9883a add r20,r2,r3
8004db4: d8800717 ldw r2,28(sp)
8004db8: 00800316 blt zero,r2,8004dc8 <___vfprintf_internal_r+0x1f84>
8004dbc: d8800717 ldw r2,28(sp)
8004dc0: a0b9c83a sub fp,r20,r2
8004dc4: e5000044 addi r20,fp,1
8004dc8: a02b883a mov r21,r20
8004dcc: a0003a16 blt r20,zero,8004eb8 <___vfprintf_internal_r+0x2074>
8004dd0: 070019c4 movi fp,103
8004dd4: 003f4b06 br 8004b04 <___vfprintf_internal_r+0x1cc0>
8004dd8: d9401545 stb r5,85(sp)
8004ddc: 003ac506 br 80038f4 <___vfprintf_internal_r+0xab0>
8004de0: d9401545 stb r5,85(sp)
8004de4: 003a2506 br 800367c <___vfprintf_internal_r+0x838>
8004de8: d9401545 stb r5,85(sp)
8004dec: 003a3306 br 80036bc <___vfprintf_internal_r+0x878>
8004df0: d9401545 stb r5,85(sp)
8004df4: 00398806 br 8003418 <___vfprintf_internal_r+0x5d4>
8004df8: d9401545 stb r5,85(sp)
8004dfc: 00395f06 br 800337c <___vfprintf_internal_r+0x538>
8004e00: d9401545 stb r5,85(sp)
8004e04: 00394b06 br 8003334 <___vfprintf_internal_r+0x4f0>
8004e08: d9401545 stb r5,85(sp)
8004e0c: 003a3b06 br 80036fc <___vfprintf_internal_r+0x8b8>
8004e10: d9401545 stb r5,85(sp)
8004e14: 003a8106 br 800381c <___vfprintf_internal_r+0x9d8>
8004e18: d9401545 stb r5,85(sp)
8004e1c: 003a4706 br 800373c <___vfprintf_internal_r+0x8f8>
8004e20: d9401545 stb r5,85(sp)
8004e24: 003ac506 br 800393c <___vfprintf_internal_r+0xaf8>
8004e28: 8819883a mov r12,r17
8004e2c: a023883a mov r17,r20
8004e30: 8029883a mov r20,r16
8004e34: dc000717 ldw r16,28(sp)
8004e38: 10800044 addi r2,r2,1
8004e3c: 1d07883a add r3,r3,r20
8004e40: 43000015 stw r12,0(r8)
8004e44: 45000115 stw r20,4(r8)
8004e48: d8c01e15 stw r3,120(sp)
8004e4c: d8801d15 stw r2,116(sp)
8004e50: 11000208 cmpgei r4,r2,8
8004e54: 203c1626 beq r4,zero,8003eb0 <___vfprintf_internal_r+0x106c>
8004e58: d9000517 ldw r4,20(sp)
8004e5c: d9801c04 addi r6,sp,112
8004e60: 980b883a mov r5,r19
8004e64: 800a3f80 call 800a3f8 <__sprint_r>
8004e68: 1038d51e bne r2,zero,80031c0 <___vfprintf_internal_r+0x37c>
8004e6c: d8c01e17 ldw r3,120(sp)
8004e70: d8801d17 ldw r2,116(sp)
8004e74: b811883a mov r8,r23
8004e78: 003c0e06 br 8003eb4 <___vfprintf_internal_r+0x1070>
8004e7c: 00bfffc4 movi r2,-1
8004e80: d8800415 stw r2,16(sp)
8004e84: 0038d106 br 80031cc <___vfprintf_internal_r+0x388>
8004e88: 00800c04 movi r2,48
8004e8c: a0c00c04 addi r3,r20,48
8004e90: d88018c5 stb r2,99(sp)
8004e94: 00800104 movi r2,4
8004e98: d8c01905 stb r3,100(sp)
8004e9c: d8801115 stw r2,68(sp)
8004ea0: 003dcd06 br 80045d8 <___vfprintf_internal_r+0x1794>
8004ea4: d8800717 ldw r2,28(sp)
8004ea8: d8c00b17 ldw r3,44(sp)
8004eac: 10e9883a add r20,r2,r3
8004eb0: a02b883a mov r21,r20
8004eb4: a03fc60e bge r20,zero,8004dd0 <___vfprintf_internal_r+0x1f8c>
8004eb8: 002b883a mov r21,zero
8004ebc: 003fc406 br 8004dd0 <___vfprintf_internal_r+0x1f8c>
8004ec0: d8800b17 ldw r2,44(sp)
8004ec4: 1885883a add r2,r3,r2
8004ec8: 12e9883a add r20,r2,r11
8004ecc: a02b883a mov r21,r20
8004ed0: a03f0c0e bge r20,zero,8004b04 <___vfprintf_internal_r+0x1cc0>
8004ed4: 002b883a mov r21,zero
8004ed8: 003f0a06 br 8004b04 <___vfprintf_internal_r+0x1cc0>
8004edc: d8800a17 ldw r2,40(sp)
8004ee0: 10001d16 blt r2,zero,8004f58 <___vfprintf_internal_r+0x2114>
8004ee4: db401543 ldbu r13,85(sp)
8004ee8: e0801210 cmplti r2,fp,72
8004eec: 1000171e bne r2,zero,8004f4c <___vfprintf_internal_r+0x2108>
8004ef0: 04020134 movhi r16,2052
8004ef4: 841d1a04 addi r16,r16,29800
8004ef8: 003a3f06 br 80037f8 <___vfprintf_internal_r+0x9b4>
8004efc: 00c00044 movi r3,1
8004f00: 18a9c83a sub r20,r3,r2
8004f04: 00800b44 movi r2,45
8004f08: d8801885 stb r2,98(sp)
8004f0c: 003d8406 br 8004520 <___vfprintf_internal_r+0x16dc>
8004f10: 6080004c andi r2,r12,1
8004f14: d8800715 stw r2,28(sp)
8004f18: 103db41e bne r2,zero,80045ec <___vfprintf_internal_r+0x17a8>
8004f1c: 003feb06 br 8004ecc <___vfprintf_internal_r+0x2088>
8004f20: 4005883a mov r2,r8
8004f24: 631d2784 addi r12,r12,29854
8004f28: 003ea206 br 80049b4 <___vfprintf_internal_r+0x1b70>
8004f2c: 1000031e bne r2,zero,8004f3c <___vfprintf_internal_r+0x20f8>
8004f30: 05400044 movi r21,1
8004f34: 05000044 movi r20,1
8004f38: 003ef206 br 8004b04 <___vfprintf_internal_r+0x1cc0>
8004f3c: d8800b17 ldw r2,44(sp)
8004f40: 10800044 addi r2,r2,1
8004f44: 12e9883a add r20,r2,r11
8004f48: 003fe006 br 8004ecc <___vfprintf_internal_r+0x2088>
8004f4c: 04020134 movhi r16,2052
8004f50: 841d1904 addi r16,r16,29796
8004f54: 003a2806 br 80037f8 <___vfprintf_internal_r+0x9b4>
8004f58: 00800b44 movi r2,45
8004f5c: d8801545 stb r2,85(sp)
8004f60: 03400b44 movi r13,45
8004f64: 003fe006 br 8004ee8 <___vfprintf_internal_r+0x20a4>
8004f68: 00800084 movi r2,2
8004f6c: d8801115 stw r2,68(sp)
8004f70: 003d9906 br 80045d8 <___vfprintf_internal_r+0x1794>
8004f74: d8800617 ldw r2,24(sp)
8004f78: 12c00017 ldw r11,0(r2)
8004f7c: 10800104 addi r2,r2,4
8004f80: 5800010e bge r11,zero,8004f88 <___vfprintf_internal_r+0x2144>
8004f84: 02ffffc4 movi r11,-1
8004f88: b7000043 ldbu fp,1(r22)
8004f8c: d8800615 stw r2,24(sp)
8004f90: 182d883a mov r22,r3
8004f94: e2803fcc andi r10,fp,255
8004f98: 5280201c xori r10,r10,128
8004f9c: 52bfe004 addi r10,r10,-128
8004fa0: 00380306 br 8002fb0 <___vfprintf_internal_r+0x16c>
08004fa4 <__vfprintf_internal>:
8004fa4: 00820174 movhi r2,2053
8004fa8: 300f883a mov r7,r6
8004fac: 280d883a mov r6,r5
8004fb0: 200b883a mov r5,r4
8004fb4: 1132af17 ldw r4,-13636(r2)
8004fb8: 8002e441 jmpi 8002e44 <___vfprintf_internal_r>
08004fbc <__sbprintf>:
8004fbc: 2880030b ldhu r2,12(r5)
8004fc0: 2b001917 ldw r12,100(r5)
8004fc4: 2ac0038b ldhu r11,14(r5)
8004fc8: 2a800717 ldw r10,28(r5)
8004fcc: 2a400917 ldw r9,36(r5)
8004fd0: defee204 addi sp,sp,-1144
8004fd4: da001a04 addi r8,sp,104
8004fd8: 00c10004 movi r3,1024
8004fdc: dc011a15 stw r16,1128(sp)
8004fe0: 10bfff4c andi r2,r2,65533
8004fe4: 2821883a mov r16,r5
8004fe8: d80b883a mov r5,sp
8004fec: dc811c15 stw r18,1136(sp)
8004ff0: dc411b15 stw r17,1132(sp)
8004ff4: dfc11d15 stw ra,1140(sp)
8004ff8: 2025883a mov r18,r4
8004ffc: d880030d sth r2,12(sp)
8005000: db001915 stw r12,100(sp)
8005004: dac0038d sth r11,14(sp)
8005008: da800715 stw r10,28(sp)
800500c: da400915 stw r9,36(sp)
8005010: da000015 stw r8,0(sp)
8005014: da000415 stw r8,16(sp)
8005018: d8c00215 stw r3,8(sp)
800501c: d8c00515 stw r3,20(sp)
8005020: d8000615 stw zero,24(sp)
8005024: 8002e440 call 8002e44 <___vfprintf_internal_r>
8005028: 1023883a mov r17,r2
800502c: 10000d0e bge r2,zero,8005064 <__sbprintf+0xa8>
8005030: d880030b ldhu r2,12(sp)
8005034: 1080100c andi r2,r2,64
8005038: 10000326 beq r2,zero,8005048 <__sbprintf+0x8c>
800503c: 8080030b ldhu r2,12(r16)
8005040: 10801014 ori r2,r2,64
8005044: 8080030d sth r2,12(r16)
8005048: 8805883a mov r2,r17
800504c: dfc11d17 ldw ra,1140(sp)
8005050: dc811c17 ldw r18,1136(sp)
8005054: dc411b17 ldw r17,1132(sp)
8005058: dc011a17 ldw r16,1128(sp)
800505c: dec11e04 addi sp,sp,1144
8005060: f800283a ret
8005064: d80b883a mov r5,sp
8005068: 9009883a mov r4,r18
800506c: 8006cdc0 call 8006cdc <_fflush_r>
8005070: 103fef26 beq r2,zero,8005030 <__sbprintf+0x74>
8005074: 047fffc4 movi r17,-1
8005078: 003fed06 br 8005030 <__sbprintf+0x74>
0800507c <__swsetup_r>:
800507c: 00820174 movhi r2,2053
8005080: 10b2af17 ldw r2,-13636(r2)
8005084: defffd04 addi sp,sp,-12
8005088: dc400115 stw r17,4(sp)
800508c: dc000015 stw r16,0(sp)
8005090: dfc00215 stw ra,8(sp)
8005094: 2023883a mov r17,r4
8005098: 2821883a mov r16,r5
800509c: 10000226 beq r2,zero,80050a8 <__swsetup_r+0x2c>
80050a0: 10c00e17 ldw r3,56(r2)
80050a4: 18002026 beq r3,zero,8005128 <__swsetup_r+0xac>
80050a8: 8080030b ldhu r2,12(r16)
80050ac: 10c0020c andi r3,r2,8
80050b0: 1009883a mov r4,r2
80050b4: 18002226 beq r3,zero,8005140 <__swsetup_r+0xc4>
80050b8: 80c00417 ldw r3,16(r16)
80050bc: 18002826 beq r3,zero,8005160 <__swsetup_r+0xe4>
80050c0: 1100004c andi r4,r2,1
80050c4: 20000b1e bne r4,zero,80050f4 <__swsetup_r+0x78>
80050c8: 1080008c andi r2,r2,2
80050cc: 10002d1e bne r2,zero,8005184 <__swsetup_r+0x108>
80050d0: 80800517 ldw r2,20(r16)
80050d4: 80800215 stw r2,8(r16)
80050d8: 18000b26 beq r3,zero,8005108 <__swsetup_r+0x8c>
80050dc: 0005883a mov r2,zero
80050e0: dfc00217 ldw ra,8(sp)
80050e4: dc400117 ldw r17,4(sp)
80050e8: dc000017 ldw r16,0(sp)
80050ec: dec00304 addi sp,sp,12
80050f0: f800283a ret
80050f4: 80800517 ldw r2,20(r16)
80050f8: 80000215 stw zero,8(r16)
80050fc: 0085c83a sub r2,zero,r2
8005100: 80800615 stw r2,24(r16)
8005104: 183ff51e bne r3,zero,80050dc <__swsetup_r+0x60>
8005108: 80c0030b ldhu r3,12(r16)
800510c: 0005883a mov r2,zero
8005110: 1900200c andi r4,r3,128
8005114: 203ff226 beq r4,zero,80050e0 <__swsetup_r+0x64>
8005118: 18c01014 ori r3,r3,64
800511c: 80c0030d sth r3,12(r16)
8005120: 00bfffc4 movi r2,-1
8005124: 003fee06 br 80050e0 <__swsetup_r+0x64>
8005128: 1009883a mov r4,r2
800512c: 80070600 call 8007060 <__sinit>
8005130: 8080030b ldhu r2,12(r16)
8005134: 10c0020c andi r3,r2,8
8005138: 1009883a mov r4,r2
800513c: 183fde1e bne r3,zero,80050b8 <__swsetup_r+0x3c>
8005140: 2080040c andi r2,r4,16
8005144: 10001f26 beq r2,zero,80051c4 <__swsetup_r+0x148>
8005148: 2080010c andi r2,r4,4
800514c: 10000f1e bne r2,zero,800518c <__swsetup_r+0x110>
8005150: 80c00417 ldw r3,16(r16)
8005154: 20800214 ori r2,r4,8
8005158: 8080030d sth r2,12(r16)
800515c: 183fd81e bne r3,zero,80050c0 <__swsetup_r+0x44>
8005160: 1100a00c andi r4,r2,640
8005164: 21008020 cmpeqi r4,r4,512
8005168: 203fd51e bne r4,zero,80050c0 <__swsetup_r+0x44>
800516c: 800b883a mov r5,r16
8005170: 8809883a mov r4,r17
8005174: 8007ca00 call 8007ca0 <__smakebuf_r>
8005178: 8080030b ldhu r2,12(r16)
800517c: 80c00417 ldw r3,16(r16)
8005180: 003fcf06 br 80050c0 <__swsetup_r+0x44>
8005184: 0005883a mov r2,zero
8005188: 003fd206 br 80050d4 <__swsetup_r+0x58>
800518c: 81400c17 ldw r5,48(r16)
8005190: 28000626 beq r5,zero,80051ac <__swsetup_r+0x130>
8005194: 80801004 addi r2,r16,64
8005198: 28800326 beq r5,r2,80051a8 <__swsetup_r+0x12c>
800519c: 8809883a mov r4,r17
80051a0: 80071c40 call 80071c4 <_free_r>
80051a4: 8100030b ldhu r4,12(r16)
80051a8: 80000c15 stw zero,48(r16)
80051ac: 80c00417 ldw r3,16(r16)
80051b0: 00bff6c4 movi r2,-37
80051b4: 1108703a and r4,r2,r4
80051b8: 80000115 stw zero,4(r16)
80051bc: 80c00015 stw r3,0(r16)
80051c0: 003fe406 br 8005154 <__swsetup_r+0xd8>
80051c4: 00800244 movi r2,9
80051c8: 88800015 stw r2,0(r17)
80051cc: 20801014 ori r2,r4,64
80051d0: 8080030d sth r2,12(r16)
80051d4: 00bfffc4 movi r2,-1
80051d8: 003fc106 br 80050e0 <__swsetup_r+0x64>
080051dc <quorem>:
80051dc: defff504 addi sp,sp,-44
80051e0: dc800315 stw r18,12(sp)
80051e4: 20800417 ldw r2,16(r4)
80051e8: 2c800417 ldw r18,16(r5)
80051ec: dfc00a15 stw ra,40(sp)
80051f0: df000915 stw fp,36(sp)
80051f4: ddc00815 stw r23,32(sp)
80051f8: dd800715 stw r22,28(sp)
80051fc: dd400615 stw r21,24(sp)
8005200: dd000515 stw r20,20(sp)
8005204: dcc00415 stw r19,16(sp)
8005208: dc400215 stw r17,8(sp)
800520c: dc000115 stw r16,4(sp)
8005210: 14807416 blt r2,r18,80053e4 <quorem+0x208>
8005214: 94bfffc4 addi r18,r18,-1
8005218: 902e90ba slli r23,r18,2
800521c: 2c400504 addi r17,r5,20
8005220: 25400504 addi r21,r4,20
8005224: 8de9883a add r20,r17,r23
8005228: a7000017 ldw fp,0(r20)
800522c: adef883a add r23,r21,r23
8005230: b8c00017 ldw r3,0(r23)
8005234: e7000044 addi fp,fp,1
8005238: 282d883a mov r22,r5
800523c: 2021883a mov r16,r4
8005240: e00b883a mov r5,fp
8005244: 1809883a mov r4,r3
8005248: d8c00015 stw r3,0(sp)
800524c: 800cff80 call 800cff8 <__udivsi3>
8005250: d8c00017 ldw r3,0(sp)
8005254: 1027883a mov r19,r2
8005258: 1f002c36 bltu r3,fp,800530c <quorem+0x130>
800525c: 8811883a mov r8,r17
8005260: a80b883a mov r5,r21
8005264: 0013883a mov r9,zero
8005268: 0007883a mov r3,zero
800526c: 42000104 addi r8,r8,4
8005270: 41ffff17 ldw r7,-4(r8)
8005274: 29800017 ldw r6,0(r5)
8005278: 29400104 addi r5,r5,4
800527c: 38bfffcc andi r2,r7,65535
8005280: 14c5383a mul r2,r2,r19
8005284: 3808d43a srli r4,r7,16
8005288: 32bfffcc andi r10,r6,65535
800528c: 1245883a add r2,r2,r9
8005290: 1012d43a srli r9,r2,16
8005294: 11ffffcc andi r7,r2,65535
8005298: 24c9383a mul r4,r4,r19
800529c: 19c7c83a sub r3,r3,r7
80052a0: 1a8f883a add r7,r3,r10
80052a4: 3006d43a srli r3,r6,16
80052a8: 2249883a add r4,r4,r9
80052ac: 3805d43a srai r2,r7,16
80052b0: 21bfffcc andi r6,r4,65535
80052b4: 1987c83a sub r3,r3,r6
80052b8: 1887883a add r3,r3,r2
80052bc: 180c943a slli r6,r3,16
80052c0: 39ffffcc andi r7,r7,65535
80052c4: 2012d43a srli r9,r4,16
80052c8: 31ceb03a or r7,r6,r7
80052cc: 29ffff15 stw r7,-4(r5)
80052d0: 1807d43a srai r3,r3,16
80052d4: a23fe52e bgeu r20,r8,800526c <quorem+0x90>
80052d8: b8800017 ldw r2,0(r23)
80052dc: 10000b1e bne r2,zero,800530c <quorem+0x130>
80052e0: b8bfff04 addi r2,r23,-4
80052e4: a880082e bgeu r21,r2,8005308 <quorem+0x12c>
80052e8: b8ffff17 ldw r3,-4(r23)
80052ec: 18000326 beq r3,zero,80052fc <quorem+0x120>
80052f0: 00000506 br 8005308 <quorem+0x12c>
80052f4: 10c00017 ldw r3,0(r2)
80052f8: 1800031e bne r3,zero,8005308 <quorem+0x12c>
80052fc: 10bfff04 addi r2,r2,-4
8005300: 94bfffc4 addi r18,r18,-1
8005304: a8bffb36 bltu r21,r2,80052f4 <quorem+0x118>
8005308: 84800415 stw r18,16(r16)
800530c: b00b883a mov r5,r22
8005310: 8009883a mov r4,r16
8005314: 80092580 call 8009258 <__mcmp>
8005318: 10002516 blt r2,zero,80053b0 <quorem+0x1d4>
800531c: 9cc00044 addi r19,r19,1
8005320: a80d883a mov r6,r21
8005324: 0007883a mov r3,zero
8005328: 8c400104 addi r17,r17,4
800532c: 893fff17 ldw r4,-4(r17)
8005330: 31400017 ldw r5,0(r6)
8005334: 31800104 addi r6,r6,4
8005338: 20bfffcc andi r2,r4,65535
800533c: 1887c83a sub r3,r3,r2
8005340: 28bfffcc andi r2,r5,65535
8005344: 1885883a add r2,r3,r2
8005348: 2008d43a srli r4,r4,16
800534c: 2806d43a srli r3,r5,16
8005350: 100fd43a srai r7,r2,16
8005354: 117fffcc andi r5,r2,65535
8005358: 1907c83a sub r3,r3,r4
800535c: 19c7883a add r3,r3,r7
8005360: 1804943a slli r2,r3,16
8005364: 1807d43a srai r3,r3,16
8005368: 1144b03a or r2,r2,r5
800536c: 30bfff15 stw r2,-4(r6)
8005370: a47fed2e bgeu r20,r17,8005328 <quorem+0x14c>
8005374: 900690ba slli r3,r18,2
8005378: a8c7883a add r3,r21,r3
800537c: 18800017 ldw r2,0(r3)
8005380: 10000b1e bne r2,zero,80053b0 <quorem+0x1d4>
8005384: 18bfff04 addi r2,r3,-4
8005388: a880082e bgeu r21,r2,80053ac <quorem+0x1d0>
800538c: 18ffff17 ldw r3,-4(r3)
8005390: 18000326 beq r3,zero,80053a0 <quorem+0x1c4>
8005394: 00000506 br 80053ac <quorem+0x1d0>
8005398: 10c00017 ldw r3,0(r2)
800539c: 1800031e bne r3,zero,80053ac <quorem+0x1d0>
80053a0: 10bfff04 addi r2,r2,-4
80053a4: 94bfffc4 addi r18,r18,-1
80053a8: a8bffb36 bltu r21,r2,8005398 <quorem+0x1bc>
80053ac: 84800415 stw r18,16(r16)
80053b0: 9805883a mov r2,r19
80053b4: dfc00a17 ldw ra,40(sp)
80053b8: df000917 ldw fp,36(sp)
80053bc: ddc00817 ldw r23,32(sp)
80053c0: dd800717 ldw r22,28(sp)
80053c4: dd400617 ldw r21,24(sp)
80053c8: dd000517 ldw r20,20(sp)
80053cc: dcc00417 ldw r19,16(sp)
80053d0: dc800317 ldw r18,12(sp)
80053d4: dc400217 ldw r17,8(sp)
80053d8: dc000117 ldw r16,4(sp)
80053dc: dec00b04 addi sp,sp,44
80053e0: f800283a ret
80053e4: 0005883a mov r2,zero
80053e8: 003ff206 br 80053b4 <quorem+0x1d8>
080053ec <_dtoa_r>:
80053ec: 20801017 ldw r2,64(r4)
80053f0: deffe204 addi sp,sp,-120
80053f4: df001c15 stw fp,112(sp)
80053f8: dcc01715 stw r19,92(sp)
80053fc: dc401515 stw r17,84(sp)
8005400: dc001415 stw r16,80(sp)
8005404: dfc01d15 stw ra,116(sp)
8005408: ddc01b15 stw r23,108(sp)
800540c: dd801a15 stw r22,104(sp)
8005410: dd401915 stw r21,100(sp)
8005414: dd001815 stw r20,96(sp)
8005418: dc801615 stw r18,88(sp)
800541c: d9400115 stw r5,4(sp)
8005420: d9c00215 stw r7,8(sp)
8005424: 2039883a mov fp,r4
8005428: 3027883a mov r19,r6
800542c: dc002017 ldw r16,128(sp)
8005430: 3023883a mov r17,r6
8005434: 10000826 beq r2,zero,8005458 <_dtoa_r+0x6c>
8005438: 21801117 ldw r6,68(r4)
800543c: 00c00044 movi r3,1
8005440: 100b883a mov r5,r2
8005444: 1986983a sll r3,r3,r6
8005448: 11800115 stw r6,4(r2)
800544c: 10c00215 stw r3,8(r2)
8005450: 8008a780 call 8008a78 <_Bfree>
8005454: e0001015 stw zero,64(fp)
8005458: 98018116 blt r19,zero,8005a60 <_dtoa_r+0x674>
800545c: 80000015 stw zero,0(r16)
8005460: 989ffc2c andhi r2,r19,32752
8005464: 00dffc34 movhi r3,32752
8005468: 10c18626 beq r2,r3,8005a84 <_dtoa_r+0x698>
800546c: d9000117 ldw r4,4(sp)
8005470: 000d883a mov r6,zero
8005474: 000f883a mov r7,zero
8005478: 880b883a mov r5,r17
800547c: 800e3000 call 800e300 <__eqdf2>
8005480: 1000191e bne r2,zero,80054e8 <_dtoa_r+0xfc>
8005484: d8c01f17 ldw r3,124(sp)
8005488: 00800044 movi r2,1
800548c: 18800015 stw r2,0(r3)
8005490: d8802117 ldw r2,132(sp)
8005494: 10032426 beq r2,zero,8006128 <_dtoa_r+0xd3c>
8005498: d9002117 ldw r4,132(sp)
800549c: 00820134 movhi r2,2052
80054a0: 109d2744 addi r2,r2,29853
80054a4: 00c20134 movhi r3,2052
80054a8: 20800015 stw r2,0(r4)
80054ac: 189d2704 addi r2,r3,29852
80054b0: d8800315 stw r2,12(sp)
80054b4: d8800317 ldw r2,12(sp)
80054b8: dfc01d17 ldw ra,116(sp)
80054bc: df001c17 ldw fp,112(sp)
80054c0: ddc01b17 ldw r23,108(sp)
80054c4: dd801a17 ldw r22,104(sp)
80054c8: dd401917 ldw r21,100(sp)
80054cc: dd001817 ldw r20,96(sp)
80054d0: dcc01717 ldw r19,92(sp)
80054d4: dc801617 ldw r18,88(sp)
80054d8: dc401517 ldw r17,84(sp)
80054dc: dc001417 ldw r16,80(sp)
80054e0: dec01e04 addi sp,sp,120
80054e4: f800283a ret
80054e8: dc800117 ldw r18,4(sp)
80054ec: d8801204 addi r2,sp,72
80054f0: 9820d53a srli r16,r19,20
80054f4: d8800015 stw r2,0(sp)
80054f8: d9c01304 addi r7,sp,76
80054fc: 900b883a mov r5,r18
8005500: 880d883a mov r6,r17
8005504: e009883a mov r4,fp
8005508: 80095cc0 call 80095cc <__d2b>
800550c: 102b883a mov r21,r2
8005510: 8001701e bne r16,zero,8005ad4 <_dtoa_r+0x6e8>
8005514: dc801217 ldw r18,72(sp)
8005518: dc001317 ldw r16,76(sp)
800551c: 9421883a add r16,r18,r16
8005520: 80810c84 addi r2,r16,1074
8005524: 10c00850 cmplti r3,r2,33
8005528: 18030f1e bne r3,zero,8006168 <_dtoa_r+0xd7c>
800552c: 01001004 movi r4,64
8005530: 2085c83a sub r2,r4,r2
8005534: 98a6983a sll r19,r19,r2
8005538: d8800117 ldw r2,4(sp)
800553c: 81010484 addi r4,r16,1042
8005540: 1108d83a srl r4,r2,r4
8005544: 9908b03a or r4,r19,r4
8005548: 800f6f40 call 800f6f4 <__floatunsidf>
800554c: 1009883a mov r4,r2
8005550: 017f8434 movhi r5,65040
8005554: 00800044 movi r2,1
8005558: 194b883a add r5,r3,r5
800555c: 843fffc4 addi r16,r16,-1
8005560: d8800a15 stw r2,40(sp)
8005564: 000d883a mov r6,zero
8005568: 01cffe34 movhi r7,16376
800556c: 800ebec0 call 800ebec <__subdf3>
8005570: 0198dbf4 movhi r6,25455
8005574: 01cff4f4 movhi r7,16339
8005578: 3190d844 addi r6,r6,17249
800557c: 39e1e9c4 addi r7,r7,-30809
8005580: 1009883a mov r4,r2
8005584: 180b883a mov r5,r3
8005588: 800e5600 call 800e560 <__muldf3>
800558c: 01a2d874 movhi r6,35681
8005590: 01cff1f4 movhi r7,16327
8005594: 31b22cc4 addi r6,r6,-14157
8005598: 39e28a04 addi r7,r7,-30168
800559c: 180b883a mov r5,r3
80055a0: 1009883a mov r4,r2
80055a4: 800d0b80 call 800d0b8 <__adddf3>
80055a8: 8009883a mov r4,r16
80055ac: 1029883a mov r20,r2
80055b0: 1827883a mov r19,r3
80055b4: 800f62c0 call 800f62c <__floatsidf>
80055b8: 019427f4 movhi r6,20639
80055bc: 01cff4f4 movhi r7,16339
80055c0: 319e7ec4 addi r6,r6,31227
80055c4: 39d104c4 addi r7,r7,17427
80055c8: 1009883a mov r4,r2
80055cc: 180b883a mov r5,r3
80055d0: 800e5600 call 800e560 <__muldf3>
80055d4: 100d883a mov r6,r2
80055d8: 180f883a mov r7,r3
80055dc: a009883a mov r4,r20
80055e0: 980b883a mov r5,r19
80055e4: 800d0b80 call 800d0b8 <__adddf3>
80055e8: 1009883a mov r4,r2
80055ec: 180b883a mov r5,r3
80055f0: 1029883a mov r20,r2
80055f4: 1827883a mov r19,r3
80055f8: 800f5ac0 call 800f5ac <__fixdfsi>
80055fc: 000d883a mov r6,zero
8005600: 000f883a mov r7,zero
8005604: a009883a mov r4,r20
8005608: 980b883a mov r5,r19
800560c: 102d883a mov r22,r2
8005610: 800e4700 call 800e470 <__ledf2>
8005614: 1002ba16 blt r2,zero,8006100 <_dtoa_r+0xd14>
8005618: 9421c83a sub r16,r18,r16
800561c: b08005e8 cmpgeui r2,r22,23
8005620: 853fffc4 addi r20,r16,-1
8005624: 1002ae1e bne r2,zero,80060e0 <_dtoa_r+0xcf4>
8005628: b00690fa slli r3,r22,3
800562c: 00820134 movhi r2,2052
8005630: 109d4b04 addi r2,r2,29996
8005634: 10c5883a add r2,r2,r3
8005638: 11800017 ldw r6,0(r2)
800563c: 11c00117 ldw r7,4(r2)
8005640: d9000117 ldw r4,4(sp)
8005644: 880b883a mov r5,r17
8005648: 800e4700 call 800e470 <__ledf2>
800564c: 10026f0e bge r2,zero,800600c <_dtoa_r+0xc20>
8005650: d8000915 stw zero,36(sp)
8005654: b5bfffc4 addi r22,r22,-1
8005658: a002a416 blt r20,zero,80060ec <_dtoa_r+0xd00>
800565c: d8000515 stw zero,20(sp)
8005660: b0026d0e bge r22,zero,8006018 <_dtoa_r+0xc2c>
8005664: d8800517 ldw r2,20(sp)
8005668: d8c00217 ldw r3,8(sp)
800566c: dd800415 stw r22,16(sp)
8005670: 1585c83a sub r2,r2,r22
8005674: d8800515 stw r2,20(sp)
8005678: 0585c83a sub r2,zero,r22
800567c: d8800815 stw r2,32(sp)
8005680: 188002a8 cmpgeui r2,r3,10
8005684: 002d883a mov r22,zero
8005688: 1002691e bne r2,zero,8006030 <_dtoa_r+0xc44>
800568c: 18800190 cmplti r2,r3,6
8005690: 1002ba1e bne r2,zero,800617c <_dtoa_r+0xd90>
8005694: 18bfff04 addi r2,r3,-4
8005698: d8800215 stw r2,8(sp)
800569c: 0021883a mov r16,zero
80056a0: d8c00217 ldw r3,8(sp)
80056a4: 188000e0 cmpeqi r2,r3,3
80056a8: 10039d1e bne r2,zero,8006520 <_dtoa_r+0x1134>
80056ac: 18800108 cmpgei r2,r3,4
80056b0: 10027a26 beq r2,zero,800609c <_dtoa_r+0xcb0>
80056b4: d8c00217 ldw r3,8(sp)
80056b8: 18800120 cmpeqi r2,r3,4
80056bc: 10026926 beq r2,zero,8006064 <_dtoa_r+0xc78>
80056c0: 00800044 movi r2,1
80056c4: d8800715 stw r2,28(sp)
80056c8: d8801e17 ldw r2,120(sp)
80056cc: 0083670e bge zero,r2,800646c <_dtoa_r+0x1080>
80056d0: d8800b15 stw r2,44(sp)
80056d4: d8800615 stw r2,24(sp)
80056d8: 100d883a mov r6,r2
80056dc: e0001115 stw zero,68(fp)
80056e0: 30800610 cmplti r2,r6,24
80056e4: dc800617 ldw r18,24(sp)
80056e8: 1004eb1e bne r2,zero,8006a98 <_dtoa_r+0x16ac>
80056ec: 00c00044 movi r3,1
80056f0: 00800104 movi r2,4
80056f4: 1085883a add r2,r2,r2
80056f8: 11000504 addi r4,r2,20
80056fc: 180b883a mov r5,r3
8005700: 18c00044 addi r3,r3,1
8005704: 313ffb2e bgeu r6,r4,80056f4 <_dtoa_r+0x308>
8005708: e1401115 stw r5,68(fp)
800570c: e009883a mov r4,fp
8005710: 80089d40 call 80089d4 <_Balloc>
8005714: d8800315 stw r2,12(sp)
8005718: e0801015 stw r2,64(fp)
800571c: 948003e8 cmpgeui r18,r18,15
8005720: 9000fe1e bne r18,zero,8005b1c <_dtoa_r+0x730>
8005724: 8000fd26 beq r16,zero,8005b1c <_dtoa_r+0x730>
8005728: d9000417 ldw r4,16(sp)
800572c: 0103c60e bge zero,r4,8006648 <_dtoa_r+0x125c>
8005730: 208003cc andi r2,r4,15
8005734: 100690fa slli r3,r2,3
8005738: 202fd13a srai r23,r4,4
800573c: 00820134 movhi r2,2052
8005740: 109d4b04 addi r2,r2,29996
8005744: 10c5883a add r2,r2,r3
8005748: b8c0040c andi r3,r23,16
800574c: 12800017 ldw r10,0(r2)
8005750: 12400117 ldw r9,4(r2)
8005754: 1803621e bne r3,zero,80064e0 <_dtoa_r+0x10f4>
8005758: d8800117 ldw r2,4(sp)
800575c: 8827883a mov r19,r17
8005760: 04000084 movi r16,2
8005764: d8800c15 stw r2,48(sp)
8005768: 04820134 movhi r18,2052
800576c: 949d4104 addi r18,r18,29956
8005770: b8000f26 beq r23,zero,80057b0 <_dtoa_r+0x3c4>
8005774: 5005883a mov r2,r10
8005778: 4807883a mov r3,r9
800577c: b980004c andi r6,r23,1
8005780: 1009883a mov r4,r2
8005784: b82fd07a srai r23,r23,1
8005788: 180b883a mov r5,r3
800578c: 30000426 beq r6,zero,80057a0 <_dtoa_r+0x3b4>
8005790: 91800017 ldw r6,0(r18)
8005794: 91c00117 ldw r7,4(r18)
8005798: 84000044 addi r16,r16,1
800579c: 800e5600 call 800e560 <__muldf3>
80057a0: 94800204 addi r18,r18,8
80057a4: b83ff51e bne r23,zero,800577c <_dtoa_r+0x390>
80057a8: 1015883a mov r10,r2
80057ac: 1813883a mov r9,r3
80057b0: d9000c17 ldw r4,48(sp)
80057b4: 980b883a mov r5,r19
80057b8: 500d883a mov r6,r10
80057bc: 480f883a mov r7,r9
80057c0: 800da580 call 800da58 <__divdf3>
80057c4: 1025883a mov r18,r2
80057c8: 1827883a mov r19,r3
80057cc: d8800917 ldw r2,36(sp)
80057d0: 10000626 beq r2,zero,80057ec <_dtoa_r+0x400>
80057d4: 000d883a mov r6,zero
80057d8: 01cffc34 movhi r7,16368
80057dc: 9009883a mov r4,r18
80057e0: 980b883a mov r5,r19
80057e4: 800e4700 call 800e470 <__ledf2>
80057e8: 10042616 blt r2,zero,8006884 <_dtoa_r+0x1498>
80057ec: 8009883a mov r4,r16
80057f0: 800f62c0 call 800f62c <__floatsidf>
80057f4: 900d883a mov r6,r18
80057f8: 980f883a mov r7,r19
80057fc: 1009883a mov r4,r2
8005800: 180b883a mov r5,r3
8005804: 800e5600 call 800e560 <__muldf3>
8005808: 000d883a mov r6,zero
800580c: 01d00734 movhi r7,16412
8005810: 1009883a mov r4,r2
8005814: 180b883a mov r5,r3
8005818: 800d0b80 call 800d0b8 <__adddf3>
800581c: d8800c15 stw r2,48(sp)
8005820: 00bf3034 movhi r2,64704
8005824: 1885883a add r2,r3,r2
8005828: d8800d15 stw r2,52(sp)
800582c: d8800617 ldw r2,24(sp)
8005830: 10036d26 beq r2,zero,80065e8 <_dtoa_r+0x11fc>
8005834: d8800417 ldw r2,16(sp)
8005838: d8800f15 stw r2,60(sp)
800583c: d8800617 ldw r2,24(sp)
8005840: d8800e15 stw r2,56(sp)
8005844: 980b883a mov r5,r19
8005848: 9009883a mov r4,r18
800584c: 800f5ac0 call 800f5ac <__fixdfsi>
8005850: 1009883a mov r4,r2
8005854: 102f883a mov r23,r2
8005858: 800f62c0 call 800f62c <__floatsidf>
800585c: 100d883a mov r6,r2
8005860: 180f883a mov r7,r3
8005864: 9009883a mov r4,r18
8005868: 980b883a mov r5,r19
800586c: 800ebec0 call 800ebec <__subdf3>
8005870: 1025883a mov r18,r2
8005874: d8800e17 ldw r2,56(sp)
8005878: 1821883a mov r16,r3
800587c: ba400c04 addi r9,r23,48
8005880: 10bfffc4 addi r2,r2,-1
8005884: 100690fa slli r3,r2,3
8005888: 00820134 movhi r2,2052
800588c: 109d4b04 addi r2,r2,29996
8005890: 10c5883a add r2,r2,r3
8005894: 11800017 ldw r6,0(r2)
8005898: d8c00317 ldw r3,12(sp)
800589c: 11c00117 ldw r7,4(r2)
80058a0: d8800717 ldw r2,28(sp)
80058a4: 4811883a mov r8,r9
80058a8: da001015 stw r8,64(sp)
80058ac: 1dc00044 addi r23,r3,1
80058b0: 1003a226 beq r2,zero,800673c <_dtoa_r+0x1350>
80058b4: 0009883a mov r4,zero
80058b8: 014ff834 movhi r5,16352
80058bc: da401115 stw r9,68(sp)
80058c0: 800da580 call 800da58 <__divdf3>
80058c4: d9800c17 ldw r6,48(sp)
80058c8: d9c00d17 ldw r7,52(sp)
80058cc: 1009883a mov r4,r2
80058d0: 180b883a mov r5,r3
80058d4: 800ebec0 call 800ebec <__subdf3>
80058d8: 1827883a mov r19,r3
80058dc: da401117 ldw r9,68(sp)
80058e0: d8c00317 ldw r3,12(sp)
80058e4: 900d883a mov r6,r18
80058e8: 800f883a mov r7,r16
80058ec: 1a400005 stb r9,0(r3)
80058f0: 1009883a mov r4,r2
80058f4: 980b883a mov r5,r19
80058f8: d8800c15 stw r2,48(sp)
80058fc: 800e3800 call 800e380 <__gedf2>
8005900: da001017 ldw r8,64(sp)
8005904: 00804816 blt zero,r2,8005a28 <_dtoa_r+0x63c>
8005908: 900d883a mov r6,r18
800590c: 800f883a mov r7,r16
8005910: 0009883a mov r4,zero
8005914: 014ffc34 movhi r5,16368
8005918: da000d15 stw r8,52(sp)
800591c: 800ebec0 call 800ebec <__subdf3>
8005920: d9000c17 ldw r4,48(sp)
8005924: 100d883a mov r6,r2
8005928: 180f883a mov r7,r3
800592c: 980b883a mov r5,r19
8005930: 800e3800 call 800e380 <__gedf2>
8005934: da000d17 ldw r8,52(sp)
8005938: 00844e16 blt zero,r2,8006a74 <_dtoa_r+0x1688>
800593c: d8c00e17 ldw r3,56(sp)
8005940: 18800060 cmpeqi r2,r3,1
8005944: 1000751e bne r2,zero,8005b1c <_dtoa_r+0x730>
8005948: d8800317 ldw r2,12(sp)
800594c: dd800d15 stw r22,52(sp)
8005950: dd000e15 stw r20,56(sp)
8005954: 10c5883a add r2,r2,r3
8005958: dd000c17 ldw r20,48(sp)
800595c: 102d883a mov r22,r2
8005960: dc400c15 stw r17,48(sp)
8005964: 00000806 br 8005988 <_dtoa_r+0x59c>
8005968: 800ebec0 call 800ebec <__subdf3>
800596c: a00d883a mov r6,r20
8005970: 980f883a mov r7,r19
8005974: 1009883a mov r4,r2
8005978: 180b883a mov r5,r3
800597c: 800e4700 call 800e470 <__ledf2>
8005980: 10042316 blt r2,zero,8006a10 <_dtoa_r+0x1624>
8005984: bd806226 beq r23,r22,8005b10 <_dtoa_r+0x724>
8005988: a009883a mov r4,r20
800598c: 980b883a mov r5,r19
8005990: 000d883a mov r6,zero
8005994: 01d00934 movhi r7,16420
8005998: 800e5600 call 800e560 <__muldf3>
800599c: 000d883a mov r6,zero
80059a0: 01d00934 movhi r7,16420
80059a4: 9009883a mov r4,r18
80059a8: 800b883a mov r5,r16
80059ac: 1029883a mov r20,r2
80059b0: 1827883a mov r19,r3
80059b4: 800e5600 call 800e560 <__muldf3>
80059b8: 180b883a mov r5,r3
80059bc: 1009883a mov r4,r2
80059c0: 1821883a mov r16,r3
80059c4: 1025883a mov r18,r2
80059c8: 800f5ac0 call 800f5ac <__fixdfsi>
80059cc: 1009883a mov r4,r2
80059d0: 1023883a mov r17,r2
80059d4: 800f62c0 call 800f62c <__floatsidf>
80059d8: 9009883a mov r4,r18
80059dc: 800b883a mov r5,r16
80059e0: 100d883a mov r6,r2
80059e4: 180f883a mov r7,r3
80059e8: 800ebec0 call 800ebec <__subdf3>
80059ec: bdc00044 addi r23,r23,1
80059f0: 8c400c04 addi r17,r17,48
80059f4: a00d883a mov r6,r20
80059f8: 980f883a mov r7,r19
80059fc: 1009883a mov r4,r2
8005a00: 180b883a mov r5,r3
8005a04: bc7fffc5 stb r17,-1(r23)
8005a08: 1025883a mov r18,r2
8005a0c: 1821883a mov r16,r3
8005a10: 800e4700 call 800e470 <__ledf2>
8005a14: 900d883a mov r6,r18
8005a18: 800f883a mov r7,r16
8005a1c: 0009883a mov r4,zero
8005a20: 014ffc34 movhi r5,16368
8005a24: 103fd00e bge r2,zero,8005968 <_dtoa_r+0x57c>
8005a28: d8800f17 ldw r2,60(sp)
8005a2c: 10800044 addi r2,r2,1
8005a30: d8800415 stw r2,16(sp)
8005a34: a80b883a mov r5,r21
8005a38: e009883a mov r4,fp
8005a3c: 8008a780 call 8008a78 <_Bfree>
8005a40: d8801f17 ldw r2,124(sp)
8005a44: d8c00417 ldw r3,16(sp)
8005a48: b8000005 stb zero,0(r23)
8005a4c: 10c00015 stw r3,0(r2)
8005a50: d8802117 ldw r2,132(sp)
8005a54: 103e9726 beq r2,zero,80054b4 <_dtoa_r+0xc8>
8005a58: 15c00015 stw r23,0(r2)
8005a5c: 003e9506 br 80054b4 <_dtoa_r+0xc8>
8005a60: 04600034 movhi r17,32768
8005a64: 8c7fffc4 addi r17,r17,-1
8005a68: 9c62703a and r17,r19,r17
8005a6c: 00800044 movi r2,1
8005a70: 8827883a mov r19,r17
8005a74: 80800015 stw r2,0(r16)
8005a78: 00dffc34 movhi r3,32752
8005a7c: 989ffc2c andhi r2,r19,32752
8005a80: 10fe7a1e bne r2,r3,800546c <_dtoa_r+0x80>
8005a84: 00800434 movhi r2,16
8005a88: d8c01f17 ldw r3,124(sp)
8005a8c: 10bfffc4 addi r2,r2,-1
8005a90: 98a6703a and r19,r19,r2
8005a94: 0089c3c4 movi r2,9999
8005a98: 18800015 stw r2,0(r3)
8005a9c: d8800117 ldw r2,4(sp)
8005aa0: 98aab03a or r21,r19,r2
8005aa4: a800141e bne r21,zero,8005af8 <_dtoa_r+0x70c>
8005aa8: d8802117 ldw r2,132(sp)
8005aac: 1003f626 beq r2,zero,8006a88 <_dtoa_r+0x169c>
8005ab0: 00820134 movhi r2,2052
8005ab4: 1007883a mov r3,r2
8005ab8: 18dd3104 addi r3,r3,29892
8005abc: 00820134 movhi r2,2052
8005ac0: d8c00315 stw r3,12(sp)
8005ac4: 109d3304 addi r2,r2,29900
8005ac8: d8c02117 ldw r3,132(sp)
8005acc: 18800015 stw r2,0(r3)
8005ad0: 003e7806 br 80054b4 <_dtoa_r+0xc8>
8005ad4: 01400434 movhi r5,16
8005ad8: 297fffc4 addi r5,r5,-1
8005adc: 894a703a and r5,r17,r5
8005ae0: 9009883a mov r4,r18
8005ae4: 294ffc34 orhi r5,r5,16368
8005ae8: 843f0044 addi r16,r16,-1023
8005aec: dc801217 ldw r18,72(sp)
8005af0: d8000a15 stw zero,40(sp)
8005af4: 003e9b06 br 8005564 <_dtoa_r+0x178>
8005af8: d8802117 ldw r2,132(sp)
8005afc: 1002461e bne r2,zero,8006418 <_dtoa_r+0x102c>
8005b00: 00820134 movhi r2,2052
8005b04: 109d3004 addi r2,r2,29888
8005b08: d8800315 stw r2,12(sp)
8005b0c: 003e6906 br 80054b4 <_dtoa_r+0xc8>
8005b10: dd800d17 ldw r22,52(sp)
8005b14: dd000e17 ldw r20,56(sp)
8005b18: dc400c17 ldw r17,48(sp)
8005b1c: d8801317 ldw r2,76(sp)
8005b20: 10009f16 blt r2,zero,8005da0 <_dtoa_r+0x9b4>
8005b24: d9000417 ldw r4,16(sp)
8005b28: 20c003c8 cmpgei r3,r4,15
8005b2c: 18009c1e bne r3,zero,8005da0 <_dtoa_r+0x9b4>
8005b30: 200690fa slli r3,r4,3
8005b34: 00820134 movhi r2,2052
8005b38: 109d4b04 addi r2,r2,29996
8005b3c: 10c5883a add r2,r2,r3
8005b40: 14000017 ldw r16,0(r2)
8005b44: 14800117 ldw r18,4(r2)
8005b48: d8801e17 ldw r2,120(sp)
8005b4c: 1000140e bge r2,zero,8005ba0 <_dtoa_r+0x7b4>
8005b50: d8800617 ldw r2,24(sp)
8005b54: 00801216 blt zero,r2,8005ba0 <_dtoa_r+0x7b4>
8005b58: 1002b81e bne r2,zero,800663c <_dtoa_r+0x1250>
8005b5c: 8009883a mov r4,r16
8005b60: 900b883a mov r5,r18
8005b64: 000d883a mov r6,zero
8005b68: 01d00534 movhi r7,16404
8005b6c: 800e5600 call 800e560 <__muldf3>
8005b70: d9800117 ldw r6,4(sp)
8005b74: 880f883a mov r7,r17
8005b78: 1009883a mov r4,r2
8005b7c: 180b883a mov r5,r3
8005b80: 800e3800 call 800e380 <__gedf2>
8005b84: 0025883a mov r18,zero
8005b88: 0021883a mov r16,zero
8005b8c: 1001fd16 blt r2,zero,8006384 <_dtoa_r+0xf98>
8005b90: d8801e17 ldw r2,120(sp)
8005b94: ddc00317 ldw r23,12(sp)
8005b98: 00a2303a nor r17,zero,r2
8005b9c: 0001ff06 br 800639c <_dtoa_r+0xfb0>
8005ba0: dcc00117 ldw r19,4(sp)
8005ba4: 800d883a mov r6,r16
8005ba8: 900f883a mov r7,r18
8005bac: 880b883a mov r5,r17
8005bb0: 9809883a mov r4,r19
8005bb4: 800da580 call 800da58 <__divdf3>
8005bb8: 180b883a mov r5,r3
8005bbc: 1009883a mov r4,r2
8005bc0: 800f5ac0 call 800f5ac <__fixdfsi>
8005bc4: 1009883a mov r4,r2
8005bc8: 102d883a mov r22,r2
8005bcc: 800f62c0 call 800f62c <__floatsidf>
8005bd0: 800d883a mov r6,r16
8005bd4: 900f883a mov r7,r18
8005bd8: 1009883a mov r4,r2
8005bdc: 180b883a mov r5,r3
8005be0: 800e5600 call 800e560 <__muldf3>
8005be4: 880b883a mov r5,r17
8005be8: 100d883a mov r6,r2
8005bec: 180f883a mov r7,r3
8005bf0: 9809883a mov r4,r19
8005bf4: 800ebec0 call 800ebec <__subdf3>
8005bf8: dc400317 ldw r17,12(sp)
8005bfc: 1009883a mov r4,r2
8005c00: d9c00417 ldw r7,16(sp)
8005c04: b0800c04 addi r2,r22,48
8005c08: 88800005 stb r2,0(r17)
8005c0c: d8800617 ldw r2,24(sp)
8005c10: 39c00044 addi r7,r7,1
8005c14: d9c00415 stw r7,16(sp)
8005c18: 11800060 cmpeqi r6,r2,1
8005c1c: 180b883a mov r5,r3
8005c20: 2005883a mov r2,r4
8005c24: 8dc00044 addi r23,r17,1
8005c28: 3000391e bne r6,zero,8005d10 <_dtoa_r+0x924>
8005c2c: 01d00934 movhi r7,16420
8005c30: 800e5600 call 800e560 <__muldf3>
8005c34: 000d883a mov r6,zero
8005c38: 000f883a mov r7,zero
8005c3c: 1009883a mov r4,r2
8005c40: 180b883a mov r5,r3
8005c44: 1027883a mov r19,r2
8005c48: 1829883a mov r20,r3
8005c4c: 800e3000 call 800e300 <__eqdf2>
8005c50: 103f7826 beq r2,zero,8005a34 <_dtoa_r+0x648>
8005c54: d8c00617 ldw r3,24(sp)
8005c58: 8805883a mov r2,r17
8005c5c: dd400115 stw r21,4(sp)
8005c60: 8c400084 addi r17,r17,2
8005c64: 10ed883a add r22,r2,r3
8005c68: 00000a06 br 8005c94 <_dtoa_r+0x8a8>
8005c6c: 800e5600 call 800e560 <__muldf3>
8005c70: 000d883a mov r6,zero
8005c74: 000f883a mov r7,zero
8005c78: 1009883a mov r4,r2
8005c7c: 180b883a mov r5,r3
8005c80: 1027883a mov r19,r2
8005c84: 1829883a mov r20,r3
8005c88: 8c400044 addi r17,r17,1
8005c8c: 800e3000 call 800e300 <__eqdf2>
8005c90: 10029d26 beq r2,zero,8006708 <_dtoa_r+0x131c>
8005c94: 800d883a mov r6,r16
8005c98: 900f883a mov r7,r18
8005c9c: 9809883a mov r4,r19
8005ca0: a00b883a mov r5,r20
8005ca4: 800da580 call 800da58 <__divdf3>
8005ca8: 180b883a mov r5,r3
8005cac: 1009883a mov r4,r2
8005cb0: 800f5ac0 call 800f5ac <__fixdfsi>
8005cb4: 1009883a mov r4,r2
8005cb8: 102b883a mov r21,r2
8005cbc: 800f62c0 call 800f62c <__floatsidf>
8005cc0: 800d883a mov r6,r16
8005cc4: 900f883a mov r7,r18
8005cc8: 1009883a mov r4,r2
8005ccc: 180b883a mov r5,r3
8005cd0: 800e5600 call 800e560 <__muldf3>
8005cd4: 100d883a mov r6,r2
8005cd8: 180f883a mov r7,r3
8005cdc: 9809883a mov r4,r19
8005ce0: a00b883a mov r5,r20
8005ce4: 800ebec0 call 800ebec <__subdf3>
8005ce8: aa400c04 addi r9,r21,48
8005cec: 8a7fffc5 stb r9,-1(r17)
8005cf0: 000d883a mov r6,zero
8005cf4: 01d00934 movhi r7,16420
8005cf8: 1009883a mov r4,r2
8005cfc: 180b883a mov r5,r3
8005d00: 882f883a mov r23,r17
8005d04: b47fd91e bne r22,r17,8005c6c <_dtoa_r+0x880>
8005d08: a82d883a mov r22,r21
8005d0c: dd400117 ldw r21,4(sp)
8005d10: 100d883a mov r6,r2
8005d14: 180f883a mov r7,r3
8005d18: 1009883a mov r4,r2
8005d1c: 180b883a mov r5,r3
8005d20: 800d0b80 call 800d0b8 <__adddf3>
8005d24: 800d883a mov r6,r16
8005d28: 900f883a mov r7,r18
8005d2c: 1009883a mov r4,r2
8005d30: 180b883a mov r5,r3
8005d34: 1027883a mov r19,r2
8005d38: 1823883a mov r17,r3
8005d3c: 800e3800 call 800e380 <__gedf2>
8005d40: 00800816 blt zero,r2,8005d64 <_dtoa_r+0x978>
8005d44: 800d883a mov r6,r16
8005d48: 900f883a mov r7,r18
8005d4c: 9809883a mov r4,r19
8005d50: 880b883a mov r5,r17
8005d54: 800e3000 call 800e300 <__eqdf2>
8005d58: 103f361e bne r2,zero,8005a34 <_dtoa_r+0x648>
8005d5c: b580004c andi r22,r22,1
8005d60: b03f3426 beq r22,zero,8005a34 <_dtoa_r+0x648>
8005d64: ba3fffc3 ldbu r8,-1(r23)
8005d68: d9000317 ldw r4,12(sp)
8005d6c: 00000306 br 8005d7c <_dtoa_r+0x990>
8005d70: 20c30e26 beq r4,r3,80069ac <_dtoa_r+0x15c0>
8005d74: 1a3fffc3 ldbu r8,-1(r3)
8005d78: 182f883a mov r23,r3
8005d7c: 40803fcc andi r2,r8,255
8005d80: 1080201c xori r2,r2,128
8005d84: 10bfe004 addi r2,r2,-128
8005d88: 10800e60 cmpeqi r2,r2,57
8005d8c: b8ffffc4 addi r3,r23,-1
8005d90: 103ff71e bne r2,zero,8005d70 <_dtoa_r+0x984>
8005d94: 42000044 addi r8,r8,1
8005d98: 1a000005 stb r8,0(r3)
8005d9c: 003f2506 br 8005a34 <_dtoa_r+0x648>
8005da0: d8c00717 ldw r3,28(sp)
8005da4: 1800e426 beq r3,zero,8006138 <_dtoa_r+0xd4c>
8005da8: d8c00217 ldw r3,8(sp)
8005dac: 18c00088 cmpgei r3,r3,2
8005db0: 1801ec26 beq r3,zero,8006564 <_dtoa_r+0x1178>
8005db4: d8800617 ldw r2,24(sp)
8005db8: 14bfffc4 addi r18,r2,-1
8005dbc: d8800817 ldw r2,32(sp)
8005dc0: 1481c50e bge r2,r18,80064d8 <_dtoa_r+0x10ec>
8005dc4: d8800817 ldw r2,32(sp)
8005dc8: dc800815 stw r18,32(sp)
8005dcc: 9085c83a sub r2,r18,r2
8005dd0: b0ad883a add r22,r22,r2
8005dd4: 0025883a mov r18,zero
8005dd8: d8800617 ldw r2,24(sp)
8005ddc: 10024c16 blt r2,zero,8006710 <_dtoa_r+0x1324>
8005de0: d8c00517 ldw r3,20(sp)
8005de4: a0a9883a add r20,r20,r2
8005de8: 1885883a add r2,r3,r2
8005dec: 1827883a mov r19,r3
8005df0: d8800515 stw r2,20(sp)
8005df4: 01400044 movi r5,1
8005df8: e009883a mov r4,fp
8005dfc: 8008dd40 call 8008dd4 <__i2b>
8005e00: 1021883a mov r16,r2
8005e04: 04c0080e bge zero,r19,8005e28 <_dtoa_r+0xa3c>
8005e08: 0500070e bge zero,r20,8005e28 <_dtoa_r+0xa3c>
8005e0c: 9805883a mov r2,r19
8005e10: a4c1a916 blt r20,r19,80064b8 <_dtoa_r+0x10cc>
8005e14: d8c00517 ldw r3,20(sp)
8005e18: 98a7c83a sub r19,r19,r2
8005e1c: a0a9c83a sub r20,r20,r2
8005e20: 1887c83a sub r3,r3,r2
8005e24: d8c00515 stw r3,20(sp)
8005e28: d8800817 ldw r2,32(sp)
8005e2c: 10001426 beq r2,zero,8005e80 <_dtoa_r+0xa94>
8005e30: d8800717 ldw r2,28(sp)
8005e34: 10017226 beq r2,zero,8006400 <_dtoa_r+0x1014>
8005e38: 04800e0e bge zero,r18,8005e74 <_dtoa_r+0xa88>
8005e3c: 800b883a mov r5,r16
8005e40: 900d883a mov r6,r18
8005e44: e009883a mov r4,fp
8005e48: 8008ff40 call 8008ff4 <__pow5mult>
8005e4c: a80d883a mov r6,r21
8005e50: 100b883a mov r5,r2
8005e54: e009883a mov r4,fp
8005e58: 1021883a mov r16,r2
8005e5c: 8008e080 call 8008e08 <__multiply>
8005e60: 102f883a mov r23,r2
8005e64: a80b883a mov r5,r21
8005e68: e009883a mov r4,fp
8005e6c: 8008a780 call 8008a78 <_Bfree>
8005e70: b82b883a mov r21,r23
8005e74: d8800817 ldw r2,32(sp)
8005e78: 148dc83a sub r6,r2,r18
8005e7c: 3001611e bne r6,zero,8006404 <_dtoa_r+0x1018>
8005e80: 01400044 movi r5,1
8005e84: e009883a mov r4,fp
8005e88: 8008dd40 call 8008dd4 <__i2b>
8005e8c: 1025883a mov r18,r2
8005e90: 0580bc16 blt zero,r22,8006184 <_dtoa_r+0xd98>
8005e94: d8800217 ldw r2,8(sp)
8005e98: 10800088 cmpgei r2,r2,2
8005e9c: 10016526 beq r2,zero,8006434 <_dtoa_r+0x1048>
8005ea0: 0023883a mov r17,zero
8005ea4: 00800044 movi r2,1
8005ea8: b000bf1e bne r22,zero,80061a8 <_dtoa_r+0xdbc>
8005eac: 1505883a add r2,r2,r20
8005eb0: 108007cc andi r2,r2,31
8005eb4: 1000aa26 beq r2,zero,8006160 <_dtoa_r+0xd74>
8005eb8: 00c00804 movi r3,32
8005ebc: 1887c83a sub r3,r3,r2
8005ec0: 19000150 cmplti r4,r3,5
8005ec4: 2002f61e bne r4,zero,8006aa0 <_dtoa_r+0x16b4>
8005ec8: 00c00704 movi r3,28
8005ecc: 1885c83a sub r2,r3,r2
8005ed0: d8c00517 ldw r3,20(sp)
8005ed4: 98a7883a add r19,r19,r2
8005ed8: a0a9883a add r20,r20,r2
8005edc: 1887883a add r3,r3,r2
8005ee0: d8c00515 stw r3,20(sp)
8005ee4: d8800517 ldw r2,20(sp)
8005ee8: 00809716 blt zero,r2,8006148 <_dtoa_r+0xd5c>
8005eec: 0500050e bge zero,r20,8005f04 <_dtoa_r+0xb18>
8005ef0: 900b883a mov r5,r18
8005ef4: a00d883a mov r6,r20
8005ef8: e009883a mov r4,fp
8005efc: 800911c0 call 800911c <__lshift>
8005f00: 1025883a mov r18,r2
8005f04: d8800917 ldw r2,36(sp)
8005f08: 10012b1e bne r2,zero,80063b8 <_dtoa_r+0xfcc>
8005f0c: d8800617 ldw r2,24(sp)
8005f10: 00810d0e bge zero,r2,8006348 <_dtoa_r+0xf5c>
8005f14: d8800417 ldw r2,16(sp)
8005f18: 10800044 addi r2,r2,1
8005f1c: d8800415 stw r2,16(sp)
8005f20: d8800717 ldw r2,28(sp)
8005f24: 1000b21e bne r2,zero,80061f0 <_dtoa_r+0xe04>
8005f28: ddc00317 ldw r23,12(sp)
8005f2c: 04400044 movi r17,1
8005f30: dcc00617 ldw r19,24(sp)
8005f34: 00000306 br 8005f44 <_dtoa_r+0xb58>
8005f38: 8008a9c0 call 8008a9c <__multadd>
8005f3c: 102b883a mov r21,r2
8005f40: 8c400044 addi r17,r17,1
8005f44: 900b883a mov r5,r18
8005f48: a809883a mov r4,r21
8005f4c: 80051dc0 call 80051dc <quorem>
8005f50: 10800c04 addi r2,r2,48
8005f54: bdc00044 addi r23,r23,1
8005f58: b8bfffc5 stb r2,-1(r23)
8005f5c: 000f883a mov r7,zero
8005f60: 01800284 movi r6,10
8005f64: a80b883a mov r5,r21
8005f68: e009883a mov r4,fp
8005f6c: 8cfff216 blt r17,r19,8005f38 <_dtoa_r+0xb4c>
8005f70: 1011883a mov r8,r2
8005f74: 0029883a mov r20,zero
8005f78: a80b883a mov r5,r21
8005f7c: 01800044 movi r6,1
8005f80: e009883a mov r4,fp
8005f84: da000115 stw r8,4(sp)
8005f88: 800911c0 call 800911c <__lshift>
8005f8c: 900b883a mov r5,r18
8005f90: 1009883a mov r4,r2
8005f94: 102b883a mov r21,r2
8005f98: 80092580 call 8009258 <__mcmp>
8005f9c: b8ffffc3 ldbu r3,-1(r23)
8005fa0: 0081610e bge zero,r2,8006528 <_dtoa_r+0x113c>
8005fa4: d9400317 ldw r5,12(sp)
8005fa8: 00000306 br 8005fb8 <_dtoa_r+0xbcc>
8005fac: 29017726 beq r5,r4,800658c <_dtoa_r+0x11a0>
8005fb0: 20ffffc3 ldbu r3,-1(r4)
8005fb4: 202f883a mov r23,r4
8005fb8: 18803fcc andi r2,r3,255
8005fbc: 1080201c xori r2,r2,128
8005fc0: 10bfe004 addi r2,r2,-128
8005fc4: 10800e60 cmpeqi r2,r2,57
8005fc8: b93fffc4 addi r4,r23,-1
8005fcc: 103ff71e bne r2,zero,8005fac <_dtoa_r+0xbc0>
8005fd0: 18c00044 addi r3,r3,1
8005fd4: 20c00005 stb r3,0(r4)
8005fd8: 900b883a mov r5,r18
8005fdc: e009883a mov r4,fp
8005fe0: 8008a780 call 8008a78 <_Bfree>
8005fe4: 803e9326 beq r16,zero,8005a34 <_dtoa_r+0x648>
8005fe8: a0000426 beq r20,zero,8005ffc <_dtoa_r+0xc10>
8005fec: a4000326 beq r20,r16,8005ffc <_dtoa_r+0xc10>
8005ff0: a00b883a mov r5,r20
8005ff4: e009883a mov r4,fp
8005ff8: 8008a780 call 8008a78 <_Bfree>
8005ffc: 800b883a mov r5,r16
8006000: e009883a mov r4,fp
8006004: 8008a780 call 8008a78 <_Bfree>
8006008: 003e8a06 br 8005a34 <_dtoa_r+0x648>
800600c: d8000915 stw zero,36(sp)
8006010: a0003616 blt r20,zero,80060ec <_dtoa_r+0xd00>
8006014: d8000515 stw zero,20(sp)
8006018: d8c00217 ldw r3,8(sp)
800601c: dd800415 stw r22,16(sp)
8006020: d8000815 stw zero,32(sp)
8006024: 188002a8 cmpgeui r2,r3,10
8006028: a5a9883a add r20,r20,r22
800602c: 103d9726 beq r2,zero,800568c <_dtoa_r+0x2a0>
8006030: 00800044 movi r2,1
8006034: d8800715 stw r2,28(sp)
8006038: 00bfffc4 movi r2,-1
800603c: 04bfffc4 movi r18,-1
8006040: 04000044 movi r16,1
8006044: d8000215 stw zero,8(sp)
8006048: d8800615 stw r2,24(sp)
800604c: d8001e15 stw zero,120(sp)
8006050: d8800617 ldw r2,24(sp)
8006054: e0001115 stw zero,68(fp)
8006058: 000b883a mov r5,zero
800605c: d8800b15 stw r2,44(sp)
8006060: 003daa06 br 800570c <_dtoa_r+0x320>
8006064: 18800160 cmpeqi r2,r3,5
8006068: 00c00044 movi r3,1
800606c: d8c00715 stw r3,28(sp)
8006070: 10000d26 beq r2,zero,80060a8 <_dtoa_r+0xcbc>
8006074: d8801e17 ldw r2,120(sp)
8006078: d8c00417 ldw r3,16(sp)
800607c: 10c5883a add r2,r2,r3
8006080: d8800b15 stw r2,44(sp)
8006084: 10800044 addi r2,r2,1
8006088: d8800615 stw r2,24(sp)
800608c: 100d883a mov r6,r2
8006090: 00bd9216 blt zero,r2,80056dc <_dtoa_r+0x2f0>
8006094: 01800044 movi r6,1
8006098: 003d9006 br 80056dc <_dtoa_r+0x2f0>
800609c: 188000a0 cmpeqi r2,r3,2
80060a0: d8000715 stw zero,28(sp)
80060a4: 103d881e bne r2,zero,80056c8 <_dtoa_r+0x2dc>
80060a8: e0001115 stw zero,68(fp)
80060ac: 000b883a mov r5,zero
80060b0: e009883a mov r4,fp
80060b4: 80089d40 call 80089d4 <_Balloc>
80060b8: d8800315 stw r2,12(sp)
80060bc: e0801015 stw r2,64(fp)
80060c0: 00bfffc4 movi r2,-1
80060c4: d8800b15 stw r2,44(sp)
80060c8: 00800044 movi r2,1
80060cc: d8800715 stw r2,28(sp)
80060d0: 00bfffc4 movi r2,-1
80060d4: d8001e15 stw zero,120(sp)
80060d8: d8800615 stw r2,24(sp)
80060dc: 003e8f06 br 8005b1c <_dtoa_r+0x730>
80060e0: 00800044 movi r2,1
80060e4: d8800915 stw r2,36(sp)
80060e8: a03d5c0e bge r20,zero,800565c <_dtoa_r+0x270>
80060ec: 04800044 movi r18,1
80060f0: 9405c83a sub r2,r18,r16
80060f4: d8800515 stw r2,20(sp)
80060f8: 0029883a mov r20,zero
80060fc: 003d5806 br 8005660 <_dtoa_r+0x274>
8006100: b009883a mov r4,r22
8006104: 800f62c0 call 800f62c <__floatsidf>
8006108: a00d883a mov r6,r20
800610c: 980f883a mov r7,r19
8006110: 1009883a mov r4,r2
8006114: 180b883a mov r5,r3
8006118: 800e3000 call 800e300 <__eqdf2>
800611c: 103d3e26 beq r2,zero,8005618 <_dtoa_r+0x22c>
8006120: b5bfffc4 addi r22,r22,-1
8006124: 003d3c06 br 8005618 <_dtoa_r+0x22c>
8006128: 00820134 movhi r2,2052
800612c: 109d2704 addi r2,r2,29852
8006130: d8800315 stw r2,12(sp)
8006134: 003cdf06 br 80054b4 <_dtoa_r+0xc8>
8006138: dc800817 ldw r18,32(sp)
800613c: dcc00517 ldw r19,20(sp)
8006140: 0021883a mov r16,zero
8006144: 003f2f06 br 8005e04 <_dtoa_r+0xa18>
8006148: a80b883a mov r5,r21
800614c: 100d883a mov r6,r2
8006150: e009883a mov r4,fp
8006154: 800911c0 call 800911c <__lshift>
8006158: 102b883a mov r21,r2
800615c: 003f6306 br 8005eec <_dtoa_r+0xb00>
8006160: 00800704 movi r2,28
8006164: 003f5a06 br 8005ed0 <_dtoa_r+0xae4>
8006168: 01000804 movi r4,32
800616c: 2089c83a sub r4,r4,r2
8006170: d8800117 ldw r2,4(sp)
8006174: 1108983a sll r4,r2,r4
8006178: 003cf306 br 8005548 <_dtoa_r+0x15c>
800617c: 04000044 movi r16,1
8006180: 003d4706 br 80056a0 <_dtoa_r+0x2b4>
8006184: b00d883a mov r6,r22
8006188: 100b883a mov r5,r2
800618c: e009883a mov r4,fp
8006190: 8008ff40 call 8008ff4 <__pow5mult>
8006194: 1025883a mov r18,r2
8006198: d8800217 ldw r2,8(sp)
800619c: 10800090 cmplti r2,r2,2
80061a0: 10012f1e bne r2,zero,8006660 <_dtoa_r+0x1274>
80061a4: 0023883a mov r17,zero
80061a8: 90800417 ldw r2,16(r18)
80061ac: 10800104 addi r2,r2,4
80061b0: 100490ba slli r2,r2,2
80061b4: 9085883a add r2,r18,r2
80061b8: 11000017 ldw r4,0(r2)
80061bc: 8008cc00 call 8008cc0 <__hi0bits>
80061c0: 00c00804 movi r3,32
80061c4: 1885c83a sub r2,r3,r2
80061c8: 003f3806 br 8005eac <_dtoa_r+0xac0>
80061cc: 800b883a mov r5,r16
80061d0: 000f883a mov r7,zero
80061d4: 01800284 movi r6,10
80061d8: e009883a mov r4,fp
80061dc: 8008a9c0 call 8008a9c <__multadd>
80061e0: 1021883a mov r16,r2
80061e4: d8800b17 ldw r2,44(sp)
80061e8: 00821b0e bge zero,r2,8006a58 <_dtoa_r+0x166c>
80061ec: d8800615 stw r2,24(sp)
80061f0: 04c0b316 blt zero,r19,80064c0 <_dtoa_r+0x10d4>
80061f4: 8801341e bne r17,zero,80066c8 <_dtoa_r+0x12dc>
80061f8: 8027883a mov r19,r16
80061fc: dc400317 ldw r17,12(sp)
8006200: d8c00617 ldw r3,24(sp)
8006204: d8800117 ldw r2,4(sp)
8006208: 8dffffc4 addi r23,r17,-1
800620c: b8c7883a add r3,r23,r3
8006210: d8c00615 stw r3,24(sp)
8006214: d8c00217 ldw r3,8(sp)
8006218: 1080004c andi r2,r2,1
800621c: d8800815 stw r2,32(sp)
8006220: 10c4b03a or r2,r2,r3
8006224: d8800715 stw r2,28(sp)
8006228: 00002c06 br 80062dc <_dtoa_r+0xef0>
800622c: b80b883a mov r5,r23
8006230: a809883a mov r4,r21
8006234: da000515 stw r8,20(sp)
8006238: 80092580 call 8009258 <__mcmp>
800623c: b80b883a mov r5,r23
8006240: e009883a mov r4,fp
8006244: d8800115 stw r2,4(sp)
8006248: 8008a780 call 8008a78 <_Bfree>
800624c: d8800117 ldw r2,4(sp)
8006250: da000517 ldw r8,20(sp)
8006254: 1000021e bne r2,zero,8006260 <_dtoa_r+0xe74>
8006258: d8c00717 ldw r3,28(sp)
800625c: 1801f226 beq r3,zero,8006a28 <_dtoa_r+0x163c>
8006260: 8dc00044 addi r23,r17,1
8006264: a0010516 blt r20,zero,800667c <_dtoa_r+0x1290>
8006268: d8c00217 ldw r3,8(sp)
800626c: a0e8b03a or r20,r20,r3
8006270: d8c00817 ldw r3,32(sp)
8006274: 1d28b03a or r20,r3,r20
8006278: a0010026 beq r20,zero,800667c <_dtoa_r+0x1290>
800627c: 00812816 blt zero,r2,8006720 <_dtoa_r+0x1334>
8006280: d8800617 ldw r2,24(sp)
8006284: 8a000005 stb r8,0(r17)
8006288: 14412926 beq r2,r17,8006730 <_dtoa_r+0x1344>
800628c: a80b883a mov r5,r21
8006290: 000f883a mov r7,zero
8006294: 01800284 movi r6,10
8006298: e009883a mov r4,fp
800629c: 8008a9c0 call 8008a9c <__multadd>
80062a0: 102b883a mov r21,r2
80062a4: 000f883a mov r7,zero
80062a8: 01800284 movi r6,10
80062ac: 800b883a mov r5,r16
80062b0: e009883a mov r4,fp
80062b4: 84c02026 beq r16,r19,8006338 <_dtoa_r+0xf4c>
80062b8: 8008a9c0 call 8008a9c <__multadd>
80062bc: 980b883a mov r5,r19
80062c0: 000f883a mov r7,zero
80062c4: 01800284 movi r6,10
80062c8: e009883a mov r4,fp
80062cc: 1021883a mov r16,r2
80062d0: 8008a9c0 call 8008a9c <__multadd>
80062d4: 1027883a mov r19,r2
80062d8: b823883a mov r17,r23
80062dc: 900b883a mov r5,r18
80062e0: a809883a mov r4,r21
80062e4: 80051dc0 call 80051dc <quorem>
80062e8: 800b883a mov r5,r16
80062ec: a809883a mov r4,r21
80062f0: 102d883a mov r22,r2
80062f4: 80092580 call 8009258 <__mcmp>
80062f8: 980d883a mov r6,r19
80062fc: 900b883a mov r5,r18
8006300: e009883a mov r4,fp
8006304: 1029883a mov r20,r2
8006308: 80092b00 call 80092b0 <__mdiff>
800630c: 102f883a mov r23,r2
8006310: 10800317 ldw r2,12(r2)
8006314: b2000c04 addi r8,r22,48
8006318: 103fc426 beq r2,zero,800622c <_dtoa_r+0xe40>
800631c: b80b883a mov r5,r23
8006320: e009883a mov r4,fp
8006324: da000115 stw r8,4(sp)
8006328: 8008a780 call 8008a78 <_Bfree>
800632c: 00800044 movi r2,1
8006330: da000117 ldw r8,4(sp)
8006334: 003fca06 br 8006260 <_dtoa_r+0xe74>
8006338: 8008a9c0 call 8008a9c <__multadd>
800633c: 1021883a mov r16,r2
8006340: 1027883a mov r19,r2
8006344: 003fe406 br 80062d8 <_dtoa_r+0xeec>
8006348: d8800217 ldw r2,8(sp)
800634c: 108000d0 cmplti r2,r2,3
8006350: 10004b1e bne r2,zero,8006480 <_dtoa_r+0x1094>
8006354: d8800617 ldw r2,24(sp)
8006358: 103e0d1e bne r2,zero,8005b90 <_dtoa_r+0x7a4>
800635c: 900b883a mov r5,r18
8006360: e009883a mov r4,fp
8006364: 000f883a mov r7,zero
8006368: 01800144 movi r6,5
800636c: 8008a9c0 call 8008a9c <__multadd>
8006370: 100b883a mov r5,r2
8006374: a809883a mov r4,r21
8006378: 1025883a mov r18,r2
800637c: 80092580 call 8009258 <__mcmp>
8006380: 00be030e bge zero,r2,8005b90 <_dtoa_r+0x7a4>
8006384: d8c00317 ldw r3,12(sp)
8006388: 00800c44 movi r2,49
800638c: 18800005 stb r2,0(r3)
8006390: d8800417 ldw r2,16(sp)
8006394: 1dc00044 addi r23,r3,1
8006398: 14400044 addi r17,r2,1
800639c: 900b883a mov r5,r18
80063a0: e009883a mov r4,fp
80063a4: 8008a780 call 8008a78 <_Bfree>
80063a8: 88800044 addi r2,r17,1
80063ac: d8800415 stw r2,16(sp)
80063b0: 803f121e bne r16,zero,8005ffc <_dtoa_r+0xc10>
80063b4: 003d9f06 br 8005a34 <_dtoa_r+0x648>
80063b8: 900b883a mov r5,r18
80063bc: a809883a mov r4,r21
80063c0: 80092580 call 8009258 <__mcmp>
80063c4: 103ed10e bge r2,zero,8005f0c <_dtoa_r+0xb20>
80063c8: a80b883a mov r5,r21
80063cc: 000f883a mov r7,zero
80063d0: 01800284 movi r6,10
80063d4: e009883a mov r4,fp
80063d8: 8008a9c0 call 8008a9c <__multadd>
80063dc: 102b883a mov r21,r2
80063e0: d8800417 ldw r2,16(sp)
80063e4: 153fffc4 addi r20,r2,-1
80063e8: d8800717 ldw r2,28(sp)
80063ec: 103f771e bne r2,zero,80061cc <_dtoa_r+0xde0>
80063f0: d8800b17 ldw r2,44(sp)
80063f4: 0081910e bge zero,r2,8006a3c <_dtoa_r+0x1650>
80063f8: d8800615 stw r2,24(sp)
80063fc: 003eca06 br 8005f28 <_dtoa_r+0xb3c>
8006400: d9800817 ldw r6,32(sp)
8006404: a80b883a mov r5,r21
8006408: e009883a mov r4,fp
800640c: 8008ff40 call 8008ff4 <__pow5mult>
8006410: 102b883a mov r21,r2
8006414: 003e9a06 br 8005e80 <_dtoa_r+0xa94>
8006418: 00820134 movhi r2,2052
800641c: 1007883a mov r3,r2
8006420: 18dd3004 addi r3,r3,29888
8006424: 00820134 movhi r2,2052
8006428: d8c00315 stw r3,12(sp)
800642c: 109d30c4 addi r2,r2,29891
8006430: 003da506 br 8005ac8 <_dtoa_r+0x6dc>
8006434: d8800117 ldw r2,4(sp)
8006438: 103e991e bne r2,zero,8005ea0 <_dtoa_r+0xab4>
800643c: 00800434 movhi r2,16
8006440: 10bfffc4 addi r2,r2,-1
8006444: 8884703a and r2,r17,r2
8006448: 103e951e bne r2,zero,8005ea0 <_dtoa_r+0xab4>
800644c: 8c5ffc2c andhi r17,r17,32752
8006450: 883e9326 beq r17,zero,8005ea0 <_dtoa_r+0xab4>
8006454: d8800517 ldw r2,20(sp)
8006458: a5000044 addi r20,r20,1
800645c: 04400044 movi r17,1
8006460: 10800044 addi r2,r2,1
8006464: d8800515 stw r2,20(sp)
8006468: 003e8e06 br 8005ea4 <_dtoa_r+0xab8>
800646c: 00800044 movi r2,1
8006470: 04800044 movi r18,1
8006474: d8800615 stw r2,24(sp)
8006478: d8801e15 stw r2,120(sp)
800647c: 003ef406 br 8006050 <_dtoa_r+0xc64>
8006480: d8800417 ldw r2,16(sp)
8006484: 10800044 addi r2,r2,1
8006488: d8800415 stw r2,16(sp)
800648c: d8800717 ldw r2,28(sp)
8006490: 103f571e bne r2,zero,80061f0 <_dtoa_r+0xe04>
8006494: 900b883a mov r5,r18
8006498: a809883a mov r4,r21
800649c: 80051dc0 call 80051dc <quorem>
80064a0: 12000c04 addi r8,r2,48
80064a4: d8800317 ldw r2,12(sp)
80064a8: 0029883a mov r20,zero
80064ac: 15c00044 addi r23,r2,1
80064b0: 12000005 stb r8,0(r2)
80064b4: 003eb006 br 8005f78 <_dtoa_r+0xb8c>
80064b8: a005883a mov r2,r20
80064bc: 003e5506 br 8005e14 <_dtoa_r+0xa28>
80064c0: 800b883a mov r5,r16
80064c4: 980d883a mov r6,r19
80064c8: e009883a mov r4,fp
80064cc: 800911c0 call 800911c <__lshift>
80064d0: 1021883a mov r16,r2
80064d4: 003f4706 br 80061f4 <_dtoa_r+0xe08>
80064d8: 14a5c83a sub r18,r2,r18
80064dc: 003e3e06 br 8005dd8 <_dtoa_r+0x9ec>
80064e0: 00820134 movhi r2,2052
80064e4: 109d4104 addi r2,r2,29956
80064e8: 11800817 ldw r6,32(r2)
80064ec: 11c00917 ldw r7,36(r2)
80064f0: d9000117 ldw r4,4(sp)
80064f4: 880b883a mov r5,r17
80064f8: da400e15 stw r9,56(sp)
80064fc: da800d15 stw r10,52(sp)
8006500: 800da580 call 800da58 <__divdf3>
8006504: d8800c15 stw r2,48(sp)
8006508: 1827883a mov r19,r3
800650c: bdc003cc andi r23,r23,15
8006510: 040000c4 movi r16,3
8006514: da800d17 ldw r10,52(sp)
8006518: da400e17 ldw r9,56(sp)
800651c: 003c9206 br 8005768 <_dtoa_r+0x37c>
8006520: d8000715 stw zero,28(sp)
8006524: 003ed306 br 8006074 <_dtoa_r+0xc88>
8006528: 1000031e bne r2,zero,8006538 <_dtoa_r+0x114c>
800652c: da000117 ldw r8,4(sp)
8006530: 4200004c andi r8,r8,1
8006534: 403e9b1e bne r8,zero,8005fa4 <_dtoa_r+0xbb8>
8006538: 1805883a mov r2,r3
800653c: 00000206 br 8006548 <_dtoa_r+0x115c>
8006540: b8bfff83 ldbu r2,-2(r23)
8006544: 182f883a mov r23,r3
8006548: 10803fcc andi r2,r2,255
800654c: 1080201c xori r2,r2,128
8006550: 10bfe004 addi r2,r2,-128
8006554: 10800c18 cmpnei r2,r2,48
8006558: b8ffffc4 addi r3,r23,-1
800655c: 103ff826 beq r2,zero,8006540 <_dtoa_r+0x1154>
8006560: 003e9d06 br 8005fd8 <_dtoa_r+0xbec>
8006564: d8c00a17 ldw r3,40(sp)
8006568: 1800bc26 beq r3,zero,800685c <_dtoa_r+0x1470>
800656c: d8c00517 ldw r3,20(sp)
8006570: 10810cc4 addi r2,r2,1075
8006574: a0a9883a add r20,r20,r2
8006578: 1885883a add r2,r3,r2
800657c: 1827883a mov r19,r3
8006580: dc800817 ldw r18,32(sp)
8006584: d8800515 stw r2,20(sp)
8006588: 003e1a06 br 8005df4 <_dtoa_r+0xa08>
800658c: d8c00317 ldw r3,12(sp)
8006590: 00800c44 movi r2,49
8006594: 18800005 stb r2,0(r3)
8006598: d8800417 ldw r2,16(sp)
800659c: 10800044 addi r2,r2,1
80065a0: d8800415 stw r2,16(sp)
80065a4: 003e8c06 br 8005fd8 <_dtoa_r+0xbec>
80065a8: 8009883a mov r4,r16
80065ac: 800f62c0 call 800f62c <__floatsidf>
80065b0: 900d883a mov r6,r18
80065b4: 980f883a mov r7,r19
80065b8: 1009883a mov r4,r2
80065bc: 180b883a mov r5,r3
80065c0: 800e5600 call 800e560 <__muldf3>
80065c4: 000d883a mov r6,zero
80065c8: 01d00734 movhi r7,16412
80065cc: 1009883a mov r4,r2
80065d0: 180b883a mov r5,r3
80065d4: 800d0b80 call 800d0b8 <__adddf3>
80065d8: d8800c15 stw r2,48(sp)
80065dc: 00bf3034 movhi r2,64704
80065e0: 1885883a add r2,r3,r2
80065e4: d8800d15 stw r2,52(sp)
80065e8: 9009883a mov r4,r18
80065ec: 980b883a mov r5,r19
80065f0: 000d883a mov r6,zero
80065f4: 01d00534 movhi r7,16404
80065f8: 800ebec0 call 800ebec <__subdf3>
80065fc: ddc00c17 ldw r23,48(sp)
8006600: dcc00d17 ldw r19,52(sp)
8006604: 1009883a mov r4,r2
8006608: b80d883a mov r6,r23
800660c: 980f883a mov r7,r19
8006610: 180b883a mov r5,r3
8006614: 1025883a mov r18,r2
8006618: 1821883a mov r16,r3
800661c: 800e3800 call 800e380 <__gedf2>
8006620: 0080ee16 blt zero,r2,80069dc <_dtoa_r+0x15f0>
8006624: 99e0003c xorhi r7,r19,32768
8006628: b80d883a mov r6,r23
800662c: 9009883a mov r4,r18
8006630: 800b883a mov r5,r16
8006634: 800e4700 call 800e470 <__ledf2>
8006638: 103d380e bge r2,zero,8005b1c <_dtoa_r+0x730>
800663c: 0025883a mov r18,zero
8006640: 0021883a mov r16,zero
8006644: 003d5206 br 8005b90 <_dtoa_r+0x7a4>
8006648: d8800417 ldw r2,16(sp)
800664c: 1000ad1e bne r2,zero,8006904 <_dtoa_r+0x1518>
8006650: dc800117 ldw r18,4(sp)
8006654: 8827883a mov r19,r17
8006658: 04000084 movi r16,2
800665c: 003c5b06 br 80057cc <_dtoa_r+0x3e0>
8006660: d8800117 ldw r2,4(sp)
8006664: 103ecf1e bne r2,zero,80061a4 <_dtoa_r+0xdb8>
8006668: 00800434 movhi r2,16
800666c: 10bfffc4 addi r2,r2,-1
8006670: 8884703a and r2,r17,r2
8006674: 103f7526 beq r2,zero,800644c <_dtoa_r+0x1060>
8006678: 003eca06 br 80061a4 <_dtoa_r+0xdb8>
800667c: 00800e0e bge zero,r2,80066b8 <_dtoa_r+0x12cc>
8006680: a80b883a mov r5,r21
8006684: 01800044 movi r6,1
8006688: e009883a mov r4,fp
800668c: da000115 stw r8,4(sp)
8006690: 800911c0 call 800911c <__lshift>
8006694: 900b883a mov r5,r18
8006698: 1009883a mov r4,r2
800669c: 102b883a mov r21,r2
80066a0: 80092580 call 8009258 <__mcmp>
80066a4: da000117 ldw r8,4(sp)
80066a8: 0080d50e bge zero,r2,8006a00 <_dtoa_r+0x1614>
80066ac: 42000e60 cmpeqi r8,r8,57
80066b0: 4000c31e bne r8,zero,80069c0 <_dtoa_r+0x15d4>
80066b4: b2000c44 addi r8,r22,49
80066b8: 8029883a mov r20,r16
80066bc: 8a000005 stb r8,0(r17)
80066c0: 9821883a mov r16,r19
80066c4: 003e4406 br 8005fd8 <_dtoa_r+0xbec>
80066c8: 81400117 ldw r5,4(r16)
80066cc: e009883a mov r4,fp
80066d0: 80089d40 call 80089d4 <_Balloc>
80066d4: 81800417 ldw r6,16(r16)
80066d8: 81400304 addi r5,r16,12
80066dc: 11000304 addi r4,r2,12
80066e0: 31800084 addi r6,r6,2
80066e4: 300c90ba slli r6,r6,2
80066e8: 1023883a mov r17,r2
80066ec: 80086b80 call 80086b8 <memcpy>
80066f0: 01800044 movi r6,1
80066f4: 880b883a mov r5,r17
80066f8: e009883a mov r4,fp
80066fc: 800911c0 call 800911c <__lshift>
8006700: 1027883a mov r19,r2
8006704: 003ebd06 br 80061fc <_dtoa_r+0xe10>
8006708: dd400117 ldw r21,4(sp)
800670c: 003cc906 br 8005a34 <_dtoa_r+0x648>
8006710: d8800517 ldw r2,20(sp)
8006714: d8c00617 ldw r3,24(sp)
8006718: 10e7c83a sub r19,r2,r3
800671c: 003db506 br 8005df4 <_dtoa_r+0xa08>
8006720: 40800e58 cmpnei r2,r8,57
8006724: 1000a626 beq r2,zero,80069c0 <_dtoa_r+0x15d4>
8006728: 42000044 addi r8,r8,1
800672c: 003fe206 br 80066b8 <_dtoa_r+0x12cc>
8006730: 8029883a mov r20,r16
8006734: 9821883a mov r16,r19
8006738: 003e0f06 br 8005f78 <_dtoa_r+0xb8c>
800673c: d9000c17 ldw r4,48(sp)
8006740: d9400d17 ldw r5,52(sp)
8006744: da401015 stw r9,64(sp)
8006748: 800e5600 call 800e560 <__muldf3>
800674c: d9000e17 ldw r4,56(sp)
8006750: d8c00d15 stw r3,52(sp)
8006754: da401017 ldw r9,64(sp)
8006758: d8c00317 ldw r3,12(sp)
800675c: d8800c15 stw r2,48(sp)
8006760: 20800058 cmpnei r2,r4,1
8006764: 1a400005 stb r9,0(r3)
8006768: 1907883a add r3,r3,r4
800676c: 1809883a mov r4,r3
8006770: 10001d26 beq r2,zero,80067e8 <_dtoa_r+0x13fc>
8006774: 8007883a mov r3,r16
8006778: 9005883a mov r2,r18
800677c: dc400e15 stw r17,56(sp)
8006780: 2021883a mov r16,r4
8006784: 000d883a mov r6,zero
8006788: 01d00934 movhi r7,16420
800678c: 1009883a mov r4,r2
8006790: 180b883a mov r5,r3
8006794: 800e5600 call 800e560 <__muldf3>
8006798: 180b883a mov r5,r3
800679c: 1009883a mov r4,r2
80067a0: 1825883a mov r18,r3
80067a4: 1023883a mov r17,r2
80067a8: 800f5ac0 call 800f5ac <__fixdfsi>
80067ac: 1009883a mov r4,r2
80067b0: 1027883a mov r19,r2
80067b4: 800f62c0 call 800f62c <__floatsidf>
80067b8: 100d883a mov r6,r2
80067bc: 180f883a mov r7,r3
80067c0: 8809883a mov r4,r17
80067c4: 900b883a mov r5,r18
80067c8: bdc00044 addi r23,r23,1
80067cc: 9cc00c04 addi r19,r19,48
80067d0: 800ebec0 call 800ebec <__subdf3>
80067d4: bcffffc5 stb r19,-1(r23)
80067d8: bc3fea1e bne r23,r16,8006784 <_dtoa_r+0x1398>
80067dc: dc400e17 ldw r17,56(sp)
80067e0: 1025883a mov r18,r2
80067e4: 1821883a mov r16,r3
80067e8: d9000c17 ldw r4,48(sp)
80067ec: d9400d17 ldw r5,52(sp)
80067f0: 000d883a mov r6,zero
80067f4: 01cff834 movhi r7,16352
80067f8: 800d0b80 call 800d0b8 <__adddf3>
80067fc: 100d883a mov r6,r2
8006800: 180f883a mov r7,r3
8006804: 9009883a mov r4,r18
8006808: 800b883a mov r5,r16
800680c: 800e3800 call 800e380 <__gedf2>
8006810: 00807516 blt zero,r2,80069e8 <_dtoa_r+0x15fc>
8006814: d9800c17 ldw r6,48(sp)
8006818: d9c00d17 ldw r7,52(sp)
800681c: 0009883a mov r4,zero
8006820: 014ff834 movhi r5,16352
8006824: 800ebec0 call 800ebec <__subdf3>
8006828: 100d883a mov r6,r2
800682c: 180f883a mov r7,r3
8006830: 9009883a mov r4,r18
8006834: 800b883a mov r5,r16
8006838: 800e4700 call 800e470 <__ledf2>
800683c: 103cb70e bge r2,zero,8005b1c <_dtoa_r+0x730>
8006840: 00000106 br 8006848 <_dtoa_r+0x145c>
8006844: 182f883a mov r23,r3
8006848: b8bfffc7 ldb r2,-1(r23)
800684c: b8ffffc4 addi r3,r23,-1
8006850: 10800c20 cmpeqi r2,r2,48
8006854: 103ffb1e bne r2,zero,8006844 <_dtoa_r+0x1458>
8006858: 003c7306 br 8005a28 <_dtoa_r+0x63c>
800685c: d8c01217 ldw r3,72(sp)
8006860: d9000517 ldw r4,20(sp)
8006864: 00800d84 movi r2,54
8006868: 10c5c83a sub r2,r2,r3
800686c: a0a9883a add r20,r20,r2
8006870: 2085883a add r2,r4,r2
8006874: 2027883a mov r19,r4
8006878: dc800817 ldw r18,32(sp)
800687c: d8800515 stw r2,20(sp)
8006880: 003d5c06 br 8005df4 <_dtoa_r+0xa08>
8006884: d8800617 ldw r2,24(sp)
8006888: 103f4726 beq r2,zero,80065a8 <_dtoa_r+0x11bc>
800688c: ddc00b17 ldw r23,44(sp)
8006890: 05fca20e bge zero,r23,8005b1c <_dtoa_r+0x730>
8006894: 980b883a mov r5,r19
8006898: 000d883a mov r6,zero
800689c: 01d00934 movhi r7,16420
80068a0: 9009883a mov r4,r18
80068a4: 800e5600 call 800e560 <__muldf3>
80068a8: 81000044 addi r4,r16,1
80068ac: 1025883a mov r18,r2
80068b0: 1827883a mov r19,r3
80068b4: 800f62c0 call 800f62c <__floatsidf>
80068b8: 900d883a mov r6,r18
80068bc: 980f883a mov r7,r19
80068c0: 1009883a mov r4,r2
80068c4: 180b883a mov r5,r3
80068c8: 800e5600 call 800e560 <__muldf3>
80068cc: 000d883a mov r6,zero
80068d0: 01d00734 movhi r7,16412
80068d4: 1009883a mov r4,r2
80068d8: 180b883a mov r5,r3
80068dc: 800d0b80 call 800d0b8 <__adddf3>
80068e0: d8800c15 stw r2,48(sp)
80068e4: d8800417 ldw r2,16(sp)
80068e8: ddc00e15 stw r23,56(sp)
80068ec: 10bfffc4 addi r2,r2,-1
80068f0: d8800f15 stw r2,60(sp)
80068f4: 00bf3034 movhi r2,64704
80068f8: 1885883a add r2,r3,r2
80068fc: d8800d15 stw r2,52(sp)
8006900: 003bd006 br 8005844 <_dtoa_r+0x458>
8006904: d8800417 ldw r2,16(sp)
8006908: d9000117 ldw r4,4(sp)
800690c: 880b883a mov r5,r17
8006910: 00afc83a sub r23,zero,r2
8006914: b88003cc andi r2,r23,15
8006918: 100690fa slli r3,r2,3
800691c: 00820134 movhi r2,2052
8006920: 109d4b04 addi r2,r2,29996
8006924: 10c5883a add r2,r2,r3
8006928: 11800017 ldw r6,0(r2)
800692c: 11c00117 ldw r7,4(r2)
8006930: b82fd13a srai r23,r23,4
8006934: 800e5600 call 800e560 <__muldf3>
8006938: 1025883a mov r18,r2
800693c: 1827883a mov r19,r3
8006940: b8004a26 beq r23,zero,8006a6c <_dtoa_r+0x1680>
8006944: 02020134 movhi r8,2052
8006948: 04000084 movi r16,2
800694c: 421d4104 addi r8,r8,29956
8006950: dc400c15 stw r17,48(sp)
8006954: 000f883a mov r7,zero
8006958: 8023883a mov r17,r16
800695c: 4021883a mov r16,r8
8006960: b980004c andi r6,r23,1
8006964: 1009883a mov r4,r2
8006968: b82fd07a srai r23,r23,1
800696c: 180b883a mov r5,r3
8006970: 30000526 beq r6,zero,8006988 <_dtoa_r+0x159c>
8006974: 81c00117 ldw r7,4(r16)
8006978: 81800017 ldw r6,0(r16)
800697c: 8c400044 addi r17,r17,1
8006980: 800e5600 call 800e560 <__muldf3>
8006984: 01c00044 movi r7,1
8006988: 84000204 addi r16,r16,8
800698c: b83ff41e bne r23,zero,8006960 <_dtoa_r+0x1574>
8006990: 39c03fcc andi r7,r7,255
8006994: 8821883a mov r16,r17
8006998: dc400c17 ldw r17,48(sp)
800699c: 383b8b26 beq r7,zero,80057cc <_dtoa_r+0x3e0>
80069a0: 1025883a mov r18,r2
80069a4: 1827883a mov r19,r3
80069a8: 003b8806 br 80057cc <_dtoa_r+0x3e0>
80069ac: d8800417 ldw r2,16(sp)
80069b0: 02000c44 movi r8,49
80069b4: 10800044 addi r2,r2,1
80069b8: d8800415 stw r2,16(sp)
80069bc: 003cf606 br 8005d98 <_dtoa_r+0x9ac>
80069c0: 00800e44 movi r2,57
80069c4: 8029883a mov r20,r16
80069c8: 88800005 stb r2,0(r17)
80069cc: 9821883a mov r16,r19
80069d0: 00c00e44 movi r3,57
80069d4: d9400317 ldw r5,12(sp)
80069d8: 003d7706 br 8005fb8 <_dtoa_r+0xbcc>
80069dc: 0025883a mov r18,zero
80069e0: 0021883a mov r16,zero
80069e4: 003e6706 br 8006384 <_dtoa_r+0xf98>
80069e8: d8800f17 ldw r2,60(sp)
80069ec: ba3fffc3 ldbu r8,-1(r23)
80069f0: d9000317 ldw r4,12(sp)
80069f4: 10800044 addi r2,r2,1
80069f8: d8800415 stw r2,16(sp)
80069fc: 003cdf06 br 8005d7c <_dtoa_r+0x990>
8006a00: 103f2d1e bne r2,zero,80066b8 <_dtoa_r+0x12cc>
8006a04: 4080004c andi r2,r8,1
8006a08: 103f281e bne r2,zero,80066ac <_dtoa_r+0x12c0>
8006a0c: 003f2a06 br 80066b8 <_dtoa_r+0x12cc>
8006a10: d8800f17 ldw r2,60(sp)
8006a14: 8811883a mov r8,r17
8006a18: d9000317 ldw r4,12(sp)
8006a1c: 10800044 addi r2,r2,1
8006a20: d8800415 stw r2,16(sp)
8006a24: 003cd506 br 8005d7c <_dtoa_r+0x990>
8006a28: 40800e60 cmpeqi r2,r8,57
8006a2c: 8dc00044 addi r23,r17,1
8006a30: 103fe31e bne r2,zero,80069c0 <_dtoa_r+0x15d4>
8006a34: 053f1f16 blt zero,r20,80066b4 <_dtoa_r+0x12c8>
8006a38: 003f1f06 br 80066b8 <_dtoa_r+0x12cc>
8006a3c: d8800217 ldw r2,8(sp)
8006a40: 108000c8 cmpgei r2,r2,3
8006a44: 103e9326 beq r2,zero,8006494 <_dtoa_r+0x10a8>
8006a48: d8800b17 ldw r2,44(sp)
8006a4c: dd000415 stw r20,16(sp)
8006a50: d8800615 stw r2,24(sp)
8006a54: 003e3f06 br 8006354 <_dtoa_r+0xf68>
8006a58: d8800217 ldw r2,8(sp)
8006a5c: 108000c8 cmpgei r2,r2,3
8006a60: 103ff91e bne r2,zero,8006a48 <_dtoa_r+0x165c>
8006a64: d8800b17 ldw r2,44(sp)
8006a68: 003de006 br 80061ec <_dtoa_r+0xe00>
8006a6c: 04000084 movi r16,2
8006a70: 003b5606 br 80057cc <_dtoa_r+0x3e0>
8006a74: d8800f17 ldw r2,60(sp)
8006a78: d9000317 ldw r4,12(sp)
8006a7c: 10800044 addi r2,r2,1
8006a80: d8800415 stw r2,16(sp)
8006a84: 003cbd06 br 8005d7c <_dtoa_r+0x990>
8006a88: 00820134 movhi r2,2052
8006a8c: 109d3104 addi r2,r2,29892
8006a90: d8800315 stw r2,12(sp)
8006a94: 003a8706 br 80054b4 <_dtoa_r+0xc8>
8006a98: 000b883a mov r5,zero
8006a9c: 003b1b06 br 800570c <_dtoa_r+0x320>
8006aa0: 18c00120 cmpeqi r3,r3,4
8006aa4: 183d0f1e bne r3,zero,8005ee4 <_dtoa_r+0xaf8>
8006aa8: 00c00f04 movi r3,60
8006aac: 1885c83a sub r2,r3,r2
8006ab0: 003d0706 br 8005ed0 <_dtoa_r+0xae4>
08006ab4 <__sflush_r>:
8006ab4: 2880030b ldhu r2,12(r5)
8006ab8: defffb04 addi sp,sp,-20
8006abc: dcc00315 stw r19,12(sp)
8006ac0: dc000015 stw r16,0(sp)
8006ac4: dfc00415 stw ra,16(sp)
8006ac8: dc800215 stw r18,8(sp)
8006acc: dc400115 stw r17,4(sp)
8006ad0: 10c0020c andi r3,r2,8
8006ad4: 2821883a mov r16,r5
8006ad8: 2027883a mov r19,r4
8006adc: 18003f1e bne r3,zero,8006bdc <__sflush_r+0x128>
8006ae0: 28c00117 ldw r3,4(r5)
8006ae4: 10820014 ori r2,r2,2048
8006ae8: 2880030d sth r2,12(r5)
8006aec: 00c0550e bge zero,r3,8006c44 <__sflush_r+0x190>
8006af0: 82000a17 ldw r8,40(r16)
8006af4: 40003126 beq r8,zero,8006bbc <__sflush_r+0x108>
8006af8: 9c400017 ldw r17,0(r19)
8006afc: 1104000c andi r4,r2,4096
8006b00: 98000015 stw zero,0(r19)
8006b04: 1007883a mov r3,r2
8006b08: 81400717 ldw r5,28(r16)
8006b0c: 2000521e bne r4,zero,8006c58 <__sflush_r+0x1a4>
8006b10: 01c00044 movi r7,1
8006b14: 000d883a mov r6,zero
8006b18: 9809883a mov r4,r19
8006b1c: 403ee83a callr r8
8006b20: 10ffffd8 cmpnei r3,r2,-1
8006b24: 18005826 beq r3,zero,8006c88 <__sflush_r+0x1d4>
8006b28: 80c0030b ldhu r3,12(r16)
8006b2c: 82000a17 ldw r8,40(r16)
8006b30: 81400717 ldw r5,28(r16)
8006b34: 18c0010c andi r3,r3,4
8006b38: 18000626 beq r3,zero,8006b54 <__sflush_r+0xa0>
8006b3c: 81000117 ldw r4,4(r16)
8006b40: 80c00c17 ldw r3,48(r16)
8006b44: 1105c83a sub r2,r2,r4
8006b48: 18000226 beq r3,zero,8006b54 <__sflush_r+0xa0>
8006b4c: 80c00f17 ldw r3,60(r16)
8006b50: 10c5c83a sub r2,r2,r3
8006b54: 000f883a mov r7,zero
8006b58: 100d883a mov r6,r2
8006b5c: 9809883a mov r4,r19
8006b60: 403ee83a callr r8
8006b64: 10ffffd8 cmpnei r3,r2,-1
8006b68: 18003d1e bne r3,zero,8006c60 <__sflush_r+0x1ac>
8006b6c: 99000017 ldw r4,0(r19)
8006b70: 80c0030b ldhu r3,12(r16)
8006b74: 20004e26 beq r4,zero,8006cb0 <__sflush_r+0x1fc>
8006b78: 21400760 cmpeqi r5,r4,29
8006b7c: 2800021e bne r5,zero,8006b88 <__sflush_r+0xd4>
8006b80: 210005a0 cmpeqi r4,r4,22
8006b84: 20002c26 beq r4,zero,8006c38 <__sflush_r+0x184>
8006b88: 80800417 ldw r2,16(r16)
8006b8c: 18fdffcc andi r3,r3,63487
8006b90: 80c0030d sth r3,12(r16)
8006b94: 80000115 stw zero,4(r16)
8006b98: 80800015 stw r2,0(r16)
8006b9c: 81400c17 ldw r5,48(r16)
8006ba0: 9c400015 stw r17,0(r19)
8006ba4: 28000526 beq r5,zero,8006bbc <__sflush_r+0x108>
8006ba8: 80801004 addi r2,r16,64
8006bac: 28800226 beq r5,r2,8006bb8 <__sflush_r+0x104>
8006bb0: 9809883a mov r4,r19
8006bb4: 80071c40 call 80071c4 <_free_r>
8006bb8: 80000c15 stw zero,48(r16)
8006bbc: 0005883a mov r2,zero
8006bc0: dfc00417 ldw ra,16(sp)
8006bc4: dcc00317 ldw r19,12(sp)
8006bc8: dc800217 ldw r18,8(sp)
8006bcc: dc400117 ldw r17,4(sp)
8006bd0: dc000017 ldw r16,0(sp)
8006bd4: dec00504 addi sp,sp,20
8006bd8: f800283a ret
8006bdc: 2c800417 ldw r18,16(r5)
8006be0: 903ff626 beq r18,zero,8006bbc <__sflush_r+0x108>
8006be4: 2c400017 ldw r17,0(r5)
8006be8: 108000cc andi r2,r2,3
8006bec: 2c800015 stw r18,0(r5)
8006bf0: 8ca3c83a sub r17,r17,r18
8006bf4: 1000161e bne r2,zero,8006c50 <__sflush_r+0x19c>
8006bf8: 28800517 ldw r2,20(r5)
8006bfc: 80800215 stw r2,8(r16)
8006c00: 04400316 blt zero,r17,8006c10 <__sflush_r+0x15c>
8006c04: 003fed06 br 8006bbc <__sflush_r+0x108>
8006c08: 90a5883a add r18,r18,r2
8006c0c: 047feb0e bge zero,r17,8006bbc <__sflush_r+0x108>
8006c10: 80800917 ldw r2,36(r16)
8006c14: 81400717 ldw r5,28(r16)
8006c18: 880f883a mov r7,r17
8006c1c: 900d883a mov r6,r18
8006c20: 9809883a mov r4,r19
8006c24: 103ee83a callr r2
8006c28: 88a3c83a sub r17,r17,r2
8006c2c: 00bff616 blt zero,r2,8006c08 <__sflush_r+0x154>
8006c30: 80c0030b ldhu r3,12(r16)
8006c34: 00bfffc4 movi r2,-1
8006c38: 18c01014 ori r3,r3,64
8006c3c: 80c0030d sth r3,12(r16)
8006c40: 003fdf06 br 8006bc0 <__sflush_r+0x10c>
8006c44: 28c00f17 ldw r3,60(r5)
8006c48: 00ffa916 blt zero,r3,8006af0 <__sflush_r+0x3c>
8006c4c: 003fdb06 br 8006bbc <__sflush_r+0x108>
8006c50: 0005883a mov r2,zero
8006c54: 003fe906 br 8006bfc <__sflush_r+0x148>
8006c58: 80801417 ldw r2,80(r16)
8006c5c: 003fb506 br 8006b34 <__sflush_r+0x80>
8006c60: 80c0030b ldhu r3,12(r16)
8006c64: 81000417 ldw r4,16(r16)
8006c68: 80000115 stw zero,4(r16)
8006c6c: 197dffcc andi r5,r3,63487
8006c70: 8140030d sth r5,12(r16)
8006c74: 81000015 stw r4,0(r16)
8006c78: 18c4000c andi r3,r3,4096
8006c7c: 183fc726 beq r3,zero,8006b9c <__sflush_r+0xe8>
8006c80: 80801415 stw r2,80(r16)
8006c84: 003fc506 br 8006b9c <__sflush_r+0xe8>
8006c88: 98c00017 ldw r3,0(r19)
8006c8c: 183fa626 beq r3,zero,8006b28 <__sflush_r+0x74>
8006c90: 19000760 cmpeqi r4,r3,29
8006c94: 20000e1e bne r4,zero,8006cd0 <__sflush_r+0x21c>
8006c98: 18c00598 cmpnei r3,r3,22
8006c9c: 18000c26 beq r3,zero,8006cd0 <__sflush_r+0x21c>
8006ca0: 80c0030b ldhu r3,12(r16)
8006ca4: 18c01014 ori r3,r3,64
8006ca8: 80c0030d sth r3,12(r16)
8006cac: 003fc406 br 8006bc0 <__sflush_r+0x10c>
8006cb0: 81000417 ldw r4,16(r16)
8006cb4: 197dffcc andi r5,r3,63487
8006cb8: 8140030d sth r5,12(r16)
8006cbc: 80000115 stw zero,4(r16)
8006cc0: 81000015 stw r4,0(r16)
8006cc4: 18c4000c andi r3,r3,4096
8006cc8: 183fb426 beq r3,zero,8006b9c <__sflush_r+0xe8>
8006ccc: 003fec06 br 8006c80 <__sflush_r+0x1cc>
8006cd0: 9c400015 stw r17,0(r19)
8006cd4: 0005883a mov r2,zero
8006cd8: 003fb906 br 8006bc0 <__sflush_r+0x10c>
08006cdc <_fflush_r>:
8006cdc: defffd04 addi sp,sp,-12
8006ce0: dc000115 stw r16,4(sp)
8006ce4: dfc00215 stw ra,8(sp)
8006ce8: 2021883a mov r16,r4
8006cec: 20000226 beq r4,zero,8006cf8 <_fflush_r+0x1c>
8006cf0: 20800e17 ldw r2,56(r4)
8006cf4: 10000726 beq r2,zero,8006d14 <_fflush_r+0x38>
8006cf8: 2880030f ldh r2,12(r5)
8006cfc: 10000a1e bne r2,zero,8006d28 <_fflush_r+0x4c>
8006d00: 0005883a mov r2,zero
8006d04: dfc00217 ldw ra,8(sp)
8006d08: dc000117 ldw r16,4(sp)
8006d0c: dec00304 addi sp,sp,12
8006d10: f800283a ret
8006d14: d9400015 stw r5,0(sp)
8006d18: 80070600 call 8007060 <__sinit>
8006d1c: d9400017 ldw r5,0(sp)
8006d20: 2880030f ldh r2,12(r5)
8006d24: 103ff626 beq r2,zero,8006d00 <_fflush_r+0x24>
8006d28: 8009883a mov r4,r16
8006d2c: dfc00217 ldw ra,8(sp)
8006d30: dc000117 ldw r16,4(sp)
8006d34: dec00304 addi sp,sp,12
8006d38: 8006ab41 jmpi 8006ab4 <__sflush_r>
08006d3c <fflush>:
8006d3c: 200b883a mov r5,r4
8006d40: 20000326 beq r4,zero,8006d50 <fflush+0x14>
8006d44: 00820174 movhi r2,2053
8006d48: 1132af17 ldw r4,-13636(r2)
8006d4c: 8006cdc1 jmpi 8006cdc <_fflush_r>
8006d50: 00820174 movhi r2,2053
8006d54: 1132ae17 ldw r4,-13640(r2)
8006d58: 01420034 movhi r5,2048
8006d5c: 295b3704 addi r5,r5,27868
8006d60: 8007a281 jmpi 8007a28 <_fwalk_reent>
08006d64 <__fp_lock>:
8006d64: 0005883a mov r2,zero
8006d68: f800283a ret
08006d6c <_cleanup_r>:
8006d6c: 01420074 movhi r5,2049
8006d70: 296eb904 addi r5,r5,-17692
8006d74: 8007a281 jmpi 8007a28 <_fwalk_reent>
08006d78 <__sinit.part.0>:
8006d78: 00c20034 movhi r3,2048
8006d7c: 20800117 ldw r2,4(r4)
8006d80: 18db5b04 addi r3,r3,28012
8006d84: 20c00f15 stw r3,60(r4)
8006d88: 2140bb04 addi r5,r4,748
8006d8c: 00c000c4 movi r3,3
8006d90: 20c0b915 stw r3,740(r4)
8006d94: 2140ba15 stw r5,744(r4)
8006d98: 2000b815 stw zero,736(r4)
8006d9c: 10001705 stb zero,92(r2)
8006da0: 10001745 stb zero,93(r2)
8006da4: 10001785 stb zero,94(r2)
8006da8: 100017c5 stb zero,95(r2)
8006dac: 10001805 stb zero,96(r2)
8006db0: 10001845 stb zero,97(r2)
8006db4: 10001885 stb zero,98(r2)
8006db8: 100018c5 stb zero,99(r2)
8006dbc: 00c00104 movi r3,4
8006dc0: 10c00315 stw r3,12(r2)
8006dc4: 02020074 movhi r8,2049
8006dc8: 20c00217 ldw r3,8(r4)
8006dcc: 01c20074 movhi r7,2049
8006dd0: 01820074 movhi r6,2049
8006dd4: 01420074 movhi r5,2049
8006dd8: 42287104 addi r8,r8,-24124
8006ddc: 39e88804 addi r7,r7,-24032
8006de0: 31a8a804 addi r6,r6,-23904
8006de4: 2968bf04 addi r5,r5,-23812
8006de8: 02400074 movhi r9,1
8006dec: 10001915 stw zero,100(r2)
8006df0: 10000015 stw zero,0(r2)
8006df4: 10000115 stw zero,4(r2)
8006df8: 10000215 stw zero,8(r2)
8006dfc: 10000415 stw zero,16(r2)
8006e00: 10000515 stw zero,20(r2)
8006e04: 10000615 stw zero,24(r2)
8006e08: 10800715 stw r2,28(r2)
8006e0c: 12000815 stw r8,32(r2)
8006e10: 11c00915 stw r7,36(r2)
8006e14: 11800a15 stw r6,40(r2)
8006e18: 11400b15 stw r5,44(r2)
8006e1c: 4a400284 addi r9,r9,10
8006e20: 1a400315 stw r9,12(r3)
8006e24: 18001915 stw zero,100(r3)
8006e28: 18000015 stw zero,0(r3)
8006e2c: 18000115 stw zero,4(r3)
8006e30: 18000215 stw zero,8(r3)
8006e34: 18000415 stw zero,16(r3)
8006e38: 18001705 stb zero,92(r3)
8006e3c: 18001745 stb zero,93(r3)
8006e40: 18001785 stb zero,94(r3)
8006e44: 180017c5 stb zero,95(r3)
8006e48: 18001805 stb zero,96(r3)
8006e4c: 18001845 stb zero,97(r3)
8006e50: 18001885 stb zero,98(r3)
8006e54: 180018c5 stb zero,99(r3)
8006e58: 20800317 ldw r2,12(r4)
8006e5c: 024000b4 movhi r9,2
8006e60: 18000515 stw zero,20(r3)
8006e64: 18000615 stw zero,24(r3)
8006e68: 18c00715 stw r3,28(r3)
8006e6c: 1a000815 stw r8,32(r3)
8006e70: 19c00915 stw r7,36(r3)
8006e74: 19800a15 stw r6,40(r3)
8006e78: 19400b15 stw r5,44(r3)
8006e7c: 4a400484 addi r9,r9,18
8006e80: 10001915 stw zero,100(r2)
8006e84: 10000015 stw zero,0(r2)
8006e88: 10000115 stw zero,4(r2)
8006e8c: 10000215 stw zero,8(r2)
8006e90: 12400315 stw r9,12(r2)
8006e94: 10000415 stw zero,16(r2)
8006e98: 10000515 stw zero,20(r2)
8006e9c: 10000615 stw zero,24(r2)
8006ea0: 10001705 stb zero,92(r2)
8006ea4: 10001745 stb zero,93(r2)
8006ea8: 10001785 stb zero,94(r2)
8006eac: 100017c5 stb zero,95(r2)
8006eb0: 10001805 stb zero,96(r2)
8006eb4: 10001845 stb zero,97(r2)
8006eb8: 10001885 stb zero,98(r2)
8006ebc: 100018c5 stb zero,99(r2)
8006ec0: 10800715 stw r2,28(r2)
8006ec4: 12000815 stw r8,32(r2)
8006ec8: 11c00915 stw r7,36(r2)
8006ecc: 11800a15 stw r6,40(r2)
8006ed0: 11400b15 stw r5,44(r2)
8006ed4: 00800044 movi r2,1
8006ed8: 20800e15 stw r2,56(r4)
8006edc: f800283a ret
08006ee0 <__fp_unlock>:
8006ee0: 0005883a mov r2,zero
8006ee4: f800283a ret
08006ee8 <__sfmoreglue>:
8006ee8: defffc04 addi sp,sp,-16
8006eec: dc400115 stw r17,4(sp)
8006ef0: 2c7fffc4 addi r17,r5,-1
8006ef4: 8c401a24 muli r17,r17,104
8006ef8: dc800215 stw r18,8(sp)
8006efc: 2825883a mov r18,r5
8006f00: 89401d04 addi r5,r17,116
8006f04: dc000015 stw r16,0(sp)
8006f08: dfc00315 stw ra,12(sp)
8006f0c: 8007ddc0 call 8007ddc <_malloc_r>
8006f10: 1021883a mov r16,r2
8006f14: 10000726 beq r2,zero,8006f34 <__sfmoreglue+0x4c>
8006f18: 11000304 addi r4,r2,12
8006f1c: 10000015 stw zero,0(r2)
8006f20: 14800115 stw r18,4(r2)
8006f24: 11000215 stw r4,8(r2)
8006f28: 89801a04 addi r6,r17,104
8006f2c: 000b883a mov r5,zero
8006f30: 80088e40 call 80088e4 <memset>
8006f34: 8005883a mov r2,r16
8006f38: dfc00317 ldw ra,12(sp)
8006f3c: dc800217 ldw r18,8(sp)
8006f40: dc400117 ldw r17,4(sp)
8006f44: dc000017 ldw r16,0(sp)
8006f48: dec00404 addi sp,sp,16
8006f4c: f800283a ret
08006f50 <__sfp>:
8006f50: defffd04 addi sp,sp,-12
8006f54: 00820174 movhi r2,2053
8006f58: dc000015 stw r16,0(sp)
8006f5c: 1432ae17 ldw r16,-13640(r2)
8006f60: dc400115 stw r17,4(sp)
8006f64: dfc00215 stw ra,8(sp)
8006f68: 80800e17 ldw r2,56(r16)
8006f6c: 2023883a mov r17,r4
8006f70: 10002b26 beq r2,zero,8007020 <__sfp+0xd0>
8006f74: 8400b804 addi r16,r16,736
8006f78: 80c00117 ldw r3,4(r16)
8006f7c: 80800217 ldw r2,8(r16)
8006f80: 18ffffc4 addi r3,r3,-1
8006f84: 1800050e bge r3,zero,8006f9c <__sfp+0x4c>
8006f88: 00002106 br 8007010 <__sfp+0xc0>
8006f8c: 18ffffc4 addi r3,r3,-1
8006f90: 193fffd8 cmpnei r4,r3,-1
8006f94: 10801a04 addi r2,r2,104
8006f98: 20001d26 beq r4,zero,8007010 <__sfp+0xc0>
8006f9c: 1100030f ldh r4,12(r2)
8006fa0: 203ffa1e bne r4,zero,8006f8c <__sfp+0x3c>
8006fa4: 00fffff4 movhi r3,65535
8006fa8: 18c00044 addi r3,r3,1
8006fac: 10001915 stw zero,100(r2)
8006fb0: 10000015 stw zero,0(r2)
8006fb4: 10000115 stw zero,4(r2)
8006fb8: 10000215 stw zero,8(r2)
8006fbc: 10c00315 stw r3,12(r2)
8006fc0: 10000415 stw zero,16(r2)
8006fc4: 10000515 stw zero,20(r2)
8006fc8: 10000615 stw zero,24(r2)
8006fcc: 10001705 stb zero,92(r2)
8006fd0: 10001745 stb zero,93(r2)
8006fd4: 10001785 stb zero,94(r2)
8006fd8: 100017c5 stb zero,95(r2)
8006fdc: 10001805 stb zero,96(r2)
8006fe0: 10001845 stb zero,97(r2)
8006fe4: 10001885 stb zero,98(r2)
8006fe8: 100018c5 stb zero,99(r2)
8006fec: 10000c15 stw zero,48(r2)
8006ff0: 10000d15 stw zero,52(r2)
8006ff4: 10001115 stw zero,68(r2)
8006ff8: 10001215 stw zero,72(r2)
8006ffc: dfc00217 ldw ra,8(sp)
8007000: dc400117 ldw r17,4(sp)
8007004: dc000017 ldw r16,0(sp)
8007008: dec00304 addi sp,sp,12
800700c: f800283a ret
8007010: 80800017 ldw r2,0(r16)
8007014: 10000526 beq r2,zero,800702c <__sfp+0xdc>
8007018: 1021883a mov r16,r2
800701c: 003fd606 br 8006f78 <__sfp+0x28>
8007020: 8009883a mov r4,r16
8007024: 8006d780 call 8006d78 <__sinit.part.0>
8007028: 003fd206 br 8006f74 <__sfp+0x24>
800702c: 01400104 movi r5,4
8007030: 8809883a mov r4,r17
8007034: 8006ee80 call 8006ee8 <__sfmoreglue>
8007038: 80800015 stw r2,0(r16)
800703c: 103ff61e bne r2,zero,8007018 <__sfp+0xc8>
8007040: 00c00304 movi r3,12
8007044: 88c00015 stw r3,0(r17)
8007048: 003fec06 br 8006ffc <__sfp+0xac>
0800704c <_cleanup>:
800704c: 00820174 movhi r2,2053
8007050: 1132ae17 ldw r4,-13640(r2)
8007054: 01420074 movhi r5,2049
8007058: 296eb904 addi r5,r5,-17692
800705c: 8007a281 jmpi 8007a28 <_fwalk_reent>
08007060 <__sinit>:
8007060: 20800e17 ldw r2,56(r4)
8007064: 10000126 beq r2,zero,800706c <__sinit+0xc>
8007068: f800283a ret
800706c: 8006d781 jmpi 8006d78 <__sinit.part.0>
08007070 <__sfp_lock_acquire>:
8007070: f800283a ret
08007074 <__sfp_lock_release>:
8007074: f800283a ret
08007078 <__sinit_lock_acquire>:
8007078: f800283a ret
0800707c <__sinit_lock_release>:
800707c: f800283a ret
08007080 <__fp_lock_all>:
8007080: 00820174 movhi r2,2053
8007084: 1132af17 ldw r4,-13636(r2)
8007088: 01420034 movhi r5,2048
800708c: 295b5904 addi r5,r5,28004
8007090: 80079841 jmpi 8007984 <_fwalk>
08007094 <__fp_unlock_all>:
8007094: 00820174 movhi r2,2053
8007098: 1132af17 ldw r4,-13636(r2)
800709c: 01420034 movhi r5,2048
80070a0: 295bb804 addi r5,r5,28384
80070a4: 80079841 jmpi 8007984 <_fwalk>
080070a8 <_malloc_trim_r>:
80070a8: defffb04 addi sp,sp,-20
80070ac: dcc00315 stw r19,12(sp)
80070b0: 04c20174 movhi r19,2053
80070b4: dc800215 stw r18,8(sp)
80070b8: dc400115 stw r17,4(sp)
80070bc: dc000015 stw r16,0(sp)
80070c0: dfc00415 stw ra,16(sp)
80070c4: 2821883a mov r16,r5
80070c8: 9cefa904 addi r19,r19,-16732
80070cc: 2025883a mov r18,r4
80070d0: 800fe0c0 call 800fe0c <__malloc_lock>
80070d4: 98800217 ldw r2,8(r19)
80070d8: 14400117 ldw r17,4(r2)
80070dc: 00bfff04 movi r2,-4
80070e0: 88a2703a and r17,r17,r2
80070e4: 8c21c83a sub r16,r17,r16
80070e8: 8403fbc4 addi r16,r16,4079
80070ec: 8020d33a srli r16,r16,12
80070f0: 843fffc4 addi r16,r16,-1
80070f4: 8020933a slli r16,r16,12
80070f8: 80840008 cmpgei r2,r16,4096
80070fc: 10000626 beq r2,zero,8007118 <_malloc_trim_r+0x70>
8007100: 000b883a mov r5,zero
8007104: 9009883a mov r4,r18
8007108: 800a16c0 call 800a16c <_sbrk_r>
800710c: 98c00217 ldw r3,8(r19)
8007110: 1c47883a add r3,r3,r17
8007114: 10c00a26 beq r2,r3,8007140 <_malloc_trim_r+0x98>
8007118: 9009883a mov r4,r18
800711c: 800ff2c0 call 800ff2c <__malloc_unlock>
8007120: 0005883a mov r2,zero
8007124: dfc00417 ldw ra,16(sp)
8007128: dcc00317 ldw r19,12(sp)
800712c: dc800217 ldw r18,8(sp)
8007130: dc400117 ldw r17,4(sp)
8007134: dc000017 ldw r16,0(sp)
8007138: dec00504 addi sp,sp,20
800713c: f800283a ret
8007140: 040bc83a sub r5,zero,r16
8007144: 9009883a mov r4,r18
8007148: 800a16c0 call 800a16c <_sbrk_r>
800714c: 10bfffd8 cmpnei r2,r2,-1
8007150: 10000d26 beq r2,zero,8007188 <_malloc_trim_r+0xe0>
8007154: 00820174 movhi r2,2053
8007158: 10b36417 ldw r2,-12912(r2)
800715c: 98c00217 ldw r3,8(r19)
8007160: 8c23c83a sub r17,r17,r16
8007164: 8c400054 ori r17,r17,1
8007168: 1421c83a sub r16,r2,r16
800716c: 1c400115 stw r17,4(r3)
8007170: 00820174 movhi r2,2053
8007174: 9009883a mov r4,r18
8007178: 14336415 stw r16,-12912(r2)
800717c: 800ff2c0 call 800ff2c <__malloc_unlock>
8007180: 00800044 movi r2,1
8007184: 003fe706 br 8007124 <_malloc_trim_r+0x7c>
8007188: 000b883a mov r5,zero
800718c: 9009883a mov r4,r18
8007190: 800a16c0 call 800a16c <_sbrk_r>
8007194: 99000217 ldw r4,8(r19)
8007198: 1107c83a sub r3,r2,r4
800719c: 19400410 cmplti r5,r3,16
80071a0: 283fdd1e bne r5,zero,8007118 <_malloc_trim_r+0x70>
80071a4: 01420174 movhi r5,2053
80071a8: 2972b017 ldw r5,-13632(r5)
80071ac: 18c00054 ori r3,r3,1
80071b0: 20c00115 stw r3,4(r4)
80071b4: 1145c83a sub r2,r2,r5
80071b8: 01420174 movhi r5,2053
80071bc: 28b36415 stw r2,-12912(r5)
80071c0: 003fd506 br 8007118 <_malloc_trim_r+0x70>
080071c4 <_free_r>:
80071c4: 28004f26 beq r5,zero,8007304 <_free_r+0x140>
80071c8: defffd04 addi sp,sp,-12
80071cc: dc400115 stw r17,4(sp)
80071d0: dc000015 stw r16,0(sp)
80071d4: 2023883a mov r17,r4
80071d8: 2821883a mov r16,r5
80071dc: dfc00215 stw ra,8(sp)
80071e0: 800fe0c0 call 800fe0c <__malloc_lock>
80071e4: 81ffff17 ldw r7,-4(r16)
80071e8: 00bfff84 movi r2,-2
80071ec: 80fffe04 addi r3,r16,-8
80071f0: 3884703a and r2,r7,r2
80071f4: 01820174 movhi r6,2053
80071f8: 1889883a add r4,r3,r2
80071fc: 31afa904 addi r6,r6,-16732
8007200: 21400117 ldw r5,4(r4)
8007204: 32000217 ldw r8,8(r6)
8007208: 027fff04 movi r9,-4
800720c: 2a4a703a and r5,r5,r9
8007210: 41006426 beq r8,r4,80073a4 <_free_r+0x1e0>
8007214: 21400115 stw r5,4(r4)
8007218: 39c0004c andi r7,r7,1
800721c: 2151883a add r8,r4,r5
8007220: 3800281e bne r7,zero,80072c4 <_free_r+0x100>
8007224: 82bffe17 ldw r10,-8(r16)
8007228: 42000117 ldw r8,4(r8)
800722c: 01c20174 movhi r7,2053
8007230: 1a87c83a sub r3,r3,r10
8007234: 1a400217 ldw r9,8(r3)
8007238: 39efab04 addi r7,r7,-16724
800723c: 1285883a add r2,r2,r10
8007240: 4200004c andi r8,r8,1
8007244: 49c04c26 beq r9,r7,8007378 <_free_r+0x1b4>
8007248: 1a800317 ldw r10,12(r3)
800724c: 4a800315 stw r10,12(r9)
8007250: 52400215 stw r9,8(r10)
8007254: 40007126 beq r8,zero,800741c <_free_r+0x258>
8007258: 11400054 ori r5,r2,1
800725c: 19400115 stw r5,4(r3)
8007260: 20800015 stw r2,0(r4)
8007264: 11008028 cmpgeui r4,r2,512
8007268: 20002c1e bne r4,zero,800731c <_free_r+0x158>
800726c: 1008d0fa srli r4,r2,3
8007270: 31c00117 ldw r7,4(r6)
8007274: 20800044 addi r2,r4,1
8007278: 200bd0ba srai r5,r4,2
800727c: 100490fa slli r2,r2,3
8007280: 01000044 movi r4,1
8007284: 2148983a sll r4,r4,r5
8007288: 3085883a add r2,r6,r2
800728c: 11400017 ldw r5,0(r2)
8007290: 21c8b03a or r4,r4,r7
8007294: 11fffe04 addi r7,r2,-8
8007298: 19c00315 stw r7,12(r3)
800729c: 19400215 stw r5,8(r3)
80072a0: 31000115 stw r4,4(r6)
80072a4: 10c00015 stw r3,0(r2)
80072a8: 28c00315 stw r3,12(r5)
80072ac: 8809883a mov r4,r17
80072b0: dfc00217 ldw ra,8(sp)
80072b4: dc400117 ldw r17,4(sp)
80072b8: dc000017 ldw r16,0(sp)
80072bc: dec00304 addi sp,sp,12
80072c0: 800ff2c1 jmpi 800ff2c <__malloc_unlock>
80072c4: 41c00117 ldw r7,4(r8)
80072c8: 39c0004c andi r7,r7,1
80072cc: 38000e1e bne r7,zero,8007308 <_free_r+0x144>
80072d0: 01c20174 movhi r7,2053
80072d4: 1145883a add r2,r2,r5
80072d8: 39efab04 addi r7,r7,-16724
80072dc: 21400217 ldw r5,8(r4)
80072e0: 12400054 ori r9,r2,1
80072e4: 1891883a add r8,r3,r2
80072e8: 29c05226 beq r5,r7,8007434 <_free_r+0x270>
80072ec: 21000317 ldw r4,12(r4)
80072f0: 29000315 stw r4,12(r5)
80072f4: 21400215 stw r5,8(r4)
80072f8: 1a400115 stw r9,4(r3)
80072fc: 40800015 stw r2,0(r8)
8007300: 003fd806 br 8007264 <_free_r+0xa0>
8007304: f800283a ret
8007308: 11400054 ori r5,r2,1
800730c: 817fff15 stw r5,-4(r16)
8007310: 20800015 stw r2,0(r4)
8007314: 11008028 cmpgeui r4,r2,512
8007318: 203fd426 beq r4,zero,800726c <_free_r+0xa8>
800731c: 1008d27a srli r4,r2,9
8007320: 21400168 cmpgeui r5,r4,5
8007324: 2800341e bne r5,zero,80073f8 <_free_r+0x234>
8007328: 1008d1ba srli r4,r2,6
800732c: 21c00e44 addi r7,r4,57
8007330: 380e90fa slli r7,r7,3
8007334: 21400e04 addi r5,r4,56
8007338: 31cf883a add r7,r6,r7
800733c: 39000017 ldw r4,0(r7)
8007340: 39fffe04 addi r7,r7,-8
8007344: 39004226 beq r7,r4,8007450 <_free_r+0x28c>
8007348: 01bfff04 movi r6,-4
800734c: 21400117 ldw r5,4(r4)
8007350: 298a703a and r5,r5,r6
8007354: 1140022e bgeu r2,r5,8007360 <_free_r+0x19c>
8007358: 21000217 ldw r4,8(r4)
800735c: 393ffb1e bne r7,r4,800734c <_free_r+0x188>
8007360: 21c00317 ldw r7,12(r4)
8007364: 19c00315 stw r7,12(r3)
8007368: 19000215 stw r4,8(r3)
800736c: 38c00215 stw r3,8(r7)
8007370: 20c00315 stw r3,12(r4)
8007374: 003fcd06 br 80072ac <_free_r+0xe8>
8007378: 40004d1e bne r8,zero,80074b0 <_free_r+0x2ec>
800737c: 21800317 ldw r6,12(r4)
8007380: 21000217 ldw r4,8(r4)
8007384: 2885883a add r2,r5,r2
8007388: 11400054 ori r5,r2,1
800738c: 21800315 stw r6,12(r4)
8007390: 31000215 stw r4,8(r6)
8007394: 19400115 stw r5,4(r3)
8007398: 1887883a add r3,r3,r2
800739c: 18800015 stw r2,0(r3)
80073a0: 003fc206 br 80072ac <_free_r+0xe8>
80073a4: 39c0004c andi r7,r7,1
80073a8: 1145883a add r2,r2,r5
80073ac: 3800071e bne r7,zero,80073cc <_free_r+0x208>
80073b0: 81fffe17 ldw r7,-8(r16)
80073b4: 19c7c83a sub r3,r3,r7
80073b8: 19000317 ldw r4,12(r3)
80073bc: 19400217 ldw r5,8(r3)
80073c0: 11c5883a add r2,r2,r7
80073c4: 29000315 stw r4,12(r5)
80073c8: 21400215 stw r5,8(r4)
80073cc: 01020174 movhi r4,2053
80073d0: 11400054 ori r5,r2,1
80073d4: 2132b117 ldw r4,-13628(r4)
80073d8: 19400115 stw r5,4(r3)
80073dc: 30c00215 stw r3,8(r6)
80073e0: 113fb236 bltu r2,r4,80072ac <_free_r+0xe8>
80073e4: 00820174 movhi r2,2053
80073e8: 1172ef17 ldw r5,-13380(r2)
80073ec: 8809883a mov r4,r17
80073f0: 80070a80 call 80070a8 <_malloc_trim_r>
80073f4: 003fad06 br 80072ac <_free_r+0xe8>
80073f8: 21400568 cmpgeui r5,r4,21
80073fc: 28000926 beq r5,zero,8007424 <_free_r+0x260>
8007400: 21401568 cmpgeui r5,r4,85
8007404: 2800191e bne r5,zero,800746c <_free_r+0x2a8>
8007408: 1008d33a srli r4,r2,12
800740c: 21c01bc4 addi r7,r4,111
8007410: 21401b84 addi r5,r4,110
8007414: 380e90fa slli r7,r7,3
8007418: 003fc706 br 8007338 <_free_r+0x174>
800741c: 1145883a add r2,r2,r5
8007420: 003fae06 br 80072dc <_free_r+0x118>
8007424: 21c01704 addi r7,r4,92
8007428: 214016c4 addi r5,r4,91
800742c: 380e90fa slli r7,r7,3
8007430: 003fc106 br 8007338 <_free_r+0x174>
8007434: 30c00515 stw r3,20(r6)
8007438: 30c00415 stw r3,16(r6)
800743c: 19c00315 stw r7,12(r3)
8007440: 19c00215 stw r7,8(r3)
8007444: 1a400115 stw r9,4(r3)
8007448: 40800015 stw r2,0(r8)
800744c: 003f9706 br 80072ac <_free_r+0xe8>
8007450: 280bd0ba srai r5,r5,2
8007454: 00800044 movi r2,1
8007458: 32000117 ldw r8,4(r6)
800745c: 114a983a sll r5,r2,r5
8007460: 2a0ab03a or r5,r5,r8
8007464: 31400115 stw r5,4(r6)
8007468: 003fbe06 br 8007364 <_free_r+0x1a0>
800746c: 21405568 cmpgeui r5,r4,341
8007470: 2800051e bne r5,zero,8007488 <_free_r+0x2c4>
8007474: 1008d3fa srli r4,r2,15
8007478: 21c01e04 addi r7,r4,120
800747c: 21401dc4 addi r5,r4,119
8007480: 380e90fa slli r7,r7,3
8007484: 003fac06 br 8007338 <_free_r+0x174>
8007488: 21015568 cmpgeui r4,r4,1365
800748c: 2000051e bne r4,zero,80074a4 <_free_r+0x2e0>
8007490: 1008d4ba srli r4,r2,18
8007494: 21c01f44 addi r7,r4,125
8007498: 21401f04 addi r5,r4,124
800749c: 380e90fa slli r7,r7,3
80074a0: 003fa506 br 8007338 <_free_r+0x174>
80074a4: 01c0fe04 movi r7,1016
80074a8: 01401f84 movi r5,126
80074ac: 003fa206 br 8007338 <_free_r+0x174>
80074b0: 11400054 ori r5,r2,1
80074b4: 19400115 stw r5,4(r3)
80074b8: 20800015 stw r2,0(r4)
80074bc: 003f7b06 br 80072ac <_free_r+0xe8>
080074c0 <__sfvwrite_r>:
80074c0: 30800217 ldw r2,8(r6)
80074c4: 1000c926 beq r2,zero,80077ec <__sfvwrite_r+0x32c>
80074c8: 2880030b ldhu r2,12(r5)
80074cc: defff304 addi sp,sp,-52
80074d0: dd000715 stw r20,28(sp)
80074d4: dc000315 stw r16,12(sp)
80074d8: dfc00c15 stw ra,48(sp)
80074dc: df000b15 stw fp,44(sp)
80074e0: ddc00a15 stw r23,40(sp)
80074e4: dd800915 stw r22,36(sp)
80074e8: dd400815 stw r21,32(sp)
80074ec: dcc00615 stw r19,24(sp)
80074f0: dc800515 stw r18,20(sp)
80074f4: dc400415 stw r17,16(sp)
80074f8: d9000015 stw r4,0(sp)
80074fc: 10c0020c andi r3,r2,8
8007500: 2821883a mov r16,r5
8007504: 3029883a mov r20,r6
8007508: 18002426 beq r3,zero,800759c <__sfvwrite_r+0xdc>
800750c: 28c00417 ldw r3,16(r5)
8007510: 18002226 beq r3,zero,800759c <__sfvwrite_r+0xdc>
8007514: 10c0008c andi r3,r2,2
8007518: a4400017 ldw r17,0(r20)
800751c: 18002726 beq r3,zero,80075bc <__sfvwrite_r+0xfc>
8007520: 80c00917 ldw r3,36(r16)
8007524: 80800717 ldw r2,28(r16)
8007528: 05600034 movhi r21,32768
800752c: 0027883a mov r19,zero
8007530: 0025883a mov r18,zero
8007534: ad7f0004 addi r21,r21,-1024
8007538: 980d883a mov r6,r19
800753c: 100b883a mov r5,r2
8007540: d9000017 ldw r4,0(sp)
8007544: 90001126 beq r18,zero,800758c <__sfvwrite_r+0xcc>
8007548: 900f883a mov r7,r18
800754c: ac80012e bgeu r21,r18,8007554 <__sfvwrite_r+0x94>
8007550: a80f883a mov r7,r21
8007554: 183ee83a callr r3
8007558: 00809f0e bge zero,r2,80077d8 <__sfvwrite_r+0x318>
800755c: a0c00217 ldw r3,8(r20)
8007560: 98a7883a add r19,r19,r2
8007564: 90a5c83a sub r18,r18,r2
8007568: 1885c83a sub r2,r3,r2
800756c: a0800215 stw r2,8(r20)
8007570: 10006326 beq r2,zero,8007700 <__sfvwrite_r+0x240>
8007574: 80800717 ldw r2,28(r16)
8007578: 80c00917 ldw r3,36(r16)
800757c: 980d883a mov r6,r19
8007580: 100b883a mov r5,r2
8007584: d9000017 ldw r4,0(sp)
8007588: 903fef1e bne r18,zero,8007548 <__sfvwrite_r+0x88>
800758c: 8cc00017 ldw r19,0(r17)
8007590: 8c800117 ldw r18,4(r17)
8007594: 8c400204 addi r17,r17,8
8007598: 003fe706 br 8007538 <__sfvwrite_r+0x78>
800759c: d9000017 ldw r4,0(sp)
80075a0: 800b883a mov r5,r16
80075a4: 800507c0 call 800507c <__swsetup_r>
80075a8: 1000f41e bne r2,zero,800797c <__sfvwrite_r+0x4bc>
80075ac: 8080030b ldhu r2,12(r16)
80075b0: a4400017 ldw r17,0(r20)
80075b4: 10c0008c andi r3,r2,2
80075b8: 183fd91e bne r3,zero,8007520 <__sfvwrite_r+0x60>
80075bc: 10c0004c andi r3,r2,1
80075c0: 84800217 ldw r18,8(r16)
80075c4: 87000017 ldw fp,0(r16)
80075c8: 18008a1e bne r3,zero,80077f4 <__sfvwrite_r+0x334>
80075cc: 00e00034 movhi r3,32768
80075d0: 18ffff84 addi r3,r3,-2
80075d4: 01200034 movhi r4,32768
80075d8: d8c00115 stw r3,4(sp)
80075dc: 20ffffc4 addi r3,r4,-1
80075e0: 002d883a mov r22,zero
80075e4: 002f883a mov r23,zero
80075e8: d8c00215 stw r3,8(sp)
80075ec: b8004026 beq r23,zero,80076f0 <__sfvwrite_r+0x230>
80075f0: 1100800c andi r4,r2,512
80075f4: 20009026 beq r4,zero,8007838 <__sfvwrite_r+0x378>
80075f8: 902b883a mov r21,r18
80075fc: bc80b436 bltu r23,r18,80078d0 <__sfvwrite_r+0x410>
8007600: 1101200c andi r4,r2,1152
8007604: 20002526 beq r4,zero,800769c <__sfvwrite_r+0x1dc>
8007608: 81800517 ldw r6,20(r16)
800760c: 81400417 ldw r5,16(r16)
8007610: b9000044 addi r4,r23,1
8007614: 318000e4 muli r6,r6,3
8007618: e167c83a sub r19,fp,r5
800761c: 24c9883a add r4,r4,r19
8007620: 3024d7fa srli r18,r6,31
8007624: 91a5883a add r18,r18,r6
8007628: 9025d07a srai r18,r18,1
800762c: 900d883a mov r6,r18
8007630: 9100022e bgeu r18,r4,800763c <__sfvwrite_r+0x17c>
8007634: 2025883a mov r18,r4
8007638: 200d883a mov r6,r4
800763c: 1081000c andi r2,r2,1024
8007640: 1000bc26 beq r2,zero,8007934 <__sfvwrite_r+0x474>
8007644: d9000017 ldw r4,0(sp)
8007648: 300b883a mov r5,r6
800764c: 8007ddc0 call 8007ddc <_malloc_r>
8007650: 1000c526 beq r2,zero,8007968 <__sfvwrite_r+0x4a8>
8007654: 81400417 ldw r5,16(r16)
8007658: 980d883a mov r6,r19
800765c: 1009883a mov r4,r2
8007660: 80086b80 call 80086b8 <memcpy>
8007664: 100f883a mov r7,r2
8007668: 8080030b ldhu r2,12(r16)
800766c: 00fedfc4 movi r3,-1153
8007670: 10c4703a and r2,r2,r3
8007674: 10802014 ori r2,r2,128
8007678: 8080030d sth r2,12(r16)
800767c: 94c5c83a sub r2,r18,r19
8007680: 3cf9883a add fp,r7,r19
8007684: 84800515 stw r18,20(r16)
8007688: 81c00415 stw r7,16(r16)
800768c: 87000015 stw fp,0(r16)
8007690: b825883a mov r18,r23
8007694: 80800215 stw r2,8(r16)
8007698: b82b883a mov r21,r23
800769c: a80d883a mov r6,r21
80076a0: b00b883a mov r5,r22
80076a4: e009883a mov r4,fp
80076a8: 80087b80 call 80087b8 <memmove>
80076ac: 80800217 ldw r2,8(r16)
80076b0: 81800017 ldw r6,0(r16)
80076b4: b827883a mov r19,r23
80076b8: 14a5c83a sub r18,r2,r18
80076bc: 354d883a add r6,r6,r21
80076c0: 84800215 stw r18,8(r16)
80076c4: 81800015 stw r6,0(r16)
80076c8: 002f883a mov r23,zero
80076cc: a0800217 ldw r2,8(r20)
80076d0: b4ed883a add r22,r22,r19
80076d4: 14e7c83a sub r19,r2,r19
80076d8: a4c00215 stw r19,8(r20)
80076dc: 98000826 beq r19,zero,8007700 <__sfvwrite_r+0x240>
80076e0: 8080030b ldhu r2,12(r16)
80076e4: 84800217 ldw r18,8(r16)
80076e8: 87000017 ldw fp,0(r16)
80076ec: b83fc01e bne r23,zero,80075f0 <__sfvwrite_r+0x130>
80076f0: 8d800017 ldw r22,0(r17)
80076f4: 8dc00117 ldw r23,4(r17)
80076f8: 8c400204 addi r17,r17,8
80076fc: 003fbb06 br 80075ec <__sfvwrite_r+0x12c>
8007700: 0005883a mov r2,zero
8007704: dfc00c17 ldw ra,48(sp)
8007708: df000b17 ldw fp,44(sp)
800770c: ddc00a17 ldw r23,40(sp)
8007710: dd800917 ldw r22,36(sp)
8007714: dd400817 ldw r21,32(sp)
8007718: dd000717 ldw r20,28(sp)
800771c: dcc00617 ldw r19,24(sp)
8007720: dc800517 ldw r18,20(sp)
8007724: dc400417 ldw r17,16(sp)
8007728: dc000317 ldw r16,12(sp)
800772c: dec00d04 addi sp,sp,52
8007730: f800283a ret
8007734: b1c06e16 blt r22,r7,80078f0 <__sfvwrite_r+0x430>
8007738: 80800917 ldw r2,36(r16)
800773c: 81400717 ldw r5,28(r16)
8007740: d9000017 ldw r4,0(sp)
8007744: b80d883a mov r6,r23
8007748: 103ee83a callr r2
800774c: 1025883a mov r18,r2
8007750: 0080210e bge zero,r2,80077d8 <__sfvwrite_r+0x318>
8007754: acabc83a sub r21,r21,r18
8007758: a8006026 beq r21,zero,80078dc <__sfvwrite_r+0x41c>
800775c: 00800044 movi r2,1
8007760: a0c00217 ldw r3,8(r20)
8007764: bcaf883a add r23,r23,r18
8007768: 9ca7c83a sub r19,r19,r18
800776c: 1ca5c83a sub r18,r3,r18
8007770: a4800215 stw r18,8(r20)
8007774: 903fe226 beq r18,zero,8007700 <__sfvwrite_r+0x240>
8007778: 84800217 ldw r18,8(r16)
800777c: 87000017 ldw fp,0(r16)
8007780: 98002126 beq r19,zero,8007808 <__sfvwrite_r+0x348>
8007784: 10002426 beq r2,zero,8007818 <__sfvwrite_r+0x358>
8007788: a805883a mov r2,r21
800778c: 982d883a mov r22,r19
8007790: 14c0012e bgeu r2,r19,8007798 <__sfvwrite_r+0x2d8>
8007794: 102d883a mov r22,r2
8007798: 80800417 ldw r2,16(r16)
800779c: 81c00517 ldw r7,20(r16)
80077a0: 173fe42e bgeu r2,fp,8007734 <__sfvwrite_r+0x274>
80077a4: 3ca5883a add r18,r7,r18
80077a8: 95bfe20e bge r18,r22,8007734 <__sfvwrite_r+0x274>
80077ac: b80b883a mov r5,r23
80077b0: e009883a mov r4,fp
80077b4: 900d883a mov r6,r18
80077b8: 80087b80 call 80087b8 <memmove>
80077bc: 80800017 ldw r2,0(r16)
80077c0: d9000017 ldw r4,0(sp)
80077c4: 800b883a mov r5,r16
80077c8: 1485883a add r2,r2,r18
80077cc: 80800015 stw r2,0(r16)
80077d0: 8006cdc0 call 8006cdc <_fflush_r>
80077d4: 103fdf26 beq r2,zero,8007754 <__sfvwrite_r+0x294>
80077d8: 8080030b ldhu r2,12(r16)
80077dc: 10801014 ori r2,r2,64
80077e0: 8080030d sth r2,12(r16)
80077e4: 00bfffc4 movi r2,-1
80077e8: 003fc606 br 8007704 <__sfvwrite_r+0x244>
80077ec: 0005883a mov r2,zero
80077f0: f800283a ret
80077f4: 0027883a mov r19,zero
80077f8: 002b883a mov r21,zero
80077fc: 0005883a mov r2,zero
8007800: 002f883a mov r23,zero
8007804: 983fdf1e bne r19,zero,8007784 <__sfvwrite_r+0x2c4>
8007808: 8cc00117 ldw r19,4(r17)
800780c: 8dc00017 ldw r23,0(r17)
8007810: 8c400204 addi r17,r17,8
8007814: 983ffc26 beq r19,zero,8007808 <__sfvwrite_r+0x348>
8007818: 980d883a mov r6,r19
800781c: 01400284 movi r5,10
8007820: b809883a mov r4,r23
8007824: 80085d00 call 80085d0 <memchr>
8007828: 10003f26 beq r2,zero,8007928 <__sfvwrite_r+0x468>
800782c: 10800044 addi r2,r2,1
8007830: 15ebc83a sub r21,r2,r23
8007834: 003fd406 br 8007788 <__sfvwrite_r+0x2c8>
8007838: 80800417 ldw r2,16(r16)
800783c: 17001136 bltu r2,fp,8007884 <__sfvwrite_r+0x3c4>
8007840: 84c00517 ldw r19,20(r16)
8007844: bcc00f36 bltu r23,r19,8007884 <__sfvwrite_r+0x3c4>
8007848: d8800117 ldw r2,4(sp)
800784c: 15c0342e bgeu r2,r23,8007920 <__sfvwrite_r+0x460>
8007850: d9000217 ldw r4,8(sp)
8007854: 980b883a mov r5,r19
8007858: 800cf000 call 800cf00 <__divsi3>
800785c: 14cf383a mul r7,r2,r19
8007860: 81400717 ldw r5,28(r16)
8007864: 80800917 ldw r2,36(r16)
8007868: d9000017 ldw r4,0(sp)
800786c: b00d883a mov r6,r22
8007870: 103ee83a callr r2
8007874: 00bfd80e bge zero,r2,80077d8 <__sfvwrite_r+0x318>
8007878: 1027883a mov r19,r2
800787c: bcefc83a sub r23,r23,r19
8007880: 003f9206 br 80076cc <__sfvwrite_r+0x20c>
8007884: 9027883a mov r19,r18
8007888: bc80012e bgeu r23,r18,8007890 <__sfvwrite_r+0x3d0>
800788c: b827883a mov r19,r23
8007890: e009883a mov r4,fp
8007894: 980d883a mov r6,r19
8007898: b00b883a mov r5,r22
800789c: 80087b80 call 80087b8 <memmove>
80078a0: 80800217 ldw r2,8(r16)
80078a4: 81000017 ldw r4,0(r16)
80078a8: 14c5c83a sub r2,r2,r19
80078ac: 24c9883a add r4,r4,r19
80078b0: 80800215 stw r2,8(r16)
80078b4: 81000015 stw r4,0(r16)
80078b8: 103ff01e bne r2,zero,800787c <__sfvwrite_r+0x3bc>
80078bc: d9000017 ldw r4,0(sp)
80078c0: 800b883a mov r5,r16
80078c4: 8006cdc0 call 8006cdc <_fflush_r>
80078c8: 103fec26 beq r2,zero,800787c <__sfvwrite_r+0x3bc>
80078cc: 003fc206 br 80077d8 <__sfvwrite_r+0x318>
80078d0: b825883a mov r18,r23
80078d4: b82b883a mov r21,r23
80078d8: 003f7006 br 800769c <__sfvwrite_r+0x1dc>
80078dc: d9000017 ldw r4,0(sp)
80078e0: 800b883a mov r5,r16
80078e4: 8006cdc0 call 8006cdc <_fflush_r>
80078e8: 103f9d26 beq r2,zero,8007760 <__sfvwrite_r+0x2a0>
80078ec: 003fba06 br 80077d8 <__sfvwrite_r+0x318>
80078f0: b00d883a mov r6,r22
80078f4: b80b883a mov r5,r23
80078f8: e009883a mov r4,fp
80078fc: 80087b80 call 80087b8 <memmove>
8007900: 80c00217 ldw r3,8(r16)
8007904: 80800017 ldw r2,0(r16)
8007908: b025883a mov r18,r22
800790c: 1d87c83a sub r3,r3,r22
8007910: 15ad883a add r22,r2,r22
8007914: 80c00215 stw r3,8(r16)
8007918: 85800015 stw r22,0(r16)
800791c: 003f8d06 br 8007754 <__sfvwrite_r+0x294>
8007920: b809883a mov r4,r23
8007924: 003fcb06 br 8007854 <__sfvwrite_r+0x394>
8007928: 98800044 addi r2,r19,1
800792c: 102b883a mov r21,r2
8007930: 003f9606 br 800778c <__sfvwrite_r+0x2cc>
8007934: d9000017 ldw r4,0(sp)
8007938: 8009abc0 call 8009abc <_realloc_r>
800793c: 100f883a mov r7,r2
8007940: 103f4e1e bne r2,zero,800767c <__sfvwrite_r+0x1bc>
8007944: dc400017 ldw r17,0(sp)
8007948: 81400417 ldw r5,16(r16)
800794c: 8809883a mov r4,r17
8007950: 80071c40 call 80071c4 <_free_r>
8007954: 8080030b ldhu r2,12(r16)
8007958: 00c00304 movi r3,12
800795c: 88c00015 stw r3,0(r17)
8007960: 10bfdfcc andi r2,r2,65407
8007964: 003f9d06 br 80077dc <__sfvwrite_r+0x31c>
8007968: d8c00017 ldw r3,0(sp)
800796c: 00800304 movi r2,12
8007970: 18800015 stw r2,0(r3)
8007974: 8080030b ldhu r2,12(r16)
8007978: 003f9806 br 80077dc <__sfvwrite_r+0x31c>
800797c: 00bfffc4 movi r2,-1
8007980: 003f6006 br 8007704 <__sfvwrite_r+0x244>
08007984 <_fwalk>:
8007984: defffa04 addi sp,sp,-24
8007988: dc800215 stw r18,8(sp)
800798c: dfc00515 stw ra,20(sp)
8007990: dd000415 stw r20,16(sp)
8007994: dcc00315 stw r19,12(sp)
8007998: dc400115 stw r17,4(sp)
800799c: dc000015 stw r16,0(sp)
80079a0: 2480b804 addi r18,r4,736
80079a4: 90001e26 beq r18,zero,8007a20 <_fwalk+0x9c>
80079a8: 2827883a mov r19,r5
80079ac: 0029883a mov r20,zero
80079b0: 94400117 ldw r17,4(r18)
80079b4: 94000217 ldw r16,8(r18)
80079b8: 8c7fffc4 addi r17,r17,-1
80079bc: 88000d16 blt r17,zero,80079f4 <_fwalk+0x70>
80079c0: 8080030b ldhu r2,12(r16)
80079c4: 8c7fffc4 addi r17,r17,-1
80079c8: 108000b0 cmpltui r2,r2,2
80079cc: 1000061e bne r2,zero,80079e8 <_fwalk+0x64>
80079d0: 8080038f ldh r2,14(r16)
80079d4: 8009883a mov r4,r16
80079d8: 10bfffe0 cmpeqi r2,r2,-1
80079dc: 1000021e bne r2,zero,80079e8 <_fwalk+0x64>
80079e0: 983ee83a callr r19
80079e4: a0a8b03a or r20,r20,r2
80079e8: 88bfffd8 cmpnei r2,r17,-1
80079ec: 84001a04 addi r16,r16,104
80079f0: 103ff31e bne r2,zero,80079c0 <_fwalk+0x3c>
80079f4: 94800017 ldw r18,0(r18)
80079f8: 903fed1e bne r18,zero,80079b0 <_fwalk+0x2c>
80079fc: a005883a mov r2,r20
8007a00: dfc00517 ldw ra,20(sp)
8007a04: dd000417 ldw r20,16(sp)
8007a08: dcc00317 ldw r19,12(sp)
8007a0c: dc800217 ldw r18,8(sp)
8007a10: dc400117 ldw r17,4(sp)
8007a14: dc000017 ldw r16,0(sp)
8007a18: dec00604 addi sp,sp,24
8007a1c: f800283a ret
8007a20: 0029883a mov r20,zero
8007a24: 003ff506 br 80079fc <_fwalk+0x78>
08007a28 <_fwalk_reent>:
8007a28: defff904 addi sp,sp,-28
8007a2c: dc800215 stw r18,8(sp)
8007a30: dfc00615 stw ra,24(sp)
8007a34: dd400515 stw r21,20(sp)
8007a38: dd000415 stw r20,16(sp)
8007a3c: dcc00315 stw r19,12(sp)
8007a40: dc400115 stw r17,4(sp)
8007a44: dc000015 stw r16,0(sp)
8007a48: 2480b804 addi r18,r4,736
8007a4c: 90002126 beq r18,zero,8007ad4 <_fwalk_reent+0xac>
8007a50: 2829883a mov r20,r5
8007a54: 2027883a mov r19,r4
8007a58: 002b883a mov r21,zero
8007a5c: 94400117 ldw r17,4(r18)
8007a60: 94000217 ldw r16,8(r18)
8007a64: 8c7fffc4 addi r17,r17,-1
8007a68: 88000e16 blt r17,zero,8007aa4 <_fwalk_reent+0x7c>
8007a6c: 8080030b ldhu r2,12(r16)
8007a70: 8c7fffc4 addi r17,r17,-1
8007a74: 108000b0 cmpltui r2,r2,2
8007a78: 1000071e bne r2,zero,8007a98 <_fwalk_reent+0x70>
8007a7c: 8080038f ldh r2,14(r16)
8007a80: 800b883a mov r5,r16
8007a84: 9809883a mov r4,r19
8007a88: 10bfffe0 cmpeqi r2,r2,-1
8007a8c: 1000021e bne r2,zero,8007a98 <_fwalk_reent+0x70>
8007a90: a03ee83a callr r20
8007a94: a8aab03a or r21,r21,r2
8007a98: 88bfffd8 cmpnei r2,r17,-1
8007a9c: 84001a04 addi r16,r16,104
8007aa0: 103ff21e bne r2,zero,8007a6c <_fwalk_reent+0x44>
8007aa4: 94800017 ldw r18,0(r18)
8007aa8: 903fec1e bne r18,zero,8007a5c <_fwalk_reent+0x34>
8007aac: a805883a mov r2,r21
8007ab0: dfc00617 ldw ra,24(sp)
8007ab4: dd400517 ldw r21,20(sp)
8007ab8: dd000417 ldw r20,16(sp)
8007abc: dcc00317 ldw r19,12(sp)
8007ac0: dc800217 ldw r18,8(sp)
8007ac4: dc400117 ldw r17,4(sp)
8007ac8: dc000017 ldw r16,0(sp)
8007acc: dec00704 addi sp,sp,28
8007ad0: f800283a ret
8007ad4: 002b883a mov r21,zero
8007ad8: 003ff406 br 8007aac <_fwalk_reent+0x84>
08007adc <_getc_r>:
8007adc: defffd04 addi sp,sp,-12
8007ae0: dc000115 stw r16,4(sp)
8007ae4: dfc00215 stw ra,8(sp)
8007ae8: 2021883a mov r16,r4
8007aec: 20000226 beq r4,zero,8007af8 <_getc_r+0x1c>
8007af0: 20800e17 ldw r2,56(r4)
8007af4: 10000c26 beq r2,zero,8007b28 <_getc_r+0x4c>
8007af8: 28800117 ldw r2,4(r5)
8007afc: 10bfffc4 addi r2,r2,-1
8007b00: 28800115 stw r2,4(r5)
8007b04: 10000f16 blt r2,zero,8007b44 <_getc_r+0x68>
8007b08: 28800017 ldw r2,0(r5)
8007b0c: 10c00044 addi r3,r2,1
8007b10: 28c00015 stw r3,0(r5)
8007b14: 10800003 ldbu r2,0(r2)
8007b18: dfc00217 ldw ra,8(sp)
8007b1c: dc000117 ldw r16,4(sp)
8007b20: dec00304 addi sp,sp,12
8007b24: f800283a ret
8007b28: d9400015 stw r5,0(sp)
8007b2c: 80070600 call 8007060 <__sinit>
8007b30: d9400017 ldw r5,0(sp)
8007b34: 28800117 ldw r2,4(r5)
8007b38: 10bfffc4 addi r2,r2,-1
8007b3c: 28800115 stw r2,4(r5)
8007b40: 103ff10e bge r2,zero,8007b08 <_getc_r+0x2c>
8007b44: 8009883a mov r4,r16
8007b48: dfc00217 ldw ra,8(sp)
8007b4c: dc000117 ldw r16,4(sp)
8007b50: dec00304 addi sp,sp,12
8007b54: 800a0e81 jmpi 800a0e8 <__srget_r>
08007b58 <getc>:
8007b58: defffd04 addi sp,sp,-12
8007b5c: 00820174 movhi r2,2053
8007b60: dc400115 stw r17,4(sp)
8007b64: 1472af17 ldw r17,-13636(r2)
8007b68: dc000015 stw r16,0(sp)
8007b6c: dfc00215 stw ra,8(sp)
8007b70: 2021883a mov r16,r4
8007b74: 88000226 beq r17,zero,8007b80 <getc+0x28>
8007b78: 88800e17 ldw r2,56(r17)
8007b7c: 10000d26 beq r2,zero,8007bb4 <getc+0x5c>
8007b80: 80800117 ldw r2,4(r16)
8007b84: 10bfffc4 addi r2,r2,-1
8007b88: 80800115 stw r2,4(r16)
8007b8c: 10000f16 blt r2,zero,8007bcc <getc+0x74>
8007b90: 80800017 ldw r2,0(r16)
8007b94: 10c00044 addi r3,r2,1
8007b98: 80c00015 stw r3,0(r16)
8007b9c: 10800003 ldbu r2,0(r2)
8007ba0: dfc00217 ldw ra,8(sp)
8007ba4: dc400117 ldw r17,4(sp)
8007ba8: dc000017 ldw r16,0(sp)
8007bac: dec00304 addi sp,sp,12
8007bb0: f800283a ret
8007bb4: 8809883a mov r4,r17
8007bb8: 80070600 call 8007060 <__sinit>
8007bbc: 80800117 ldw r2,4(r16)
8007bc0: 10bfffc4 addi r2,r2,-1
8007bc4: 80800115 stw r2,4(r16)
8007bc8: 103ff10e bge r2,zero,8007b90 <getc+0x38>
8007bcc: 800b883a mov r5,r16
8007bd0: 8809883a mov r4,r17
8007bd4: dfc00217 ldw ra,8(sp)
8007bd8: dc400117 ldw r17,4(sp)
8007bdc: dc000017 ldw r16,0(sp)
8007be0: dec00304 addi sp,sp,12
8007be4: 800a0e81 jmpi 800a0e8 <__srget_r>
08007be8 <__localeconv_l>:
8007be8: 20803c04 addi r2,r4,240
8007bec: f800283a ret
08007bf0 <_localeconv_r>:
8007bf0: 00820174 movhi r2,2053
8007bf4: 10b0e704 addi r2,r2,-15460
8007bf8: f800283a ret
08007bfc <localeconv>:
8007bfc: 00820174 movhi r2,2053
8007c00: 10b0e704 addi r2,r2,-15460
8007c04: f800283a ret
08007c08 <__swhatbuf_r>:
8007c08: deffea04 addi sp,sp,-88
8007c0c: dc001215 stw r16,72(sp)
8007c10: 2821883a mov r16,r5
8007c14: 2940038f ldh r5,14(r5)
8007c18: dc801415 stw r18,80(sp)
8007c1c: dc401315 stw r17,76(sp)
8007c20: dfc01515 stw ra,84(sp)
8007c24: 3023883a mov r17,r6
8007c28: 3825883a mov r18,r7
8007c2c: 28001016 blt r5,zero,8007c70 <__swhatbuf_r+0x68>
8007c30: d80d883a mov r6,sp
8007c34: 800bddc0 call 800bddc <_fstat_r>
8007c38: 10000d16 blt r2,zero,8007c70 <__swhatbuf_r+0x68>
8007c3c: d8c00117 ldw r3,4(sp)
8007c40: 00820004 movi r2,2048
8007c44: 18fc000c andi r3,r3,61440
8007c48: 18c80020 cmpeqi r3,r3,8192
8007c4c: 90c00015 stw r3,0(r18)
8007c50: 00c10004 movi r3,1024
8007c54: 88c00015 stw r3,0(r17)
8007c58: dfc01517 ldw ra,84(sp)
8007c5c: dc801417 ldw r18,80(sp)
8007c60: dc401317 ldw r17,76(sp)
8007c64: dc001217 ldw r16,72(sp)
8007c68: dec01604 addi sp,sp,88
8007c6c: f800283a ret
8007c70: 8080030b ldhu r2,12(r16)
8007c74: 90000015 stw zero,0(r18)
8007c78: 1080200c andi r2,r2,128
8007c7c: 10000426 beq r2,zero,8007c90 <__swhatbuf_r+0x88>
8007c80: 00801004 movi r2,64
8007c84: 88800015 stw r2,0(r17)
8007c88: 0005883a mov r2,zero
8007c8c: 003ff206 br 8007c58 <__swhatbuf_r+0x50>
8007c90: 00810004 movi r2,1024
8007c94: 88800015 stw r2,0(r17)
8007c98: 0005883a mov r2,zero
8007c9c: 003fee06 br 8007c58 <__swhatbuf_r+0x50>
08007ca0 <__smakebuf_r>:
8007ca0: 28c0030b ldhu r3,12(r5)
8007ca4: defffa04 addi sp,sp,-24
8007ca8: dc000215 stw r16,8(sp)
8007cac: dfc00515 stw ra,20(sp)
8007cb0: dc800415 stw r18,16(sp)
8007cb4: dc400315 stw r17,12(sp)
8007cb8: 18c0008c andi r3,r3,2
8007cbc: 2821883a mov r16,r5
8007cc0: 18000b26 beq r3,zero,8007cf0 <__smakebuf_r+0x50>
8007cc4: 28c010c4 addi r3,r5,67
8007cc8: 28c00015 stw r3,0(r5)
8007ccc: 28c00415 stw r3,16(r5)
8007cd0: 00c00044 movi r3,1
8007cd4: 28c00515 stw r3,20(r5)
8007cd8: dfc00517 ldw ra,20(sp)
8007cdc: dc800417 ldw r18,16(sp)
8007ce0: dc400317 ldw r17,12(sp)
8007ce4: dc000217 ldw r16,8(sp)
8007ce8: dec00604 addi sp,sp,24
8007cec: f800283a ret
8007cf0: d9c00104 addi r7,sp,4
8007cf4: d80d883a mov r6,sp
8007cf8: 2023883a mov r17,r4
8007cfc: 8007c080 call 8007c08 <__swhatbuf_r>
8007d00: 1025883a mov r18,r2
8007d04: d8800117 ldw r2,4(sp)
8007d08: 1000131e bne r2,zero,8007d58 <__smakebuf_r+0xb8>
8007d0c: d9400017 ldw r5,0(sp)
8007d10: 8809883a mov r4,r17
8007d14: 8007ddc0 call 8007ddc <_malloc_r>
8007d18: 10001c26 beq r2,zero,8007d8c <__smakebuf_r+0xec>
8007d1c: 01020034 movhi r4,2048
8007d20: 211b5b04 addi r4,r4,28012
8007d24: 80c0030b ldhu r3,12(r16)
8007d28: 89000f15 stw r4,60(r17)
8007d2c: 80800015 stw r2,0(r16)
8007d30: 80800415 stw r2,16(r16)
8007d34: d8800017 ldw r2,0(sp)
8007d38: d9400117 ldw r5,4(sp)
8007d3c: 18c02014 ori r3,r3,128
8007d40: 80c0030d sth r3,12(r16)
8007d44: 80800515 stw r2,20(r16)
8007d48: 28001c1e bne r5,zero,8007dbc <__smakebuf_r+0x11c>
8007d4c: 90c6b03a or r3,r18,r3
8007d50: 80c0030d sth r3,12(r16)
8007d54: 003fe006 br 8007cd8 <__smakebuf_r+0x38>
8007d58: 8140038f ldh r5,14(r16)
8007d5c: 8809883a mov r4,r17
8007d60: 800be3c0 call 800be3c <_isatty_r>
8007d64: 103fe926 beq r2,zero,8007d0c <__smakebuf_r+0x6c>
8007d68: 8080030b ldhu r2,12(r16)
8007d6c: 80c010c4 addi r3,r16,67
8007d70: 80c00015 stw r3,0(r16)
8007d74: 10800054 ori r2,r2,1
8007d78: 8080030d sth r2,12(r16)
8007d7c: 00800044 movi r2,1
8007d80: 80c00415 stw r3,16(r16)
8007d84: 80800515 stw r2,20(r16)
8007d88: 003fe006 br 8007d0c <__smakebuf_r+0x6c>
8007d8c: 8080030b ldhu r2,12(r16)
8007d90: 10c0800c andi r3,r2,512
8007d94: 183fd01e bne r3,zero,8007cd8 <__smakebuf_r+0x38>
8007d98: 10bfff0c andi r2,r2,65532
8007d9c: 10800094 ori r2,r2,2
8007da0: 80c010c4 addi r3,r16,67
8007da4: 8080030d sth r2,12(r16)
8007da8: 00800044 movi r2,1
8007dac: 80c00015 stw r3,0(r16)
8007db0: 80c00415 stw r3,16(r16)
8007db4: 80800515 stw r2,20(r16)
8007db8: 003fc706 br 8007cd8 <__smakebuf_r+0x38>
8007dbc: 8140038f ldh r5,14(r16)
8007dc0: 8809883a mov r4,r17
8007dc4: 800be3c0 call 800be3c <_isatty_r>
8007dc8: 80c0030b ldhu r3,12(r16)
8007dcc: 103fdf26 beq r2,zero,8007d4c <__smakebuf_r+0xac>
8007dd0: 18ffff0c andi r3,r3,65532
8007dd4: 18c00054 ori r3,r3,1
8007dd8: 003fdc06 br 8007d4c <__smakebuf_r+0xac>
08007ddc <_malloc_r>:
8007ddc: defff604 addi sp,sp,-40
8007de0: dc400115 stw r17,4(sp)
8007de4: 2c4002c4 addi r17,r5,11
8007de8: dc800215 stw r18,8(sp)
8007dec: dfc00915 stw ra,36(sp)
8007df0: df000815 stw fp,32(sp)
8007df4: ddc00715 stw r23,28(sp)
8007df8: dd800615 stw r22,24(sp)
8007dfc: dd400515 stw r21,20(sp)
8007e00: dd000415 stw r20,16(sp)
8007e04: dcc00315 stw r19,12(sp)
8007e08: dc000015 stw r16,0(sp)
8007e0c: 888005e8 cmpgeui r2,r17,23
8007e10: 2025883a mov r18,r4
8007e14: 10001b1e bne r2,zero,8007e84 <_malloc_r+0xa8>
8007e18: 29400468 cmpgeui r5,r5,17
8007e1c: 2800951e bne r5,zero,8008074 <_malloc_r+0x298>
8007e20: 800fe0c0 call 800fe0c <__malloc_lock>
8007e24: 04400404 movi r17,16
8007e28: 00800604 movi r2,24
8007e2c: 01800084 movi r6,2
8007e30: 04c20174 movhi r19,2053
8007e34: 9cefa904 addi r19,r19,-16732
8007e38: 9885883a add r2,r19,r2
8007e3c: 14000117 ldw r16,4(r2)
8007e40: 10fffe04 addi r3,r2,-8
8007e44: 80c09e26 beq r16,r3,80080c0 <_malloc_r+0x2e4>
8007e48: 80800117 ldw r2,4(r16)
8007e4c: 81000317 ldw r4,12(r16)
8007e50: 00ffff04 movi r3,-4
8007e54: 10c4703a and r2,r2,r3
8007e58: 81400217 ldw r5,8(r16)
8007e5c: 8085883a add r2,r16,r2
8007e60: 10c00117 ldw r3,4(r2)
8007e64: 29000315 stw r4,12(r5)
8007e68: 21400215 stw r5,8(r4)
8007e6c: 18c00054 ori r3,r3,1
8007e70: 10c00115 stw r3,4(r2)
8007e74: 9009883a mov r4,r18
8007e78: 800ff2c0 call 800ff2c <__malloc_unlock>
8007e7c: 80800204 addi r2,r16,8
8007e80: 00007f06 br 8008080 <_malloc_r+0x2a4>
8007e84: 00bffe04 movi r2,-8
8007e88: 88a2703a and r17,r17,r2
8007e8c: 88007916 blt r17,zero,8008074 <_malloc_r+0x298>
8007e90: 89407836 bltu r17,r5,8008074 <_malloc_r+0x298>
8007e94: 800fe0c0 call 800fe0c <__malloc_lock>
8007e98: 88807e28 cmpgeui r2,r17,504
8007e9c: 10013326 beq r2,zero,800836c <_malloc_r+0x590>
8007ea0: 8804d27a srli r2,r17,9
8007ea4: 10008226 beq r2,zero,80080b0 <_malloc_r+0x2d4>
8007ea8: 10c00168 cmpgeui r3,r2,5
8007eac: 1801151e bne r3,zero,8008304 <_malloc_r+0x528>
8007eb0: 8804d1ba srli r2,r17,6
8007eb4: 11800e44 addi r6,r2,57
8007eb8: 300a90fa slli r5,r6,3
8007ebc: 12000e04 addi r8,r2,56
8007ec0: 04c20174 movhi r19,2053
8007ec4: 9cefa904 addi r19,r19,-16732
8007ec8: 994b883a add r5,r19,r5
8007ecc: 2c000117 ldw r16,4(r5)
8007ed0: 297ffe04 addi r5,r5,-8
8007ed4: 2c001126 beq r5,r16,8007f1c <_malloc_r+0x140>
8007ed8: 80800117 ldw r2,4(r16)
8007edc: 00ffff04 movi r3,-4
8007ee0: 10c4703a and r2,r2,r3
8007ee4: 1447c83a sub r3,r2,r17
8007ee8: 19000408 cmpgei r4,r3,16
8007eec: 2000e81e bne r4,zero,8008290 <_malloc_r+0x4b4>
8007ef0: 1800e90e bge r3,zero,8008298 <_malloc_r+0x4bc>
8007ef4: 01ffff04 movi r7,-4
8007ef8: 00000606 br 8007f14 <_malloc_r+0x138>
8007efc: 80800117 ldw r2,4(r16)
8007f00: 11c4703a and r2,r2,r7
8007f04: 1447c83a sub r3,r2,r17
8007f08: 19000408 cmpgei r4,r3,16
8007f0c: 2000e01e bne r4,zero,8008290 <_malloc_r+0x4b4>
8007f10: 1800e10e bge r3,zero,8008298 <_malloc_r+0x4bc>
8007f14: 84000317 ldw r16,12(r16)
8007f18: 2c3ff81e bne r5,r16,8007efc <_malloc_r+0x120>
8007f1c: 9c000417 ldw r16,16(r19)
8007f20: 02020174 movhi r8,2053
8007f24: 422fab04 addi r8,r8,-16724
8007f28: 82006c26 beq r16,r8,80080dc <_malloc_r+0x300>
8007f2c: 80c00117 ldw r3,4(r16)
8007f30: 00bfff04 movi r2,-4
8007f34: 1884703a and r2,r3,r2
8007f38: 1447c83a sub r3,r2,r17
8007f3c: 19000410 cmplti r4,r3,16
8007f40: 20011526 beq r4,zero,8008398 <_malloc_r+0x5bc>
8007f44: 9a000515 stw r8,20(r19)
8007f48: 9a000415 stw r8,16(r19)
8007f4c: 18010a0e bge r3,zero,8008378 <_malloc_r+0x59c>
8007f50: 10c08028 cmpgeui r3,r2,512
8007f54: 1800d21e bne r3,zero,80082a0 <_malloc_r+0x4c4>
8007f58: 1004d0fa srli r2,r2,3
8007f5c: 99400117 ldw r5,4(r19)
8007f60: 10c00044 addi r3,r2,1
8007f64: 1009d0ba srai r4,r2,2
8007f68: 180690fa slli r3,r3,3
8007f6c: 00800044 movi r2,1
8007f70: 1104983a sll r2,r2,r4
8007f74: 98c7883a add r3,r19,r3
8007f78: 19000017 ldw r4,0(r3)
8007f7c: 1144b03a or r2,r2,r5
8007f80: 197ffe04 addi r5,r3,-8
8007f84: 81400315 stw r5,12(r16)
8007f88: 81000215 stw r4,8(r16)
8007f8c: 98800115 stw r2,4(r19)
8007f90: 1c000015 stw r16,0(r3)
8007f94: 24000315 stw r16,12(r4)
8007f98: 3007d0ba srai r3,r6,2
8007f9c: 01000044 movi r4,1
8007fa0: 20c8983a sll r4,r4,r3
8007fa4: 11005236 bltu r2,r4,80080f0 <_malloc_r+0x314>
8007fa8: 2086703a and r3,r4,r2
8007fac: 18000a1e bne r3,zero,8007fd8 <_malloc_r+0x1fc>
8007fb0: 00ffff04 movi r3,-4
8007fb4: 2109883a add r4,r4,r4
8007fb8: 30cc703a and r6,r6,r3
8007fbc: 2086703a and r3,r4,r2
8007fc0: 31800104 addi r6,r6,4
8007fc4: 1800041e bne r3,zero,8007fd8 <_malloc_r+0x1fc>
8007fc8: 2109883a add r4,r4,r4
8007fcc: 2086703a and r3,r4,r2
8007fd0: 31800104 addi r6,r6,4
8007fd4: 183ffc26 beq r3,zero,8007fc8 <_malloc_r+0x1ec>
8007fd8: 027fff04 movi r9,-4
8007fdc: 301490fa slli r10,r6,3
8007fe0: 3017883a mov r11,r6
8007fe4: 9a95883a add r10,r19,r10
8007fe8: 500f883a mov r7,r10
8007fec: 3c000317 ldw r16,12(r7)
8007ff0: 3c00cd26 beq r7,r16,8008328 <_malloc_r+0x54c>
8007ff4: 80800117 ldw r2,4(r16)
8007ff8: 1244703a and r2,r2,r9
8007ffc: 1447c83a sub r3,r2,r17
8008000: 19400408 cmpgei r5,r3,16
8008004: 2800081e bne r5,zero,8008028 <_malloc_r+0x24c>
8008008: 1800cc0e bge r3,zero,800833c <_malloc_r+0x560>
800800c: 84000317 ldw r16,12(r16)
8008010: 3c00c526 beq r7,r16,8008328 <_malloc_r+0x54c>
8008014: 80800117 ldw r2,4(r16)
8008018: 1244703a and r2,r2,r9
800801c: 1447c83a sub r3,r2,r17
8008020: 19400410 cmplti r5,r3,16
8008024: 283ff81e bne r5,zero,8008008 <_malloc_r+0x22c>
8008028: 81000317 ldw r4,12(r16)
800802c: 81400217 ldw r5,8(r16)
8008030: 89800054 ori r6,r17,1
8008034: 81800115 stw r6,4(r16)
8008038: 29000315 stw r4,12(r5)
800803c: 21400215 stw r5,8(r4)
8008040: 8463883a add r17,r16,r17
8008044: 9c400515 stw r17,20(r19)
8008048: 9c400415 stw r17,16(r19)
800804c: 19000054 ori r4,r3,1
8008050: 89000115 stw r4,4(r17)
8008054: 8085883a add r2,r16,r2
8008058: 8a000315 stw r8,12(r17)
800805c: 8a000215 stw r8,8(r17)
8008060: 10c00015 stw r3,0(r2)
8008064: 9009883a mov r4,r18
8008068: 800ff2c0 call 800ff2c <__malloc_unlock>
800806c: 80800204 addi r2,r16,8
8008070: 00000306 br 8008080 <_malloc_r+0x2a4>
8008074: 00800304 movi r2,12
8008078: 90800015 stw r2,0(r18)
800807c: 0005883a mov r2,zero
8008080: dfc00917 ldw ra,36(sp)
8008084: df000817 ldw fp,32(sp)
8008088: ddc00717 ldw r23,28(sp)
800808c: dd800617 ldw r22,24(sp)
8008090: dd400517 ldw r21,20(sp)
8008094: dd000417 ldw r20,16(sp)
8008098: dcc00317 ldw r19,12(sp)
800809c: dc800217 ldw r18,8(sp)
80080a0: dc400117 ldw r17,4(sp)
80080a4: dc000017 ldw r16,0(sp)
80080a8: dec00a04 addi sp,sp,40
80080ac: f800283a ret
80080b0: 01408004 movi r5,512
80080b4: 01801004 movi r6,64
80080b8: 02000fc4 movi r8,63
80080bc: 003f8006 br 8007ec0 <_malloc_r+0xe4>
80080c0: 14000317 ldw r16,12(r2)
80080c4: 31800084 addi r6,r6,2
80080c8: 143f5f1e bne r2,r16,8007e48 <_malloc_r+0x6c>
80080cc: 9c000417 ldw r16,16(r19)
80080d0: 02020174 movhi r8,2053
80080d4: 422fab04 addi r8,r8,-16724
80080d8: 823f941e bne r16,r8,8007f2c <_malloc_r+0x150>
80080dc: 3007d0ba srai r3,r6,2
80080e0: 01000044 movi r4,1
80080e4: 98800117 ldw r2,4(r19)
80080e8: 20c8983a sll r4,r4,r3
80080ec: 113fae2e bgeu r2,r4,8007fa8 <_malloc_r+0x1cc>
80080f0: 9c000217 ldw r16,8(r19)
80080f4: 00bfff04 movi r2,-4
80080f8: 85000117 ldw r20,4(r16)
80080fc: a0ac703a and r22,r20,r2
8008100: b4400336 bltu r22,r17,8008110 <_malloc_r+0x334>
8008104: b445c83a sub r2,r22,r17
8008108: 10c00408 cmpgei r3,r2,16
800810c: 1800561e bne r3,zero,8008268 <_malloc_r+0x48c>
8008110: 00820174 movhi r2,2053
8008114: 10b2b017 ldw r2,-13632(r2)
8008118: 00c20174 movhi r3,2053
800811c: 1d32ef17 ldw r20,-13380(r3)
8008120: 10bfffd8 cmpnei r2,r2,-1
8008124: 85ab883a add r21,r16,r22
8008128: 8d29883a add r20,r17,r20
800812c: 1000c826 beq r2,zero,8008450 <_malloc_r+0x674>
8008130: a50403c4 addi r20,r20,4111
8008134: 00bc0004 movi r2,-4096
8008138: a0a8703a and r20,r20,r2
800813c: a00b883a mov r5,r20
8008140: 9009883a mov r4,r18
8008144: 800a16c0 call 800a16c <_sbrk_r>
8008148: 102f883a mov r23,r2
800814c: 10bfffd8 cmpnei r2,r2,-1
8008150: 10009a26 beq r2,zero,80083bc <_malloc_r+0x5e0>
8008154: bd409836 bltu r23,r21,80083b8 <_malloc_r+0x5dc>
8008158: 00820174 movhi r2,2053
800815c: 10b36417 ldw r2,-12912(r2)
8008160: 00c20174 movhi r3,2053
8008164: a085883a add r2,r20,r2
8008168: 18b36415 stw r2,-12912(r3)
800816c: 1007883a mov r3,r2
8008170: adc0dd26 beq r21,r23,80084e8 <_malloc_r+0x70c>
8008174: 00820174 movhi r2,2053
8008178: 10b2b017 ldw r2,-13632(r2)
800817c: 10bfffd8 cmpnei r2,r2,-1
8008180: 1000e026 beq r2,zero,8008504 <_malloc_r+0x728>
8008184: bd6bc83a sub r21,r23,r21
8008188: a8c7883a add r3,r21,r3
800818c: 00820174 movhi r2,2053
8008190: 10f36415 stw r3,-12912(r2)
8008194: bf0001cc andi fp,r23,7
8008198: e000b626 beq fp,zero,8008474 <_malloc_r+0x698>
800819c: bf2fc83a sub r23,r23,fp
80081a0: bdc00204 addi r23,r23,8
80081a4: 00840204 movi r2,4104
80081a8: 1705c83a sub r2,r2,fp
80081ac: bd29883a add r20,r23,r20
80081b0: 1505c83a sub r2,r2,r20
80081b4: 1543ffcc andi r21,r2,4095
80081b8: a80b883a mov r5,r21
80081bc: 9009883a mov r4,r18
80081c0: 800a16c0 call 800a16c <_sbrk_r>
80081c4: 10ffffe0 cmpeqi r3,r2,-1
80081c8: 1800e41e bne r3,zero,800855c <_malloc_r+0x780>
80081cc: 15c5c83a sub r2,r2,r23
80081d0: 1569883a add r20,r2,r21
80081d4: 00820174 movhi r2,2053
80081d8: 10b36417 ldw r2,-12912(r2)
80081dc: 9dc00215 stw r23,8(r19)
80081e0: a5000054 ori r20,r20,1
80081e4: a885883a add r2,r21,r2
80081e8: 00c20174 movhi r3,2053
80081ec: 18b36415 stw r2,-12912(r3)
80081f0: bd000115 stw r20,4(r23)
80081f4: 84c0c626 beq r16,r19,8008510 <_malloc_r+0x734>
80081f8: b0c00428 cmpgeui r3,r22,16
80081fc: 1800c626 beq r3,zero,8008518 <_malloc_r+0x73c>
8008200: 81000117 ldw r4,4(r16)
8008204: 017ffe04 movi r5,-8
8008208: b0fffd04 addi r3,r22,-12
800820c: 1946703a and r3,r3,r5
8008210: 2100004c andi r4,r4,1
8008214: 20c8b03a or r4,r4,r3
8008218: 81000115 stw r4,4(r16)
800821c: 01400144 movi r5,5
8008220: 80c9883a add r4,r16,r3
8008224: 21400115 stw r5,4(r4)
8008228: 21400215 stw r5,8(r4)
800822c: 18c00428 cmpgeui r3,r3,16
8008230: 1800cf1e bne r3,zero,8008570 <_malloc_r+0x794>
8008234: bd000117 ldw r20,4(r23)
8008238: b821883a mov r16,r23
800823c: 00c20174 movhi r3,2053
8008240: 18f2ee17 ldw r3,-13384(r3)
8008244: 1880022e bgeu r3,r2,8008250 <_malloc_r+0x474>
8008248: 00c20174 movhi r3,2053
800824c: 18b2ee15 stw r2,-13384(r3)
8008250: 00c20174 movhi r3,2053
8008254: 18f2ed17 ldw r3,-13388(r3)
8008258: 18805a2e bgeu r3,r2,80083c4 <_malloc_r+0x5e8>
800825c: 00c20174 movhi r3,2053
8008260: 18b2ed15 stw r2,-13388(r3)
8008264: 00005706 br 80083c4 <_malloc_r+0x5e8>
8008268: 88c00054 ori r3,r17,1
800826c: 80c00115 stw r3,4(r16)
8008270: 8463883a add r17,r16,r17
8008274: 10800054 ori r2,r2,1
8008278: 9c400215 stw r17,8(r19)
800827c: 88800115 stw r2,4(r17)
8008280: 9009883a mov r4,r18
8008284: 800ff2c0 call 800ff2c <__malloc_unlock>
8008288: 80800204 addi r2,r16,8
800828c: 003f7c06 br 8008080 <_malloc_r+0x2a4>
8008290: 400d883a mov r6,r8
8008294: 003f2106 br 8007f1c <_malloc_r+0x140>
8008298: 81000317 ldw r4,12(r16)
800829c: 003eee06 br 8007e58 <_malloc_r+0x7c>
80082a0: 1006d27a srli r3,r2,9
80082a4: 19000168 cmpgeui r4,r3,5
80082a8: 20003e26 beq r4,zero,80083a4 <_malloc_r+0x5c8>
80082ac: 19000568 cmpgeui r4,r3,21
80082b0: 20007a1e bne r4,zero,800849c <_malloc_r+0x6c0>
80082b4: 19401704 addi r5,r3,92
80082b8: 280a90fa slli r5,r5,3
80082bc: 190016c4 addi r4,r3,91
80082c0: 994b883a add r5,r19,r5
80082c4: 28c00017 ldw r3,0(r5)
80082c8: 297ffe04 addi r5,r5,-8
80082cc: 28c06226 beq r5,r3,8008458 <_malloc_r+0x67c>
80082d0: 01ffff04 movi r7,-4
80082d4: 19000117 ldw r4,4(r3)
80082d8: 21c8703a and r4,r4,r7
80082dc: 1100022e bgeu r2,r4,80082e8 <_malloc_r+0x50c>
80082e0: 18c00217 ldw r3,8(r3)
80082e4: 28fffb1e bne r5,r3,80082d4 <_malloc_r+0x4f8>
80082e8: 19400317 ldw r5,12(r3)
80082ec: 98800117 ldw r2,4(r19)
80082f0: 81400315 stw r5,12(r16)
80082f4: 80c00215 stw r3,8(r16)
80082f8: 2c000215 stw r16,8(r5)
80082fc: 1c000315 stw r16,12(r3)
8008300: 003f2506 br 8007f98 <_malloc_r+0x1bc>
8008304: 10c00568 cmpgeui r3,r2,21
8008308: 18003826 beq r3,zero,80083ec <_malloc_r+0x610>
800830c: 10c01568 cmpgeui r3,r2,85
8008310: 1800691e bne r3,zero,80084b8 <_malloc_r+0x6dc>
8008314: 8804d33a srli r2,r17,12
8008318: 11801bc4 addi r6,r2,111
800831c: 12001b84 addi r8,r2,110
8008320: 300a90fa slli r5,r6,3
8008324: 003ee606 br 8007ec0 <_malloc_r+0xe4>
8008328: 5ac00044 addi r11,r11,1
800832c: 588000cc andi r2,r11,3
8008330: 39c00204 addi r7,r7,8
8008334: 103f2d1e bne r2,zero,8007fec <_malloc_r+0x210>
8008338: 00003306 br 8008408 <_malloc_r+0x62c>
800833c: 8085883a add r2,r16,r2
8008340: 10c00117 ldw r3,4(r2)
8008344: 81000317 ldw r4,12(r16)
8008348: 81400217 ldw r5,8(r16)
800834c: 18c00054 ori r3,r3,1
8008350: 10c00115 stw r3,4(r2)
8008354: 29000315 stw r4,12(r5)
8008358: 21400215 stw r5,8(r4)
800835c: 9009883a mov r4,r18
8008360: 800ff2c0 call 800ff2c <__malloc_unlock>
8008364: 80800204 addi r2,r16,8
8008368: 003f4506 br 8008080 <_malloc_r+0x2a4>
800836c: 880cd0fa srli r6,r17,3
8008370: 88800204 addi r2,r17,8
8008374: 003eae06 br 8007e30 <_malloc_r+0x54>
8008378: 8085883a add r2,r16,r2
800837c: 10c00117 ldw r3,4(r2)
8008380: 9009883a mov r4,r18
8008384: 18c00054 ori r3,r3,1
8008388: 10c00115 stw r3,4(r2)
800838c: 800ff2c0 call 800ff2c <__malloc_unlock>
8008390: 80800204 addi r2,r16,8
8008394: 003f3a06 br 8008080 <_malloc_r+0x2a4>
8008398: 89000054 ori r4,r17,1
800839c: 81000115 stw r4,4(r16)
80083a0: 003f2706 br 8008040 <_malloc_r+0x264>
80083a4: 1006d1ba srli r3,r2,6
80083a8: 19400e44 addi r5,r3,57
80083ac: 19000e04 addi r4,r3,56
80083b0: 280a90fa slli r5,r5,3
80083b4: 003fc206 br 80082c0 <_malloc_r+0x4e4>
80083b8: 84c04626 beq r16,r19,80084d4 <_malloc_r+0x6f8>
80083bc: 9c000217 ldw r16,8(r19)
80083c0: 85000117 ldw r20,4(r16)
80083c4: 00bfff04 movi r2,-4
80083c8: a0a8703a and r20,r20,r2
80083cc: a445c83a sub r2,r20,r17
80083d0: a4400236 bltu r20,r17,80083dc <_malloc_r+0x600>
80083d4: 10c00408 cmpgei r3,r2,16
80083d8: 183fa31e bne r3,zero,8008268 <_malloc_r+0x48c>
80083dc: 9009883a mov r4,r18
80083e0: 800ff2c0 call 800ff2c <__malloc_unlock>
80083e4: 0005883a mov r2,zero
80083e8: 003f2506 br 8008080 <_malloc_r+0x2a4>
80083ec: 11801704 addi r6,r2,92
80083f0: 120016c4 addi r8,r2,91
80083f4: 300a90fa slli r5,r6,3
80083f8: 003eb106 br 8007ec0 <_malloc_r+0xe4>
80083fc: 50800217 ldw r2,8(r10)
8008400: 31bfffc4 addi r6,r6,-1
8008404: 1280701e bne r2,r10,80085c8 <_malloc_r+0x7ec>
8008408: 308000cc andi r2,r6,3
800840c: 52bffe04 addi r10,r10,-8
8008410: 103ffa1e bne r2,zero,80083fc <_malloc_r+0x620>
8008414: 98c00117 ldw r3,4(r19)
8008418: 0104303a nor r2,zero,r4
800841c: 10c4703a and r2,r2,r3
8008420: 98800115 stw r2,4(r19)
8008424: 2109883a add r4,r4,r4
8008428: 113f3136 bltu r2,r4,80080f0 <_malloc_r+0x314>
800842c: 203f3026 beq r4,zero,80080f0 <_malloc_r+0x314>
8008430: 2086703a and r3,r4,r2
8008434: 1800041e bne r3,zero,8008448 <_malloc_r+0x66c>
8008438: 2109883a add r4,r4,r4
800843c: 2086703a and r3,r4,r2
8008440: 5ac00104 addi r11,r11,4
8008444: 183ffc26 beq r3,zero,8008438 <_malloc_r+0x65c>
8008448: 580d883a mov r6,r11
800844c: 003ee306 br 8007fdc <_malloc_r+0x200>
8008450: a5000404 addi r20,r20,16
8008454: 003f3906 br 800813c <_malloc_r+0x360>
8008458: 2009d0ba srai r4,r4,2
800845c: 00800044 movi r2,1
8008460: 99c00117 ldw r7,4(r19)
8008464: 1104983a sll r2,r2,r4
8008468: 11c4b03a or r2,r2,r7
800846c: 98800115 stw r2,4(r19)
8008470: 003f9f06 br 80082f0 <_malloc_r+0x514>
8008474: bd05883a add r2,r23,r20
8008478: 0085c83a sub r2,zero,r2
800847c: 1543ffcc andi r21,r2,4095
8008480: a80b883a mov r5,r21
8008484: 9009883a mov r4,r18
8008488: 800a16c0 call 800a16c <_sbrk_r>
800848c: 10ffffe0 cmpeqi r3,r2,-1
8008490: 183f4e26 beq r3,zero,80081cc <_malloc_r+0x3f0>
8008494: 002b883a mov r21,zero
8008498: 003f4e06 br 80081d4 <_malloc_r+0x3f8>
800849c: 19001568 cmpgeui r4,r3,85
80084a0: 2000201e bne r4,zero,8008524 <_malloc_r+0x748>
80084a4: 1006d33a srli r3,r2,12
80084a8: 19401bc4 addi r5,r3,111
80084ac: 19001b84 addi r4,r3,110
80084b0: 280a90fa slli r5,r5,3
80084b4: 003f8206 br 80082c0 <_malloc_r+0x4e4>
80084b8: 10c05568 cmpgeui r3,r2,341
80084bc: 1800201e bne r3,zero,8008540 <_malloc_r+0x764>
80084c0: 8804d3fa srli r2,r17,15
80084c4: 11801e04 addi r6,r2,120
80084c8: 12001dc4 addi r8,r2,119
80084cc: 300a90fa slli r5,r6,3
80084d0: 003e7b06 br 8007ec0 <_malloc_r+0xe4>
80084d4: 00820174 movhi r2,2053
80084d8: 10f36417 ldw r3,-12912(r2)
80084dc: a0c7883a add r3,r20,r3
80084e0: 10f36415 stw r3,-12912(r2)
80084e4: 003f2306 br 8008174 <_malloc_r+0x398>
80084e8: a903ffcc andi r4,r21,4095
80084ec: 203f211e bne r4,zero,8008174 <_malloc_r+0x398>
80084f0: 9c000217 ldw r16,8(r19)
80084f4: b529883a add r20,r22,r20
80084f8: a5000054 ori r20,r20,1
80084fc: 85000115 stw r20,4(r16)
8008500: 003f4e06 br 800823c <_malloc_r+0x460>
8008504: 00820174 movhi r2,2053
8008508: 15f2b015 stw r23,-13632(r2)
800850c: 003f2106 br 8008194 <_malloc_r+0x3b8>
8008510: b821883a mov r16,r23
8008514: 003f4906 br 800823c <_malloc_r+0x460>
8008518: 00800044 movi r2,1
800851c: b8800115 stw r2,4(r23)
8008520: 003fae06 br 80083dc <_malloc_r+0x600>
8008524: 19005568 cmpgeui r4,r3,341
8008528: 2000191e bne r4,zero,8008590 <_malloc_r+0x7b4>
800852c: 1006d3fa srli r3,r2,15
8008530: 19401e04 addi r5,r3,120
8008534: 19001dc4 addi r4,r3,119
8008538: 280a90fa slli r5,r5,3
800853c: 003f6006 br 80082c0 <_malloc_r+0x4e4>
8008540: 10815568 cmpgeui r2,r2,1365
8008544: 1000191e bne r2,zero,80085ac <_malloc_r+0x7d0>
8008548: 8804d4ba srli r2,r17,18
800854c: 11801f44 addi r6,r2,125
8008550: 12001f04 addi r8,r2,124
8008554: 300a90fa slli r5,r6,3
8008558: 003e5906 br 8007ec0 <_malloc_r+0xe4>
800855c: e73ffe04 addi fp,fp,-8
8008560: a729883a add r20,r20,fp
8008564: a5e9c83a sub r20,r20,r23
8008568: 002b883a mov r21,zero
800856c: 003f1906 br 80081d4 <_malloc_r+0x3f8>
8008570: 81400204 addi r5,r16,8
8008574: 9009883a mov r4,r18
8008578: 80071c40 call 80071c4 <_free_r>
800857c: 9c000217 ldw r16,8(r19)
8008580: 00820174 movhi r2,2053
8008584: 10b36417 ldw r2,-12912(r2)
8008588: 85000117 ldw r20,4(r16)
800858c: 003f2b06 br 800823c <_malloc_r+0x460>
8008590: 18c15568 cmpgeui r3,r3,1365
8008594: 1800091e bne r3,zero,80085bc <_malloc_r+0x7e0>
8008598: 1006d4ba srli r3,r2,18
800859c: 19401f44 addi r5,r3,125
80085a0: 19001f04 addi r4,r3,124
80085a4: 280a90fa slli r5,r5,3
80085a8: 003f4506 br 80082c0 <_malloc_r+0x4e4>
80085ac: 0140fe04 movi r5,1016
80085b0: 01801fc4 movi r6,127
80085b4: 02001f84 movi r8,126
80085b8: 003e4106 br 8007ec0 <_malloc_r+0xe4>
80085bc: 0140fe04 movi r5,1016
80085c0: 01001f84 movi r4,126
80085c4: 003f3e06 br 80082c0 <_malloc_r+0x4e4>
80085c8: 98800117 ldw r2,4(r19)
80085cc: 003f9506 br 8008424 <_malloc_r+0x648>
080085d0 <memchr>:
80085d0: 208000cc andi r2,r4,3
80085d4: 280f883a mov r7,r5
80085d8: 10003526 beq r2,zero,80086b0 <memchr+0xe0>
80085dc: 30bfffc4 addi r2,r6,-1
80085e0: 30001926 beq r6,zero,8008648 <memchr+0x78>
80085e4: 20c00003 ldbu r3,0(r4)
80085e8: 29803fcc andi r6,r5,255
80085ec: 30c0061e bne r6,r3,8008608 <memchr+0x38>
80085f0: 00001706 br 8008650 <memchr+0x80>
80085f4: 10bfffc4 addi r2,r2,-1
80085f8: 10ffffe0 cmpeqi r3,r2,-1
80085fc: 1800121e bne r3,zero,8008648 <memchr+0x78>
8008600: 20c00003 ldbu r3,0(r4)
8008604: 19801226 beq r3,r6,8008650 <memchr+0x80>
8008608: 21000044 addi r4,r4,1
800860c: 20c000cc andi r3,r4,3
8008610: 183ff81e bne r3,zero,80085f4 <memchr+0x24>
8008614: 10c00128 cmpgeui r3,r2,4
8008618: 18000f1e bne r3,zero,8008658 <memchr+0x88>
800861c: 10000a26 beq r2,zero,8008648 <memchr+0x78>
8008620: 20c00003 ldbu r3,0(r4)
8008624: 29403fcc andi r5,r5,255
8008628: 19400926 beq r3,r5,8008650 <memchr+0x80>
800862c: 2085883a add r2,r4,r2
8008630: 39403fcc andi r5,r7,255
8008634: 00000206 br 8008640 <memchr+0x70>
8008638: 20c00003 ldbu r3,0(r4)
800863c: 19400426 beq r3,r5,8008650 <memchr+0x80>
8008640: 21000044 addi r4,r4,1
8008644: 113ffc1e bne r2,r4,8008638 <memchr+0x68>
8008648: 0005883a mov r2,zero
800864c: f800283a ret
8008650: 2005883a mov r2,r4
8008654: f800283a ret
8008658: 280c923a slli r6,r5,8
800865c: 2a403fcc andi r9,r5,255
8008660: 02bfbff4 movhi r10,65279
8008664: 31bfffcc andi r6,r6,65535
8008668: 3246b03a or r3,r6,r9
800866c: 1812943a slli r9,r3,16
8008670: 02202074 movhi r8,32897
8008674: 52bfbfc4 addi r10,r10,-257
8008678: 48d2b03a or r9,r9,r3
800867c: 42202004 addi r8,r8,-32640
8008680: 20c00017 ldw r3,0(r4)
8008684: 48c6f03a xor r3,r9,r3
8008688: 1a8d883a add r6,r3,r10
800868c: 00c6303a nor r3,zero,r3
8008690: 30c6703a and r3,r6,r3
8008694: 1a06703a and r3,r3,r8
8008698: 183fe11e bne r3,zero,8008620 <memchr+0x50>
800869c: 10bfff04 addi r2,r2,-4
80086a0: 10c00128 cmpgeui r3,r2,4
80086a4: 21000104 addi r4,r4,4
80086a8: 183ff51e bne r3,zero,8008680 <memchr+0xb0>
80086ac: 003fdb06 br 800861c <memchr+0x4c>
80086b0: 3005883a mov r2,r6
80086b4: 003fd706 br 8008614 <memchr+0x44>
080086b8 <memcpy>:
80086b8: 30c00430 cmpltui r3,r6,16
80086bc: 2005883a mov r2,r4
80086c0: 18002d1e bne r3,zero,8008778 <memcpy+0xc0>
80086c4: 2906b03a or r3,r5,r4
80086c8: 18c000cc andi r3,r3,3
80086cc: 1800351e bne r3,zero,80087a4 <memcpy+0xec>
80086d0: 32fffc04 addi r11,r6,-16
80086d4: 5816d13a srli r11,r11,4
80086d8: 2007883a mov r3,r4
80086dc: 280f883a mov r7,r5
80086e0: 5ac00044 addi r11,r11,1
80086e4: 5816913a slli r11,r11,4
80086e8: 22c9883a add r4,r4,r11
80086ec: 3a000017 ldw r8,0(r7)
80086f0: 3a800117 ldw r10,4(r7)
80086f4: 3a400217 ldw r9,8(r7)
80086f8: 39c00404 addi r7,r7,16
80086fc: 1a000015 stw r8,0(r3)
8008700: 3a3fff17 ldw r8,-4(r7)
8008704: 1a800115 stw r10,4(r3)
8008708: 1a400215 stw r9,8(r3)
800870c: 18c00404 addi r3,r3,16
8008710: 1a3fff15 stw r8,-4(r3)
8008714: 20fff51e bne r4,r3,80086ec <memcpy+0x34>
8008718: 3100030c andi r4,r6,12
800871c: 2acb883a add r5,r5,r11
8008720: 320003cc andi r8,r6,15
8008724: 20002226 beq r4,zero,80087b0 <memcpy+0xf8>
8008728: 2809883a mov r4,r5
800872c: 1813883a mov r9,r3
8008730: 21000104 addi r4,r4,4
8008734: 22bfff17 ldw r10,-4(r4)
8008738: 410fc83a sub r7,r8,r4
800873c: 4a400104 addi r9,r9,4
8008740: 29cf883a add r7,r5,r7
8008744: 4abfff15 stw r10,-4(r9)
8008748: 39c00128 cmpgeui r7,r7,4
800874c: 383ff81e bne r7,zero,8008730 <memcpy+0x78>
8008750: 413fff04 addi r4,r8,-4
8008754: 2008d0ba srli r4,r4,2
8008758: 318000cc andi r6,r6,3
800875c: 31ffffc4 addi r7,r6,-1
8008760: 21000044 addi r4,r4,1
8008764: 200890ba slli r4,r4,2
8008768: 1907883a add r3,r3,r4
800876c: 290b883a add r5,r5,r4
8008770: 3000041e bne r6,zero,8008784 <memcpy+0xcc>
8008774: f800283a ret
8008778: 2007883a mov r3,r4
800877c: 31ffffc4 addi r7,r6,-1
8008780: 303ffc26 beq r6,zero,8008774 <memcpy+0xbc>
8008784: 39c00044 addi r7,r7,1
8008788: 19cf883a add r7,r3,r7
800878c: 29400044 addi r5,r5,1
8008790: 29bfffc3 ldbu r6,-1(r5)
8008794: 18c00044 addi r3,r3,1
8008798: 19bfffc5 stb r6,-1(r3)
800879c: 19fffb1e bne r3,r7,800878c <memcpy+0xd4>
80087a0: f800283a ret
80087a4: 31ffffc4 addi r7,r6,-1
80087a8: 2007883a mov r3,r4
80087ac: 003ff506 br 8008784 <memcpy+0xcc>
80087b0: 400d883a mov r6,r8
80087b4: 003ff106 br 800877c <memcpy+0xc4>
080087b8 <memmove>:
80087b8: 2005883a mov r2,r4
80087bc: 29000a2e bgeu r5,r4,80087e8 <memmove+0x30>
80087c0: 2989883a add r4,r5,r6
80087c4: 1100082e bgeu r2,r4,80087e8 <memmove+0x30>
80087c8: 1187883a add r3,r2,r6
80087cc: 30003e26 beq r6,zero,80088c8 <memmove+0x110>
80087d0: 213fffc4 addi r4,r4,-1
80087d4: 21400003 ldbu r5,0(r4)
80087d8: 18ffffc4 addi r3,r3,-1
80087dc: 19400005 stb r5,0(r3)
80087e0: 10fffb1e bne r2,r3,80087d0 <memmove+0x18>
80087e4: f800283a ret
80087e8: 30c00430 cmpltui r3,r6,16
80087ec: 18000b26 beq r3,zero,800881c <memmove+0x64>
80087f0: 1007883a mov r3,r2
80087f4: 31ffffc4 addi r7,r6,-1
80087f8: 30003726 beq r6,zero,80088d8 <memmove+0x120>
80087fc: 39c00044 addi r7,r7,1
8008800: 29cf883a add r7,r5,r7
8008804: 29400044 addi r5,r5,1
8008808: 29bfffc3 ldbu r6,-1(r5)
800880c: 18c00044 addi r3,r3,1
8008810: 19bfffc5 stb r6,-1(r3)
8008814: 29fffb1e bne r5,r7,8008804 <memmove+0x4c>
8008818: f800283a ret
800881c: 2886b03a or r3,r5,r2
8008820: 18c000cc andi r3,r3,3
8008824: 1800291e bne r3,zero,80088cc <memmove+0x114>
8008828: 327ffc04 addi r9,r6,-16
800882c: 4812d13a srli r9,r9,4
8008830: 280f883a mov r7,r5
8008834: 1007883a mov r3,r2
8008838: 4a400044 addi r9,r9,1
800883c: 4812913a slli r9,r9,4
8008840: 1251883a add r8,r2,r9
8008844: 39000017 ldw r4,0(r7)
8008848: 18c00404 addi r3,r3,16
800884c: 39c00404 addi r7,r7,16
8008850: 193ffc15 stw r4,-16(r3)
8008854: 393ffd17 ldw r4,-12(r7)
8008858: 193ffd15 stw r4,-12(r3)
800885c: 393ffe17 ldw r4,-8(r7)
8008860: 193ffe15 stw r4,-8(r3)
8008864: 393fff17 ldw r4,-4(r7)
8008868: 193fff15 stw r4,-4(r3)
800886c: 40fff51e bne r8,r3,8008844 <memmove+0x8c>
8008870: 3100030c andi r4,r6,12
8008874: 2a4b883a add r5,r5,r9
8008878: 320003cc andi r8,r6,15
800887c: 20001726 beq r4,zero,80088dc <memmove+0x124>
8008880: 2813883a mov r9,r5
8008884: 180f883a mov r7,r3
8008888: 4a400104 addi r9,r9,4
800888c: 39c00104 addi r7,r7,4
8008890: 4abfff17 ldw r10,-4(r9)
8008894: 41c9c83a sub r4,r8,r7
8008898: 1909883a add r4,r3,r4
800889c: 3abfff15 stw r10,-4(r7)
80088a0: 21000128 cmpgeui r4,r4,4
80088a4: 203ff81e bne r4,zero,8008888 <memmove+0xd0>
80088a8: 413fff04 addi r4,r8,-4
80088ac: 2008d0ba srli r4,r4,2
80088b0: 318000cc andi r6,r6,3
80088b4: 21000044 addi r4,r4,1
80088b8: 200890ba slli r4,r4,2
80088bc: 1907883a add r3,r3,r4
80088c0: 290b883a add r5,r5,r4
80088c4: 003fcb06 br 80087f4 <memmove+0x3c>
80088c8: f800283a ret
80088cc: 31ffffc4 addi r7,r6,-1
80088d0: 1007883a mov r3,r2
80088d4: 003fc906 br 80087fc <memmove+0x44>
80088d8: f800283a ret
80088dc: 400d883a mov r6,r8
80088e0: 003fc406 br 80087f4 <memmove+0x3c>
080088e4 <memset>:
80088e4: 20c000cc andi r3,r4,3
80088e8: 2005883a mov r2,r4
80088ec: 18003626 beq r3,zero,80089c8 <memset+0xe4>
80088f0: 31ffffc4 addi r7,r6,-1
80088f4: 30003326 beq r6,zero,80089c4 <memset+0xe0>
80088f8: 2811883a mov r8,r5
80088fc: 2007883a mov r3,r4
8008900: 00000306 br 8008910 <memset+0x2c>
8008904: 39ffffc4 addi r7,r7,-1
8008908: 39bfffe0 cmpeqi r6,r7,-1
800890c: 30002d1e bne r6,zero,80089c4 <memset+0xe0>
8008910: 18c00044 addi r3,r3,1
8008914: 1a3fffc5 stb r8,-1(r3)
8008918: 198000cc andi r6,r3,3
800891c: 303ff91e bne r6,zero,8008904 <memset+0x20>
8008920: 39000130 cmpltui r4,r7,4
8008924: 2000221e bne r4,zero,80089b0 <memset+0xcc>
8008928: 29003fcc andi r4,r5,255
800892c: 200c923a slli r6,r4,8
8008930: 3a000430 cmpltui r8,r7,16
8008934: 3108b03a or r4,r6,r4
8008938: 200c943a slli r6,r4,16
800893c: 310cb03a or r6,r6,r4
8008940: 40000e1e bne r8,zero,800897c <memset+0x98>
8008944: 3a3ffc04 addi r8,r7,-16
8008948: 4010d13a srli r8,r8,4
800894c: 42000044 addi r8,r8,1
8008950: 4010913a slli r8,r8,4
8008954: 1a11883a add r8,r3,r8
8008958: 19800015 stw r6,0(r3)
800895c: 19800115 stw r6,4(r3)
8008960: 19800215 stw r6,8(r3)
8008964: 18c00404 addi r3,r3,16
8008968: 19bfff15 stw r6,-4(r3)
800896c: 40fffa1e bne r8,r3,8008958 <memset+0x74>
8008970: 3900030c andi r4,r7,12
8008974: 39c003cc andi r7,r7,15
8008978: 20000d26 beq r4,zero,80089b0 <memset+0xcc>
800897c: 1809883a mov r4,r3
8008980: 21000104 addi r4,r4,4
8008984: 3911c83a sub r8,r7,r4
8008988: 1a11883a add r8,r3,r8
800898c: 21bfff15 stw r6,-4(r4)
8008990: 42000128 cmpgeui r8,r8,4
8008994: 403ffa1e bne r8,zero,8008980 <memset+0x9c>
8008998: 393fff04 addi r4,r7,-4
800899c: 2008d0ba srli r4,r4,2
80089a0: 39c000cc andi r7,r7,3
80089a4: 21000044 addi r4,r4,1
80089a8: 200890ba slli r4,r4,2
80089ac: 1907883a add r3,r3,r4
80089b0: 38000426 beq r7,zero,80089c4 <memset+0xe0>
80089b4: 19cf883a add r7,r3,r7
80089b8: 18c00044 addi r3,r3,1
80089bc: 197fffc5 stb r5,-1(r3)
80089c0: 38fffd1e bne r7,r3,80089b8 <memset+0xd4>
80089c4: f800283a ret
80089c8: 2007883a mov r3,r4
80089cc: 300f883a mov r7,r6
80089d0: 003fd306 br 8008920 <memset+0x3c>
080089d4 <_Balloc>:
80089d4: 20801317 ldw r2,76(r4)
80089d8: defffc04 addi sp,sp,-16
80089dc: dc400115 stw r17,4(sp)
80089e0: dc000015 stw r16,0(sp)
80089e4: dfc00315 stw ra,12(sp)
80089e8: dc800215 stw r18,8(sp)
80089ec: 2021883a mov r16,r4
80089f0: 2823883a mov r17,r5
80089f4: 10000e26 beq r2,zero,8008a30 <_Balloc+0x5c>
80089f8: 880690ba slli r3,r17,2
80089fc: 10c7883a add r3,r2,r3
8008a00: 18800017 ldw r2,0(r3)
8008a04: 10001126 beq r2,zero,8008a4c <_Balloc+0x78>
8008a08: 11000017 ldw r4,0(r2)
8008a0c: 19000015 stw r4,0(r3)
8008a10: 10000415 stw zero,16(r2)
8008a14: 10000315 stw zero,12(r2)
8008a18: dfc00317 ldw ra,12(sp)
8008a1c: dc800217 ldw r18,8(sp)
8008a20: dc400117 ldw r17,4(sp)
8008a24: dc000017 ldw r16,0(sp)
8008a28: dec00404 addi sp,sp,16
8008a2c: f800283a ret
8008a30: 01800844 movi r6,33
8008a34: 01400104 movi r5,4
8008a38: 800ba2c0 call 800ba2c <_calloc_r>
8008a3c: 80801315 stw r2,76(r16)
8008a40: 103fed1e bne r2,zero,80089f8 <_Balloc+0x24>
8008a44: 0005883a mov r2,zero
8008a48: 003ff306 br 8008a18 <_Balloc+0x44>
8008a4c: 04800044 movi r18,1
8008a50: 9464983a sll r18,r18,r17
8008a54: 01400044 movi r5,1
8008a58: 8009883a mov r4,r16
8008a5c: 91800144 addi r6,r18,5
8008a60: 300c90ba slli r6,r6,2
8008a64: 800ba2c0 call 800ba2c <_calloc_r>
8008a68: 103ff626 beq r2,zero,8008a44 <_Balloc+0x70>
8008a6c: 14400115 stw r17,4(r2)
8008a70: 14800215 stw r18,8(r2)
8008a74: 003fe606 br 8008a10 <_Balloc+0x3c>
08008a78 <_Bfree>:
8008a78: 28000726 beq r5,zero,8008a98 <_Bfree+0x20>
8008a7c: 28c00117 ldw r3,4(r5)
8008a80: 20801317 ldw r2,76(r4)
8008a84: 180690ba slli r3,r3,2
8008a88: 10c5883a add r2,r2,r3
8008a8c: 10c00017 ldw r3,0(r2)
8008a90: 28c00015 stw r3,0(r5)
8008a94: 11400015 stw r5,0(r2)
8008a98: f800283a ret
08008a9c <__multadd>:
8008a9c: defffa04 addi sp,sp,-24
8008aa0: dc800315 stw r18,12(sp)
8008aa4: dc400215 stw r17,8(sp)
8008aa8: dc000115 stw r16,4(sp)
8008aac: 2823883a mov r17,r5
8008ab0: 2c000417 ldw r16,16(r5)
8008ab4: 2025883a mov r18,r4
8008ab8: dfc00515 stw ra,20(sp)
8008abc: 29000504 addi r4,r5,20
8008ac0: dcc00415 stw r19,16(sp)
8008ac4: 000b883a mov r5,zero
8008ac8: 20800017 ldw r2,0(r4)
8008acc: 21000104 addi r4,r4,4
8008ad0: 29400044 addi r5,r5,1
8008ad4: 10ffffcc andi r3,r2,65535
8008ad8: 1987383a mul r3,r3,r6
8008adc: 1004d43a srli r2,r2,16
8008ae0: 19cf883a add r7,r3,r7
8008ae4: 1185383a mul r2,r2,r6
8008ae8: 3810d43a srli r8,r7,16
8008aec: 38ffffcc andi r3,r7,65535
8008af0: 120f883a add r7,r2,r8
8008af4: 3804943a slli r2,r7,16
8008af8: 380ed43a srli r7,r7,16
8008afc: 10c7883a add r3,r2,r3
8008b00: 20ffff15 stw r3,-4(r4)
8008b04: 2c3ff016 blt r5,r16,8008ac8 <__multadd+0x2c>
8008b08: 38000826 beq r7,zero,8008b2c <__multadd+0x90>
8008b0c: 88800217 ldw r2,8(r17)
8008b10: 80800e0e bge r16,r2,8008b4c <__multadd+0xb0>
8008b14: 80800144 addi r2,r16,5
8008b18: 100490ba slli r2,r2,2
8008b1c: 84000044 addi r16,r16,1
8008b20: 8885883a add r2,r17,r2
8008b24: 11c00015 stw r7,0(r2)
8008b28: 8c000415 stw r16,16(r17)
8008b2c: 8805883a mov r2,r17
8008b30: dfc00517 ldw ra,20(sp)
8008b34: dcc00417 ldw r19,16(sp)
8008b38: dc800317 ldw r18,12(sp)
8008b3c: dc400217 ldw r17,8(sp)
8008b40: dc000117 ldw r16,4(sp)
8008b44: dec00604 addi sp,sp,24
8008b48: f800283a ret
8008b4c: 89400117 ldw r5,4(r17)
8008b50: 9009883a mov r4,r18
8008b54: d9c00015 stw r7,0(sp)
8008b58: 29400044 addi r5,r5,1
8008b5c: 80089d40 call 80089d4 <_Balloc>
8008b60: 89800417 ldw r6,16(r17)
8008b64: 89400304 addi r5,r17,12
8008b68: 11000304 addi r4,r2,12
8008b6c: 31800084 addi r6,r6,2
8008b70: 300c90ba slli r6,r6,2
8008b74: 1027883a mov r19,r2
8008b78: 80086b80 call 80086b8 <memcpy>
8008b7c: d9c00017 ldw r7,0(sp)
8008b80: 88000926 beq r17,zero,8008ba8 <__multadd+0x10c>
8008b84: 88c00117 ldw r3,4(r17)
8008b88: 90801317 ldw r2,76(r18)
8008b8c: 180690ba slli r3,r3,2
8008b90: 10c5883a add r2,r2,r3
8008b94: 10c00017 ldw r3,0(r2)
8008b98: 88c00015 stw r3,0(r17)
8008b9c: 14400015 stw r17,0(r2)
8008ba0: 9823883a mov r17,r19
8008ba4: 003fdb06 br 8008b14 <__multadd+0x78>
8008ba8: 9823883a mov r17,r19
8008bac: 003fd906 br 8008b14 <__multadd+0x78>
08008bb0 <__s2b>:
8008bb0: defff904 addi sp,sp,-28
8008bb4: dc800215 stw r18,8(sp)
8008bb8: dc000015 stw r16,0(sp)
8008bbc: 2025883a mov r18,r4
8008bc0: 2821883a mov r16,r5
8008bc4: 39000204 addi r4,r7,8
8008bc8: 01400244 movi r5,9
8008bcc: dcc00315 stw r19,12(sp)
8008bd0: dc400115 stw r17,4(sp)
8008bd4: dfc00615 stw ra,24(sp)
8008bd8: 3823883a mov r17,r7
8008bdc: dd400515 stw r21,20(sp)
8008be0: dd000415 stw r20,16(sp)
8008be4: 3027883a mov r19,r6
8008be8: 800cf000 call 800cf00 <__divsi3>
8008bec: 88c00290 cmplti r3,r17,10
8008bf0: 1800311e bne r3,zero,8008cb8 <__s2b+0x108>
8008bf4: 00c00044 movi r3,1
8008bf8: 000b883a mov r5,zero
8008bfc: 18c7883a add r3,r3,r3
8008c00: 29400044 addi r5,r5,1
8008c04: 18bffd16 blt r3,r2,8008bfc <__s2b+0x4c>
8008c08: 9009883a mov r4,r18
8008c0c: 80089d40 call 80089d4 <_Balloc>
8008c10: d8c00717 ldw r3,28(sp)
8008c14: 10c00515 stw r3,20(r2)
8008c18: 00c00044 movi r3,1
8008c1c: 10c00415 stw r3,16(r2)
8008c20: 98c00290 cmplti r3,r19,10
8008c24: 1800211e bne r3,zero,8008cac <__s2b+0xfc>
8008c28: 85400244 addi r21,r16,9
8008c2c: 84e9883a add r20,r16,r19
8008c30: a821883a mov r16,r21
8008c34: 84000044 addi r16,r16,1
8008c38: 81ffffc7 ldb r7,-1(r16)
8008c3c: 01800284 movi r6,10
8008c40: 100b883a mov r5,r2
8008c44: 39fff404 addi r7,r7,-48
8008c48: 9009883a mov r4,r18
8008c4c: 8008a9c0 call 8008a9c <__multadd>
8008c50: a43ff81e bne r20,r16,8008c34 <__s2b+0x84>
8008c54: 9c3ffe04 addi r16,r19,-8
8008c58: ac21883a add r16,r21,r16
8008c5c: 9c400a0e bge r19,r17,8008c88 <__s2b+0xd8>
8008c60: 8ce3c83a sub r17,r17,r19
8008c64: 8463883a add r17,r16,r17
8008c68: 84000044 addi r16,r16,1
8008c6c: 81ffffc7 ldb r7,-1(r16)
8008c70: 01800284 movi r6,10
8008c74: 100b883a mov r5,r2
8008c78: 39fff404 addi r7,r7,-48
8008c7c: 9009883a mov r4,r18
8008c80: 8008a9c0 call 8008a9c <__multadd>
8008c84: 8c3ff81e bne r17,r16,8008c68 <__s2b+0xb8>
8008c88: dfc00617 ldw ra,24(sp)
8008c8c: dd400517 ldw r21,20(sp)
8008c90: dd000417 ldw r20,16(sp)
8008c94: dcc00317 ldw r19,12(sp)
8008c98: dc800217 ldw r18,8(sp)
8008c9c: dc400117 ldw r17,4(sp)
8008ca0: dc000017 ldw r16,0(sp)
8008ca4: dec00704 addi sp,sp,28
8008ca8: f800283a ret
8008cac: 84000284 addi r16,r16,10
8008cb0: 04c00244 movi r19,9
8008cb4: 003fe906 br 8008c5c <__s2b+0xac>
8008cb8: 000b883a mov r5,zero
8008cbc: 003fd206 br 8008c08 <__s2b+0x58>
08008cc0 <__hi0bits>:
8008cc0: 20bfffec andhi r2,r4,65535
8008cc4: 1000131e bne r2,zero,8008d14 <__hi0bits+0x54>
8008cc8: 2008943a slli r4,r4,16
8008ccc: 00800404 movi r2,16
8008cd0: 20ffc02c andhi r3,r4,65280
8008cd4: 1800021e bne r3,zero,8008ce0 <__hi0bits+0x20>
8008cd8: 2008923a slli r4,r4,8
8008cdc: 10800204 addi r2,r2,8
8008ce0: 20fc002c andhi r3,r4,61440
8008ce4: 1800021e bne r3,zero,8008cf0 <__hi0bits+0x30>
8008ce8: 2008913a slli r4,r4,4
8008cec: 10800104 addi r2,r2,4
8008cf0: 20f0002c andhi r3,r4,49152
8008cf4: 1800021e bne r3,zero,8008d00 <__hi0bits+0x40>
8008cf8: 200890ba slli r4,r4,2
8008cfc: 10800084 addi r2,r2,2
8008d00: 20000316 blt r4,zero,8008d10 <__hi0bits+0x50>
8008d04: 2110002c andhi r4,r4,16384
8008d08: 10800044 addi r2,r2,1
8008d0c: 20000326 beq r4,zero,8008d1c <__hi0bits+0x5c>
8008d10: f800283a ret
8008d14: 0005883a mov r2,zero
8008d18: 003fed06 br 8008cd0 <__hi0bits+0x10>
8008d1c: 00800804 movi r2,32
8008d20: f800283a ret
08008d24 <__lo0bits>:
8008d24: 20c00017 ldw r3,0(r4)
8008d28: 188001cc andi r2,r3,7
8008d2c: 10000826 beq r2,zero,8008d50 <__lo0bits+0x2c>
8008d30: 1880004c andi r2,r3,1
8008d34: 10001f1e bne r2,zero,8008db4 <__lo0bits+0x90>
8008d38: 1880008c andi r2,r3,2
8008d3c: 10002126 beq r2,zero,8008dc4 <__lo0bits+0xa0>
8008d40: 1806d07a srli r3,r3,1
8008d44: 00800044 movi r2,1
8008d48: 20c00015 stw r3,0(r4)
8008d4c: f800283a ret
8008d50: 18bfffcc andi r2,r3,65535
8008d54: 1000151e bne r2,zero,8008dac <__lo0bits+0x88>
8008d58: 1806d43a srli r3,r3,16
8008d5c: 00800404 movi r2,16
8008d60: 19403fcc andi r5,r3,255
8008d64: 2800021e bne r5,zero,8008d70 <__lo0bits+0x4c>
8008d68: 1806d23a srli r3,r3,8
8008d6c: 10800204 addi r2,r2,8
8008d70: 194003cc andi r5,r3,15
8008d74: 2800021e bne r5,zero,8008d80 <__lo0bits+0x5c>
8008d78: 1806d13a srli r3,r3,4
8008d7c: 10800104 addi r2,r2,4
8008d80: 194000cc andi r5,r3,3
8008d84: 2800021e bne r5,zero,8008d90 <__lo0bits+0x6c>
8008d88: 1806d0ba srli r3,r3,2
8008d8c: 10800084 addi r2,r2,2
8008d90: 1940004c andi r5,r3,1
8008d94: 2800031e bne r5,zero,8008da4 <__lo0bits+0x80>
8008d98: 1806d07a srli r3,r3,1
8008d9c: 10800044 addi r2,r2,1
8008da0: 18000626 beq r3,zero,8008dbc <__lo0bits+0x98>
8008da4: 20c00015 stw r3,0(r4)
8008da8: f800283a ret
8008dac: 0005883a mov r2,zero
8008db0: 003feb06 br 8008d60 <__lo0bits+0x3c>
8008db4: 0005883a mov r2,zero
8008db8: f800283a ret
8008dbc: 00800804 movi r2,32
8008dc0: f800283a ret
8008dc4: 1806d0ba srli r3,r3,2
8008dc8: 00800084 movi r2,2
8008dcc: 20c00015 stw r3,0(r4)
8008dd0: f800283a ret
08008dd4 <__i2b>:
8008dd4: defffe04 addi sp,sp,-8
8008dd8: dc000015 stw r16,0(sp)
8008ddc: 2821883a mov r16,r5
8008de0: 01400044 movi r5,1
8008de4: dfc00115 stw ra,4(sp)
8008de8: 80089d40 call 80089d4 <_Balloc>
8008dec: 01000044 movi r4,1
8008df0: 14000515 stw r16,20(r2)
8008df4: 11000415 stw r4,16(r2)
8008df8: dfc00117 ldw ra,4(sp)
8008dfc: dc000017 ldw r16,0(sp)
8008e00: dec00204 addi sp,sp,8
8008e04: f800283a ret
08008e08 <__multiply>:
8008e08: defffa04 addi sp,sp,-24
8008e0c: dd000415 stw r20,16(sp)
8008e10: dcc00315 stw r19,12(sp)
8008e14: 35000417 ldw r20,16(r6)
8008e18: 2cc00417 ldw r19,16(r5)
8008e1c: dc800215 stw r18,8(sp)
8008e20: dc400115 stw r17,4(sp)
8008e24: dfc00515 stw ra,20(sp)
8008e28: dc000015 stw r16,0(sp)
8008e2c: 2823883a mov r17,r5
8008e30: 3025883a mov r18,r6
8008e34: 9d000516 blt r19,r20,8008e4c <__multiply+0x44>
8008e38: a007883a mov r3,r20
8008e3c: 2825883a mov r18,r5
8008e40: 9829883a mov r20,r19
8008e44: 3023883a mov r17,r6
8008e48: 1827883a mov r19,r3
8008e4c: 90800217 ldw r2,8(r18)
8008e50: a4e1883a add r16,r20,r19
8008e54: 91400117 ldw r5,4(r18)
8008e58: 1400010e bge r2,r16,8008e60 <__multiply+0x58>
8008e5c: 29400044 addi r5,r5,1
8008e60: 80089d40 call 80089d4 <_Balloc>
8008e64: 801290ba slli r9,r16,2
8008e68: 12800504 addi r10,r2,20
8008e6c: 5007883a mov r3,r10
8008e70: 5253883a add r9,r10,r9
8008e74: 5240032e bgeu r10,r9,8008e84 <__multiply+0x7c>
8008e78: 18000015 stw zero,0(r3)
8008e7c: 18c00104 addi r3,r3,4
8008e80: 1a7ffd36 bltu r3,r9,8008e78 <__multiply+0x70>
8008e84: 981690ba slli r11,r19,2
8008e88: a01090ba slli r8,r20,2
8008e8c: 89400504 addi r5,r17,20
8008e90: 91800504 addi r6,r18,20
8008e94: 2ad7883a add r11,r5,r11
8008e98: 3211883a add r8,r6,r8
8008e9c: 2ac00636 bltu r5,r11,8008eb8 <__multiply+0xb0>
8008ea0: 00004106 br 8008fa8 <__multiply+0x1a0>
8008ea4: 701cd43a srli r14,r14,16
8008ea8: 7000221e bne r14,zero,8008f34 <__multiply+0x12c>
8008eac: 29400104 addi r5,r5,4
8008eb0: 52800104 addi r10,r10,4
8008eb4: 2ac03c2e bgeu r5,r11,8008fa8 <__multiply+0x1a0>
8008eb8: 2b800017 ldw r14,0(r5)
8008ebc: 73ffffcc andi r15,r14,65535
8008ec0: 783ff826 beq r15,zero,8008ea4 <__multiply+0x9c>
8008ec4: 501b883a mov r13,r10
8008ec8: 301d883a mov r14,r6
8008ecc: 003f883a mov ra,zero
8008ed0: 71000017 ldw r4,0(r14)
8008ed4: 6b000017 ldw r12,0(r13)
8008ed8: 6b400104 addi r13,r13,4
8008edc: 21ffffcc andi r7,r4,65535
8008ee0: 3bcf383a mul r7,r7,r15
8008ee4: 2006d43a srli r3,r4,16
8008ee8: 613fffcc andi r4,r12,65535
8008eec: 390f883a add r7,r7,r4
8008ef0: 3fcf883a add r7,r7,ra
8008ef4: 1bc7383a mul r3,r3,r15
8008ef8: 6018d43a srli r12,r12,16
8008efc: 3808d43a srli r4,r7,16
8008f00: 39ffffcc andi r7,r7,65535
8008f04: 1b07883a add r3,r3,r12
8008f08: 1907883a add r3,r3,r4
8008f0c: 1808943a slli r4,r3,16
8008f10: 73800104 addi r14,r14,4
8008f14: 183ed43a srli ra,r3,16
8008f18: 21ceb03a or r7,r4,r7
8008f1c: 69ffff15 stw r7,-4(r13)
8008f20: 723feb36 bltu r14,r8,8008ed0 <__multiply+0xc8>
8008f24: 6fc00015 stw ra,0(r13)
8008f28: 2b800017 ldw r14,0(r5)
8008f2c: 701cd43a srli r14,r14,16
8008f30: 703fde26 beq r14,zero,8008eac <__multiply+0xa4>
8008f34: 50c00017 ldw r3,0(r10)
8008f38: 501b883a mov r13,r10
8008f3c: 3019883a mov r12,r6
8008f40: 180f883a mov r7,r3
8008f44: 001f883a mov r15,zero
8008f48: 6100000b ldhu r4,0(r12)
8008f4c: 380ed43a srli r7,r7,16
8008f50: 18ffffcc andi r3,r3,65535
8008f54: 2389383a mul r4,r4,r14
8008f58: 6b400104 addi r13,r13,4
8008f5c: 63000104 addi r12,r12,4
8008f60: 21c9883a add r4,r4,r7
8008f64: 23c9883a add r4,r4,r15
8008f68: 201e943a slli r15,r4,16
8008f6c: 69c00017 ldw r7,0(r13)
8008f70: 2008d43a srli r4,r4,16
8008f74: 78c6b03a or r3,r15,r3
8008f78: 68ffff15 stw r3,-4(r13)
8008f7c: 60ffff8b ldhu r3,-2(r12)
8008f80: 3bffffcc andi r15,r7,65535
8008f84: 1b87383a mul r3,r3,r14
8008f88: 1bc7883a add r3,r3,r15
8008f8c: 1907883a add r3,r3,r4
8008f90: 181ed43a srli r15,r3,16
8008f94: 623fec36 bltu r12,r8,8008f48 <__multiply+0x140>
8008f98: 68c00015 stw r3,0(r13)
8008f9c: 29400104 addi r5,r5,4
8008fa0: 52800104 addi r10,r10,4
8008fa4: 2affc436 bltu r5,r11,8008eb8 <__multiply+0xb0>
8008fa8: 0400090e bge zero,r16,8008fd0 <__multiply+0x1c8>
8008fac: 48ffff17 ldw r3,-4(r9)
8008fb0: 4a7fff04 addi r9,r9,-4
8008fb4: 18000326 beq r3,zero,8008fc4 <__multiply+0x1bc>
8008fb8: 00000506 br 8008fd0 <__multiply+0x1c8>
8008fbc: 48c00017 ldw r3,0(r9)
8008fc0: 1800031e bne r3,zero,8008fd0 <__multiply+0x1c8>
8008fc4: 843fffc4 addi r16,r16,-1
8008fc8: 4a7fff04 addi r9,r9,-4
8008fcc: 803ffb1e bne r16,zero,8008fbc <__multiply+0x1b4>
8008fd0: 14000415 stw r16,16(r2)
8008fd4: dfc00517 ldw ra,20(sp)
8008fd8: dd000417 ldw r20,16(sp)
8008fdc: dcc00317 ldw r19,12(sp)
8008fe0: dc800217 ldw r18,8(sp)
8008fe4: dc400117 ldw r17,4(sp)
8008fe8: dc000017 ldw r16,0(sp)
8008fec: dec00604 addi sp,sp,24
8008ff0: f800283a ret
08008ff4 <__pow5mult>:
8008ff4: defffb04 addi sp,sp,-20
8008ff8: dcc00315 stw r19,12(sp)
8008ffc: dc000015 stw r16,0(sp)
8009000: dfc00415 stw ra,16(sp)
8009004: dc800215 stw r18,8(sp)
8009008: dc400115 stw r17,4(sp)
800900c: 308000cc andi r2,r6,3
8009010: 3021883a mov r16,r6
8009014: 2027883a mov r19,r4
8009018: 10002d1e bne r2,zero,80090d0 <__pow5mult+0xdc>
800901c: 2825883a mov r18,r5
8009020: 8021d0ba srai r16,r16,2
8009024: 80001926 beq r16,zero,800908c <__pow5mult+0x98>
8009028: 9c401217 ldw r17,72(r19)
800902c: 8800061e bne r17,zero,8009048 <__pow5mult+0x54>
8009030: 00002f06 br 80090f0 <__pow5mult+0xfc>
8009034: 8021d07a srai r16,r16,1
8009038: 80001426 beq r16,zero,800908c <__pow5mult+0x98>
800903c: 88800017 ldw r2,0(r17)
8009040: 10001a26 beq r2,zero,80090ac <__pow5mult+0xb8>
8009044: 1023883a mov r17,r2
8009048: 8080004c andi r2,r16,1
800904c: 103ff926 beq r2,zero,8009034 <__pow5mult+0x40>
8009050: 880d883a mov r6,r17
8009054: 900b883a mov r5,r18
8009058: 9809883a mov r4,r19
800905c: 8008e080 call 8008e08 <__multiply>
8009060: 90001926 beq r18,zero,80090c8 <__pow5mult+0xd4>
8009064: 91000117 ldw r4,4(r18)
8009068: 98c01317 ldw r3,76(r19)
800906c: 8021d07a srai r16,r16,1
8009070: 200890ba slli r4,r4,2
8009074: 1907883a add r3,r3,r4
8009078: 19000017 ldw r4,0(r3)
800907c: 91000015 stw r4,0(r18)
8009080: 1c800015 stw r18,0(r3)
8009084: 1025883a mov r18,r2
8009088: 803fec1e bne r16,zero,800903c <__pow5mult+0x48>
800908c: 9005883a mov r2,r18
8009090: dfc00417 ldw ra,16(sp)
8009094: dcc00317 ldw r19,12(sp)
8009098: dc800217 ldw r18,8(sp)
800909c: dc400117 ldw r17,4(sp)
80090a0: dc000017 ldw r16,0(sp)
80090a4: dec00504 addi sp,sp,20
80090a8: f800283a ret
80090ac: 880d883a mov r6,r17
80090b0: 880b883a mov r5,r17
80090b4: 9809883a mov r4,r19
80090b8: 8008e080 call 8008e08 <__multiply>
80090bc: 88800015 stw r2,0(r17)
80090c0: 10000015 stw zero,0(r2)
80090c4: 003fdf06 br 8009044 <__pow5mult+0x50>
80090c8: 1025883a mov r18,r2
80090cc: 003fd906 br 8009034 <__pow5mult+0x40>
80090d0: 100490ba slli r2,r2,2
80090d4: 00c20134 movhi r3,2052
80090d8: 000f883a mov r7,zero
80090dc: 10c7883a add r3,r2,r3
80090e0: 199d3317 ldw r6,29900(r3)
80090e4: 8008a9c0 call 8008a9c <__multadd>
80090e8: 1025883a mov r18,r2
80090ec: 003fcc06 br 8009020 <__pow5mult+0x2c>
80090f0: 01400044 movi r5,1
80090f4: 9809883a mov r4,r19
80090f8: 80089d40 call 80089d4 <_Balloc>
80090fc: 1023883a mov r17,r2
8009100: 00809c44 movi r2,625
8009104: 88800515 stw r2,20(r17)
8009108: 00800044 movi r2,1
800910c: 88800415 stw r2,16(r17)
8009110: 9c401215 stw r17,72(r19)
8009114: 88000015 stw zero,0(r17)
8009118: 003fcb06 br 8009048 <__pow5mult+0x54>
0800911c <__lshift>:
800911c: defff904 addi sp,sp,-28
8009120: dcc00315 stw r19,12(sp)
8009124: dc400115 stw r17,4(sp)
8009128: 2cc00417 ldw r19,16(r5)
800912c: 3023d17a srai r17,r6,5
8009130: 28800217 ldw r2,8(r5)
8009134: dd400515 stw r21,20(sp)
8009138: 8ce7883a add r19,r17,r19
800913c: dd000415 stw r20,16(sp)
8009140: dc800215 stw r18,8(sp)
8009144: dc000015 stw r16,0(sp)
8009148: dfc00615 stw ra,24(sp)
800914c: 9c000044 addi r16,r19,1
8009150: 2825883a mov r18,r5
8009154: 302b883a mov r21,r6
8009158: 2029883a mov r20,r4
800915c: 29400117 ldw r5,4(r5)
8009160: 1400030e bge r2,r16,8009170 <__lshift+0x54>
8009164: 1085883a add r2,r2,r2
8009168: 29400044 addi r5,r5,1
800916c: 143ffd16 blt r2,r16,8009164 <__lshift+0x48>
8009170: a009883a mov r4,r20
8009174: 80089d40 call 80089d4 <_Balloc>
8009178: 11000504 addi r4,r2,20
800917c: 0440090e bge zero,r17,80091a4 <__lshift+0x88>
8009180: 8c400144 addi r17,r17,5
8009184: 882290ba slli r17,r17,2
8009188: 2007883a mov r3,r4
800918c: 144b883a add r5,r2,r17
8009190: 18c00104 addi r3,r3,4
8009194: 183fff15 stw zero,-4(r3)
8009198: 28fffd1e bne r5,r3,8009190 <__lshift+0x74>
800919c: 8c7ffb04 addi r17,r17,-20
80091a0: 2449883a add r4,r4,r17
80091a4: 92000417 ldw r8,16(r18)
80091a8: 90c00504 addi r3,r18,20
80091ac: a98007cc andi r6,r21,31
80091b0: 401090ba slli r8,r8,2
80091b4: 1a11883a add r8,r3,r8
80091b8: 30002126 beq r6,zero,8009240 <__lshift+0x124>
80091bc: 02400804 movi r9,32
80091c0: 4993c83a sub r9,r9,r6
80091c4: 000f883a mov r7,zero
80091c8: 19400017 ldw r5,0(r3)
80091cc: 21000104 addi r4,r4,4
80091d0: 18c00104 addi r3,r3,4
80091d4: 298a983a sll r5,r5,r6
80091d8: 29cab03a or r5,r5,r7
80091dc: 217fff15 stw r5,-4(r4)
80091e0: 197fff17 ldw r5,-4(r3)
80091e4: 2a4ed83a srl r7,r5,r9
80091e8: 1a3ff736 bltu r3,r8,80091c8 <__lshift+0xac>
80091ec: 21c00015 stw r7,0(r4)
80091f0: 38000126 beq r7,zero,80091f8 <__lshift+0xdc>
80091f4: 8027883a mov r19,r16
80091f8: 14c00415 stw r19,16(r2)
80091fc: 90000726 beq r18,zero,800921c <__lshift+0x100>
8009200: 91000117 ldw r4,4(r18)
8009204: a0c01317 ldw r3,76(r20)
8009208: 200890ba slli r4,r4,2
800920c: 1907883a add r3,r3,r4
8009210: 19000017 ldw r4,0(r3)
8009214: 91000015 stw r4,0(r18)
8009218: 1c800015 stw r18,0(r3)
800921c: dfc00617 ldw ra,24(sp)
8009220: dd400517 ldw r21,20(sp)
8009224: dd000417 ldw r20,16(sp)
8009228: dcc00317 ldw r19,12(sp)
800922c: dc800217 ldw r18,8(sp)
8009230: dc400117 ldw r17,4(sp)
8009234: dc000017 ldw r16,0(sp)
8009238: dec00704 addi sp,sp,28
800923c: f800283a ret
8009240: 18c00104 addi r3,r3,4
8009244: 197fff17 ldw r5,-4(r3)
8009248: 21000104 addi r4,r4,4
800924c: 217fff15 stw r5,-4(r4)
8009250: 1a3ffb36 bltu r3,r8,8009240 <__lshift+0x124>
8009254: 003fe806 br 80091f8 <__lshift+0xdc>
08009258 <__mcmp>:
8009258: 20800417 ldw r2,16(r4)
800925c: 28c00417 ldw r3,16(r5)
8009260: 10c5c83a sub r2,r2,r3
8009264: 10000e1e bne r2,zero,80092a0 <__mcmp+0x48>
8009268: 180c90ba slli r6,r3,2
800926c: 21000504 addi r4,r4,20
8009270: 29400504 addi r5,r5,20
8009274: 2187883a add r3,r4,r6
8009278: 298b883a add r5,r5,r6
800927c: 00000106 br 8009284 <__mcmp+0x2c>
8009280: 20c0082e bgeu r4,r3,80092a4 <__mcmp+0x4c>
8009284: 18ffff04 addi r3,r3,-4
8009288: 297fff04 addi r5,r5,-4
800928c: 19c00017 ldw r7,0(r3)
8009290: 29800017 ldw r6,0(r5)
8009294: 39bffa26 beq r7,r6,8009280 <__mcmp+0x28>
8009298: 3980032e bgeu r7,r6,80092a8 <__mcmp+0x50>
800929c: 00bfffc4 movi r2,-1
80092a0: f800283a ret
80092a4: f800283a ret
80092a8: 00800044 movi r2,1
80092ac: f800283a ret
080092b0 <__mdiff>:
80092b0: defffa04 addi sp,sp,-24
80092b4: dc800215 stw r18,8(sp)
80092b8: 30c00417 ldw r3,16(r6)
80092bc: 2c800417 ldw r18,16(r5)
80092c0: dd000415 stw r20,16(sp)
80092c4: dcc00315 stw r19,12(sp)
80092c8: dc400115 stw r17,4(sp)
80092cc: dc000015 stw r16,0(sp)
80092d0: dfc00515 stw ra,20(sp)
80092d4: 90e5c83a sub r18,r18,r3
80092d8: 2827883a mov r19,r5
80092dc: 3029883a mov r20,r6
80092e0: 2c000504 addi r16,r5,20
80092e4: 34400504 addi r17,r6,20
80092e8: 9000131e bne r18,zero,8009338 <__mdiff+0x88>
80092ec: 180690ba slli r3,r3,2
80092f0: 80c5883a add r2,r16,r3
80092f4: 88c7883a add r3,r17,r3
80092f8: 00000106 br 8009300 <__mdiff+0x50>
80092fc: 8080552e bgeu r16,r2,8009454 <__mdiff+0x1a4>
8009300: 10bfff04 addi r2,r2,-4
8009304: 18ffff04 addi r3,r3,-4
8009308: 11c00017 ldw r7,0(r2)
800930c: 19400017 ldw r5,0(r3)
8009310: 397ffa26 beq r7,r5,80092fc <__mdiff+0x4c>
8009314: 39400a2e bgeu r7,r5,8009340 <__mdiff+0x90>
8009318: 8007883a mov r3,r16
800931c: 9805883a mov r2,r19
8009320: 8821883a mov r16,r17
8009324: a027883a mov r19,r20
8009328: 1823883a mov r17,r3
800932c: 1029883a mov r20,r2
8009330: 04800044 movi r18,1
8009334: 00000206 br 8009340 <__mdiff+0x90>
8009338: 903ff716 blt r18,zero,8009318 <__mdiff+0x68>
800933c: 0025883a mov r18,zero
8009340: 99400117 ldw r5,4(r19)
8009344: 80089d40 call 80089d4 <_Balloc>
8009348: 9a400417 ldw r9,16(r19)
800934c: a2c00417 ldw r11,16(r20)
8009350: 12800504 addi r10,r2,20
8009354: 481090ba slli r8,r9,2
8009358: 581690ba slli r11,r11,2
800935c: 14800315 stw r18,12(r2)
8009360: 8211883a add r8,r16,r8
8009364: 8ad7883a add r11,r17,r11
8009368: 0007883a mov r3,zero
800936c: 00000106 br 8009374 <__mdiff+0xc4>
8009370: 3815883a mov r10,r7
8009374: 81000017 ldw r4,0(r16)
8009378: 89800017 ldw r6,0(r17)
800937c: 51c00104 addi r7,r10,4
8009380: 217fffcc andi r5,r4,65535
8009384: 28cb883a add r5,r5,r3
8009388: 30ffffcc andi r3,r6,65535
800938c: 28cbc83a sub r5,r5,r3
8009390: 300cd43a srli r6,r6,16
8009394: 2006d43a srli r3,r4,16
8009398: 2809d43a srai r4,r5,16
800939c: 297fffcc andi r5,r5,65535
80093a0: 1987c83a sub r3,r3,r6
80093a4: 1907883a add r3,r3,r4
80093a8: 1808943a slli r4,r3,16
80093ac: 8c400104 addi r17,r17,4
80093b0: 84000104 addi r16,r16,4
80093b4: 214ab03a or r5,r4,r5
80093b8: 397fff15 stw r5,-4(r7)
80093bc: 1807d43a srai r3,r3,16
80093c0: 8affeb36 bltu r17,r11,8009370 <__mdiff+0xc0>
80093c4: 8200152e bgeu r16,r8,800941c <__mdiff+0x16c>
80093c8: 3815883a mov r10,r7
80093cc: 800d883a mov r6,r16
80093d0: 31000017 ldw r4,0(r6)
80093d4: 52800104 addi r10,r10,4
80093d8: 31800104 addi r6,r6,4
80093dc: 217fffcc andi r5,r4,65535
80093e0: 28cb883a add r5,r5,r3
80093e4: 2817d43a srai r11,r5,16
80093e8: 2006d43a srli r3,r4,16
80093ec: 293fffcc andi r4,r5,65535
80093f0: 1ac7883a add r3,r3,r11
80093f4: 180a943a slli r5,r3,16
80093f8: 1807d43a srai r3,r3,16
80093fc: 290ab03a or r5,r5,r4
8009400: 517fff15 stw r5,-4(r10)
8009404: 323ff236 bltu r6,r8,80093d0 <__mdiff+0x120>
8009408: 42bfffc4 addi r10,r8,-1
800940c: 5415c83a sub r10,r10,r16
8009410: 5014d0ba srli r10,r10,2
8009414: 501490ba slli r10,r10,2
8009418: 3a95883a add r10,r7,r10
800941c: 2800041e bne r5,zero,8009430 <__mdiff+0x180>
8009420: 52bfff04 addi r10,r10,-4
8009424: 50c00017 ldw r3,0(r10)
8009428: 4a7fffc4 addi r9,r9,-1
800942c: 183ffc26 beq r3,zero,8009420 <__mdiff+0x170>
8009430: 12400415 stw r9,16(r2)
8009434: dfc00517 ldw ra,20(sp)
8009438: dd000417 ldw r20,16(sp)
800943c: dcc00317 ldw r19,12(sp)
8009440: dc800217 ldw r18,8(sp)
8009444: dc400117 ldw r17,4(sp)
8009448: dc000017 ldw r16,0(sp)
800944c: dec00604 addi sp,sp,24
8009450: f800283a ret
8009454: 000b883a mov r5,zero
8009458: 80089d40 call 80089d4 <_Balloc>
800945c: 00c00044 movi r3,1
8009460: 10c00415 stw r3,16(r2)
8009464: 10000515 stw zero,20(r2)
8009468: 003ff206 br 8009434 <__mdiff+0x184>
0800946c <__ulp>:
800946c: 295ffc2c andhi r5,r5,32752
8009470: 00ff3034 movhi r3,64704
8009474: 28c7883a add r3,r5,r3
8009478: 00c0020e bge zero,r3,8009484 <__ulp+0x18>
800947c: 0005883a mov r2,zero
8009480: f800283a ret
8009484: 00c7c83a sub r3,zero,r3
8009488: 1807d53a srai r3,r3,20
800948c: 18800508 cmpgei r2,r3,20
8009490: 1000041e bne r2,zero,80094a4 <__ulp+0x38>
8009494: 01400234 movhi r5,8
8009498: 28c7d83a sra r3,r5,r3
800949c: 0005883a mov r2,zero
80094a0: f800283a ret
80094a4: 193ffb04 addi r4,r3,-20
80094a8: 208007c8 cmpgei r2,r4,31
80094ac: 0007883a mov r3,zero
80094b0: 1000031e bne r2,zero,80094c0 <__ulp+0x54>
80094b4: 00a00034 movhi r2,32768
80094b8: 1104d83a srl r2,r2,r4
80094bc: f800283a ret
80094c0: 00800044 movi r2,1
80094c4: f800283a ret
080094c8 <__b2d>:
80094c8: defffa04 addi sp,sp,-24
80094cc: dc000015 stw r16,0(sp)
80094d0: 24000417 ldw r16,16(r4)
80094d4: dc800215 stw r18,8(sp)
80094d8: 24800504 addi r18,r4,20
80094dc: 802090ba slli r16,r16,2
80094e0: dc400115 stw r17,4(sp)
80094e4: dd000415 stw r20,16(sp)
80094e8: 9421883a add r16,r18,r16
80094ec: 847fff17 ldw r17,-4(r16)
80094f0: dcc00315 stw r19,12(sp)
80094f4: 2829883a mov r20,r5
80094f8: 8809883a mov r4,r17
80094fc: dfc00515 stw ra,20(sp)
8009500: 8008cc00 call 8008cc0 <__hi0bits>
8009504: 01000804 movi r4,32
8009508: 2087c83a sub r3,r4,r2
800950c: a0c00015 stw r3,0(r20)
8009510: 10c002c8 cmpgei r3,r2,11
8009514: 84ffff04 addi r19,r16,-4
8009518: 18001f26 beq r3,zero,8009598 <__b2d+0xd0>
800951c: 10fffd44 addi r3,r2,-11
8009520: 94c00e2e bgeu r18,r19,800955c <__b2d+0x94>
8009524: 80bffe17 ldw r2,-8(r16)
8009528: 18001226 beq r3,zero,8009574 <__b2d+0xac>
800952c: 20c9c83a sub r4,r4,r3
8009530: 110cd83a srl r6,r2,r4
8009534: 88e2983a sll r17,r17,r3
8009538: 10c4983a sll r2,r2,r3
800953c: 817ffe04 addi r5,r16,-8
8009540: 8986b03a or r3,r17,r6
8009544: 18cffc34 orhi r3,r3,16368
8009548: 91400b2e bgeu r18,r5,8009578 <__b2d+0xb0>
800954c: 817ffd17 ldw r5,-12(r16)
8009550: 2908d83a srl r4,r5,r4
8009554: 1104b03a or r2,r2,r4
8009558: 00000706 br 8009578 <__b2d+0xb0>
800955c: 18000426 beq r3,zero,8009570 <__b2d+0xa8>
8009560: 88c6983a sll r3,r17,r3
8009564: 0005883a mov r2,zero
8009568: 18cffc34 orhi r3,r3,16368
800956c: 00000206 br 8009578 <__b2d+0xb0>
8009570: 0005883a mov r2,zero
8009574: 88cffc34 orhi r3,r17,16368
8009578: dfc00517 ldw ra,20(sp)
800957c: dd000417 ldw r20,16(sp)
8009580: dcc00317 ldw r19,12(sp)
8009584: dc800217 ldw r18,8(sp)
8009588: dc400117 ldw r17,4(sp)
800958c: dc000017 ldw r16,0(sp)
8009590: dec00604 addi sp,sp,24
8009594: f800283a ret
8009598: 014002c4 movi r5,11
800959c: 2889c83a sub r4,r5,r2
80095a0: 8906d83a srl r3,r17,r4
80095a4: 18cffc34 orhi r3,r3,16368
80095a8: 94c00536 bltu r18,r19,80095c0 <__b2d+0xf8>
80095ac: 000b883a mov r5,zero
80095b0: 10800544 addi r2,r2,21
80095b4: 8884983a sll r2,r17,r2
80095b8: 1144b03a or r2,r2,r5
80095bc: 003fee06 br 8009578 <__b2d+0xb0>
80095c0: 817ffe17 ldw r5,-8(r16)
80095c4: 290ad83a srl r5,r5,r4
80095c8: 003ff906 br 80095b0 <__b2d+0xe8>
080095cc <__d2b>:
80095cc: defff804 addi sp,sp,-32
80095d0: dc400315 stw r17,12(sp)
80095d4: 3023883a mov r17,r6
80095d8: dd000615 stw r20,24(sp)
80095dc: dc000215 stw r16,8(sp)
80095e0: 2829883a mov r20,r5
80095e4: 8820d53a srli r16,r17,20
80095e8: 01400044 movi r5,1
80095ec: dcc00515 stw r19,20(sp)
80095f0: dc800415 stw r18,16(sp)
80095f4: dfc00715 stw ra,28(sp)
80095f8: 3825883a mov r18,r7
80095fc: 80089d40 call 80089d4 <_Balloc>
8009600: 01800434 movhi r6,16
8009604: 31bfffc4 addi r6,r6,-1
8009608: 8401ffcc andi r16,r16,2047
800960c: 1027883a mov r19,r2
8009610: 89a2703a and r17,r17,r6
8009614: 80000126 beq r16,zero,800961c <__d2b+0x50>
8009618: 8c400434 orhi r17,r17,16
800961c: dc400115 stw r17,4(sp)
8009620: a0002826 beq r20,zero,80096c4 <__d2b+0xf8>
8009624: d809883a mov r4,sp
8009628: dd000015 stw r20,0(sp)
800962c: 8008d240 call 8008d24 <__lo0bits>
8009630: d8c00117 ldw r3,4(sp)
8009634: 1000171e bne r2,zero,8009694 <__d2b+0xc8>
8009638: d9000017 ldw r4,0(sp)
800963c: 98c00615 stw r3,24(r19)
8009640: 99000515 stw r4,20(r19)
8009644: 18001d1e bne r3,zero,80096bc <__d2b+0xf0>
8009648: 04400044 movi r17,1
800964c: 9c400415 stw r17,16(r19)
8009650: 80002526 beq r16,zero,80096e8 <__d2b+0x11c>
8009654: 00c00d44 movi r3,53
8009658: 843ef344 addi r16,r16,-1075
800965c: 80a1883a add r16,r16,r2
8009660: 1885c83a sub r2,r3,r2
8009664: d8c00817 ldw r3,32(sp)
8009668: 94000015 stw r16,0(r18)
800966c: 18800015 stw r2,0(r3)
8009670: 9805883a mov r2,r19
8009674: dfc00717 ldw ra,28(sp)
8009678: dd000617 ldw r20,24(sp)
800967c: dcc00517 ldw r19,20(sp)
8009680: dc800417 ldw r18,16(sp)
8009684: dc400317 ldw r17,12(sp)
8009688: dc000217 ldw r16,8(sp)
800968c: dec00804 addi sp,sp,32
8009690: f800283a ret
8009694: 01000804 movi r4,32
8009698: 2089c83a sub r4,r4,r2
800969c: 1908983a sll r4,r3,r4
80096a0: d9400017 ldw r5,0(sp)
80096a4: 1886d83a srl r3,r3,r2
80096a8: 2148b03a or r4,r4,r5
80096ac: 99000515 stw r4,20(r19)
80096b0: d8c00115 stw r3,4(sp)
80096b4: 98c00615 stw r3,24(r19)
80096b8: 183fe326 beq r3,zero,8009648 <__d2b+0x7c>
80096bc: 04400084 movi r17,2
80096c0: 003fe206 br 800964c <__d2b+0x80>
80096c4: d9000104 addi r4,sp,4
80096c8: 8008d240 call 8008d24 <__lo0bits>
80096cc: 00c00044 movi r3,1
80096d0: 98c00415 stw r3,16(r19)
80096d4: d8c00117 ldw r3,4(sp)
80096d8: 10800804 addi r2,r2,32
80096dc: 04400044 movi r17,1
80096e0: 98c00515 stw r3,20(r19)
80096e4: 803fdb1e bne r16,zero,8009654 <__d2b+0x88>
80096e8: 880690ba slli r3,r17,2
80096ec: 10bef384 addi r2,r2,-1074
80096f0: 8822917a slli r17,r17,5
80096f4: 98c7883a add r3,r19,r3
80096f8: 19000417 ldw r4,16(r3)
80096fc: 90800015 stw r2,0(r18)
8009700: 8008cc00 call 8008cc0 <__hi0bits>
8009704: 88a3c83a sub r17,r17,r2
8009708: d8800817 ldw r2,32(sp)
800970c: 14400015 stw r17,0(r2)
8009710: 003fd706 br 8009670 <__d2b+0xa4>
08009714 <__ratio>:
8009714: defff904 addi sp,sp,-28
8009718: dc400315 stw r17,12(sp)
800971c: 2823883a mov r17,r5
8009720: d80b883a mov r5,sp
8009724: dfc00615 stw ra,24(sp)
8009728: dcc00515 stw r19,20(sp)
800972c: dc800415 stw r18,16(sp)
8009730: 2027883a mov r19,r4
8009734: dc000215 stw r16,8(sp)
8009738: 80094c80 call 80094c8 <__b2d>
800973c: d9400104 addi r5,sp,4
8009740: 8809883a mov r4,r17
8009744: 1025883a mov r18,r2
8009748: 1821883a mov r16,r3
800974c: 80094c80 call 80094c8 <__b2d>
8009750: 89400417 ldw r5,16(r17)
8009754: 99000417 ldw r4,16(r19)
8009758: d9800117 ldw r6,4(sp)
800975c: 2149c83a sub r4,r4,r5
8009760: d9400017 ldw r5,0(sp)
8009764: 2008917a slli r4,r4,5
8009768: 298bc83a sub r5,r5,r6
800976c: 2149883a add r4,r4,r5
8009770: 01000e0e bge zero,r4,80097ac <__ratio+0x98>
8009774: 2008953a slli r4,r4,20
8009778: 2421883a add r16,r4,r16
800977c: 100d883a mov r6,r2
8009780: 180f883a mov r7,r3
8009784: 9009883a mov r4,r18
8009788: 800b883a mov r5,r16
800978c: 800da580 call 800da58 <__divdf3>
8009790: dfc00617 ldw ra,24(sp)
8009794: dcc00517 ldw r19,20(sp)
8009798: dc800417 ldw r18,16(sp)
800979c: dc400317 ldw r17,12(sp)
80097a0: dc000217 ldw r16,8(sp)
80097a4: dec00704 addi sp,sp,28
80097a8: f800283a ret
80097ac: 017ffc34 movhi r5,65520
80097b0: 2149383a mul r4,r4,r5
80097b4: 20c7883a add r3,r4,r3
80097b8: 003ff006 br 800977c <__ratio+0x68>
080097bc <_mprec_log10>:
80097bc: defffe04 addi sp,sp,-8
80097c0: dc000015 stw r16,0(sp)
80097c4: dfc00115 stw ra,4(sp)
80097c8: 20800608 cmpgei r2,r4,24
80097cc: 2021883a mov r16,r4
80097d0: 10000d26 beq r2,zero,8009808 <_mprec_log10+0x4c>
80097d4: 0005883a mov r2,zero
80097d8: 00cffc34 movhi r3,16368
80097dc: 843fffc4 addi r16,r16,-1
80097e0: 000d883a mov r6,zero
80097e4: 01d00934 movhi r7,16420
80097e8: 1009883a mov r4,r2
80097ec: 180b883a mov r5,r3
80097f0: 800e5600 call 800e560 <__muldf3>
80097f4: 803ff91e bne r16,zero,80097dc <_mprec_log10+0x20>
80097f8: dfc00117 ldw ra,4(sp)
80097fc: dc000017 ldw r16,0(sp)
8009800: dec00204 addi sp,sp,8
8009804: f800283a ret
8009808: 202090fa slli r16,r4,3
800980c: 00820134 movhi r2,2052
8009810: 109d4b04 addi r2,r2,29996
8009814: 1421883a add r16,r2,r16
8009818: 80800017 ldw r2,0(r16)
800981c: 80c00117 ldw r3,4(r16)
8009820: dfc00117 ldw ra,4(sp)
8009824: dc000017 ldw r16,0(sp)
8009828: dec00204 addi sp,sp,8
800982c: f800283a ret
08009830 <__copybits>:
8009830: 29ffffc4 addi r7,r5,-1
8009834: 380fd17a srai r7,r7,5
8009838: 31400417 ldw r5,16(r6)
800983c: 30800504 addi r2,r6,20
8009840: 39c00044 addi r7,r7,1
8009844: 280a90ba slli r5,r5,2
8009848: 380e90ba slli r7,r7,2
800984c: 114b883a add r5,r2,r5
8009850: 21cf883a add r7,r4,r7
8009854: 11400c2e bgeu r2,r5,8009888 <__copybits+0x58>
8009858: 2007883a mov r3,r4
800985c: 10800104 addi r2,r2,4
8009860: 123fff17 ldw r8,-4(r2)
8009864: 18c00104 addi r3,r3,4
8009868: 1a3fff15 stw r8,-4(r3)
800986c: 117ffb36 bltu r2,r5,800985c <__copybits+0x2c>
8009870: 2985c83a sub r2,r5,r6
8009874: 10bffac4 addi r2,r2,-21
8009878: 1004d0ba srli r2,r2,2
800987c: 10800044 addi r2,r2,1
8009880: 100490ba slli r2,r2,2
8009884: 2089883a add r4,r4,r2
8009888: 21c0032e bgeu r4,r7,8009898 <__copybits+0x68>
800988c: 21000104 addi r4,r4,4
8009890: 203fff15 stw zero,-4(r4)
8009894: 21fffd36 bltu r4,r7,800988c <__copybits+0x5c>
8009898: f800283a ret
0800989c <__any_on>:
800989c: 20800417 ldw r2,16(r4)
80098a0: 280dd17a srai r6,r5,5
80098a4: 21000504 addi r4,r4,20
80098a8: 11800c0e bge r2,r6,80098dc <__any_on+0x40>
80098ac: 100690ba slli r3,r2,2
80098b0: 20c7883a add r3,r4,r3
80098b4: 20c0142e bgeu r4,r3,8009908 <__any_on+0x6c>
80098b8: 18bfff17 ldw r2,-4(r3)
80098bc: 18ffff04 addi r3,r3,-4
80098c0: 1000041e bne r2,zero,80098d4 <__any_on+0x38>
80098c4: 20c00f2e bgeu r4,r3,8009904 <__any_on+0x68>
80098c8: 18ffff04 addi r3,r3,-4
80098cc: 19400017 ldw r5,0(r3)
80098d0: 283ffc26 beq r5,zero,80098c4 <__any_on+0x28>
80098d4: 00800044 movi r2,1
80098d8: f800283a ret
80098dc: 300690ba slli r3,r6,2
80098e0: 20c7883a add r3,r4,r3
80098e4: 30bff30e bge r6,r2,80098b4 <__any_on+0x18>
80098e8: 294007cc andi r5,r5,31
80098ec: 283ff126 beq r5,zero,80098b4 <__any_on+0x18>
80098f0: 19800017 ldw r6,0(r3)
80098f4: 3144d83a srl r2,r6,r5
80098f8: 114a983a sll r5,r2,r5
80098fc: 317ff51e bne r6,r5,80098d4 <__any_on+0x38>
8009900: 003fec06 br 80098b4 <__any_on+0x18>
8009904: f800283a ret
8009908: 0005883a mov r2,zero
800990c: f800283a ret
08009910 <_putc_r>:
8009910: defffc04 addi sp,sp,-16
8009914: dc000215 stw r16,8(sp)
8009918: dfc00315 stw ra,12(sp)
800991c: 2021883a mov r16,r4
8009920: 20000226 beq r4,zero,800992c <_putc_r+0x1c>
8009924: 20800e17 ldw r2,56(r4)
8009928: 10000e26 beq r2,zero,8009964 <_putc_r+0x54>
800992c: 30800217 ldw r2,8(r6)
8009930: 10bfffc4 addi r2,r2,-1
8009934: 30800215 stw r2,8(r6)
8009938: 10001316 blt r2,zero,8009988 <_putc_r+0x78>
800993c: 30800017 ldw r2,0(r6)
8009940: 11400005 stb r5,0(r2)
8009944: 30800017 ldw r2,0(r6)
8009948: 10c00044 addi r3,r2,1
800994c: 30c00015 stw r3,0(r6)
8009950: 10800003 ldbu r2,0(r2)
8009954: dfc00317 ldw ra,12(sp)
8009958: dc000217 ldw r16,8(sp)
800995c: dec00404 addi sp,sp,16
8009960: f800283a ret
8009964: d9800115 stw r6,4(sp)
8009968: d9400015 stw r5,0(sp)
800996c: 80070600 call 8007060 <__sinit>
8009970: d9800117 ldw r6,4(sp)
8009974: d9400017 ldw r5,0(sp)
8009978: 30800217 ldw r2,8(r6)
800997c: 10bfffc4 addi r2,r2,-1
8009980: 30800215 stw r2,8(r6)
8009984: 103fed0e bge r2,zero,800993c <_putc_r+0x2c>
8009988: 30c00617 ldw r3,24(r6)
800998c: 10c00e16 blt r2,r3,80099c8 <_putc_r+0xb8>
8009990: 30800017 ldw r2,0(r6)
8009994: 11400005 stb r5,0(r2)
8009998: 30c00017 ldw r3,0(r6)
800999c: 18800003 ldbu r2,0(r3)
80099a0: 108002a0 cmpeqi r2,r2,10
80099a4: 1000071e bne r2,zero,80099c4 <_putc_r+0xb4>
80099a8: 18800044 addi r2,r3,1
80099ac: 30800015 stw r2,0(r6)
80099b0: 18800003 ldbu r2,0(r3)
80099b4: dfc00317 ldw ra,12(sp)
80099b8: dc000217 ldw r16,8(sp)
80099bc: dec00404 addi sp,sp,16
80099c0: f800283a ret
80099c4: 01400284 movi r5,10
80099c8: 8009883a mov r4,r16
80099cc: dfc00317 ldw ra,12(sp)
80099d0: dc000217 ldw r16,8(sp)
80099d4: dec00404 addi sp,sp,16
80099d8: 800b8141 jmpi 800b814 <__swbuf_r>
080099dc <putc>:
80099dc: defffc04 addi sp,sp,-16
80099e0: 00820174 movhi r2,2053
80099e4: dc000115 stw r16,4(sp)
80099e8: 1432af17 ldw r16,-13636(r2)
80099ec: dc400215 stw r17,8(sp)
80099f0: dfc00315 stw ra,12(sp)
80099f4: 2023883a mov r17,r4
80099f8: 80000226 beq r16,zero,8009a04 <putc+0x28>
80099fc: 80800e17 ldw r2,56(r16)
8009a00: 10000f26 beq r2,zero,8009a40 <putc+0x64>
8009a04: 28800217 ldw r2,8(r5)
8009a08: 10bfffc4 addi r2,r2,-1
8009a0c: 28800215 stw r2,8(r5)
8009a10: 10001316 blt r2,zero,8009a60 <putc+0x84>
8009a14: 28800017 ldw r2,0(r5)
8009a18: 14400005 stb r17,0(r2)
8009a1c: 28800017 ldw r2,0(r5)
8009a20: 10c00044 addi r3,r2,1
8009a24: 28c00015 stw r3,0(r5)
8009a28: 10800003 ldbu r2,0(r2)
8009a2c: dfc00317 ldw ra,12(sp)
8009a30: dc400217 ldw r17,8(sp)
8009a34: dc000117 ldw r16,4(sp)
8009a38: dec00404 addi sp,sp,16
8009a3c: f800283a ret
8009a40: 8009883a mov r4,r16
8009a44: d9400015 stw r5,0(sp)
8009a48: 80070600 call 8007060 <__sinit>
8009a4c: d9400017 ldw r5,0(sp)
8009a50: 28800217 ldw r2,8(r5)
8009a54: 10bfffc4 addi r2,r2,-1
8009a58: 28800215 stw r2,8(r5)
8009a5c: 103fed0e bge r2,zero,8009a14 <putc+0x38>
8009a60: 28c00617 ldw r3,24(r5)
8009a64: 10c00a16 blt r2,r3,8009a90 <putc+0xb4>
8009a68: 28800017 ldw r2,0(r5)
8009a6c: 14400005 stb r17,0(r2)
8009a70: 28c00017 ldw r3,0(r5)
8009a74: 18800003 ldbu r2,0(r3)
8009a78: 108002a0 cmpeqi r2,r2,10
8009a7c: 10000c1e bne r2,zero,8009ab0 <putc+0xd4>
8009a80: 18800044 addi r2,r3,1
8009a84: 28800015 stw r2,0(r5)
8009a88: 18800003 ldbu r2,0(r3)
8009a8c: 003fe706 br 8009a2c <putc+0x50>
8009a90: 280d883a mov r6,r5
8009a94: 880b883a mov r5,r17
8009a98: 8009883a mov r4,r16
8009a9c: dfc00317 ldw ra,12(sp)
8009aa0: dc400217 ldw r17,8(sp)
8009aa4: dc000117 ldw r16,4(sp)
8009aa8: dec00404 addi sp,sp,16
8009aac: 800b8141 jmpi 800b814 <__swbuf_r>
8009ab0: 280d883a mov r6,r5
8009ab4: 01400284 movi r5,10
8009ab8: 003ff706 br 8009a98 <putc+0xbc>
08009abc <_realloc_r>:
8009abc: defff504 addi sp,sp,-44
8009ac0: dcc00415 stw r19,16(sp)
8009ac4: dfc00a15 stw ra,40(sp)
8009ac8: df000915 stw fp,36(sp)
8009acc: ddc00815 stw r23,32(sp)
8009ad0: dd800715 stw r22,28(sp)
8009ad4: dd400615 stw r21,24(sp)
8009ad8: dd000515 stw r20,20(sp)
8009adc: dc800315 stw r18,12(sp)
8009ae0: dc400215 stw r17,8(sp)
8009ae4: dc000115 stw r16,4(sp)
8009ae8: 3027883a mov r19,r6
8009aec: 28008b26 beq r5,zero,8009d1c <_realloc_r+0x260>
8009af0: 282d883a mov r22,r5
8009af4: 202b883a mov r21,r4
8009af8: 9c0002c4 addi r16,r19,11
8009afc: 800fe0c0 call 800fe0c <__malloc_lock>
8009b00: 808005f0 cmpltui r2,r16,23
8009b04: 1000521e bne r2,zero,8009c50 <_realloc_r+0x194>
8009b08: 017ffe04 movi r5,-8
8009b0c: 8160703a and r16,r16,r5
8009b10: 8007883a mov r3,r16
8009b14: 80005116 blt r16,zero,8009c5c <_realloc_r+0x1a0>
8009b18: 84c05036 bltu r16,r19,8009c5c <_realloc_r+0x1a0>
8009b1c: b0bfff17 ldw r2,-4(r22)
8009b20: 017fff04 movi r5,-4
8009b24: b4bffe04 addi r18,r22,-8
8009b28: 1162703a and r17,r2,r5
8009b2c: 9469883a add r20,r18,r17
8009b30: 88c0390e bge r17,r3,8009c18 <_realloc_r+0x15c>
8009b34: 07020174 movhi fp,2053
8009b38: e72fa904 addi fp,fp,-16732
8009b3c: e2000217 ldw r8,8(fp)
8009b40: a1000117 ldw r4,4(r20)
8009b44: 45008e26 beq r8,r20,8009d80 <_realloc_r+0x2c4>
8009b48: 01bfff84 movi r6,-2
8009b4c: 218c703a and r6,r4,r6
8009b50: a18d883a add r6,r20,r6
8009b54: 31800117 ldw r6,4(r6)
8009b58: 3180004c andi r6,r6,1
8009b5c: 30004f1e bne r6,zero,8009c9c <_realloc_r+0x1e0>
8009b60: 2148703a and r4,r4,r5
8009b64: 890b883a add r5,r17,r4
8009b68: 28c0cb0e bge r5,r3,8009e98 <_realloc_r+0x3dc>
8009b6c: 1080004c andi r2,r2,1
8009b70: 10004c1e bne r2,zero,8009ca4 <_realloc_r+0x1e8>
8009b74: b1fffe17 ldw r7,-8(r22)
8009b78: 00bfff04 movi r2,-4
8009b7c: 91cfc83a sub r7,r18,r7
8009b80: 39400117 ldw r5,4(r7)
8009b84: 288a703a and r5,r5,r2
8009b88: a0000426 beq r20,zero,8009b9c <_realloc_r+0xe0>
8009b8c: 896f883a add r23,r17,r5
8009b90: b92f883a add r23,r23,r4
8009b94: 4500cb26 beq r8,r20,8009ec4 <_realloc_r+0x408>
8009b98: b8c0930e bge r23,r3,8009de8 <_realloc_r+0x32c>
8009b9c: 38004126 beq r7,zero,8009ca4 <_realloc_r+0x1e8>
8009ba0: 896f883a add r23,r17,r5
8009ba4: b8c03f16 blt r23,r3,8009ca4 <_realloc_r+0x1e8>
8009ba8: 38c00217 ldw r3,8(r7)
8009bac: 38800317 ldw r2,12(r7)
8009bb0: 89bfff04 addi r6,r17,-4
8009bb4: 31000968 cmpgeui r4,r6,37
8009bb8: 18800315 stw r2,12(r3)
8009bbc: 10c00215 stw r3,8(r2)
8009bc0: 3de9883a add r20,r7,r23
8009bc4: 38c00204 addi r3,r7,8
8009bc8: 2000f81e bne r4,zero,8009fac <_realloc_r+0x4f0>
8009bcc: 30800530 cmpltui r2,r6,20
8009bd0: b1000017 ldw r4,0(r22)
8009bd4: 1000eb1e bne r2,zero,8009f84 <_realloc_r+0x4c8>
8009bd8: 39000215 stw r4,8(r7)
8009bdc: b1000117 ldw r4,4(r22)
8009be0: 30800728 cmpgeui r2,r6,28
8009be4: 39000315 stw r4,12(r7)
8009be8: 1001041e bne r2,zero,8009ffc <_realloc_r+0x540>
8009bec: b1000217 ldw r4,8(r22)
8009bf0: 38800404 addi r2,r7,16
8009bf4: b5800204 addi r22,r22,8
8009bf8: 11000015 stw r4,0(r2)
8009bfc: b1000117 ldw r4,4(r22)
8009c00: b823883a mov r17,r23
8009c04: 3825883a mov r18,r7
8009c08: 11000115 stw r4,4(r2)
8009c0c: b1000217 ldw r4,8(r22)
8009c10: 182d883a mov r22,r3
8009c14: 11000215 stw r4,8(r2)
8009c18: 91800117 ldw r6,4(r18)
8009c1c: 8c05c83a sub r2,r17,r16
8009c20: 10c00430 cmpltui r3,r2,16
8009c24: 3180004c andi r6,r6,1
8009c28: 18004926 beq r3,zero,8009d50 <_realloc_r+0x294>
8009c2c: 898cb03a or r6,r17,r6
8009c30: 91800115 stw r6,4(r18)
8009c34: a0800117 ldw r2,4(r20)
8009c38: 10800054 ori r2,r2,1
8009c3c: a0800115 stw r2,4(r20)
8009c40: a809883a mov r4,r21
8009c44: 800ff2c0 call 800ff2c <__malloc_unlock>
8009c48: b027883a mov r19,r22
8009c4c: 00000606 br 8009c68 <_realloc_r+0x1ac>
8009c50: 04000404 movi r16,16
8009c54: 00c00404 movi r3,16
8009c58: 84ffb02e bgeu r16,r19,8009b1c <_realloc_r+0x60>
8009c5c: 00800304 movi r2,12
8009c60: a8800015 stw r2,0(r21)
8009c64: 0027883a mov r19,zero
8009c68: 9805883a mov r2,r19
8009c6c: dfc00a17 ldw ra,40(sp)
8009c70: df000917 ldw fp,36(sp)
8009c74: ddc00817 ldw r23,32(sp)
8009c78: dd800717 ldw r22,28(sp)
8009c7c: dd400617 ldw r21,24(sp)
8009c80: dd000517 ldw r20,20(sp)
8009c84: dcc00417 ldw r19,16(sp)
8009c88: dc800317 ldw r18,12(sp)
8009c8c: dc400217 ldw r17,8(sp)
8009c90: dc000117 ldw r16,4(sp)
8009c94: dec00b04 addi sp,sp,44
8009c98: f800283a ret
8009c9c: 1080004c andi r2,r2,1
8009ca0: 10007826 beq r2,zero,8009e84 <_realloc_r+0x3c8>
8009ca4: 980b883a mov r5,r19
8009ca8: a809883a mov r4,r21
8009cac: 8007ddc0 call 8007ddc <_malloc_r>
8009cb0: 1027883a mov r19,r2
8009cb4: 10001626 beq r2,zero,8009d10 <_realloc_r+0x254>
8009cb8: b0bfff17 ldw r2,-4(r22)
8009cbc: 013fff84 movi r4,-2
8009cc0: 98fffe04 addi r3,r19,-8
8009cc4: 1104703a and r2,r2,r4
8009cc8: 9085883a add r2,r18,r2
8009ccc: 10c06726 beq r2,r3,8009e6c <_realloc_r+0x3b0>
8009cd0: 89bfff04 addi r6,r17,-4
8009cd4: 30800968 cmpgeui r2,r6,37
8009cd8: 1000761e bne r2,zero,8009eb4 <_realloc_r+0x3f8>
8009cdc: 30800530 cmpltui r2,r6,20
8009ce0: b1000017 ldw r4,0(r22)
8009ce4: 10003726 beq r2,zero,8009dc4 <_realloc_r+0x308>
8009ce8: 9805883a mov r2,r19
8009cec: b007883a mov r3,r22
8009cf0: 11000015 stw r4,0(r2)
8009cf4: 19000117 ldw r4,4(r3)
8009cf8: 11000115 stw r4,4(r2)
8009cfc: 18c00217 ldw r3,8(r3)
8009d00: 10c00215 stw r3,8(r2)
8009d04: b00b883a mov r5,r22
8009d08: a809883a mov r4,r21
8009d0c: 80071c40 call 80071c4 <_free_r>
8009d10: a809883a mov r4,r21
8009d14: 800ff2c0 call 800ff2c <__malloc_unlock>
8009d18: 003fd306 br 8009c68 <_realloc_r+0x1ac>
8009d1c: 300b883a mov r5,r6
8009d20: dfc00a17 ldw ra,40(sp)
8009d24: df000917 ldw fp,36(sp)
8009d28: ddc00817 ldw r23,32(sp)
8009d2c: dd800717 ldw r22,28(sp)
8009d30: dd400617 ldw r21,24(sp)
8009d34: dd000517 ldw r20,20(sp)
8009d38: dcc00417 ldw r19,16(sp)
8009d3c: dc800317 ldw r18,12(sp)
8009d40: dc400217 ldw r17,8(sp)
8009d44: dc000117 ldw r16,4(sp)
8009d48: dec00b04 addi sp,sp,44
8009d4c: 8007ddc1 jmpi 8007ddc <_malloc_r>
8009d50: 340cb03a or r6,r6,r16
8009d54: 91800115 stw r6,4(r18)
8009d58: 940b883a add r5,r18,r16
8009d5c: 10800054 ori r2,r2,1
8009d60: 28800115 stw r2,4(r5)
8009d64: a0800117 ldw r2,4(r20)
8009d68: 29400204 addi r5,r5,8
8009d6c: a809883a mov r4,r21
8009d70: 10800054 ori r2,r2,1
8009d74: a0800115 stw r2,4(r20)
8009d78: 80071c40 call 80071c4 <_free_r>
8009d7c: 003fb006 br 8009c40 <_realloc_r+0x184>
8009d80: 2148703a and r4,r4,r5
8009d84: 890b883a add r5,r17,r4
8009d88: 81800404 addi r6,r16,16
8009d8c: 29bf7716 blt r5,r6,8009b6c <_realloc_r+0xb0>
8009d90: 9425883a add r18,r18,r16
8009d94: 2c05c83a sub r2,r5,r16
8009d98: e4800215 stw r18,8(fp)
8009d9c: 10800054 ori r2,r2,1
8009da0: 90800115 stw r2,4(r18)
8009da4: b0bfff17 ldw r2,-4(r22)
8009da8: a809883a mov r4,r21
8009dac: b027883a mov r19,r22
8009db0: 1080004c andi r2,r2,1
8009db4: 1420b03a or r16,r2,r16
8009db8: b43fff15 stw r16,-4(r22)
8009dbc: 800ff2c0 call 800ff2c <__malloc_unlock>
8009dc0: 003fa906 br 8009c68 <_realloc_r+0x1ac>
8009dc4: 99000015 stw r4,0(r19)
8009dc8: b0c00117 ldw r3,4(r22)
8009dcc: 30800728 cmpgeui r2,r6,28
8009dd0: 98c00115 stw r3,4(r19)
8009dd4: 1000611e bne r2,zero,8009f5c <_realloc_r+0x4a0>
8009dd8: b0c00204 addi r3,r22,8
8009ddc: 98800204 addi r2,r19,8
8009de0: b1000217 ldw r4,8(r22)
8009de4: 003fc206 br 8009cf0 <_realloc_r+0x234>
8009de8: a0800317 ldw r2,12(r20)
8009dec: a0c00217 ldw r3,8(r20)
8009df0: 89bfff04 addi r6,r17,-4
8009df4: 31000968 cmpgeui r4,r6,37
8009df8: 18800315 stw r2,12(r3)
8009dfc: 10c00215 stw r3,8(r2)
8009e00: 38c00217 ldw r3,8(r7)
8009e04: 38800317 ldw r2,12(r7)
8009e08: 3a000204 addi r8,r7,8
8009e0c: 3de9883a add r20,r7,r23
8009e10: 18800315 stw r2,12(r3)
8009e14: 10c00215 stw r3,8(r2)
8009e18: 20006f1e bne r4,zero,8009fd8 <_realloc_r+0x51c>
8009e1c: 30800530 cmpltui r2,r6,20
8009e20: b0c00017 ldw r3,0(r22)
8009e24: 10006a1e bne r2,zero,8009fd0 <_realloc_r+0x514>
8009e28: 38c00215 stw r3,8(r7)
8009e2c: b0c00117 ldw r3,4(r22)
8009e30: 30800728 cmpgeui r2,r6,28
8009e34: 38c00315 stw r3,12(r7)
8009e38: 10007a1e bne r2,zero,800a024 <_realloc_r+0x568>
8009e3c: b0c00217 ldw r3,8(r22)
8009e40: 38800404 addi r2,r7,16
8009e44: b5800204 addi r22,r22,8
8009e48: 10c00015 stw r3,0(r2)
8009e4c: b0c00117 ldw r3,4(r22)
8009e50: b823883a mov r17,r23
8009e54: 3825883a mov r18,r7
8009e58: 10c00115 stw r3,4(r2)
8009e5c: b0c00217 ldw r3,8(r22)
8009e60: 402d883a mov r22,r8
8009e64: 10c00215 stw r3,8(r2)
8009e68: 003f6b06 br 8009c18 <_realloc_r+0x15c>
8009e6c: 98bfff17 ldw r2,-4(r19)
8009e70: 00ffff04 movi r3,-4
8009e74: 10c4703a and r2,r2,r3
8009e78: 88a3883a add r17,r17,r2
8009e7c: 9469883a add r20,r18,r17
8009e80: 003f6506 br 8009c18 <_realloc_r+0x15c>
8009e84: b1fffe17 ldw r7,-8(r22)
8009e88: 91cfc83a sub r7,r18,r7
8009e8c: 39000117 ldw r4,4(r7)
8009e90: 214a703a and r5,r4,r5
8009e94: 003f4106 br 8009b9c <_realloc_r+0xe0>
8009e98: a0800317 ldw r2,12(r20)
8009e9c: a0c00217 ldw r3,8(r20)
8009ea0: 2823883a mov r17,r5
8009ea4: 9169883a add r20,r18,r5
8009ea8: 18800315 stw r2,12(r3)
8009eac: 10c00215 stw r3,8(r2)
8009eb0: 003f5906 br 8009c18 <_realloc_r+0x15c>
8009eb4: b00b883a mov r5,r22
8009eb8: 9809883a mov r4,r19
8009ebc: 80087b80 call 80087b8 <memmove>
8009ec0: 003f9006 br 8009d04 <_realloc_r+0x248>
8009ec4: 80800404 addi r2,r16,16
8009ec8: b8bf3416 blt r23,r2,8009b9c <_realloc_r+0xe0>
8009ecc: 38800317 ldw r2,12(r7)
8009ed0: 38c00217 ldw r3,8(r7)
8009ed4: 89bfff04 addi r6,r17,-4
8009ed8: 31000968 cmpgeui r4,r6,37
8009edc: 18800315 stw r2,12(r3)
8009ee0: 10c00215 stw r3,8(r2)
8009ee4: 3cc00204 addi r19,r7,8
8009ee8: 20005a1e bne r4,zero,800a054 <_realloc_r+0x598>
8009eec: 30800530 cmpltui r2,r6,20
8009ef0: b0c00017 ldw r3,0(r22)
8009ef4: 1000551e bne r2,zero,800a04c <_realloc_r+0x590>
8009ef8: 38c00215 stw r3,8(r7)
8009efc: b0c00117 ldw r3,4(r22)
8009f00: 30800728 cmpgeui r2,r6,28
8009f04: 38c00315 stw r3,12(r7)
8009f08: 1000661e bne r2,zero,800a0a4 <_realloc_r+0x5e8>
8009f0c: b0c00217 ldw r3,8(r22)
8009f10: 38800404 addi r2,r7,16
8009f14: b5800204 addi r22,r22,8
8009f18: 10c00015 stw r3,0(r2)
8009f1c: b0c00117 ldw r3,4(r22)
8009f20: 10c00115 stw r3,4(r2)
8009f24: b0c00217 ldw r3,8(r22)
8009f28: 10c00215 stw r3,8(r2)
8009f2c: 3c07883a add r3,r7,r16
8009f30: bc05c83a sub r2,r23,r16
8009f34: e0c00215 stw r3,8(fp)
8009f38: 10800054 ori r2,r2,1
8009f3c: 18800115 stw r2,4(r3)
8009f40: 38800117 ldw r2,4(r7)
8009f44: a809883a mov r4,r21
8009f48: 1080004c andi r2,r2,1
8009f4c: 1420b03a or r16,r2,r16
8009f50: 3c000115 stw r16,4(r7)
8009f54: 800ff2c0 call 800ff2c <__malloc_unlock>
8009f58: 003f4306 br 8009c68 <_realloc_r+0x1ac>
8009f5c: b0800217 ldw r2,8(r22)
8009f60: 31800920 cmpeqi r6,r6,36
8009f64: 98800215 stw r2,8(r19)
8009f68: b0800317 ldw r2,12(r22)
8009f6c: 98800315 stw r2,12(r19)
8009f70: 3000061e bne r6,zero,8009f8c <_realloc_r+0x4d0>
8009f74: b0c00404 addi r3,r22,16
8009f78: 98800404 addi r2,r19,16
8009f7c: b1000417 ldw r4,16(r22)
8009f80: 003f5b06 br 8009cf0 <_realloc_r+0x234>
8009f84: 1805883a mov r2,r3
8009f88: 003f1b06 br 8009bf8 <_realloc_r+0x13c>
8009f8c: b1000417 ldw r4,16(r22)
8009f90: b0c00604 addi r3,r22,24
8009f94: 98800604 addi r2,r19,24
8009f98: 99000415 stw r4,16(r19)
8009f9c: b1000517 ldw r4,20(r22)
8009fa0: 99000515 stw r4,20(r19)
8009fa4: b1000617 ldw r4,24(r22)
8009fa8: 003f5106 br 8009cf0 <_realloc_r+0x234>
8009fac: b00b883a mov r5,r22
8009fb0: 1809883a mov r4,r3
8009fb4: d9c00015 stw r7,0(sp)
8009fb8: 80087b80 call 80087b8 <memmove>
8009fbc: d9c00017 ldw r7,0(sp)
8009fc0: 102d883a mov r22,r2
8009fc4: b823883a mov r17,r23
8009fc8: 3825883a mov r18,r7
8009fcc: 003f1206 br 8009c18 <_realloc_r+0x15c>
8009fd0: 4005883a mov r2,r8
8009fd4: 003f9c06 br 8009e48 <_realloc_r+0x38c>
8009fd8: b00b883a mov r5,r22
8009fdc: 4009883a mov r4,r8
8009fe0: d9c00015 stw r7,0(sp)
8009fe4: 80087b80 call 80087b8 <memmove>
8009fe8: d9c00017 ldw r7,0(sp)
8009fec: 102d883a mov r22,r2
8009ff0: b823883a mov r17,r23
8009ff4: 3825883a mov r18,r7
8009ff8: 003f0706 br 8009c18 <_realloc_r+0x15c>
8009ffc: b0800217 ldw r2,8(r22)
800a000: 31800920 cmpeqi r6,r6,36
800a004: 38800415 stw r2,16(r7)
800a008: b0800317 ldw r2,12(r22)
800a00c: 38800515 stw r2,20(r7)
800a010: b1000417 ldw r4,16(r22)
800a014: 3000151e bne r6,zero,800a06c <_realloc_r+0x5b0>
800a018: 38800604 addi r2,r7,24
800a01c: b5800404 addi r22,r22,16
800a020: 003ef506 br 8009bf8 <_realloc_r+0x13c>
800a024: b0800217 ldw r2,8(r22)
800a028: 31800920 cmpeqi r6,r6,36
800a02c: 38800415 stw r2,16(r7)
800a030: b0800317 ldw r2,12(r22)
800a034: 38800515 stw r2,20(r7)
800a038: b0c00417 ldw r3,16(r22)
800a03c: 3000121e bne r6,zero,800a088 <_realloc_r+0x5cc>
800a040: 38800604 addi r2,r7,24
800a044: b5800404 addi r22,r22,16
800a048: 003f7f06 br 8009e48 <_realloc_r+0x38c>
800a04c: 9805883a mov r2,r19
800a050: 003fb106 br 8009f18 <_realloc_r+0x45c>
800a054: b00b883a mov r5,r22
800a058: 9809883a mov r4,r19
800a05c: d9c00015 stw r7,0(sp)
800a060: 80087b80 call 80087b8 <memmove>
800a064: d9c00017 ldw r7,0(sp)
800a068: 003fb006 br 8009f2c <_realloc_r+0x470>
800a06c: b5800604 addi r22,r22,24
800a070: 39000615 stw r4,24(r7)
800a074: b13fff17 ldw r4,-4(r22)
800a078: 38800804 addi r2,r7,32
800a07c: 39000715 stw r4,28(r7)
800a080: b1000017 ldw r4,0(r22)
800a084: 003edc06 br 8009bf8 <_realloc_r+0x13c>
800a088: b5800604 addi r22,r22,24
800a08c: 38c00615 stw r3,24(r7)
800a090: b0ffff17 ldw r3,-4(r22)
800a094: 38800804 addi r2,r7,32
800a098: 38c00715 stw r3,28(r7)
800a09c: b0c00017 ldw r3,0(r22)
800a0a0: 003f6906 br 8009e48 <_realloc_r+0x38c>
800a0a4: b0800217 ldw r2,8(r22)
800a0a8: 31800920 cmpeqi r6,r6,36
800a0ac: 38800415 stw r2,16(r7)
800a0b0: b0800317 ldw r2,12(r22)
800a0b4: 38800515 stw r2,20(r7)
800a0b8: b0c00417 ldw r3,16(r22)
800a0bc: 3000031e bne r6,zero,800a0cc <_realloc_r+0x610>
800a0c0: 38800604 addi r2,r7,24
800a0c4: b5800404 addi r22,r22,16
800a0c8: 003f9306 br 8009f18 <_realloc_r+0x45c>
800a0cc: b5800604 addi r22,r22,24
800a0d0: 38c00615 stw r3,24(r7)
800a0d4: b0ffff17 ldw r3,-4(r22)
800a0d8: 38800804 addi r2,r7,32
800a0dc: 38c00715 stw r3,28(r7)
800a0e0: b0c00017 ldw r3,0(r22)
800a0e4: 003f8c06 br 8009f18 <_realloc_r+0x45c>
0800a0e8 <__srget_r>:
800a0e8: defffd04 addi sp,sp,-12
800a0ec: dc400115 stw r17,4(sp)
800a0f0: dc000015 stw r16,0(sp)
800a0f4: dfc00215 stw ra,8(sp)
800a0f8: 2023883a mov r17,r4
800a0fc: 2821883a mov r16,r5
800a100: 20000226 beq r4,zero,800a10c <__srget_r+0x24>
800a104: 20800e17 ldw r2,56(r4)
800a108: 10001026 beq r2,zero,800a14c <__srget_r+0x64>
800a10c: 800b883a mov r5,r16
800a110: 8809883a mov r4,r17
800a114: 800c0580 call 800c058 <__srefill_r>
800a118: 10000e1e bne r2,zero,800a154 <__srget_r+0x6c>
800a11c: 80c00017 ldw r3,0(r16)
800a120: 80800117 ldw r2,4(r16)
800a124: 19000044 addi r4,r3,1
800a128: 10bfffc4 addi r2,r2,-1
800a12c: 80800115 stw r2,4(r16)
800a130: 81000015 stw r4,0(r16)
800a134: 18800003 ldbu r2,0(r3)
800a138: dfc00217 ldw ra,8(sp)
800a13c: dc400117 ldw r17,4(sp)
800a140: dc000017 ldw r16,0(sp)
800a144: dec00304 addi sp,sp,12
800a148: f800283a ret
800a14c: 80070600 call 8007060 <__sinit>
800a150: 003fee06 br 800a10c <__srget_r+0x24>
800a154: 00bfffc4 movi r2,-1
800a158: 003ff706 br 800a138 <__srget_r+0x50>
0800a15c <__srget>:
800a15c: 00820174 movhi r2,2053
800a160: 200b883a mov r5,r4
800a164: 1132af17 ldw r4,-13636(r2)
800a168: 800a0e81 jmpi 800a0e8 <__srget_r>
0800a16c <_sbrk_r>:
800a16c: defffe04 addi sp,sp,-8
800a170: dc000015 stw r16,0(sp)
800a174: 00820174 movhi r2,2053
800a178: 2021883a mov r16,r4
800a17c: 2809883a mov r4,r5
800a180: dfc00115 stw ra,4(sp)
800a184: 1032f015 stw zero,-13376(r2)
800a188: 800fc380 call 800fc38 <sbrk>
800a18c: 10ffffd8 cmpnei r3,r2,-1
800a190: 18000426 beq r3,zero,800a1a4 <_sbrk_r+0x38>
800a194: dfc00117 ldw ra,4(sp)
800a198: dc000017 ldw r16,0(sp)
800a19c: dec00204 addi sp,sp,8
800a1a0: f800283a ret
800a1a4: 00c20174 movhi r3,2053
800a1a8: 18f2f017 ldw r3,-13376(r3)
800a1ac: 183ff926 beq r3,zero,800a194 <_sbrk_r+0x28>
800a1b0: 80c00015 stw r3,0(r16)
800a1b4: dfc00117 ldw ra,4(sp)
800a1b8: dc000017 ldw r16,0(sp)
800a1bc: dec00204 addi sp,sp,8
800a1c0: f800283a ret
0800a1c4 <__sread>:
800a1c4: defffe04 addi sp,sp,-8
800a1c8: dc000015 stw r16,0(sp)
800a1cc: 2821883a mov r16,r5
800a1d0: 2940038f ldh r5,14(r5)
800a1d4: dfc00115 stw ra,4(sp)
800a1d8: 800bfd80 call 800bfd8 <_read_r>
800a1dc: 10000716 blt r2,zero,800a1fc <__sread+0x38>
800a1e0: 80c01417 ldw r3,80(r16)
800a1e4: 1887883a add r3,r3,r2
800a1e8: 80c01415 stw r3,80(r16)
800a1ec: dfc00117 ldw ra,4(sp)
800a1f0: dc000017 ldw r16,0(sp)
800a1f4: dec00204 addi sp,sp,8
800a1f8: f800283a ret
800a1fc: 80c0030b ldhu r3,12(r16)
800a200: 18fbffcc andi r3,r3,61439
800a204: 80c0030d sth r3,12(r16)
800a208: dfc00117 ldw ra,4(sp)
800a20c: dc000017 ldw r16,0(sp)
800a210: dec00204 addi sp,sp,8
800a214: f800283a ret
0800a218 <__seofread>:
800a218: 0005883a mov r2,zero
800a21c: f800283a ret
0800a220 <__swrite>:
800a220: 2880030b ldhu r2,12(r5)
800a224: defffb04 addi sp,sp,-20
800a228: dcc00315 stw r19,12(sp)
800a22c: dc800215 stw r18,8(sp)
800a230: dc400115 stw r17,4(sp)
800a234: dc000015 stw r16,0(sp)
800a238: dfc00415 stw ra,16(sp)
800a23c: 10c0400c andi r3,r2,256
800a240: 2821883a mov r16,r5
800a244: 2023883a mov r17,r4
800a248: 3025883a mov r18,r6
800a24c: 3827883a mov r19,r7
800a250: 2940038f ldh r5,14(r5)
800a254: 18000c1e bne r3,zero,800a288 <__swrite+0x68>
800a258: 10bbffcc andi r2,r2,61439
800a25c: 980f883a mov r7,r19
800a260: 900d883a mov r6,r18
800a264: 8809883a mov r4,r17
800a268: 8080030d sth r2,12(r16)
800a26c: dfc00417 ldw ra,16(sp)
800a270: dcc00317 ldw r19,12(sp)
800a274: dc800217 ldw r18,8(sp)
800a278: dc400117 ldw r17,4(sp)
800a27c: dc000017 ldw r16,0(sp)
800a280: dec00504 addi sp,sp,20
800a284: 800b9701 jmpi 800b970 <_write_r>
800a288: 01c00084 movi r7,2
800a28c: 000d883a mov r6,zero
800a290: 800bf240 call 800bf24 <_lseek_r>
800a294: 8080030b ldhu r2,12(r16)
800a298: 8140038f ldh r5,14(r16)
800a29c: 003fee06 br 800a258 <__swrite+0x38>
0800a2a0 <__sseek>:
800a2a0: defffe04 addi sp,sp,-8
800a2a4: dc000015 stw r16,0(sp)
800a2a8: 2821883a mov r16,r5
800a2ac: 2940038f ldh r5,14(r5)
800a2b0: dfc00115 stw ra,4(sp)
800a2b4: 800bf240 call 800bf24 <_lseek_r>
800a2b8: 10ffffd8 cmpnei r3,r2,-1
800a2bc: 18000826 beq r3,zero,800a2e0 <__sseek+0x40>
800a2c0: 80c0030b ldhu r3,12(r16)
800a2c4: 80801415 stw r2,80(r16)
800a2c8: 18c40014 ori r3,r3,4096
800a2cc: 80c0030d sth r3,12(r16)
800a2d0: dfc00117 ldw ra,4(sp)
800a2d4: dc000017 ldw r16,0(sp)
800a2d8: dec00204 addi sp,sp,8
800a2dc: f800283a ret
800a2e0: 80c0030b ldhu r3,12(r16)
800a2e4: 18fbffcc andi r3,r3,61439
800a2e8: 80c0030d sth r3,12(r16)
800a2ec: dfc00117 ldw ra,4(sp)
800a2f0: dc000017 ldw r16,0(sp)
800a2f4: dec00204 addi sp,sp,8
800a2f8: f800283a ret
0800a2fc <__sclose>:
800a2fc: 2940038f ldh r5,14(r5)
800a300: 800b9d41 jmpi 800b9d4 <_close_r>
0800a304 <__sprint_r.part.0>:
800a304: 28801917 ldw r2,100(r5)
800a308: defff604 addi sp,sp,-40
800a30c: dd000415 stw r20,16(sp)
800a310: dfc00915 stw ra,36(sp)
800a314: df000815 stw fp,32(sp)
800a318: ddc00715 stw r23,28(sp)
800a31c: dd800615 stw r22,24(sp)
800a320: dd400515 stw r21,20(sp)
800a324: dcc00315 stw r19,12(sp)
800a328: dc800215 stw r18,8(sp)
800a32c: dc400115 stw r17,4(sp)
800a330: dc000015 stw r16,0(sp)
800a334: 1088000c andi r2,r2,8192
800a338: 3029883a mov r20,r6
800a33c: 10002c26 beq r2,zero,800a3f0 <__sprint_r.part.0+0xec>
800a340: 30800217 ldw r2,8(r6)
800a344: 2823883a mov r17,r5
800a348: 2027883a mov r19,r4
800a34c: 35400017 ldw r21,0(r6)
800a350: 05ffff04 movi r23,-4
800a354: 10002426 beq r2,zero,800a3e8 <__sprint_r.part.0+0xe4>
800a358: ad800117 ldw r22,4(r21)
800a35c: ac000017 ldw r16,0(r21)
800a360: b024d0ba srli r18,r22,2
800a364: 90001b26 beq r18,zero,800a3d4 <__sprint_r.part.0+0xd0>
800a368: 0039883a mov fp,zero
800a36c: 00000206 br 800a378 <__sprint_r.part.0+0x74>
800a370: 84000104 addi r16,r16,4
800a374: 97001626 beq r18,fp,800a3d0 <__sprint_r.part.0+0xcc>
800a378: 81400017 ldw r5,0(r16)
800a37c: 880d883a mov r6,r17
800a380: 9809883a mov r4,r19
800a384: 800bd3c0 call 800bd3c <_fputwc_r>
800a388: 10bfffe0 cmpeqi r2,r2,-1
800a38c: e7000044 addi fp,fp,1
800a390: 103ff726 beq r2,zero,800a370 <__sprint_r.part.0+0x6c>
800a394: 00bfffc4 movi r2,-1
800a398: a0000215 stw zero,8(r20)
800a39c: a0000115 stw zero,4(r20)
800a3a0: dfc00917 ldw ra,36(sp)
800a3a4: df000817 ldw fp,32(sp)
800a3a8: ddc00717 ldw r23,28(sp)
800a3ac: dd800617 ldw r22,24(sp)
800a3b0: dd400517 ldw r21,20(sp)
800a3b4: dd000417 ldw r20,16(sp)
800a3b8: dcc00317 ldw r19,12(sp)
800a3bc: dc800217 ldw r18,8(sp)
800a3c0: dc400117 ldw r17,4(sp)
800a3c4: dc000017 ldw r16,0(sp)
800a3c8: dec00a04 addi sp,sp,40
800a3cc: f800283a ret
800a3d0: a0800217 ldw r2,8(r20)
800a3d4: b5ec703a and r22,r22,r23
800a3d8: 1585c83a sub r2,r2,r22
800a3dc: a0800215 stw r2,8(r20)
800a3e0: ad400204 addi r21,r21,8
800a3e4: 103fdc1e bne r2,zero,800a358 <__sprint_r.part.0+0x54>
800a3e8: 0005883a mov r2,zero
800a3ec: 003fea06 br 800a398 <__sprint_r.part.0+0x94>
800a3f0: 80074c00 call 80074c0 <__sfvwrite_r>
800a3f4: 003fe806 br 800a398 <__sprint_r.part.0+0x94>
0800a3f8 <__sprint_r>:
800a3f8: 30c00217 ldw r3,8(r6)
800a3fc: 18000126 beq r3,zero,800a404 <__sprint_r+0xc>
800a400: 800a3041 jmpi 800a304 <__sprint_r.part.0>
800a404: 30000115 stw zero,4(r6)
800a408: 0005883a mov r2,zero
800a40c: f800283a ret
0800a410 <___vfiprintf_internal_r>:
800a410: deffd004 addi sp,sp,-192
800a414: df002e15 stw fp,184(sp)
800a418: dcc02915 stw r19,164(sp)
800a41c: dc802815 stw r18,160(sp)
800a420: dfc02f15 stw ra,188(sp)
800a424: ddc02d15 stw r23,180(sp)
800a428: dd802c15 stw r22,176(sp)
800a42c: dd402b15 stw r21,172(sp)
800a430: dd002a15 stw r20,168(sp)
800a434: dc402715 stw r17,156(sp)
800a438: dc002615 stw r16,152(sp)
800a43c: d9c00315 stw r7,12(sp)
800a440: 2027883a mov r19,r4
800a444: 2825883a mov r18,r5
800a448: 3039883a mov fp,r6
800a44c: 20000226 beq r4,zero,800a458 <___vfiprintf_internal_r+0x48>
800a450: 20800e17 ldw r2,56(r4)
800a454: 1002b626 beq r2,zero,800af30 <___vfiprintf_internal_r+0xb20>
800a458: 9080030b ldhu r2,12(r18)
800a45c: 10c8000c andi r3,r2,8192
800a460: 1800061e bne r3,zero,800a47c <___vfiprintf_internal_r+0x6c>
800a464: 90c01917 ldw r3,100(r18)
800a468: 0137ffc4 movi r4,-8193
800a46c: 10880014 ori r2,r2,8192
800a470: 1906703a and r3,r3,r4
800a474: 9080030d sth r2,12(r18)
800a478: 90c01915 stw r3,100(r18)
800a47c: 10c0020c andi r3,r2,8
800a480: 18009426 beq r3,zero,800a6d4 <___vfiprintf_internal_r+0x2c4>
800a484: 90c00417 ldw r3,16(r18)
800a488: 18009226 beq r3,zero,800a6d4 <___vfiprintf_internal_r+0x2c4>
800a48c: 1080068c andi r2,r2,26
800a490: 10800298 cmpnei r2,r2,10
800a494: 10009726 beq r2,zero,800a6f4 <___vfiprintf_internal_r+0x2e4>
800a498: dc401604 addi r17,sp,88
800a49c: dc400915 stw r17,36(sp)
800a4a0: d8000b15 stw zero,44(sp)
800a4a4: d8000a15 stw zero,40(sp)
800a4a8: 8811883a mov r8,r17
800a4ac: d8000415 stw zero,16(sp)
800a4b0: d8000015 stw zero,0(sp)
800a4b4: e0800007 ldb r2,0(fp)
800a4b8: 1000a226 beq r2,zero,800a744 <___vfiprintf_internal_r+0x334>
800a4bc: 10800960 cmpeqi r2,r2,37
800a4c0: 1003e71e bne r2,zero,800b460 <___vfiprintf_internal_r+0x1050>
800a4c4: e021883a mov r16,fp
800a4c8: 00000206 br 800a4d4 <___vfiprintf_internal_r+0xc4>
800a4cc: 18009226 beq r3,zero,800a718 <___vfiprintf_internal_r+0x308>
800a4d0: a021883a mov r16,r20
800a4d4: 80800047 ldb r2,1(r16)
800a4d8: 85000044 addi r20,r16,1
800a4dc: 10c00958 cmpnei r3,r2,37
800a4e0: 103ffa1e bne r2,zero,800a4cc <___vfiprintf_internal_r+0xbc>
800a4e4: a72bc83a sub r21,r20,fp
800a4e8: a8009626 beq r21,zero,800a744 <___vfiprintf_internal_r+0x334>
800a4ec: d8c00b17 ldw r3,44(sp)
800a4f0: d8800a17 ldw r2,40(sp)
800a4f4: 47000015 stw fp,0(r8)
800a4f8: a8c7883a add r3,r21,r3
800a4fc: 10800044 addi r2,r2,1
800a500: d8800a15 stw r2,40(sp)
800a504: 45400115 stw r21,4(r8)
800a508: d8c00b15 stw r3,44(sp)
800a50c: 10800208 cmpgei r2,r2,8
800a510: 1000841e bne r2,zero,800a724 <___vfiprintf_internal_r+0x314>
800a514: 42000204 addi r8,r8,8
800a518: d8c00017 ldw r3,0(sp)
800a51c: 80800047 ldb r2,1(r16)
800a520: 1d47883a add r3,r3,r21
800a524: d8c00015 stw r3,0(sp)
800a528: 10008626 beq r2,zero,800a744 <___vfiprintf_internal_r+0x334>
800a52c: a0800047 ldb r2,1(r20)
800a530: a7000044 addi fp,r20,1
800a534: d8000845 stb zero,33(sp)
800a538: 000b883a mov r5,zero
800a53c: 000d883a mov r6,zero
800a540: 027fffc4 movi r9,-1
800a544: 0021883a mov r16,zero
800a548: 0019883a mov r12,zero
800a54c: e7000044 addi fp,fp,1
800a550: 10fff804 addi r3,r2,-32
800a554: 19001668 cmpgeui r4,r3,89
800a558: 20009c1e bne r4,zero,800a7cc <___vfiprintf_internal_r+0x3bc>
800a55c: 180690ba slli r3,r3,2
800a560: 01020074 movhi r4,2049
800a564: 1909883a add r4,r3,r4
800a568: 20e95c17 ldw r3,-23184(r4)
800a56c: 1800683a jmp r3
800a570: 0800a89c xori zero,at,674
800a574: 0800a7cc andi zero,at,671
800a578: 0800a7cc andi zero,at,671
800a57c: 0800a890 cmplti zero,at,674
800a580: 0800a7cc andi zero,at,671
800a584: 0800a7cc andi zero,at,671
800a588: 0800a7cc andi zero,at,671
800a58c: 0800a7cc andi zero,at,671
800a590: 0800a7cc andi zero,at,671
800a594: 0800a7cc andi zero,at,671
800a598: 0800a868 cmpgeui zero,at,673
800a59c: 0800a858 cmpnei zero,at,673
800a5a0: 0800a7cc andi zero,at,671
800a5a4: 0800a840 call 800a84 <OSCtxSw_SWITCH_PC+0x800a44>
800a5a8: 0800a7fc xorhi zero,at,671
800a5ac: 0800a7cc andi zero,at,671
800a5b0: 0800a7f0 cmpltui zero,at,671
800a5b4: 0800a79c xori zero,at,670
800a5b8: 0800a79c xori zero,at,670
800a5bc: 0800a79c xori zero,at,670
800a5c0: 0800a79c xori zero,at,670
800a5c4: 0800a79c xori zero,at,670
800a5c8: 0800a79c xori zero,at,670
800a5cc: 0800a79c xori zero,at,670
800a5d0: 0800a79c xori zero,at,670
800a5d4: 0800a79c xori zero,at,670
800a5d8: 0800a7cc andi zero,at,671
800a5dc: 0800a7cc andi zero,at,671
800a5e0: 0800a7cc andi zero,at,671
800a5e4: 0800a7cc andi zero,at,671
800a5e8: 0800a7cc andi zero,at,671
800a5ec: 0800a7cc andi zero,at,671
800a5f0: 0800a7cc andi zero,at,671
800a5f4: 0800a7cc andi zero,at,671
800a5f8: 0800a7cc andi zero,at,671
800a5fc: 0800a7cc andi zero,at,671
800a600: 0800ae58 cmpnei zero,at,697
800a604: 0800a7cc andi zero,at,671
800a608: 0800a7cc andi zero,at,671
800a60c: 0800a7cc andi zero,at,671
800a610: 0800a7cc andi zero,at,671
800a614: 0800a7cc andi zero,at,671
800a618: 0800a7cc andi zero,at,671
800a61c: 0800a7cc andi zero,at,671
800a620: 0800a7cc andi zero,at,671
800a624: 0800a7cc andi zero,at,671
800a628: 0800a7cc andi zero,at,671
800a62c: 0800adf0 cmpltui zero,at,695
800a630: 0800a7cc andi zero,at,671
800a634: 0800a7cc andi zero,at,671
800a638: 0800a7cc andi zero,at,671
800a63c: 0800a7cc andi zero,at,671
800a640: 0800a7cc andi zero,at,671
800a644: 0800ae24 muli zero,at,696
800a648: 0800a7cc andi zero,at,671
800a64c: 0800a7cc andi zero,at,671
800a650: 0800a9f4 orhi zero,at,679
800a654: 0800a7cc andi zero,at,671
800a658: 0800a7cc andi zero,at,671
800a65c: 0800a7cc andi zero,at,671
800a660: 0800a7cc andi zero,at,671
800a664: 0800a7cc andi zero,at,671
800a668: 0800a7cc andi zero,at,671
800a66c: 0800a7cc andi zero,at,671
800a670: 0800a7cc andi zero,at,671
800a674: 0800a7cc andi zero,at,671
800a678: 0800a7cc andi zero,at,671
800a67c: 0800ab90 cmplti zero,at,686
800a680: 0800ab1c xori zero,at,684
800a684: 0800a7cc andi zero,at,671
800a688: 0800a7cc andi zero,at,671
800a68c: 0800a7cc andi zero,at,671
800a690: 0800a924 muli zero,at,676
800a694: 0800ab1c xori zero,at,684
800a698: 0800a7cc andi zero,at,671
800a69c: 0800a7cc andi zero,at,671
800a6a0: 0800a910 cmplti zero,at,676
800a6a4: 0800a7cc andi zero,at,671
800a6a8: 0800aadc xori zero,at,683
800a6ac: 0800a9b4 orhi zero,at,678
800a6b0: 0800a93c xorhi zero,at,676
800a6b4: 0800a930 cmpltui zero,at,676
800a6b8: 0800a7cc andi zero,at,671
800a6bc: 0800aa7c xorhi zero,at,681
800a6c0: 0800a7cc andi zero,at,671
800a6c4: 0800aa3c xorhi zero,at,680
800a6c8: 0800a7cc andi zero,at,671
800a6cc: 0800a7cc andi zero,at,671
800a6d0: 0800a8c8 cmpgei zero,at,675
800a6d4: 900b883a mov r5,r18
800a6d8: 9809883a mov r4,r19
800a6dc: 800507c0 call 800507c <__swsetup_r>
800a6e0: 1004071e bne r2,zero,800b700 <___vfiprintf_internal_r+0x12f0>
800a6e4: 9080030b ldhu r2,12(r18)
800a6e8: 1080068c andi r2,r2,26
800a6ec: 10800298 cmpnei r2,r2,10
800a6f0: 103f691e bne r2,zero,800a498 <___vfiprintf_internal_r+0x88>
800a6f4: 9080038f ldh r2,14(r18)
800a6f8: 103f6716 blt r2,zero,800a498 <___vfiprintf_internal_r+0x88>
800a6fc: d9c00317 ldw r7,12(sp)
800a700: e00d883a mov r6,fp
800a704: 900b883a mov r5,r18
800a708: 9809883a mov r4,r19
800a70c: 800b7540 call 800b754 <__sbprintf>
800a710: d8800015 stw r2,0(sp)
800a714: 00001406 br 800a768 <___vfiprintf_internal_r+0x358>
800a718: a72bc83a sub r21,r20,fp
800a71c: a83f8326 beq r21,zero,800a52c <___vfiprintf_internal_r+0x11c>
800a720: 003f7206 br 800a4ec <___vfiprintf_internal_r+0xdc>
800a724: 18032b26 beq r3,zero,800b3d4 <___vfiprintf_internal_r+0xfc4>
800a728: d9800904 addi r6,sp,36
800a72c: 900b883a mov r5,r18
800a730: 9809883a mov r4,r19
800a734: 800a3040 call 800a304 <__sprint_r.part.0>
800a738: 1000081e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800a73c: 8811883a mov r8,r17
800a740: 003f7506 br 800a518 <___vfiprintf_internal_r+0x108>
800a744: d8800b17 ldw r2,44(sp)
800a748: 10000426 beq r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800a74c: d9800904 addi r6,sp,36
800a750: 900b883a mov r5,r18
800a754: 9809883a mov r4,r19
800a758: 800a3040 call 800a304 <__sprint_r.part.0>
800a75c: 9080030b ldhu r2,12(r18)
800a760: 1080100c andi r2,r2,64
800a764: 1003e61e bne r2,zero,800b700 <___vfiprintf_internal_r+0x12f0>
800a768: d8800017 ldw r2,0(sp)
800a76c: dfc02f17 ldw ra,188(sp)
800a770: df002e17 ldw fp,184(sp)
800a774: ddc02d17 ldw r23,180(sp)
800a778: dd802c17 ldw r22,176(sp)
800a77c: dd402b17 ldw r21,172(sp)
800a780: dd002a17 ldw r20,168(sp)
800a784: dcc02917 ldw r19,164(sp)
800a788: dc802817 ldw r18,160(sp)
800a78c: dc402717 ldw r17,156(sp)
800a790: dc002617 ldw r16,152(sp)
800a794: dec03004 addi sp,sp,192
800a798: f800283a ret
800a79c: 0021883a mov r16,zero
800a7a0: 10fff404 addi r3,r2,-48
800a7a4: e7000044 addi fp,fp,1
800a7a8: 840002a4 muli r16,r16,10
800a7ac: e0bfffc7 ldb r2,-1(fp)
800a7b0: 1c21883a add r16,r3,r16
800a7b4: 10fff404 addi r3,r2,-48
800a7b8: 190002b0 cmpltui r4,r3,10
800a7bc: 203ff91e bne r4,zero,800a7a4 <___vfiprintf_internal_r+0x394>
800a7c0: 10fff804 addi r3,r2,-32
800a7c4: 19001668 cmpgeui r4,r3,89
800a7c8: 203f6426 beq r4,zero,800a55c <___vfiprintf_internal_r+0x14c>
800a7cc: 29403fcc andi r5,r5,255
800a7d0: 2803a91e bne r5,zero,800b678 <___vfiprintf_internal_r+0x1268>
800a7d4: 103fdb26 beq r2,zero,800a744 <___vfiprintf_internal_r+0x334>
800a7d8: d8800c05 stb r2,48(sp)
800a7dc: d8000845 stb zero,33(sp)
800a7e0: 05400044 movi r21,1
800a7e4: 05800044 movi r22,1
800a7e8: ddc00c04 addi r23,sp,48
800a7ec: 0000f106 br 800abb4 <___vfiprintf_internal_r+0x7a4>
800a7f0: 63002014 ori r12,r12,128
800a7f4: e0800007 ldb r2,0(fp)
800a7f8: 003f5406 br 800a54c <___vfiprintf_internal_r+0x13c>
800a7fc: e0800007 ldb r2,0(fp)
800a800: e1000044 addi r4,fp,1
800a804: 10c00aa0 cmpeqi r3,r2,42
800a808: 1803c01e bne r3,zero,800b70c <___vfiprintf_internal_r+0x12fc>
800a80c: 10fff404 addi r3,r2,-48
800a810: 19c002b0 cmpltui r7,r3,10
800a814: 2039883a mov fp,r4
800a818: 0013883a mov r9,zero
800a81c: 383f4c26 beq r7,zero,800a550 <___vfiprintf_internal_r+0x140>
800a820: e7000044 addi fp,fp,1
800a824: 4a4002a4 muli r9,r9,10
800a828: e0bfffc7 ldb r2,-1(fp)
800a82c: 48d3883a add r9,r9,r3
800a830: 10fff404 addi r3,r2,-48
800a834: 190002b0 cmpltui r4,r3,10
800a838: 203ff91e bne r4,zero,800a820 <___vfiprintf_internal_r+0x410>
800a83c: 003f4406 br 800a550 <___vfiprintf_internal_r+0x140>
800a840: e0800003 ldbu r2,0(fp)
800a844: 10803fcc andi r2,r2,255
800a848: 1080201c xori r2,r2,128
800a84c: 63000114 ori r12,r12,4
800a850: 10bfe004 addi r2,r2,-128
800a854: 003f3d06 br 800a54c <___vfiprintf_internal_r+0x13c>
800a858: 01400044 movi r5,1
800a85c: 01800ac4 movi r6,43
800a860: e0800007 ldb r2,0(fp)
800a864: 003f3906 br 800a54c <___vfiprintf_internal_r+0x13c>
800a868: d8800317 ldw r2,12(sp)
800a86c: 14000017 ldw r16,0(r2)
800a870: 15c00104 addi r23,r2,4
800a874: e0800003 ldbu r2,0(fp)
800a878: 80031416 blt r16,zero,800b4cc <___vfiprintf_internal_r+0x10bc>
800a87c: ddc00315 stw r23,12(sp)
800a880: 10803fcc andi r2,r2,255
800a884: 1080201c xori r2,r2,128
800a888: 10bfe004 addi r2,r2,-128
800a88c: 003f2f06 br 800a54c <___vfiprintf_internal_r+0x13c>
800a890: 63000054 ori r12,r12,1
800a894: e0800007 ldb r2,0(fp)
800a898: 003f2c06 br 800a54c <___vfiprintf_internal_r+0x13c>
800a89c: 30c03fcc andi r3,r6,255
800a8a0: 18c0201c xori r3,r3,128
800a8a4: 18ffe004 addi r3,r3,-128
800a8a8: e0800003 ldbu r2,0(fp)
800a8ac: 183ff41e bne r3,zero,800a880 <___vfiprintf_internal_r+0x470>
800a8b0: 10803fcc andi r2,r2,255
800a8b4: 1080201c xori r2,r2,128
800a8b8: 01400044 movi r5,1
800a8bc: 01800804 movi r6,32
800a8c0: 10bfe004 addi r2,r2,-128
800a8c4: 003f2106 br 800a54c <___vfiprintf_internal_r+0x13c>
800a8c8: 29403fcc andi r5,r5,255
800a8cc: 2803741e bne r5,zero,800b6a0 <___vfiprintf_internal_r+0x1290>
800a8d0: 00c20134 movhi r3,2052
800a8d4: 18dd2004 addi r3,r3,29824
800a8d8: d8c00415 stw r3,16(sp)
800a8dc: 60c0080c andi r3,r12,32
800a8e0: 18004b26 beq r3,zero,800aa10 <___vfiprintf_internal_r+0x600>
800a8e4: d8c00317 ldw r3,12(sp)
800a8e8: 1d400017 ldw r21,0(r3)
800a8ec: 1d800117 ldw r22,4(r3)
800a8f0: 18c00204 addi r3,r3,8
800a8f4: d8c00315 stw r3,12(sp)
800a8f8: 60c0004c andi r3,r12,1
800a8fc: 18000226 beq r3,zero,800a908 <___vfiprintf_internal_r+0x4f8>
800a900: ad86b03a or r3,r21,r22
800a904: 1802df1e bne r3,zero,800b484 <___vfiprintf_internal_r+0x1074>
800a908: 00800084 movi r2,2
800a90c: 00001906 br 800a974 <___vfiprintf_internal_r+0x564>
800a910: e0800007 ldb r2,0(fp)
800a914: 10c01b18 cmpnei r3,r2,108
800a918: 18033026 beq r3,zero,800b5dc <___vfiprintf_internal_r+0x11cc>
800a91c: 63000414 ori r12,r12,16
800a920: 003f0a06 br 800a54c <___vfiprintf_internal_r+0x13c>
800a924: 63001014 ori r12,r12,64
800a928: e0800007 ldb r2,0(fp)
800a92c: 003f0706 br 800a54c <___vfiprintf_internal_r+0x13c>
800a930: 63000814 ori r12,r12,32
800a934: e0800007 ldb r2,0(fp)
800a938: 003f0406 br 800a54c <___vfiprintf_internal_r+0x13c>
800a93c: d8c00317 ldw r3,12(sp)
800a940: 00800c04 movi r2,48
800a944: d8800885 stb r2,34(sp)
800a948: 00801e04 movi r2,120
800a94c: 01020134 movhi r4,2052
800a950: d88008c5 stb r2,35(sp)
800a954: 1d400017 ldw r21,0(r3)
800a958: 18800104 addi r2,r3,4
800a95c: d8800315 stw r2,12(sp)
800a960: 209d2004 addi r2,r4,29824
800a964: d8800415 stw r2,16(sp)
800a968: 002d883a mov r22,zero
800a96c: 63000094 ori r12,r12,2
800a970: 00800084 movi r2,2
800a974: d8000845 stb zero,33(sp)
800a978: 48ffffe0 cmpeqi r3,r9,-1
800a97c: 001b883a mov r13,zero
800a980: 18014c1e bne r3,zero,800aeb4 <___vfiprintf_internal_r+0xaa4>
800a984: 053fdfc4 movi r20,-129
800a988: ad86b03a or r3,r21,r22
800a98c: 6528703a and r20,r12,r20
800a990: 1802411e bne r3,zero,800b298 <___vfiprintf_internal_r+0xe88>
800a994: 48030d1e bne r9,zero,800b5cc <___vfiprintf_internal_r+0x11bc>
800a998: 1000791e bne r2,zero,800ab80 <___vfiprintf_internal_r+0x770>
800a99c: 6580004c andi r22,r12,1
800a9a0: b002b126 beq r22,zero,800b468 <___vfiprintf_internal_r+0x1058>
800a9a4: 00800c04 movi r2,48
800a9a8: d88015c5 stb r2,87(sp)
800a9ac: ddc015c4 addi r23,sp,87
800a9b0: 00017e06 br 800afac <___vfiprintf_internal_r+0xb9c>
800a9b4: 29403fcc andi r5,r5,255
800a9b8: 2803461e bne r5,zero,800b6d4 <___vfiprintf_internal_r+0x12c4>
800a9bc: 6080080c andi r2,r12,32
800a9c0: 10016b1e bne r2,zero,800af70 <___vfiprintf_internal_r+0xb60>
800a9c4: d8800317 ldw r2,12(sp)
800a9c8: 60c0040c andi r3,r12,16
800a9cc: 15400017 ldw r21,0(r2)
800a9d0: 10800104 addi r2,r2,4
800a9d4: 18010d1e bne r3,zero,800ae0c <___vfiprintf_internal_r+0x9fc>
800a9d8: 60c0100c andi r3,r12,64
800a9dc: 18031326 beq r3,zero,800b62c <___vfiprintf_internal_r+0x121c>
800a9e0: d8800315 stw r2,12(sp)
800a9e4: ad7fffcc andi r21,r21,65535
800a9e8: 002d883a mov r22,zero
800a9ec: 0005883a mov r2,zero
800a9f0: 003fe006 br 800a974 <___vfiprintf_internal_r+0x564>
800a9f4: 29403fcc andi r5,r5,255
800a9f8: 2803251e bne r5,zero,800b690 <___vfiprintf_internal_r+0x1280>
800a9fc: 00c20134 movhi r3,2052
800aa00: 18dd1b04 addi r3,r3,29804
800aa04: d8c00415 stw r3,16(sp)
800aa08: 60c0080c andi r3,r12,32
800aa0c: 183fb51e bne r3,zero,800a8e4 <___vfiprintf_internal_r+0x4d4>
800aa10: d9000317 ldw r4,12(sp)
800aa14: 60c0040c andi r3,r12,16
800aa18: 25400017 ldw r21,0(r4)
800aa1c: 21000104 addi r4,r4,4
800aa20: d9000315 stw r4,12(sp)
800aa24: 18026e1e bne r3,zero,800b3e0 <___vfiprintf_internal_r+0xfd0>
800aa28: 60c0100c andi r3,r12,64
800aa2c: 18026c26 beq r3,zero,800b3e0 <___vfiprintf_internal_r+0xfd0>
800aa30: ad7fffcc andi r21,r21,65535
800aa34: 002d883a mov r22,zero
800aa38: 003faf06 br 800a8f8 <___vfiprintf_internal_r+0x4e8>
800aa3c: 29403fcc andi r5,r5,255
800aa40: 2803151e bne r5,zero,800b698 <___vfiprintf_internal_r+0x1288>
800aa44: 6080080c andi r2,r12,32
800aa48: 10013b1e bne r2,zero,800af38 <___vfiprintf_internal_r+0xb28>
800aa4c: d8800317 ldw r2,12(sp)
800aa50: 60c0040c andi r3,r12,16
800aa54: 15400017 ldw r21,0(r2)
800aa58: 10800104 addi r2,r2,4
800aa5c: 1800f81e bne r3,zero,800ae40 <___vfiprintf_internal_r+0xa30>
800aa60: 60c0100c andi r3,r12,64
800aa64: 1802ed26 beq r3,zero,800b61c <___vfiprintf_internal_r+0x120c>
800aa68: d8800315 stw r2,12(sp)
800aa6c: ad7fffcc andi r21,r21,65535
800aa70: 002d883a mov r22,zero
800aa74: 00800044 movi r2,1
800aa78: 003fbe06 br 800a974 <___vfiprintf_internal_r+0x564>
800aa7c: d8800317 ldw r2,12(sp)
800aa80: d8000845 stb zero,33(sp)
800aa84: 15c00017 ldw r23,0(r2)
800aa88: 15000104 addi r20,r2,4
800aa8c: b802da26 beq r23,zero,800b5f8 <___vfiprintf_internal_r+0x11e8>
800aa90: 48bfffe0 cmpeqi r2,r9,-1
800aa94: 1002901e bne r2,zero,800b4d8 <___vfiprintf_internal_r+0x10c8>
800aa98: 480d883a mov r6,r9
800aa9c: 000b883a mov r5,zero
800aaa0: b809883a mov r4,r23
800aaa4: da000315 stw r8,12(sp)
800aaa8: db000215 stw r12,8(sp)
800aaac: da400115 stw r9,4(sp)
800aab0: 80085d00 call 80085d0 <memchr>
800aab4: da400117 ldw r9,4(sp)
800aab8: db000217 ldw r12,8(sp)
800aabc: da000317 ldw r8,12(sp)
800aac0: 1002ef26 beq r2,zero,800b680 <___vfiprintf_internal_r+0x1270>
800aac4: 15edc83a sub r22,r2,r23
800aac8: b02b883a mov r21,r22
800aacc: b000010e bge r22,zero,800aad4 <___vfiprintf_internal_r+0x6c4>
800aad0: 002b883a mov r21,zero
800aad4: dd000315 stw r20,12(sp)
800aad8: 00003606 br 800abb4 <___vfiprintf_internal_r+0x7a4>
800aadc: 29403fcc andi r5,r5,255
800aae0: 2802fa1e bne r5,zero,800b6cc <___vfiprintf_internal_r+0x12bc>
800aae4: d9000317 ldw r4,12(sp)
800aae8: 6080080c andi r2,r12,32
800aaec: 20c00104 addi r3,r4,4
800aaf0: 10026a1e bne r2,zero,800b49c <___vfiprintf_internal_r+0x108c>
800aaf4: 6080040c andi r2,r12,16
800aaf8: 1002891e bne r2,zero,800b520 <___vfiprintf_internal_r+0x1110>
800aafc: 6300100c andi r12,r12,64
800ab00: 60028726 beq r12,zero,800b520 <___vfiprintf_internal_r+0x1110>
800ab04: d8800317 ldw r2,12(sp)
800ab08: d8c00315 stw r3,12(sp)
800ab0c: d8c00017 ldw r3,0(sp)
800ab10: 10800017 ldw r2,0(r2)
800ab14: 10c0000d sth r3,0(r2)
800ab18: 003e6606 br 800a4b4 <___vfiprintf_internal_r+0xa4>
800ab1c: 29403fcc andi r5,r5,255
800ab20: 2802e81e bne r5,zero,800b6c4 <___vfiprintf_internal_r+0x12b4>
800ab24: 6080080c andi r2,r12,32
800ab28: 10010a1e bne r2,zero,800af54 <___vfiprintf_internal_r+0xb44>
800ab2c: d8800317 ldw r2,12(sp)
800ab30: 60c0040c andi r3,r12,16
800ab34: 10800104 addi r2,r2,4
800ab38: 1800ce1e bne r3,zero,800ae74 <___vfiprintf_internal_r+0xa64>
800ab3c: 60c0100c andi r3,r12,64
800ab40: 1800cc26 beq r3,zero,800ae74 <___vfiprintf_internal_r+0xa64>
800ab44: d8c00317 ldw r3,12(sp)
800ab48: d8800315 stw r2,12(sp)
800ab4c: 1d40000f ldh r21,0(r3)
800ab50: a82dd7fa srai r22,r21,31
800ab54: b005883a mov r2,r22
800ab58: 1000cc16 blt r2,zero,800ae8c <___vfiprintf_internal_r+0xa7c>
800ab5c: 48bfffd8 cmpnei r2,r9,-1
800ab60: db400843 ldbu r13,33(sp)
800ab64: 10010926 beq r2,zero,800af8c <___vfiprintf_internal_r+0xb7c>
800ab68: 00ffdfc4 movi r3,-129
800ab6c: ad84b03a or r2,r21,r22
800ab70: 60d8703a and r12,r12,r3
800ab74: 1001051e bne r2,zero,800af8c <___vfiprintf_internal_r+0xb7c>
800ab78: 4801071e bne r9,zero,800af98 <___vfiprintf_internal_r+0xb88>
800ab7c: 6029883a mov r20,r12
800ab80: 0013883a mov r9,zero
800ab84: 002d883a mov r22,zero
800ab88: 882f883a mov r23,r17
800ab8c: 00010706 br 800afac <___vfiprintf_internal_r+0xb9c>
800ab90: d8c00317 ldw r3,12(sp)
800ab94: d8000845 stb zero,33(sp)
800ab98: 05400044 movi r21,1
800ab9c: 18800017 ldw r2,0(r3)
800aba0: 18c00104 addi r3,r3,4
800aba4: d8c00315 stw r3,12(sp)
800aba8: d8800c05 stb r2,48(sp)
800abac: 05800044 movi r22,1
800abb0: ddc00c04 addi r23,sp,48
800abb4: 6029883a mov r20,r12
800abb8: 0013883a mov r9,zero
800abbc: a340008c andi r13,r20,2
800abc0: 68000126 beq r13,zero,800abc8 <___vfiprintf_internal_r+0x7b8>
800abc4: ad400084 addi r21,r21,2
800abc8: d9000a17 ldw r4,40(sp)
800abcc: a300210c andi r12,r20,132
800abd0: d8800b17 ldw r2,44(sp)
800abd4: 21800044 addi r6,r4,1
800abd8: 300b883a mov r5,r6
800abdc: 6000021e bne r12,zero,800abe8 <___vfiprintf_internal_r+0x7d8>
800abe0: 8547c83a sub r3,r16,r21
800abe4: 00c1ae16 blt zero,r3,800b2a0 <___vfiprintf_internal_r+0xe90>
800abe8: d9800847 ldb r6,33(sp)
800abec: 40c00204 addi r3,r8,8
800abf0: 30000d26 beq r6,zero,800ac28 <___vfiprintf_internal_r+0x818>
800abf4: d9000844 addi r4,sp,33
800abf8: 10800044 addi r2,r2,1
800abfc: 41000015 stw r4,0(r8)
800ac00: 01000044 movi r4,1
800ac04: 41000115 stw r4,4(r8)
800ac08: d8800b15 stw r2,44(sp)
800ac0c: d9400a15 stw r5,40(sp)
800ac10: 29000208 cmpgei r4,r5,8
800ac14: 2001831e bne r4,zero,800b224 <___vfiprintf_internal_r+0xe14>
800ac18: 2809883a mov r4,r5
800ac1c: 1811883a mov r8,r3
800ac20: 29400044 addi r5,r5,1
800ac24: 18c00204 addi r3,r3,8
800ac28: 68001826 beq r13,zero,800ac8c <___vfiprintf_internal_r+0x87c>
800ac2c: d9000884 addi r4,sp,34
800ac30: 10800084 addi r2,r2,2
800ac34: 41000015 stw r4,0(r8)
800ac38: 01000084 movi r4,2
800ac3c: 41000115 stw r4,4(r8)
800ac40: d8800b15 stw r2,44(sp)
800ac44: d9400a15 stw r5,40(sp)
800ac48: 29000208 cmpgei r4,r5,8
800ac4c: 20018d26 beq r4,zero,800b284 <___vfiprintf_internal_r+0xe74>
800ac50: 1001ed26 beq r2,zero,800b408 <___vfiprintf_internal_r+0xff8>
800ac54: d9800904 addi r6,sp,36
800ac58: 900b883a mov r5,r18
800ac5c: 9809883a mov r4,r19
800ac60: da400215 stw r9,8(sp)
800ac64: db000115 stw r12,4(sp)
800ac68: 800a3040 call 800a304 <__sprint_r.part.0>
800ac6c: 103ebb1e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800ac70: d9000a17 ldw r4,40(sp)
800ac74: d8800b17 ldw r2,44(sp)
800ac78: da400217 ldw r9,8(sp)
800ac7c: db000117 ldw r12,4(sp)
800ac80: d8c01804 addi r3,sp,96
800ac84: 21400044 addi r5,r4,1
800ac88: 8811883a mov r8,r17
800ac8c: 63002018 cmpnei r12,r12,128
800ac90: 6000e326 beq r12,zero,800b020 <___vfiprintf_internal_r+0xc10>
800ac94: 4d93c83a sub r9,r9,r22
800ac98: 02412216 blt zero,r9,800b124 <___vfiprintf_internal_r+0xd14>
800ac9c: b085883a add r2,r22,r2
800aca0: d9400a15 stw r5,40(sp)
800aca4: 45c00015 stw r23,0(r8)
800aca8: 45800115 stw r22,4(r8)
800acac: d8800b15 stw r2,44(sp)
800acb0: 29400210 cmplti r5,r5,8
800acb4: 2800081e bne r5,zero,800acd8 <___vfiprintf_internal_r+0x8c8>
800acb8: 10001426 beq r2,zero,800ad0c <___vfiprintf_internal_r+0x8fc>
800acbc: d9800904 addi r6,sp,36
800acc0: 900b883a mov r5,r18
800acc4: 9809883a mov r4,r19
800acc8: 800a3040 call 800a304 <__sprint_r.part.0>
800accc: 103ea31e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800acd0: d8800b17 ldw r2,44(sp)
800acd4: 8807883a mov r3,r17
800acd8: a500010c andi r20,r20,4
800acdc: a0000226 beq r20,zero,800ace8 <___vfiprintf_internal_r+0x8d8>
800ace0: 8569c83a sub r20,r16,r21
800ace4: 05000f16 blt zero,r20,800ad24 <___vfiprintf_internal_r+0x914>
800ace8: 8540010e bge r16,r21,800acf0 <___vfiprintf_internal_r+0x8e0>
800acec: a821883a mov r16,r21
800acf0: d8c00017 ldw r3,0(sp)
800acf4: 1c07883a add r3,r3,r16
800acf8: d8c00015 stw r3,0(sp)
800acfc: 10013f1e bne r2,zero,800b1fc <___vfiprintf_internal_r+0xdec>
800ad00: d8000a15 stw zero,40(sp)
800ad04: 8811883a mov r8,r17
800ad08: 003dea06 br 800a4b4 <___vfiprintf_internal_r+0xa4>
800ad0c: d8000a15 stw zero,40(sp)
800ad10: a500010c andi r20,r20,4
800ad14: a0019d26 beq r20,zero,800b38c <___vfiprintf_internal_r+0xf7c>
800ad18: 8569c83a sub r20,r16,r21
800ad1c: 05019b0e bge zero,r20,800b38c <___vfiprintf_internal_r+0xf7c>
800ad20: 8807883a mov r3,r17
800ad24: a1000450 cmplti r4,r20,17
800ad28: 01c20134 movhi r7,2052
800ad2c: d9400a17 ldw r5,40(sp)
800ad30: 20026c1e bne r4,zero,800b6e4 <___vfiprintf_internal_r+0x12d4>
800ad34: 39dd8104 addi r7,r7,30212
800ad38: 05800404 movi r22,16
800ad3c: 00000606 br 800ad58 <___vfiprintf_internal_r+0x948>
800ad40: 29800084 addi r6,r5,2
800ad44: 18c00204 addi r3,r3,8
800ad48: 200b883a mov r5,r4
800ad4c: a53ffc04 addi r20,r20,-16
800ad50: a1000448 cmpgei r4,r20,17
800ad54: 20001726 beq r4,zero,800adb4 <___vfiprintf_internal_r+0x9a4>
800ad58: 29000044 addi r4,r5,1
800ad5c: 10800404 addi r2,r2,16
800ad60: 19c00015 stw r7,0(r3)
800ad64: 1d800115 stw r22,4(r3)
800ad68: d8800b15 stw r2,44(sp)
800ad6c: d9000a15 stw r4,40(sp)
800ad70: 21800208 cmpgei r6,r4,8
800ad74: 303ff226 beq r6,zero,800ad40 <___vfiprintf_internal_r+0x930>
800ad78: d9800904 addi r6,sp,36
800ad7c: 900b883a mov r5,r18
800ad80: 9809883a mov r4,r19
800ad84: 1000a226 beq r2,zero,800b010 <___vfiprintf_internal_r+0xc00>
800ad88: d9c00115 stw r7,4(sp)
800ad8c: 800a3040 call 800a304 <__sprint_r.part.0>
800ad90: 103e721e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800ad94: d9400a17 ldw r5,40(sp)
800ad98: a53ffc04 addi r20,r20,-16
800ad9c: a1000448 cmpgei r4,r20,17
800ada0: d8800b17 ldw r2,44(sp)
800ada4: 8807883a mov r3,r17
800ada8: 29800044 addi r6,r5,1
800adac: d9c00117 ldw r7,4(sp)
800adb0: 203fe91e bne r4,zero,800ad58 <___vfiprintf_internal_r+0x948>
800adb4: 1505883a add r2,r2,r20
800adb8: d9800a15 stw r6,40(sp)
800adbc: 19c00015 stw r7,0(r3)
800adc0: 1d000115 stw r20,4(r3)
800adc4: d8800b15 stw r2,44(sp)
800adc8: 31800210 cmplti r6,r6,8
800adcc: 303fc61e bne r6,zero,800ace8 <___vfiprintf_internal_r+0x8d8>
800add0: 10016e26 beq r2,zero,800b38c <___vfiprintf_internal_r+0xf7c>
800add4: d9800904 addi r6,sp,36
800add8: 900b883a mov r5,r18
800addc: 9809883a mov r4,r19
800ade0: 800a3040 call 800a304 <__sprint_r.part.0>
800ade4: 103e5d1e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800ade8: d8800b17 ldw r2,44(sp)
800adec: 003fbe06 br 800ace8 <___vfiprintf_internal_r+0x8d8>
800adf0: 29403fcc andi r5,r5,255
800adf4: 28022c1e bne r5,zero,800b6a8 <___vfiprintf_internal_r+0x1298>
800adf8: 6080080c andi r2,r12,32
800adfc: 63000414 ori r12,r12,16
800ae00: 10005b1e bne r2,zero,800af70 <___vfiprintf_internal_r+0xb60>
800ae04: d8800317 ldw r2,12(sp)
800ae08: 10800104 addi r2,r2,4
800ae0c: d8c00317 ldw r3,12(sp)
800ae10: 002d883a mov r22,zero
800ae14: d8800315 stw r2,12(sp)
800ae18: 1d400017 ldw r21,0(r3)
800ae1c: 0005883a mov r2,zero
800ae20: 003ed406 br 800a974 <___vfiprintf_internal_r+0x564>
800ae24: 29403fcc andi r5,r5,255
800ae28: 2802211e bne r5,zero,800b6b0 <___vfiprintf_internal_r+0x12a0>
800ae2c: 6080080c andi r2,r12,32
800ae30: 63000414 ori r12,r12,16
800ae34: 1000401e bne r2,zero,800af38 <___vfiprintf_internal_r+0xb28>
800ae38: d8800317 ldw r2,12(sp)
800ae3c: 10800104 addi r2,r2,4
800ae40: d8c00317 ldw r3,12(sp)
800ae44: 002d883a mov r22,zero
800ae48: d8800315 stw r2,12(sp)
800ae4c: 1d400017 ldw r21,0(r3)
800ae50: 00800044 movi r2,1
800ae54: 003ec706 br 800a974 <___vfiprintf_internal_r+0x564>
800ae58: 29403fcc andi r5,r5,255
800ae5c: 28021f1e bne r5,zero,800b6dc <___vfiprintf_internal_r+0x12cc>
800ae60: 6080080c andi r2,r12,32
800ae64: 63000414 ori r12,r12,16
800ae68: 10003a1e bne r2,zero,800af54 <___vfiprintf_internal_r+0xb44>
800ae6c: d8800317 ldw r2,12(sp)
800ae70: 10800104 addi r2,r2,4
800ae74: d8c00317 ldw r3,12(sp)
800ae78: 1d400017 ldw r21,0(r3)
800ae7c: d8800315 stw r2,12(sp)
800ae80: a82dd7fa srai r22,r21,31
800ae84: b005883a mov r2,r22
800ae88: 103f340e bge r2,zero,800ab5c <___vfiprintf_internal_r+0x74c>
800ae8c: 056bc83a sub r21,zero,r21
800ae90: a804c03a cmpne r2,r21,zero
800ae94: 05adc83a sub r22,zero,r22
800ae98: b0adc83a sub r22,r22,r2
800ae9c: 00800b44 movi r2,45
800aea0: d8800845 stb r2,33(sp)
800aea4: 48ffffe0 cmpeqi r3,r9,-1
800aea8: 03400b44 movi r13,45
800aeac: 00800044 movi r2,1
800aeb0: 183eb426 beq r3,zero,800a984 <___vfiprintf_internal_r+0x574>
800aeb4: 10c00060 cmpeqi r3,r2,1
800aeb8: 1800341e bne r3,zero,800af8c <___vfiprintf_internal_r+0xb7c>
800aebc: 108000a0 cmpeqi r2,r2,2
800aec0: 1000431e bne r2,zero,800afd0 <___vfiprintf_internal_r+0xbc0>
800aec4: 8807883a mov r3,r17
800aec8: 00000106 br 800aed0 <___vfiprintf_internal_r+0xac0>
800aecc: b807883a mov r3,r23
800aed0: a808d0fa srli r4,r21,3
800aed4: b00a977a slli r5,r22,29
800aed8: b02cd0fa srli r22,r22,3
800aedc: ad4001cc andi r21,r21,7
800aee0: a8800c04 addi r2,r21,48
800aee4: 292ab03a or r21,r5,r4
800aee8: 18bfffc5 stb r2,-1(r3)
800aeec: ad88b03a or r4,r21,r22
800aef0: 1dffffc4 addi r23,r3,-1
800aef4: 203ff51e bne r4,zero,800aecc <___vfiprintf_internal_r+0xabc>
800aef8: 6100004c andi r4,r12,1
800aefc: 20004126 beq r4,zero,800b004 <___vfiprintf_internal_r+0xbf4>
800af00: 10803fcc andi r2,r2,255
800af04: 1080201c xori r2,r2,128
800af08: 10bfe004 addi r2,r2,-128
800af0c: 10800c18 cmpnei r2,r2,48
800af10: 10003c26 beq r2,zero,800b004 <___vfiprintf_internal_r+0xbf4>
800af14: 18ffff84 addi r3,r3,-2
800af18: 00800c04 movi r2,48
800af1c: b8bfffc5 stb r2,-1(r23)
800af20: 88edc83a sub r22,r17,r3
800af24: 6029883a mov r20,r12
800af28: 182f883a mov r23,r3
800af2c: 00001f06 br 800afac <___vfiprintf_internal_r+0xb9c>
800af30: 80070600 call 8007060 <__sinit>
800af34: 003d4806 br 800a458 <___vfiprintf_internal_r+0x48>
800af38: d8c00317 ldw r3,12(sp)
800af3c: 00800044 movi r2,1
800af40: 1d400017 ldw r21,0(r3)
800af44: 1d800117 ldw r22,4(r3)
800af48: 18c00204 addi r3,r3,8
800af4c: d8c00315 stw r3,12(sp)
800af50: 003e8806 br 800a974 <___vfiprintf_internal_r+0x564>
800af54: d8c00317 ldw r3,12(sp)
800af58: 18800117 ldw r2,4(r3)
800af5c: 1d400017 ldw r21,0(r3)
800af60: 18c00204 addi r3,r3,8
800af64: d8c00315 stw r3,12(sp)
800af68: 102d883a mov r22,r2
800af6c: 003efa06 br 800ab58 <___vfiprintf_internal_r+0x748>
800af70: d8c00317 ldw r3,12(sp)
800af74: 0005883a mov r2,zero
800af78: 1d400017 ldw r21,0(r3)
800af7c: 1d800117 ldw r22,4(r3)
800af80: 18c00204 addi r3,r3,8
800af84: d8c00315 stw r3,12(sp)
800af88: 003e7a06 br 800a974 <___vfiprintf_internal_r+0x564>
800af8c: b0016a1e bne r22,zero,800b538 <___vfiprintf_internal_r+0x1128>
800af90: a88002a8 cmpgeui r2,r21,10
800af94: 1001681e bne r2,zero,800b538 <___vfiprintf_internal_r+0x1128>
800af98: ad400c04 addi r21,r21,48
800af9c: dd4015c5 stb r21,87(sp)
800afa0: 6029883a mov r20,r12
800afa4: 05800044 movi r22,1
800afa8: ddc015c4 addi r23,sp,87
800afac: 482b883a mov r21,r9
800afb0: 4d80010e bge r9,r22,800afb8 <___vfiprintf_internal_r+0xba8>
800afb4: b02b883a mov r21,r22
800afb8: 6b403fcc andi r13,r13,255
800afbc: 6b40201c xori r13,r13,128
800afc0: 6b7fe004 addi r13,r13,-128
800afc4: 683efd26 beq r13,zero,800abbc <___vfiprintf_internal_r+0x7ac>
800afc8: ad400044 addi r21,r21,1
800afcc: 003efb06 br 800abbc <___vfiprintf_internal_r+0x7ac>
800afd0: 882f883a mov r23,r17
800afd4: d9000417 ldw r4,16(sp)
800afd8: a88003cc andi r2,r21,15
800afdc: b006973a slli r3,r22,28
800afe0: 2085883a add r2,r4,r2
800afe4: a82ad13a srli r21,r21,4
800afe8: 10800003 ldbu r2,0(r2)
800afec: b02cd13a srli r22,r22,4
800aff0: bdffffc4 addi r23,r23,-1
800aff4: 1d6ab03a or r21,r3,r21
800aff8: b8800005 stb r2,0(r23)
800affc: ad84b03a or r2,r21,r22
800b000: 103ff41e bne r2,zero,800afd4 <___vfiprintf_internal_r+0xbc4>
800b004: 8dedc83a sub r22,r17,r23
800b008: 6029883a mov r20,r12
800b00c: 003fe706 br 800afac <___vfiprintf_internal_r+0xb9c>
800b010: 01800044 movi r6,1
800b014: 000b883a mov r5,zero
800b018: 8807883a mov r3,r17
800b01c: 003f4b06 br 800ad4c <___vfiprintf_internal_r+0x93c>
800b020: 8559c83a sub r12,r16,r21
800b024: 033f1b0e bge zero,r12,800ac94 <___vfiprintf_internal_r+0x884>
800b028: 61800450 cmplti r6,r12,17
800b02c: 01c20134 movhi r7,2052
800b030: 3001af1e bne r6,zero,800b6f0 <___vfiprintf_internal_r+0x12e0>
800b034: 39dd7d04 addi r7,r7,30196
800b038: 03400404 movi r13,16
800b03c: 00000606 br 800b058 <___vfiprintf_internal_r+0xc48>
800b040: 21800084 addi r6,r4,2
800b044: 42000204 addi r8,r8,8
800b048: 1809883a mov r4,r3
800b04c: 633ffc04 addi r12,r12,-16
800b050: 60c00448 cmpgei r3,r12,17
800b054: 18001c26 beq r3,zero,800b0c8 <___vfiprintf_internal_r+0xcb8>
800b058: 20c00044 addi r3,r4,1
800b05c: 10800404 addi r2,r2,16
800b060: 41c00015 stw r7,0(r8)
800b064: 43400115 stw r13,4(r8)
800b068: d8800b15 stw r2,44(sp)
800b06c: d8c00a15 stw r3,40(sp)
800b070: 19400208 cmpgei r5,r3,8
800b074: 283ff226 beq r5,zero,800b040 <___vfiprintf_internal_r+0xc30>
800b078: d9800904 addi r6,sp,36
800b07c: 900b883a mov r5,r18
800b080: 9809883a mov r4,r19
800b084: 10006326 beq r2,zero,800b214 <___vfiprintf_internal_r+0xe04>
800b088: d9c00515 stw r7,20(sp)
800b08c: db000215 stw r12,8(sp)
800b090: da400115 stw r9,4(sp)
800b094: 800a3040 call 800a304 <__sprint_r.part.0>
800b098: 103db01e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800b09c: db000217 ldw r12,8(sp)
800b0a0: d9000a17 ldw r4,40(sp)
800b0a4: d8800b17 ldw r2,44(sp)
800b0a8: 633ffc04 addi r12,r12,-16
800b0ac: 60c00448 cmpgei r3,r12,17
800b0b0: 8811883a mov r8,r17
800b0b4: 21800044 addi r6,r4,1
800b0b8: d9c00517 ldw r7,20(sp)
800b0bc: 03400404 movi r13,16
800b0c0: da400117 ldw r9,4(sp)
800b0c4: 183fe41e bne r3,zero,800b058 <___vfiprintf_internal_r+0xc48>
800b0c8: 43400204 addi r13,r8,8
800b0cc: 1305883a add r2,r2,r12
800b0d0: 41c00015 stw r7,0(r8)
800b0d4: 43000115 stw r12,4(r8)
800b0d8: d8800b15 stw r2,44(sp)
800b0dc: d9800a15 stw r6,40(sp)
800b0e0: 30c00208 cmpgei r3,r6,8
800b0e4: 1800e226 beq r3,zero,800b470 <___vfiprintf_internal_r+0x1060>
800b0e8: 10015726 beq r2,zero,800b648 <___vfiprintf_internal_r+0x1238>
800b0ec: d9800904 addi r6,sp,36
800b0f0: 900b883a mov r5,r18
800b0f4: 9809883a mov r4,r19
800b0f8: da400115 stw r9,4(sp)
800b0fc: 800a3040 call 800a304 <__sprint_r.part.0>
800b100: 103d961e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800b104: da400117 ldw r9,4(sp)
800b108: d9000a17 ldw r4,40(sp)
800b10c: d8800b17 ldw r2,44(sp)
800b110: 4d93c83a sub r9,r9,r22
800b114: d8c01804 addi r3,sp,96
800b118: 21400044 addi r5,r4,1
800b11c: 8811883a mov r8,r17
800b120: 027ede0e bge zero,r9,800ac9c <___vfiprintf_internal_r+0x88c>
800b124: 49800450 cmplti r6,r9,17
800b128: 01c20134 movhi r7,2052
800b12c: 3001431e bne r6,zero,800b63c <___vfiprintf_internal_r+0x122c>
800b130: 39dd7d04 addi r7,r7,30196
800b134: 03000404 movi r12,16
800b138: 00000606 br 800b154 <___vfiprintf_internal_r+0xd44>
800b13c: 21400084 addi r5,r4,2
800b140: 42000204 addi r8,r8,8
800b144: 1809883a mov r4,r3
800b148: 4a7ffc04 addi r9,r9,-16
800b14c: 48c00448 cmpgei r3,r9,17
800b150: 18001a26 beq r3,zero,800b1bc <___vfiprintf_internal_r+0xdac>
800b154: 20c00044 addi r3,r4,1
800b158: 10800404 addi r2,r2,16
800b15c: 41c00015 stw r7,0(r8)
800b160: 43000115 stw r12,4(r8)
800b164: d8800b15 stw r2,44(sp)
800b168: d8c00a15 stw r3,40(sp)
800b16c: 19400208 cmpgei r5,r3,8
800b170: 283ff226 beq r5,zero,800b13c <___vfiprintf_internal_r+0xd2c>
800b174: d9800904 addi r6,sp,36
800b178: 900b883a mov r5,r18
800b17c: 9809883a mov r4,r19
800b180: 10001a26 beq r2,zero,800b1ec <___vfiprintf_internal_r+0xddc>
800b184: d9c00215 stw r7,8(sp)
800b188: da400115 stw r9,4(sp)
800b18c: 800a3040 call 800a304 <__sprint_r.part.0>
800b190: 103d721e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800b194: da400117 ldw r9,4(sp)
800b198: d9000a17 ldw r4,40(sp)
800b19c: d8800b17 ldw r2,44(sp)
800b1a0: 4a7ffc04 addi r9,r9,-16
800b1a4: 48c00448 cmpgei r3,r9,17
800b1a8: 8811883a mov r8,r17
800b1ac: 21400044 addi r5,r4,1
800b1b0: d9c00217 ldw r7,8(sp)
800b1b4: 03000404 movi r12,16
800b1b8: 183fe61e bne r3,zero,800b154 <___vfiprintf_internal_r+0xd44>
800b1bc: 41000204 addi r4,r8,8
800b1c0: 1245883a add r2,r2,r9
800b1c4: 41c00015 stw r7,0(r8)
800b1c8: 42400115 stw r9,4(r8)
800b1cc: d8800b15 stw r2,44(sp)
800b1d0: d9400a15 stw r5,40(sp)
800b1d4: 28c00208 cmpgei r3,r5,8
800b1d8: 1800721e bne r3,zero,800b3a4 <___vfiprintf_internal_r+0xf94>
800b1dc: 29400044 addi r5,r5,1
800b1e0: 20c00204 addi r3,r4,8
800b1e4: 2011883a mov r8,r4
800b1e8: 003eac06 br 800ac9c <___vfiprintf_internal_r+0x88c>
800b1ec: 01400044 movi r5,1
800b1f0: 0009883a mov r4,zero
800b1f4: 8811883a mov r8,r17
800b1f8: 003fd306 br 800b148 <___vfiprintf_internal_r+0xd38>
800b1fc: d9800904 addi r6,sp,36
800b200: 900b883a mov r5,r18
800b204: 9809883a mov r4,r19
800b208: 800a3040 call 800a304 <__sprint_r.part.0>
800b20c: 103ebc26 beq r2,zero,800ad00 <___vfiprintf_internal_r+0x8f0>
800b210: 003d5206 br 800a75c <___vfiprintf_internal_r+0x34c>
800b214: 01800044 movi r6,1
800b218: 0009883a mov r4,zero
800b21c: 8811883a mov r8,r17
800b220: 003f8a06 br 800b04c <___vfiprintf_internal_r+0xc3c>
800b224: 10007026 beq r2,zero,800b3e8 <___vfiprintf_internal_r+0xfd8>
800b228: d9800904 addi r6,sp,36
800b22c: 900b883a mov r5,r18
800b230: 9809883a mov r4,r19
800b234: da400515 stw r9,20(sp)
800b238: db000215 stw r12,8(sp)
800b23c: db400115 stw r13,4(sp)
800b240: 800a3040 call 800a304 <__sprint_r.part.0>
800b244: 103d451e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800b248: d9000a17 ldw r4,40(sp)
800b24c: d8800b17 ldw r2,44(sp)
800b250: d8c01804 addi r3,sp,96
800b254: 21400044 addi r5,r4,1
800b258: 8811883a mov r8,r17
800b25c: da400517 ldw r9,20(sp)
800b260: db000217 ldw r12,8(sp)
800b264: db400117 ldw r13,4(sp)
800b268: 003e6f06 br 800ac28 <___vfiprintf_internal_r+0x818>
800b26c: d8800884 addi r2,sp,34
800b270: d8801615 stw r2,88(sp)
800b274: 00800084 movi r2,2
800b278: d8801715 stw r2,92(sp)
800b27c: d8c01804 addi r3,sp,96
800b280: 01400044 movi r5,1
800b284: 1811883a mov r8,r3
800b288: 2809883a mov r4,r5
800b28c: 21400044 addi r5,r4,1
800b290: 40c00204 addi r3,r8,8
800b294: 003e7d06 br 800ac8c <___vfiprintf_internal_r+0x87c>
800b298: a019883a mov r12,r20
800b29c: 003f0506 br 800aeb4 <___vfiprintf_internal_r+0xaa4>
800b2a0: 19400450 cmplti r5,r3,17
800b2a4: 01c20134 movhi r7,2052
800b2a8: 2801031e bne r5,zero,800b6b8 <___vfiprintf_internal_r+0x12a8>
800b2ac: 39dd8104 addi r7,r7,30212
800b2b0: 03800404 movi r14,16
800b2b4: 00000706 br 800b2d4 <___vfiprintf_internal_r+0xec4>
800b2b8: 23c00084 addi r15,r4,2
800b2bc: 42000204 addi r8,r8,8
800b2c0: 3009883a mov r4,r6
800b2c4: 18fffc04 addi r3,r3,-16
800b2c8: 19400448 cmpgei r5,r3,17
800b2cc: 28002026 beq r5,zero,800b350 <___vfiprintf_internal_r+0xf40>
800b2d0: 21800044 addi r6,r4,1
800b2d4: 10800404 addi r2,r2,16
800b2d8: 41c00015 stw r7,0(r8)
800b2dc: 43800115 stw r14,4(r8)
800b2e0: d8800b15 stw r2,44(sp)
800b2e4: d9800a15 stw r6,40(sp)
800b2e8: 31400208 cmpgei r5,r6,8
800b2ec: 283ff226 beq r5,zero,800b2b8 <___vfiprintf_internal_r+0xea8>
800b2f0: d9800904 addi r6,sp,36
800b2f4: 900b883a mov r5,r18
800b2f8: 9809883a mov r4,r19
800b2fc: 10001f26 beq r2,zero,800b37c <___vfiprintf_internal_r+0xf6c>
800b300: d9c00715 stw r7,28(sp)
800b304: d8c00615 stw r3,24(sp)
800b308: da400515 stw r9,20(sp)
800b30c: db000215 stw r12,8(sp)
800b310: db400115 stw r13,4(sp)
800b314: 800a3040 call 800a304 <__sprint_r.part.0>
800b318: 103d101e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800b31c: d8c00617 ldw r3,24(sp)
800b320: d9000a17 ldw r4,40(sp)
800b324: d8800b17 ldw r2,44(sp)
800b328: 18fffc04 addi r3,r3,-16
800b32c: 19400448 cmpgei r5,r3,17
800b330: 8811883a mov r8,r17
800b334: 23c00044 addi r15,r4,1
800b338: d9c00717 ldw r7,28(sp)
800b33c: 03800404 movi r14,16
800b340: da400517 ldw r9,20(sp)
800b344: db000217 ldw r12,8(sp)
800b348: db400117 ldw r13,4(sp)
800b34c: 283fe01e bne r5,zero,800b2d0 <___vfiprintf_internal_r+0xec0>
800b350: 10c5883a add r2,r2,r3
800b354: 40c00115 stw r3,4(r8)
800b358: 41c00015 stw r7,0(r8)
800b35c: d8800b15 stw r2,44(sp)
800b360: dbc00a15 stw r15,40(sp)
800b364: 78c00208 cmpgei r3,r15,8
800b368: 18002c1e bne r3,zero,800b41c <___vfiprintf_internal_r+0x100c>
800b36c: 42000204 addi r8,r8,8
800b370: 79400044 addi r5,r15,1
800b374: 7809883a mov r4,r15
800b378: 003e1b06 br 800abe8 <___vfiprintf_internal_r+0x7d8>
800b37c: 0009883a mov r4,zero
800b380: 03c00044 movi r15,1
800b384: 8811883a mov r8,r17
800b388: 003fce06 br 800b2c4 <___vfiprintf_internal_r+0xeb4>
800b38c: 8540010e bge r16,r21,800b394 <___vfiprintf_internal_r+0xf84>
800b390: a821883a mov r16,r21
800b394: d8800017 ldw r2,0(sp)
800b398: 1405883a add r2,r2,r16
800b39c: d8800015 stw r2,0(sp)
800b3a0: 003e5706 br 800ad00 <___vfiprintf_internal_r+0x8f0>
800b3a4: 10008126 beq r2,zero,800b5ac <___vfiprintf_internal_r+0x119c>
800b3a8: d9800904 addi r6,sp,36
800b3ac: 900b883a mov r5,r18
800b3b0: 9809883a mov r4,r19
800b3b4: 800a3040 call 800a304 <__sprint_r.part.0>
800b3b8: 103ce81e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800b3bc: d9400a17 ldw r5,40(sp)
800b3c0: d8800b17 ldw r2,44(sp)
800b3c4: d8c01804 addi r3,sp,96
800b3c8: 29400044 addi r5,r5,1
800b3cc: 8811883a mov r8,r17
800b3d0: 003e3206 br 800ac9c <___vfiprintf_internal_r+0x88c>
800b3d4: d8000a15 stw zero,40(sp)
800b3d8: 8811883a mov r8,r17
800b3dc: 003c4e06 br 800a518 <___vfiprintf_internal_r+0x108>
800b3e0: 002d883a mov r22,zero
800b3e4: 003d4406 br 800a8f8 <___vfiprintf_internal_r+0x4e8>
800b3e8: 68003326 beq r13,zero,800b4b8 <___vfiprintf_internal_r+0x10a8>
800b3ec: d8800884 addi r2,sp,34
800b3f0: d8801615 stw r2,88(sp)
800b3f4: 00800084 movi r2,2
800b3f8: d8801715 stw r2,92(sp)
800b3fc: da001804 addi r8,sp,96
800b400: 01000044 movi r4,1
800b404: 003fa106 br 800b28c <___vfiprintf_internal_r+0xe7c>
800b408: d8c01804 addi r3,sp,96
800b40c: 01400044 movi r5,1
800b410: 0009883a mov r4,zero
800b414: 8811883a mov r8,r17
800b418: 003e1c06 br 800ac8c <___vfiprintf_internal_r+0x87c>
800b41c: 10003826 beq r2,zero,800b500 <___vfiprintf_internal_r+0x10f0>
800b420: d9800904 addi r6,sp,36
800b424: 900b883a mov r5,r18
800b428: 9809883a mov r4,r19
800b42c: da400515 stw r9,20(sp)
800b430: db000215 stw r12,8(sp)
800b434: db400115 stw r13,4(sp)
800b438: 800a3040 call 800a304 <__sprint_r.part.0>
800b43c: 103cc71e bne r2,zero,800a75c <___vfiprintf_internal_r+0x34c>
800b440: d9000a17 ldw r4,40(sp)
800b444: d8800b17 ldw r2,44(sp)
800b448: 8811883a mov r8,r17
800b44c: 21400044 addi r5,r4,1
800b450: da400517 ldw r9,20(sp)
800b454: db000217 ldw r12,8(sp)
800b458: db400117 ldw r13,4(sp)
800b45c: 003de206 br 800abe8 <___vfiprintf_internal_r+0x7d8>
800b460: e029883a mov r20,fp
800b464: 003c3106 br 800a52c <___vfiprintf_internal_r+0x11c>
800b468: 882f883a mov r23,r17
800b46c: 003ecf06 br 800afac <___vfiprintf_internal_r+0xb9c>
800b470: 31400044 addi r5,r6,1
800b474: 68c00204 addi r3,r13,8
800b478: 3009883a mov r4,r6
800b47c: 6811883a mov r8,r13
800b480: 003e0406 br 800ac94 <___vfiprintf_internal_r+0x884>
800b484: 00c00c04 movi r3,48
800b488: d88008c5 stb r2,35(sp)
800b48c: d8c00885 stb r3,34(sp)
800b490: 63000094 ori r12,r12,2
800b494: 00800084 movi r2,2
800b498: 003d3606 br 800a974 <___vfiprintf_internal_r+0x564>
800b49c: d9400017 ldw r5,0(sp)
800b4a0: 20800017 ldw r2,0(r4)
800b4a4: d8c00315 stw r3,12(sp)
800b4a8: 2809d7fa srai r4,r5,31
800b4ac: 11400015 stw r5,0(r2)
800b4b0: 11000115 stw r4,4(r2)
800b4b4: 003bff06 br 800a4b4 <___vfiprintf_internal_r+0xa4>
800b4b8: 0009883a mov r4,zero
800b4bc: d8c01804 addi r3,sp,96
800b4c0: 01400044 movi r5,1
800b4c4: 8811883a mov r8,r17
800b4c8: 003df006 br 800ac8c <___vfiprintf_internal_r+0x87c>
800b4cc: 0421c83a sub r16,zero,r16
800b4d0: ddc00315 stw r23,12(sp)
800b4d4: 003cdb06 br 800a844 <___vfiprintf_internal_r+0x434>
800b4d8: b809883a mov r4,r23
800b4dc: da000215 stw r8,8(sp)
800b4e0: db000115 stw r12,4(sp)
800b4e4: 8002dac0 call 8002dac <strlen>
800b4e8: 102d883a mov r22,r2
800b4ec: 102b883a mov r21,r2
800b4f0: dd000315 stw r20,12(sp)
800b4f4: db000117 ldw r12,4(sp)
800b4f8: da000217 ldw r8,8(sp)
800b4fc: 003dad06 br 800abb4 <___vfiprintf_internal_r+0x7a4>
800b500: d8c00847 ldb r3,33(sp)
800b504: 1800551e bne r3,zero,800b65c <___vfiprintf_internal_r+0x124c>
800b508: 683f581e bne r13,zero,800b26c <___vfiprintf_internal_r+0xe5c>
800b50c: 0009883a mov r4,zero
800b510: d8c01804 addi r3,sp,96
800b514: 01400044 movi r5,1
800b518: 8811883a mov r8,r17
800b51c: 003ddd06 br 800ac94 <___vfiprintf_internal_r+0x884>
800b520: d8800317 ldw r2,12(sp)
800b524: 10800017 ldw r2,0(r2)
800b528: d8c00315 stw r3,12(sp)
800b52c: d8c00017 ldw r3,0(sp)
800b530: 10c00015 stw r3,0(r2)
800b534: 003bdf06 br 800a4b4 <___vfiprintf_internal_r+0xa4>
800b538: 882f883a mov r23,r17
800b53c: 00000206 br 800b548 <___vfiprintf_internal_r+0x1138>
800b540: 102b883a mov r21,r2
800b544: 182d883a mov r22,r3
800b548: a809883a mov r4,r21
800b54c: b00b883a mov r5,r22
800b550: 01800284 movi r6,10
800b554: 000f883a mov r7,zero
800b558: db400615 stw r13,24(sp)
800b55c: da000515 stw r8,20(sp)
800b560: da400215 stw r9,8(sp)
800b564: db000115 stw r12,4(sp)
800b568: 800c9c00 call 800c9c0 <__umoddi3>
800b56c: 10800c04 addi r2,r2,48
800b570: bdffffc4 addi r23,r23,-1
800b574: a809883a mov r4,r21
800b578: b00b883a mov r5,r22
800b57c: b8800005 stb r2,0(r23)
800b580: 01800284 movi r6,10
800b584: 000f883a mov r7,zero
800b588: 800c4280 call 800c428 <__udivdi3>
800b58c: db000117 ldw r12,4(sp)
800b590: da400217 ldw r9,8(sp)
800b594: da000517 ldw r8,20(sp)
800b598: db400617 ldw r13,24(sp)
800b59c: b03fe81e bne r22,zero,800b540 <___vfiprintf_internal_r+0x1130>
800b5a0: ad4002a8 cmpgeui r21,r21,10
800b5a4: a83fe61e bne r21,zero,800b540 <___vfiprintf_internal_r+0x1130>
800b5a8: 003e9606 br 800b004 <___vfiprintf_internal_r+0xbf4>
800b5ac: 00c00044 movi r3,1
800b5b0: d8c00a15 stw r3,40(sp)
800b5b4: b005883a mov r2,r22
800b5b8: ddc01615 stw r23,88(sp)
800b5bc: dd801715 stw r22,92(sp)
800b5c0: dd800b15 stw r22,44(sp)
800b5c4: d8c01804 addi r3,sp,96
800b5c8: 003dc306 br 800acd8 <___vfiprintf_internal_r+0x8c8>
800b5cc: 10c00060 cmpeqi r3,r2,1
800b5d0: a019883a mov r12,r20
800b5d4: 183e3926 beq r3,zero,800aebc <___vfiprintf_internal_r+0xaac>
800b5d8: 003e6f06 br 800af98 <___vfiprintf_internal_r+0xb88>
800b5dc: e0800043 ldbu r2,1(fp)
800b5e0: 63000814 ori r12,r12,32
800b5e4: e7000044 addi fp,fp,1
800b5e8: 10803fcc andi r2,r2,255
800b5ec: 1080201c xori r2,r2,128
800b5f0: 10bfe004 addi r2,r2,-128
800b5f4: 003bd506 br 800a54c <___vfiprintf_internal_r+0x13c>
800b5f8: 488001f0 cmpltui r2,r9,7
800b5fc: 482d883a mov r22,r9
800b600: 1000011e bne r2,zero,800b608 <___vfiprintf_internal_r+0x11f8>
800b604: 05800184 movi r22,6
800b608: 05c20134 movhi r23,2052
800b60c: b02b883a mov r21,r22
800b610: dd000315 stw r20,12(sp)
800b614: bddd2504 addi r23,r23,29844
800b618: 003d6606 br 800abb4 <___vfiprintf_internal_r+0x7a4>
800b61c: d8800315 stw r2,12(sp)
800b620: 002d883a mov r22,zero
800b624: 00800044 movi r2,1
800b628: 003cd206 br 800a974 <___vfiprintf_internal_r+0x564>
800b62c: d8800315 stw r2,12(sp)
800b630: 002d883a mov r22,zero
800b634: 0005883a mov r2,zero
800b638: 003cce06 br 800a974 <___vfiprintf_internal_r+0x564>
800b63c: 1809883a mov r4,r3
800b640: 39dd7d04 addi r7,r7,30196
800b644: 003ede06 br 800b1c0 <___vfiprintf_internal_r+0xdb0>
800b648: d8c01804 addi r3,sp,96
800b64c: 01400044 movi r5,1
800b650: 0009883a mov r4,zero
800b654: 8811883a mov r8,r17
800b658: 003d8e06 br 800ac94 <___vfiprintf_internal_r+0x884>
800b65c: d8800844 addi r2,sp,33
800b660: d8801615 stw r2,88(sp)
800b664: 00800044 movi r2,1
800b668: d8801715 stw r2,92(sp)
800b66c: d8c01804 addi r3,sp,96
800b670: 01400044 movi r5,1
800b674: 003d6806 br 800ac18 <___vfiprintf_internal_r+0x808>
800b678: d9800845 stb r6,33(sp)
800b67c: 003c5506 br 800a7d4 <___vfiprintf_internal_r+0x3c4>
800b680: 482b883a mov r21,r9
800b684: dd000315 stw r20,12(sp)
800b688: 482d883a mov r22,r9
800b68c: 003d4906 br 800abb4 <___vfiprintf_internal_r+0x7a4>
800b690: d9800845 stb r6,33(sp)
800b694: 003cd906 br 800a9fc <___vfiprintf_internal_r+0x5ec>
800b698: d9800845 stb r6,33(sp)
800b69c: 003ce906 br 800aa44 <___vfiprintf_internal_r+0x634>
800b6a0: d9800845 stb r6,33(sp)
800b6a4: 003c8a06 br 800a8d0 <___vfiprintf_internal_r+0x4c0>
800b6a8: d9800845 stb r6,33(sp)
800b6ac: 003dd206 br 800adf8 <___vfiprintf_internal_r+0x9e8>
800b6b0: d9800845 stb r6,33(sp)
800b6b4: 003ddd06 br 800ae2c <___vfiprintf_internal_r+0xa1c>
800b6b8: 301f883a mov r15,r6
800b6bc: 39dd8104 addi r7,r7,30212
800b6c0: 003f2306 br 800b350 <___vfiprintf_internal_r+0xf40>
800b6c4: d9800845 stb r6,33(sp)
800b6c8: 003d1606 br 800ab24 <___vfiprintf_internal_r+0x714>
800b6cc: d9800845 stb r6,33(sp)
800b6d0: 003d0406 br 800aae4 <___vfiprintf_internal_r+0x6d4>
800b6d4: d9800845 stb r6,33(sp)
800b6d8: 003cb806 br 800a9bc <___vfiprintf_internal_r+0x5ac>
800b6dc: d9800845 stb r6,33(sp)
800b6e0: 003ddf06 br 800ae60 <___vfiprintf_internal_r+0xa50>
800b6e4: 29800044 addi r6,r5,1
800b6e8: 39dd8104 addi r7,r7,30212
800b6ec: 003db106 br 800adb4 <___vfiprintf_internal_r+0x9a4>
800b6f0: 181b883a mov r13,r3
800b6f4: 280d883a mov r6,r5
800b6f8: 39dd7d04 addi r7,r7,30196
800b6fc: 003e7306 br 800b0cc <___vfiprintf_internal_r+0xcbc>
800b700: 00bfffc4 movi r2,-1
800b704: d8800015 stw r2,0(sp)
800b708: 003c1706 br 800a768 <___vfiprintf_internal_r+0x358>
800b70c: d8800317 ldw r2,12(sp)
800b710: 12400017 ldw r9,0(r2)
800b714: 15c00104 addi r23,r2,4
800b718: 4800010e bge r9,zero,800b720 <___vfiprintf_internal_r+0x1310>
800b71c: 027fffc4 movi r9,-1
800b720: e0800043 ldbu r2,1(fp)
800b724: ddc00315 stw r23,12(sp)
800b728: 2039883a mov fp,r4
800b72c: 10803fcc andi r2,r2,255
800b730: 1080201c xori r2,r2,128
800b734: 10bfe004 addi r2,r2,-128
800b738: 003b8406 br 800a54c <___vfiprintf_internal_r+0x13c>
0800b73c <__vfiprintf_internal>:
800b73c: 00820174 movhi r2,2053
800b740: 300f883a mov r7,r6
800b744: 280d883a mov r6,r5
800b748: 200b883a mov r5,r4
800b74c: 1132af17 ldw r4,-13636(r2)
800b750: 800a4101 jmpi 800a410 <___vfiprintf_internal_r>
0800b754 <__sbprintf>:
800b754: 2880030b ldhu r2,12(r5)
800b758: 2b001917 ldw r12,100(r5)
800b75c: 2ac0038b ldhu r11,14(r5)
800b760: 2a800717 ldw r10,28(r5)
800b764: 2a400917 ldw r9,36(r5)
800b768: defee204 addi sp,sp,-1144
800b76c: da001a04 addi r8,sp,104
800b770: 00c10004 movi r3,1024
800b774: dc011a15 stw r16,1128(sp)
800b778: 10bfff4c andi r2,r2,65533
800b77c: 2821883a mov r16,r5
800b780: d80b883a mov r5,sp
800b784: dc811c15 stw r18,1136(sp)
800b788: dc411b15 stw r17,1132(sp)
800b78c: dfc11d15 stw ra,1140(sp)
800b790: 2025883a mov r18,r4
800b794: d880030d sth r2,12(sp)
800b798: db001915 stw r12,100(sp)
800b79c: dac0038d sth r11,14(sp)
800b7a0: da800715 stw r10,28(sp)
800b7a4: da400915 stw r9,36(sp)
800b7a8: da000015 stw r8,0(sp)
800b7ac: da000415 stw r8,16(sp)
800b7b0: d8c00215 stw r3,8(sp)
800b7b4: d8c00515 stw r3,20(sp)
800b7b8: d8000615 stw zero,24(sp)
800b7bc: 800a4100 call 800a410 <___vfiprintf_internal_r>
800b7c0: 1023883a mov r17,r2
800b7c4: 10000d0e bge r2,zero,800b7fc <__sbprintf+0xa8>
800b7c8: d880030b ldhu r2,12(sp)
800b7cc: 1080100c andi r2,r2,64
800b7d0: 10000326 beq r2,zero,800b7e0 <__sbprintf+0x8c>
800b7d4: 8080030b ldhu r2,12(r16)
800b7d8: 10801014 ori r2,r2,64
800b7dc: 8080030d sth r2,12(r16)
800b7e0: 8805883a mov r2,r17
800b7e4: dfc11d17 ldw ra,1140(sp)
800b7e8: dc811c17 ldw r18,1136(sp)
800b7ec: dc411b17 ldw r17,1132(sp)
800b7f0: dc011a17 ldw r16,1128(sp)
800b7f4: dec11e04 addi sp,sp,1144
800b7f8: f800283a ret
800b7fc: d80b883a mov r5,sp
800b800: 9009883a mov r4,r18
800b804: 8006cdc0 call 8006cdc <_fflush_r>
800b808: 103fef26 beq r2,zero,800b7c8 <__sbprintf+0x74>
800b80c: 047fffc4 movi r17,-1
800b810: 003fed06 br 800b7c8 <__sbprintf+0x74>
0800b814 <__swbuf_r>:
800b814: defffb04 addi sp,sp,-20
800b818: dc800215 stw r18,8(sp)
800b81c: dc400115 stw r17,4(sp)
800b820: dc000015 stw r16,0(sp)
800b824: dfc00415 stw ra,16(sp)
800b828: dcc00315 stw r19,12(sp)
800b82c: 2023883a mov r17,r4
800b830: 2825883a mov r18,r5
800b834: 3021883a mov r16,r6
800b838: 20000226 beq r4,zero,800b844 <__swbuf_r+0x30>
800b83c: 20800e17 ldw r2,56(r4)
800b840: 10003e26 beq r2,zero,800b93c <__swbuf_r+0x128>
800b844: 80800617 ldw r2,24(r16)
800b848: 80c0030b ldhu r3,12(r16)
800b84c: 80800215 stw r2,8(r16)
800b850: 1880020c andi r2,r3,8
800b854: 10001f26 beq r2,zero,800b8d4 <__swbuf_r+0xc0>
800b858: 80800417 ldw r2,16(r16)
800b85c: 10001d26 beq r2,zero,800b8d4 <__swbuf_r+0xc0>
800b860: 1908000c andi r4,r3,8192
800b864: 94c03fcc andi r19,r18,255
800b868: 20002326 beq r4,zero,800b8f8 <__swbuf_r+0xe4>
800b86c: 80c00017 ldw r3,0(r16)
800b870: 81000517 ldw r4,20(r16)
800b874: 1885c83a sub r2,r3,r2
800b878: 1100290e bge r2,r4,800b920 <__swbuf_r+0x10c>
800b87c: 10800044 addi r2,r2,1
800b880: 81000217 ldw r4,8(r16)
800b884: 19400044 addi r5,r3,1
800b888: 81400015 stw r5,0(r16)
800b88c: 213fffc4 addi r4,r4,-1
800b890: 81000215 stw r4,8(r16)
800b894: 1c800005 stb r18,0(r3)
800b898: 80c00517 ldw r3,20(r16)
800b89c: 18802926 beq r3,r2,800b944 <__swbuf_r+0x130>
800b8a0: 8080030b ldhu r2,12(r16)
800b8a4: 1080004c andi r2,r2,1
800b8a8: 10000226 beq r2,zero,800b8b4 <__swbuf_r+0xa0>
800b8ac: 98800298 cmpnei r2,r19,10
800b8b0: 10002426 beq r2,zero,800b944 <__swbuf_r+0x130>
800b8b4: 9805883a mov r2,r19
800b8b8: dfc00417 ldw ra,16(sp)
800b8bc: dcc00317 ldw r19,12(sp)
800b8c0: dc800217 ldw r18,8(sp)
800b8c4: dc400117 ldw r17,4(sp)
800b8c8: dc000017 ldw r16,0(sp)
800b8cc: dec00504 addi sp,sp,20
800b8d0: f800283a ret
800b8d4: 800b883a mov r5,r16
800b8d8: 8809883a mov r4,r17
800b8dc: 800507c0 call 800507c <__swsetup_r>
800b8e0: 10001c1e bne r2,zero,800b954 <__swbuf_r+0x140>
800b8e4: 80c0030b ldhu r3,12(r16)
800b8e8: 80800417 ldw r2,16(r16)
800b8ec: 94c03fcc andi r19,r18,255
800b8f0: 1908000c andi r4,r3,8192
800b8f4: 203fdd1e bne r4,zero,800b86c <__swbuf_r+0x58>
800b8f8: 81001917 ldw r4,100(r16)
800b8fc: 18c80014 ori r3,r3,8192
800b900: 0177ffc4 movi r5,-8193
800b904: 2148703a and r4,r4,r5
800b908: 80c0030d sth r3,12(r16)
800b90c: 80c00017 ldw r3,0(r16)
800b910: 81001915 stw r4,100(r16)
800b914: 81000517 ldw r4,20(r16)
800b918: 1885c83a sub r2,r3,r2
800b91c: 113fd716 blt r2,r4,800b87c <__swbuf_r+0x68>
800b920: 800b883a mov r5,r16
800b924: 8809883a mov r4,r17
800b928: 8006cdc0 call 8006cdc <_fflush_r>
800b92c: 1000091e bne r2,zero,800b954 <__swbuf_r+0x140>
800b930: 80c00017 ldw r3,0(r16)
800b934: 00800044 movi r2,1
800b938: 003fd106 br 800b880 <__swbuf_r+0x6c>
800b93c: 80070600 call 8007060 <__sinit>
800b940: 003fc006 br 800b844 <__swbuf_r+0x30>
800b944: 800b883a mov r5,r16
800b948: 8809883a mov r4,r17
800b94c: 8006cdc0 call 8006cdc <_fflush_r>
800b950: 103fd826 beq r2,zero,800b8b4 <__swbuf_r+0xa0>
800b954: 04ffffc4 movi r19,-1
800b958: 003fd606 br 800b8b4 <__swbuf_r+0xa0>
0800b95c <__swbuf>:
800b95c: 00820174 movhi r2,2053
800b960: 280d883a mov r6,r5
800b964: 200b883a mov r5,r4
800b968: 1132af17 ldw r4,-13636(r2)
800b96c: 800b8141 jmpi 800b814 <__swbuf_r>
0800b970 <_write_r>:
800b970: defffe04 addi sp,sp,-8
800b974: 2805883a mov r2,r5
800b978: dc000015 stw r16,0(sp)
800b97c: 300b883a mov r5,r6
800b980: 2021883a mov r16,r4
800b984: 380d883a mov r6,r7
800b988: 1009883a mov r4,r2
800b98c: 00820174 movhi r2,2053
800b990: dfc00115 stw ra,4(sp)
800b994: 1032f015 stw zero,-13376(r2)
800b998: 8022c3c0 call 8022c3c <write>
800b99c: 10ffffd8 cmpnei r3,r2,-1
800b9a0: 18000426 beq r3,zero,800b9b4 <_write_r+0x44>
800b9a4: dfc00117 ldw ra,4(sp)
800b9a8: dc000017 ldw r16,0(sp)
800b9ac: dec00204 addi sp,sp,8
800b9b0: f800283a ret
800b9b4: 00c20174 movhi r3,2053
800b9b8: 18f2f017 ldw r3,-13376(r3)
800b9bc: 183ff926 beq r3,zero,800b9a4 <_write_r+0x34>
800b9c0: 80c00015 stw r3,0(r16)
800b9c4: dfc00117 ldw ra,4(sp)
800b9c8: dc000017 ldw r16,0(sp)
800b9cc: dec00204 addi sp,sp,8
800b9d0: f800283a ret
0800b9d4 <_close_r>:
800b9d4: defffe04 addi sp,sp,-8
800b9d8: dc000015 stw r16,0(sp)
800b9dc: 00820174 movhi r2,2053
800b9e0: 2021883a mov r16,r4
800b9e4: 2809883a mov r4,r5
800b9e8: dfc00115 stw ra,4(sp)
800b9ec: 1032f015 stw zero,-13376(r2)
800b9f0: 8022a600 call 8022a60 <close>
800b9f4: 10ffffd8 cmpnei r3,r2,-1
800b9f8: 18000426 beq r3,zero,800ba0c <_close_r+0x38>
800b9fc: dfc00117 ldw ra,4(sp)
800ba00: dc000017 ldw r16,0(sp)
800ba04: dec00204 addi sp,sp,8
800ba08: f800283a ret
800ba0c: 00c20174 movhi r3,2053
800ba10: 18f2f017 ldw r3,-13376(r3)
800ba14: 183ff926 beq r3,zero,800b9fc <_close_r+0x28>
800ba18: 80c00015 stw r3,0(r16)
800ba1c: dfc00117 ldw ra,4(sp)
800ba20: dc000017 ldw r16,0(sp)
800ba24: dec00204 addi sp,sp,8
800ba28: f800283a ret
0800ba2c <_calloc_r>:
800ba2c: 298b383a mul r5,r5,r6
800ba30: deffff04 addi sp,sp,-4
800ba34: dfc00015 stw ra,0(sp)
800ba38: 8007ddc0 call 8007ddc <_malloc_r>
800ba3c: 1007883a mov r3,r2
800ba40: 10000c26 beq r2,zero,800ba74 <_calloc_r+0x48>
800ba44: 11bfff17 ldw r6,-4(r2)
800ba48: 00bfff04 movi r2,-4
800ba4c: 308c703a and r6,r6,r2
800ba50: 31bfff04 addi r6,r6,-4
800ba54: 30800968 cmpgeui r2,r6,37
800ba58: 1000141e bne r2,zero,800baac <_calloc_r+0x80>
800ba5c: 30800530 cmpltui r2,r6,20
800ba60: 10000826 beq r2,zero,800ba84 <_calloc_r+0x58>
800ba64: 1805883a mov r2,r3
800ba68: 10000015 stw zero,0(r2)
800ba6c: 10000115 stw zero,4(r2)
800ba70: 10000215 stw zero,8(r2)
800ba74: 1805883a mov r2,r3
800ba78: dfc00017 ldw ra,0(sp)
800ba7c: dec00104 addi sp,sp,4
800ba80: f800283a ret
800ba84: 18000015 stw zero,0(r3)
800ba88: 18000115 stw zero,4(r3)
800ba8c: 30800728 cmpgeui r2,r6,28
800ba90: 10000e26 beq r2,zero,800bacc <_calloc_r+0xa0>
800ba94: 18000215 stw zero,8(r3)
800ba98: 18000315 stw zero,12(r3)
800ba9c: 31800920 cmpeqi r6,r6,36
800baa0: 30000c1e bne r6,zero,800bad4 <_calloc_r+0xa8>
800baa4: 18800404 addi r2,r3,16
800baa8: 003fef06 br 800ba68 <_calloc_r+0x3c>
800baac: 1809883a mov r4,r3
800bab0: 000b883a mov r5,zero
800bab4: 80088e40 call 80088e4 <memset>
800bab8: 1007883a mov r3,r2
800babc: 1805883a mov r2,r3
800bac0: dfc00017 ldw ra,0(sp)
800bac4: dec00104 addi sp,sp,4
800bac8: f800283a ret
800bacc: 18800204 addi r2,r3,8
800bad0: 003fe506 br 800ba68 <_calloc_r+0x3c>
800bad4: 18000415 stw zero,16(r3)
800bad8: 18800604 addi r2,r3,24
800badc: 18000515 stw zero,20(r3)
800bae0: 003fe106 br 800ba68 <_calloc_r+0x3c>
0800bae4 <_fclose_r>:
800bae4: defffc04 addi sp,sp,-16
800bae8: dfc00315 stw ra,12(sp)
800baec: dc800215 stw r18,8(sp)
800baf0: dc400115 stw r17,4(sp)
800baf4: dc000015 stw r16,0(sp)
800baf8: 28000726 beq r5,zero,800bb18 <_fclose_r+0x34>
800bafc: 2023883a mov r17,r4
800bb00: 2821883a mov r16,r5
800bb04: 20000226 beq r4,zero,800bb10 <_fclose_r+0x2c>
800bb08: 20800e17 ldw r2,56(r4)
800bb0c: 10002726 beq r2,zero,800bbac <_fclose_r+0xc8>
800bb10: 8080030f ldh r2,12(r16)
800bb14: 1000081e bne r2,zero,800bb38 <_fclose_r+0x54>
800bb18: 0025883a mov r18,zero
800bb1c: 9005883a mov r2,r18
800bb20: dfc00317 ldw ra,12(sp)
800bb24: dc800217 ldw r18,8(sp)
800bb28: dc400117 ldw r17,4(sp)
800bb2c: dc000017 ldw r16,0(sp)
800bb30: dec00404 addi sp,sp,16
800bb34: f800283a ret
800bb38: 800b883a mov r5,r16
800bb3c: 8809883a mov r4,r17
800bb40: 8006ab40 call 8006ab4 <__sflush_r>
800bb44: 1025883a mov r18,r2
800bb48: 80800b17 ldw r2,44(r16)
800bb4c: 10000426 beq r2,zero,800bb60 <_fclose_r+0x7c>
800bb50: 81400717 ldw r5,28(r16)
800bb54: 8809883a mov r4,r17
800bb58: 103ee83a callr r2
800bb5c: 10001716 blt r2,zero,800bbbc <_fclose_r+0xd8>
800bb60: 8080030b ldhu r2,12(r16)
800bb64: 1080200c andi r2,r2,128
800bb68: 1000181e bne r2,zero,800bbcc <_fclose_r+0xe8>
800bb6c: 81400c17 ldw r5,48(r16)
800bb70: 28000526 beq r5,zero,800bb88 <_fclose_r+0xa4>
800bb74: 80801004 addi r2,r16,64
800bb78: 28800226 beq r5,r2,800bb84 <_fclose_r+0xa0>
800bb7c: 8809883a mov r4,r17
800bb80: 80071c40 call 80071c4 <_free_r>
800bb84: 80000c15 stw zero,48(r16)
800bb88: 81401117 ldw r5,68(r16)
800bb8c: 28000326 beq r5,zero,800bb9c <_fclose_r+0xb8>
800bb90: 8809883a mov r4,r17
800bb94: 80071c40 call 80071c4 <_free_r>
800bb98: 80001115 stw zero,68(r16)
800bb9c: 80070700 call 8007070 <__sfp_lock_acquire>
800bba0: 8000030d sth zero,12(r16)
800bba4: 80070740 call 8007074 <__sfp_lock_release>
800bba8: 003fdc06 br 800bb1c <_fclose_r+0x38>
800bbac: 80070600 call 8007060 <__sinit>
800bbb0: 8080030f ldh r2,12(r16)
800bbb4: 103fd826 beq r2,zero,800bb18 <_fclose_r+0x34>
800bbb8: 003fdf06 br 800bb38 <_fclose_r+0x54>
800bbbc: 8080030b ldhu r2,12(r16)
800bbc0: 04bfffc4 movi r18,-1
800bbc4: 1080200c andi r2,r2,128
800bbc8: 103fe826 beq r2,zero,800bb6c <_fclose_r+0x88>
800bbcc: 81400417 ldw r5,16(r16)
800bbd0: 8809883a mov r4,r17
800bbd4: 80071c40 call 80071c4 <_free_r>
800bbd8: 003fe406 br 800bb6c <_fclose_r+0x88>
0800bbdc <fclose>:
800bbdc: 00820174 movhi r2,2053
800bbe0: 200b883a mov r5,r4
800bbe4: 1132af17 ldw r4,-13636(r2)
800bbe8: 800bae41 jmpi 800bae4 <_fclose_r>
0800bbec <__fputwc>:
800bbec: defff904 addi sp,sp,-28
800bbf0: dcc00415 stw r19,16(sp)
800bbf4: dc800315 stw r18,12(sp)
800bbf8: dc000115 stw r16,4(sp)
800bbfc: dfc00615 stw ra,24(sp)
800bc00: dd000515 stw r20,20(sp)
800bc04: dc400215 stw r17,8(sp)
800bc08: 2025883a mov r18,r4
800bc0c: 2827883a mov r19,r5
800bc10: 3021883a mov r16,r6
800bc14: 800bf040 call 800bf04 <__locale_mb_cur_max>
800bc18: 10800058 cmpnei r2,r2,1
800bc1c: 1000071e bne r2,zero,800bc3c <__fputwc+0x50>
800bc20: 98bfffc4 addi r2,r19,-1
800bc24: 10803fe8 cmpgeui r2,r2,255
800bc28: 1000041e bne r2,zero,800bc3c <__fputwc+0x50>
800bc2c: 980b883a mov r5,r19
800bc30: dcc000c5 stb r19,3(sp)
800bc34: 05000044 movi r20,1
800bc38: 00000a06 br 800bc64 <__fputwc+0x78>
800bc3c: 81c01704 addi r7,r16,92
800bc40: 980d883a mov r6,r19
800bc44: d94000c4 addi r5,sp,3
800bc48: 9009883a mov r4,r18
800bc4c: 800c2fc0 call 800c2fc <_wcrtomb_r>
800bc50: 1029883a mov r20,r2
800bc54: 10bfffd8 cmpnei r2,r2,-1
800bc58: 10003426 beq r2,zero,800bd2c <__fputwc+0x140>
800bc5c: a0002926 beq r20,zero,800bd04 <__fputwc+0x118>
800bc60: d94000c3 ldbu r5,3(sp)
800bc64: 0023883a mov r17,zero
800bc68: 00000a06 br 800bc94 <__fputwc+0xa8>
800bc6c: 80800017 ldw r2,0(r16)
800bc70: 11400005 stb r5,0(r2)
800bc74: 80800017 ldw r2,0(r16)
800bc78: 10800044 addi r2,r2,1
800bc7c: 80800015 stw r2,0(r16)
800bc80: 8c400044 addi r17,r17,1
800bc84: d88000c4 addi r2,sp,3
800bc88: 1445883a add r2,r2,r17
800bc8c: 8d001d2e bgeu r17,r20,800bd04 <__fputwc+0x118>
800bc90: 11400003 ldbu r5,0(r2)
800bc94: 80800217 ldw r2,8(r16)
800bc98: 10bfffc4 addi r2,r2,-1
800bc9c: 80800215 stw r2,8(r16)
800bca0: 103ff20e bge r2,zero,800bc6c <__fputwc+0x80>
800bca4: 80c00617 ldw r3,24(r16)
800bca8: 10c01016 blt r2,r3,800bcec <__fputwc+0x100>
800bcac: 80800017 ldw r2,0(r16)
800bcb0: 11400005 stb r5,0(r2)
800bcb4: 80800017 ldw r2,0(r16)
800bcb8: 10c00003 ldbu r3,0(r2)
800bcbc: 10800044 addi r2,r2,1
800bcc0: 18c002a0 cmpeqi r3,r3,10
800bcc4: 183fed26 beq r3,zero,800bc7c <__fputwc+0x90>
800bcc8: 800d883a mov r6,r16
800bccc: 01400284 movi r5,10
800bcd0: 9009883a mov r4,r18
800bcd4: 800b8140 call 800b814 <__swbuf_r>
800bcd8: 10bfffe0 cmpeqi r2,r2,-1
800bcdc: 10803fcc andi r2,r2,255
800bce0: 103fe726 beq r2,zero,800bc80 <__fputwc+0x94>
800bce4: 053fffc4 movi r20,-1
800bce8: 00000706 br 800bd08 <__fputwc+0x11c>
800bcec: 29403fcc andi r5,r5,255
800bcf0: 800d883a mov r6,r16
800bcf4: 9009883a mov r4,r18
800bcf8: 800b8140 call 800b814 <__swbuf_r>
800bcfc: 10bfffe0 cmpeqi r2,r2,-1
800bd00: 003ff606 br 800bcdc <__fputwc+0xf0>
800bd04: 9829883a mov r20,r19
800bd08: a005883a mov r2,r20
800bd0c: dfc00617 ldw ra,24(sp)
800bd10: dd000517 ldw r20,20(sp)
800bd14: dcc00417 ldw r19,16(sp)
800bd18: dc800317 ldw r18,12(sp)
800bd1c: dc400217 ldw r17,8(sp)
800bd20: dc000117 ldw r16,4(sp)
800bd24: dec00704 addi sp,sp,28
800bd28: f800283a ret
800bd2c: 8080030b ldhu r2,12(r16)
800bd30: 10801014 ori r2,r2,64
800bd34: 8080030d sth r2,12(r16)
800bd38: 003ff306 br 800bd08 <__fputwc+0x11c>
0800bd3c <_fputwc_r>:
800bd3c: 3080030b ldhu r2,12(r6)
800bd40: 10c8000c andi r3,r2,8192
800bd44: 1800051e bne r3,zero,800bd5c <_fputwc_r+0x20>
800bd48: 30c01917 ldw r3,100(r6)
800bd4c: 10880014 ori r2,r2,8192
800bd50: 3080030d sth r2,12(r6)
800bd54: 18880014 ori r2,r3,8192
800bd58: 30801915 stw r2,100(r6)
800bd5c: 800bbec1 jmpi 800bbec <__fputwc>
0800bd60 <fputwc>:
800bd60: defffc04 addi sp,sp,-16
800bd64: 00820174 movhi r2,2053
800bd68: dc000115 stw r16,4(sp)
800bd6c: 1432af17 ldw r16,-13636(r2)
800bd70: dc400215 stw r17,8(sp)
800bd74: dfc00315 stw ra,12(sp)
800bd78: 2023883a mov r17,r4
800bd7c: 80000226 beq r16,zero,800bd88 <fputwc+0x28>
800bd80: 80800e17 ldw r2,56(r16)
800bd84: 10001026 beq r2,zero,800bdc8 <fputwc+0x68>
800bd88: 2880030b ldhu r2,12(r5)
800bd8c: 10c8000c andi r3,r2,8192
800bd90: 1800051e bne r3,zero,800bda8 <fputwc+0x48>
800bd94: 28c01917 ldw r3,100(r5)
800bd98: 10880014 ori r2,r2,8192
800bd9c: 2880030d sth r2,12(r5)
800bda0: 18880014 ori r2,r3,8192
800bda4: 28801915 stw r2,100(r5)
800bda8: 280d883a mov r6,r5
800bdac: 8009883a mov r4,r16
800bdb0: 880b883a mov r5,r17
800bdb4: dfc00317 ldw ra,12(sp)
800bdb8: dc400217 ldw r17,8(sp)
800bdbc: dc000117 ldw r16,4(sp)
800bdc0: dec00404 addi sp,sp,16
800bdc4: 800bbec1 jmpi 800bbec <__fputwc>
800bdc8: 8009883a mov r4,r16
800bdcc: d9400015 stw r5,0(sp)
800bdd0: 80070600 call 8007060 <__sinit>
800bdd4: d9400017 ldw r5,0(sp)
800bdd8: 003feb06 br 800bd88 <fputwc+0x28>
0800bddc <_fstat_r>:
800bddc: defffe04 addi sp,sp,-8
800bde0: 2805883a mov r2,r5
800bde4: dc000015 stw r16,0(sp)
800bde8: 300b883a mov r5,r6
800bdec: 2021883a mov r16,r4
800bdf0: 1009883a mov r4,r2
800bdf4: 00820174 movhi r2,2053
800bdf8: dfc00115 stw ra,4(sp)
800bdfc: 1032f015 stw zero,-13376(r2)
800be00: 800f8dc0 call 800f8dc <fstat>
800be04: 10ffffd8 cmpnei r3,r2,-1
800be08: 18000426 beq r3,zero,800be1c <_fstat_r+0x40>
800be0c: dfc00117 ldw ra,4(sp)
800be10: dc000017 ldw r16,0(sp)
800be14: dec00204 addi sp,sp,8
800be18: f800283a ret
800be1c: 00c20174 movhi r3,2053
800be20: 18f2f017 ldw r3,-13376(r3)
800be24: 183ff926 beq r3,zero,800be0c <_fstat_r+0x30>
800be28: 80c00015 stw r3,0(r16)
800be2c: dfc00117 ldw ra,4(sp)
800be30: dc000017 ldw r16,0(sp)
800be34: dec00204 addi sp,sp,8
800be38: f800283a ret
0800be3c <_isatty_r>:
800be3c: defffe04 addi sp,sp,-8
800be40: dc000015 stw r16,0(sp)
800be44: 00820174 movhi r2,2053
800be48: 2021883a mov r16,r4
800be4c: 2809883a mov r4,r5
800be50: dfc00115 stw ra,4(sp)
800be54: 1032f015 stw zero,-13376(r2)
800be58: 800f9c80 call 800f9c8 <isatty>
800be5c: 10ffffd8 cmpnei r3,r2,-1
800be60: 18000426 beq r3,zero,800be74 <_isatty_r+0x38>
800be64: dfc00117 ldw ra,4(sp)
800be68: dc000017 ldw r16,0(sp)
800be6c: dec00204 addi sp,sp,8
800be70: f800283a ret
800be74: 00c20174 movhi r3,2053
800be78: 18f2f017 ldw r3,-13376(r3)
800be7c: 183ff926 beq r3,zero,800be64 <_isatty_r+0x28>
800be80: 80c00015 stw r3,0(r16)
800be84: dfc00117 ldw ra,4(sp)
800be88: dc000017 ldw r16,0(sp)
800be8c: dec00204 addi sp,sp,8
800be90: f800283a ret
0800be94 <_setlocale_r>:
800be94: 30001826 beq r6,zero,800bef8 <_setlocale_r+0x64>
800be98: 01420134 movhi r5,2052
800be9c: defffe04 addi sp,sp,-8
800bea0: 295d8604 addi r5,r5,30232
800bea4: 3009883a mov r4,r6
800bea8: dc000015 stw r16,0(sp)
800beac: dfc00115 stw ra,4(sp)
800beb0: 3021883a mov r16,r6
800beb4: 800c2240 call 800c224 <strcmp>
800beb8: 1000061e bne r2,zero,800bed4 <_setlocale_r+0x40>
800bebc: 00820134 movhi r2,2052
800bec0: 109d8504 addi r2,r2,30228
800bec4: dfc00117 ldw ra,4(sp)
800bec8: dc000017 ldw r16,0(sp)
800becc: dec00204 addi sp,sp,8
800bed0: f800283a ret
800bed4: 01420134 movhi r5,2052
800bed8: 295d8504 addi r5,r5,30228
800bedc: 8009883a mov r4,r16
800bee0: 800c2240 call 800c224 <strcmp>
800bee4: 103ff526 beq r2,zero,800bebc <_setlocale_r+0x28>
800bee8: 80800003 ldbu r2,0(r16)
800beec: 103ff326 beq r2,zero,800bebc <_setlocale_r+0x28>
800bef0: 0005883a mov r2,zero
800bef4: 003ff306 br 800bec4 <_setlocale_r+0x30>
800bef8: 00820134 movhi r2,2052
800befc: 109d8504 addi r2,r2,30228
800bf00: f800283a ret
0800bf04 <__locale_mb_cur_max>:
800bf04: 00820174 movhi r2,2053
800bf08: 10b0f507 ldb r2,-15404(r2)
800bf0c: f800283a ret
0800bf10 <setlocale>:
800bf10: 00820174 movhi r2,2053
800bf14: 280d883a mov r6,r5
800bf18: 200b883a mov r5,r4
800bf1c: 1132af17 ldw r4,-13636(r2)
800bf20: 800be941 jmpi 800be94 <_setlocale_r>
0800bf24 <_lseek_r>:
800bf24: defffe04 addi sp,sp,-8
800bf28: 2805883a mov r2,r5
800bf2c: dc000015 stw r16,0(sp)
800bf30: 300b883a mov r5,r6
800bf34: 2021883a mov r16,r4
800bf38: 380d883a mov r6,r7
800bf3c: 1009883a mov r4,r2
800bf40: 00820174 movhi r2,2053
800bf44: dfc00115 stw ra,4(sp)
800bf48: 1032f015 stw zero,-13376(r2)
800bf4c: 800faa80 call 800faa8 <lseek>
800bf50: 10ffffd8 cmpnei r3,r2,-1
800bf54: 18000426 beq r3,zero,800bf68 <_lseek_r+0x44>
800bf58: dfc00117 ldw ra,4(sp)
800bf5c: dc000017 ldw r16,0(sp)
800bf60: dec00204 addi sp,sp,8
800bf64: f800283a ret
800bf68: 00c20174 movhi r3,2053
800bf6c: 18f2f017 ldw r3,-13376(r3)
800bf70: 183ff926 beq r3,zero,800bf58 <_lseek_r+0x34>
800bf74: 80c00015 stw r3,0(r16)
800bf78: dfc00117 ldw ra,4(sp)
800bf7c: dc000017 ldw r16,0(sp)
800bf80: dec00204 addi sp,sp,8
800bf84: f800283a ret
0800bf88 <_mbtowc_r>:
800bf88: 00820174 movhi r2,2053
800bf8c: 10b0e417 ldw r2,-15472(r2)
800bf90: 1000683a jmp r2
0800bf94 <__ascii_mbtowc>:
800bf94: deffff04 addi sp,sp,-4
800bf98: 28000826 beq r5,zero,800bfbc <__ascii_mbtowc+0x28>
800bf9c: 30000926 beq r6,zero,800bfc4 <__ascii_mbtowc+0x30>
800bfa0: 38000b26 beq r7,zero,800bfd0 <__ascii_mbtowc+0x3c>
800bfa4: 30800003 ldbu r2,0(r6)
800bfa8: 28800015 stw r2,0(r5)
800bfac: 30800003 ldbu r2,0(r6)
800bfb0: 1004c03a cmpne r2,r2,zero
800bfb4: dec00104 addi sp,sp,4
800bfb8: f800283a ret
800bfbc: d80b883a mov r5,sp
800bfc0: 303ff71e bne r6,zero,800bfa0 <__ascii_mbtowc+0xc>
800bfc4: 0005883a mov r2,zero
800bfc8: dec00104 addi sp,sp,4
800bfcc: f800283a ret
800bfd0: 00bfff84 movi r2,-2
800bfd4: 003ff706 br 800bfb4 <__ascii_mbtowc+0x20>
0800bfd8 <_read_r>:
800bfd8: defffe04 addi sp,sp,-8
800bfdc: 2805883a mov r2,r5
800bfe0: dc000015 stw r16,0(sp)
800bfe4: 300b883a mov r5,r6
800bfe8: 2021883a mov r16,r4
800bfec: 380d883a mov r6,r7
800bff0: 1009883a mov r4,r2
800bff4: 00820174 movhi r2,2053
800bff8: dfc00115 stw ra,4(sp)
800bffc: 1032f015 stw zero,-13376(r2)
800c000: 8022bcc0 call 8022bcc <read>
800c004: 10ffffd8 cmpnei r3,r2,-1
800c008: 18000426 beq r3,zero,800c01c <_read_r+0x44>
800c00c: dfc00117 ldw ra,4(sp)
800c010: dc000017 ldw r16,0(sp)
800c014: dec00204 addi sp,sp,8
800c018: f800283a ret
800c01c: 00c20174 movhi r3,2053
800c020: 18f2f017 ldw r3,-13376(r3)
800c024: 183ff926 beq r3,zero,800c00c <_read_r+0x34>
800c028: 80c00015 stw r3,0(r16)
800c02c: dfc00117 ldw ra,4(sp)
800c030: dc000017 ldw r16,0(sp)
800c034: dec00204 addi sp,sp,8
800c038: f800283a ret
0800c03c <lflush>:
800c03c: 2080030b ldhu r2,12(r4)
800c040: 1080024c andi r2,r2,9
800c044: 10800258 cmpnei r2,r2,9
800c048: 10000226 beq r2,zero,800c054 <lflush+0x18>
800c04c: 0005883a mov r2,zero
800c050: f800283a ret
800c054: 8006d3c1 jmpi 8006d3c <fflush>
0800c058 <__srefill_r>:
800c058: defffc04 addi sp,sp,-16
800c05c: dc400115 stw r17,4(sp)
800c060: dc000015 stw r16,0(sp)
800c064: dfc00315 stw ra,12(sp)
800c068: dc800215 stw r18,8(sp)
800c06c: 2023883a mov r17,r4
800c070: 2821883a mov r16,r5
800c074: 20000226 beq r4,zero,800c080 <__srefill_r+0x28>
800c078: 20800e17 ldw r2,56(r4)
800c07c: 10003a26 beq r2,zero,800c168 <__srefill_r+0x110>
800c080: 80c0030b ldhu r3,12(r16)
800c084: 1908000c andi r4,r3,8192
800c088: 1805883a mov r2,r3
800c08c: 2000071e bne r4,zero,800c0ac <__srefill_r+0x54>
800c090: 81001917 ldw r4,100(r16)
800c094: 18880014 ori r2,r3,8192
800c098: 00f7ffc4 movi r3,-8193
800c09c: 20c8703a and r4,r4,r3
800c0a0: 8080030d sth r2,12(r16)
800c0a4: 1007883a mov r3,r2
800c0a8: 81001915 stw r4,100(r16)
800c0ac: 80000115 stw zero,4(r16)
800c0b0: 1100080c andi r4,r2,32
800c0b4: 20004d1e bne r4,zero,800c1ec <__srefill_r+0x194>
800c0b8: 1100010c andi r4,r2,4
800c0bc: 20001c1e bne r4,zero,800c130 <__srefill_r+0xd8>
800c0c0: 1100040c andi r4,r2,16
800c0c4: 20005126 beq r4,zero,800c20c <__srefill_r+0x1b4>
800c0c8: 1080020c andi r2,r2,8
800c0cc: 1000371e bne r2,zero,800c1ac <__srefill_r+0x154>
800c0d0: 18c00114 ori r3,r3,4
800c0d4: 80c0030d sth r3,12(r16)
800c0d8: 80800417 ldw r2,16(r16)
800c0dc: 10003c26 beq r2,zero,800c1d0 <__srefill_r+0x178>
800c0e0: 8480030b ldhu r18,12(r16)
800c0e4: 908000cc andi r2,r18,3
800c0e8: 1000211e bne r2,zero,800c170 <__srefill_r+0x118>
800c0ec: 81800417 ldw r6,16(r16)
800c0f0: 80800817 ldw r2,32(r16)
800c0f4: 81c00517 ldw r7,20(r16)
800c0f8: 81400717 ldw r5,28(r16)
800c0fc: 81800015 stw r6,0(r16)
800c100: 8809883a mov r4,r17
800c104: 103ee83a callr r2
800c108: 1007883a mov r3,r2
800c10c: 80800115 stw r2,4(r16)
800c110: 0005883a mov r2,zero
800c114: 00c0370e bge zero,r3,800c1f4 <__srefill_r+0x19c>
800c118: dfc00317 ldw ra,12(sp)
800c11c: dc800217 ldw r18,8(sp)
800c120: dc400117 ldw r17,4(sp)
800c124: dc000017 ldw r16,0(sp)
800c128: dec00404 addi sp,sp,16
800c12c: f800283a ret
800c130: 81400c17 ldw r5,48(r16)
800c134: 283fe826 beq r5,zero,800c0d8 <__srefill_r+0x80>
800c138: 80801004 addi r2,r16,64
800c13c: 28800226 beq r5,r2,800c148 <__srefill_r+0xf0>
800c140: 8809883a mov r4,r17
800c144: 80071c40 call 80071c4 <_free_r>
800c148: 80800f17 ldw r2,60(r16)
800c14c: 80000c15 stw zero,48(r16)
800c150: 80800115 stw r2,4(r16)
800c154: 103fe026 beq r2,zero,800c0d8 <__srefill_r+0x80>
800c158: 80c00e17 ldw r3,56(r16)
800c15c: 0005883a mov r2,zero
800c160: 80c00015 stw r3,0(r16)
800c164: 003fec06 br 800c118 <__srefill_r+0xc0>
800c168: 80070600 call 8007060 <__sinit>
800c16c: 003fc406 br 800c080 <__srefill_r+0x28>
800c170: 00820174 movhi r2,2053
800c174: 1132ae17 ldw r4,-13640(r2)
800c178: 01420074 movhi r5,2049
800c17c: 00800044 movi r2,1
800c180: 8080030d sth r2,12(r16)
800c184: 29700f04 addi r5,r5,-16324
800c188: 80079840 call 8007984 <_fwalk>
800c18c: 9080024c andi r2,r18,9
800c190: 8480030d sth r18,12(r16)
800c194: 10800258 cmpnei r2,r2,9
800c198: 103fd41e bne r2,zero,800c0ec <__srefill_r+0x94>
800c19c: 800b883a mov r5,r16
800c1a0: 8809883a mov r4,r17
800c1a4: 8006ab40 call 8006ab4 <__sflush_r>
800c1a8: 003fd006 br 800c0ec <__srefill_r+0x94>
800c1ac: 800b883a mov r5,r16
800c1b0: 8809883a mov r4,r17
800c1b4: 8006cdc0 call 8006cdc <_fflush_r>
800c1b8: 10000c1e bne r2,zero,800c1ec <__srefill_r+0x194>
800c1bc: 80c0030b ldhu r3,12(r16)
800c1c0: 80000215 stw zero,8(r16)
800c1c4: 80000615 stw zero,24(r16)
800c1c8: 18fffdcc andi r3,r3,65527
800c1cc: 003fc006 br 800c0d0 <__srefill_r+0x78>
800c1d0: 800b883a mov r5,r16
800c1d4: 8809883a mov r4,r17
800c1d8: 8007ca00 call 8007ca0 <__smakebuf_r>
800c1dc: 003fc006 br 800c0e0 <__srefill_r+0x88>
800c1e0: 10801014 ori r2,r2,64
800c1e4: 80000115 stw zero,4(r16)
800c1e8: 8080030d sth r2,12(r16)
800c1ec: 00bfffc4 movi r2,-1
800c1f0: 003fc906 br 800c118 <__srefill_r+0xc0>
800c1f4: 8080030b ldhu r2,12(r16)
800c1f8: 183ff91e bne r3,zero,800c1e0 <__srefill_r+0x188>
800c1fc: 10800814 ori r2,r2,32
800c200: 8080030d sth r2,12(r16)
800c204: 00bfffc4 movi r2,-1
800c208: 003fc306 br 800c118 <__srefill_r+0xc0>
800c20c: 00800244 movi r2,9
800c210: 88800015 stw r2,0(r17)
800c214: 18c01014 ori r3,r3,64
800c218: 80c0030d sth r3,12(r16)
800c21c: 00bfffc4 movi r2,-1
800c220: 003fbd06 br 800c118 <__srefill_r+0xc0>
0800c224 <strcmp>:
800c224: 2144b03a or r2,r4,r5
800c228: 108000cc andi r2,r2,3
800c22c: 1000171e bne r2,zero,800c28c <strcmp+0x68>
800c230: 20800017 ldw r2,0(r4)
800c234: 28c00017 ldw r3,0(r5)
800c238: 10c0141e bne r2,r3,800c28c <strcmp+0x68>
800c23c: 027fbff4 movhi r9,65279
800c240: 4a7fbfc4 addi r9,r9,-257
800c244: 1247883a add r3,r2,r9
800c248: 02202074 movhi r8,32897
800c24c: 0084303a nor r2,zero,r2
800c250: 1884703a and r2,r3,r2
800c254: 42202004 addi r8,r8,-32640
800c258: 1204703a and r2,r2,r8
800c25c: 10000226 beq r2,zero,800c268 <strcmp+0x44>
800c260: 00002406 br 800c2f4 <strcmp+0xd0>
800c264: 1000231e bne r2,zero,800c2f4 <strcmp+0xd0>
800c268: 21000104 addi r4,r4,4
800c26c: 20c00017 ldw r3,0(r4)
800c270: 29400104 addi r5,r5,4
800c274: 29800017 ldw r6,0(r5)
800c278: 1a45883a add r2,r3,r9
800c27c: 00ce303a nor r7,zero,r3
800c280: 11c4703a and r2,r2,r7
800c284: 1204703a and r2,r2,r8
800c288: 19bff626 beq r3,r6,800c264 <strcmp+0x40>
800c28c: 20800003 ldbu r2,0(r4)
800c290: 10c03fcc andi r3,r2,255
800c294: 18c0201c xori r3,r3,128
800c298: 18ffe004 addi r3,r3,-128
800c29c: 18000d26 beq r3,zero,800c2d4 <strcmp+0xb0>
800c2a0: 29800007 ldb r6,0(r5)
800c2a4: 10803fcc andi r2,r2,255
800c2a8: 19800326 beq r3,r6,800c2b8 <strcmp+0x94>
800c2ac: 00000a06 br 800c2d8 <strcmp+0xb4>
800c2b0: 29800007 ldb r6,0(r5)
800c2b4: 11800b1e bne r2,r6,800c2e4 <strcmp+0xc0>
800c2b8: 21000044 addi r4,r4,1
800c2bc: 20c00003 ldbu r3,0(r4)
800c2c0: 29400044 addi r5,r5,1
800c2c4: 18803fcc andi r2,r3,255
800c2c8: 1080201c xori r2,r2,128
800c2cc: 10bfe004 addi r2,r2,-128
800c2d0: 103ff71e bne r2,zero,800c2b0 <strcmp+0x8c>
800c2d4: 0005883a mov r2,zero
800c2d8: 28c00003 ldbu r3,0(r5)
800c2dc: 10c5c83a sub r2,r2,r3
800c2e0: f800283a ret
800c2e4: 18803fcc andi r2,r3,255
800c2e8: 28c00003 ldbu r3,0(r5)
800c2ec: 10c5c83a sub r2,r2,r3
800c2f0: f800283a ret
800c2f4: 0005883a mov r2,zero
800c2f8: f800283a ret
0800c2fc <_wcrtomb_r>:
800c2fc: defffa04 addi sp,sp,-24
800c300: dc400415 stw r17,16(sp)
800c304: dc000315 stw r16,12(sp)
800c308: 00820174 movhi r2,2053
800c30c: dfc00515 stw ra,20(sp)
800c310: 2021883a mov r16,r4
800c314: 3823883a mov r17,r7
800c318: 10b0e317 ldw r2,-15476(r2)
800c31c: 28000826 beq r5,zero,800c340 <_wcrtomb_r+0x44>
800c320: 103ee83a callr r2
800c324: 10ffffd8 cmpnei r3,r2,-1
800c328: 18000a26 beq r3,zero,800c354 <_wcrtomb_r+0x58>
800c32c: dfc00517 ldw ra,20(sp)
800c330: dc400417 ldw r17,16(sp)
800c334: dc000317 ldw r16,12(sp)
800c338: dec00604 addi sp,sp,24
800c33c: f800283a ret
800c340: 000d883a mov r6,zero
800c344: d9400084 addi r5,sp,2
800c348: 103ee83a callr r2
800c34c: 10ffffd8 cmpnei r3,r2,-1
800c350: 183ff61e bne r3,zero,800c32c <_wcrtomb_r+0x30>
800c354: 00802284 movi r2,138
800c358: 88000015 stw zero,0(r17)
800c35c: 80800015 stw r2,0(r16)
800c360: 00bfffc4 movi r2,-1
800c364: 003ff106 br 800c32c <_wcrtomb_r+0x30>
0800c368 <wcrtomb>:
800c368: defffa04 addi sp,sp,-24
800c36c: 00820174 movhi r2,2053
800c370: dc400415 stw r17,16(sp)
800c374: dc000315 stw r16,12(sp)
800c378: dfc00515 stw ra,20(sp)
800c37c: 1432af17 ldw r16,-13636(r2)
800c380: 00820174 movhi r2,2053
800c384: 3023883a mov r17,r6
800c388: 10b0e317 ldw r2,-15476(r2)
800c38c: 300f883a mov r7,r6
800c390: 20000b26 beq r4,zero,800c3c0 <wcrtomb+0x58>
800c394: 280d883a mov r6,r5
800c398: 200b883a mov r5,r4
800c39c: 8009883a mov r4,r16
800c3a0: 103ee83a callr r2
800c3a4: 10ffffd8 cmpnei r3,r2,-1
800c3a8: 18000b26 beq r3,zero,800c3d8 <wcrtomb+0x70>
800c3ac: dfc00517 ldw ra,20(sp)
800c3b0: dc400417 ldw r17,16(sp)
800c3b4: dc000317 ldw r16,12(sp)
800c3b8: dec00604 addi sp,sp,24
800c3bc: f800283a ret
800c3c0: 000d883a mov r6,zero
800c3c4: d9400084 addi r5,sp,2
800c3c8: 8009883a mov r4,r16
800c3cc: 103ee83a callr r2
800c3d0: 10ffffd8 cmpnei r3,r2,-1
800c3d4: 183ff51e bne r3,zero,800c3ac <wcrtomb+0x44>
800c3d8: 00802284 movi r2,138
800c3dc: 88000015 stw zero,0(r17)
800c3e0: 80800015 stw r2,0(r16)
800c3e4: 00bfffc4 movi r2,-1
800c3e8: 003ff006 br 800c3ac <wcrtomb+0x44>
0800c3ec <_wctomb_r>:
800c3ec: 00820174 movhi r2,2053
800c3f0: 10b0e317 ldw r2,-15476(r2)
800c3f4: 1000683a jmp r2
0800c3f8 <__ascii_wctomb>:
800c3f8: 28000926 beq r5,zero,800c420 <__ascii_wctomb+0x28>
800c3fc: 30804030 cmpltui r2,r6,256
800c400: 10000326 beq r2,zero,800c410 <__ascii_wctomb+0x18>
800c404: 29800005 stb r6,0(r5)
800c408: 00800044 movi r2,1
800c40c: f800283a ret
800c410: 00802284 movi r2,138
800c414: 20800015 stw r2,0(r4)
800c418: 00bfffc4 movi r2,-1
800c41c: f800283a ret
800c420: 0005883a mov r2,zero
800c424: f800283a ret
0800c428 <__udivdi3>:
800c428: defff504 addi sp,sp,-44
800c42c: dd400615 stw r21,24(sp)
800c430: dc000115 stw r16,4(sp)
800c434: dfc00a15 stw ra,40(sp)
800c438: df000915 stw fp,36(sp)
800c43c: ddc00815 stw r23,32(sp)
800c440: dd800715 stw r22,28(sp)
800c444: dd000515 stw r20,20(sp)
800c448: dcc00415 stw r19,16(sp)
800c44c: dc800315 stw r18,12(sp)
800c450: dc400215 stw r17,8(sp)
800c454: 202b883a mov r21,r4
800c458: 2821883a mov r16,r5
800c45c: 3800821e bne r7,zero,800c668 <__udivdi3+0x240>
800c460: 3827883a mov r19,r7
800c464: 3023883a mov r17,r6
800c468: 2025883a mov r18,r4
800c46c: 29803d2e bgeu r5,r6,800c564 <__udivdi3+0x13c>
800c470: 00bfffd4 movui r2,65535
800c474: 282d883a mov r22,r5
800c478: 1180a52e bgeu r2,r6,800c710 <__udivdi3+0x2e8>
800c47c: 00804034 movhi r2,256
800c480: 30813836 bltu r6,r2,800c964 <__udivdi3+0x53c>
800c484: 3006d63a srli r3,r6,24
800c488: 04c00604 movi r19,24
800c48c: 00820134 movhi r2,2052
800c490: 1885883a add r2,r3,r2
800c494: 109d8903 ldbu r2,30244(r2)
800c498: 14e7883a add r19,r2,r19
800c49c: 00800804 movi r2,32
800c4a0: 14c5c83a sub r2,r2,r19
800c4a4: 10000526 beq r2,zero,800c4bc <__udivdi3+0x94>
800c4a8: 80a0983a sll r16,r16,r2
800c4ac: ace6d83a srl r19,r21,r19
800c4b0: 30a2983a sll r17,r6,r2
800c4b4: a8a4983a sll r18,r21,r2
800c4b8: 9c2cb03a or r22,r19,r16
800c4bc: 882ad43a srli r21,r17,16
800c4c0: b009883a mov r4,r22
800c4c4: 8d3fffcc andi r20,r17,65535
800c4c8: a80b883a mov r5,r21
800c4cc: 800d05c0 call 800d05c <__umodsi3>
800c4d0: a80b883a mov r5,r21
800c4d4: b009883a mov r4,r22
800c4d8: 1027883a mov r19,r2
800c4dc: 800cff80 call 800cff8 <__udivsi3>
800c4e0: 1021883a mov r16,r2
800c4e4: 9826943a slli r19,r19,16
800c4e8: 9004d43a srli r2,r18,16
800c4ec: a407383a mul r3,r20,r16
800c4f0: 9884b03a or r2,r19,r2
800c4f4: 10c0052e bgeu r2,r3,800c50c <__udivdi3+0xe4>
800c4f8: 1445883a add r2,r2,r17
800c4fc: 813fffc4 addi r4,r16,-1
800c500: 14400136 bltu r2,r17,800c508 <__udivdi3+0xe0>
800c504: 10c12836 bltu r2,r3,800c9a8 <__udivdi3+0x580>
800c508: 2021883a mov r16,r4
800c50c: 10e7c83a sub r19,r2,r3
800c510: a80b883a mov r5,r21
800c514: 9809883a mov r4,r19
800c518: 800d05c0 call 800d05c <__umodsi3>
800c51c: 102d883a mov r22,r2
800c520: a80b883a mov r5,r21
800c524: 9809883a mov r4,r19
800c528: 800cff80 call 800cff8 <__udivsi3>
800c52c: b02c943a slli r22,r22,16
800c530: a0a9383a mul r20,r20,r2
800c534: 94bfffcc andi r18,r18,65535
800c538: b4a4b03a or r18,r22,r18
800c53c: 9500052e bgeu r18,r20,800c554 <__udivdi3+0x12c>
800c540: 8ca5883a add r18,r17,r18
800c544: 10ffffc4 addi r3,r2,-1
800c548: 94400136 bltu r18,r17,800c550 <__udivdi3+0x128>
800c54c: 95011436 bltu r18,r20,800c9a0 <__udivdi3+0x578>
800c550: 1805883a mov r2,r3
800c554: 800c943a slli r6,r16,16
800c558: 0007883a mov r3,zero
800c55c: 3084b03a or r2,r6,r2
800c560: 00005506 br 800c6b8 <__udivdi3+0x290>
800c564: 3000041e bne r6,zero,800c578 <__udivdi3+0x150>
800c568: 000b883a mov r5,zero
800c56c: 01000044 movi r4,1
800c570: 800cff80 call 800cff8 <__udivsi3>
800c574: 1023883a mov r17,r2
800c578: 00bfffd4 movui r2,65535
800c57c: 14405f2e bgeu r2,r17,800c6fc <__udivdi3+0x2d4>
800c580: 00804034 movhi r2,256
800c584: 8880f436 bltu r17,r2,800c958 <__udivdi3+0x530>
800c588: 8806d63a srli r3,r17,24
800c58c: 04c00604 movi r19,24
800c590: 00820134 movhi r2,2052
800c594: 1885883a add r2,r3,r2
800c598: 109d8903 ldbu r2,30244(r2)
800c59c: 14e7883a add r19,r2,r19
800c5a0: 00800804 movi r2,32
800c5a4: 14c5c83a sub r2,r2,r19
800c5a8: 10005e1e bne r2,zero,800c724 <__udivdi3+0x2fc>
800c5ac: 8828d43a srli r20,r17,16
800c5b0: 8461c83a sub r16,r16,r17
800c5b4: 8d7fffcc andi r21,r17,65535
800c5b8: 00c00044 movi r3,1
800c5bc: 8009883a mov r4,r16
800c5c0: a00b883a mov r5,r20
800c5c4: d8c00015 stw r3,0(sp)
800c5c8: 800d05c0 call 800d05c <__umodsi3>
800c5cc: 8009883a mov r4,r16
800c5d0: a00b883a mov r5,r20
800c5d4: 1027883a mov r19,r2
800c5d8: 800cff80 call 800cff8 <__udivsi3>
800c5dc: 1021883a mov r16,r2
800c5e0: 9826943a slli r19,r19,16
800c5e4: 9004d43a srli r2,r18,16
800c5e8: 8549383a mul r4,r16,r21
800c5ec: d8c00017 ldw r3,0(sp)
800c5f0: 9884b03a or r2,r19,r2
800c5f4: 1100052e bgeu r2,r4,800c60c <__udivdi3+0x1e4>
800c5f8: 1445883a add r2,r2,r17
800c5fc: 817fffc4 addi r5,r16,-1
800c600: 14400136 bltu r2,r17,800c608 <__udivdi3+0x1e0>
800c604: 1100eb36 bltu r2,r4,800c9b4 <__udivdi3+0x58c>
800c608: 2821883a mov r16,r5
800c60c: 1127c83a sub r19,r2,r4
800c610: a00b883a mov r5,r20
800c614: 9809883a mov r4,r19
800c618: d8c00015 stw r3,0(sp)
800c61c: 800d05c0 call 800d05c <__umodsi3>
800c620: 102d883a mov r22,r2
800c624: a00b883a mov r5,r20
800c628: 9809883a mov r4,r19
800c62c: 800cff80 call 800cff8 <__udivsi3>
800c630: b02c943a slli r22,r22,16
800c634: 156b383a mul r21,r2,r21
800c638: 94bfffcc andi r18,r18,65535
800c63c: b4a4b03a or r18,r22,r18
800c640: d8c00017 ldw r3,0(sp)
800c644: 9540052e bgeu r18,r21,800c65c <__udivdi3+0x234>
800c648: 8ca5883a add r18,r17,r18
800c64c: 113fffc4 addi r4,r2,-1
800c650: 94400136 bltu r18,r17,800c658 <__udivdi3+0x230>
800c654: 9540d036 bltu r18,r21,800c998 <__udivdi3+0x570>
800c658: 2005883a mov r2,r4
800c65c: 800c943a slli r6,r16,16
800c660: 3084b03a or r2,r6,r2
800c664: 00001406 br 800c6b8 <__udivdi3+0x290>
800c668: 29c01136 bltu r5,r7,800c6b0 <__udivdi3+0x288>
800c66c: 00bfffd4 movui r2,65535
800c670: 11c01d2e bgeu r2,r7,800c6e8 <__udivdi3+0x2c0>
800c674: 00804034 movhi r2,256
800c678: 3880ac36 bltu r7,r2,800c92c <__udivdi3+0x504>
800c67c: 3806d63a srli r3,r7,24
800c680: 01000604 movi r4,24
800c684: 00820134 movhi r2,2052
800c688: 1885883a add r2,r3,r2
800c68c: 10dd8903 ldbu r3,30244(r2)
800c690: 05800804 movi r22,32
800c694: 1907883a add r3,r3,r4
800c698: b0edc83a sub r22,r22,r3
800c69c: b000531e bne r22,zero,800c7ec <__udivdi3+0x3c4>
800c6a0: 3c00a536 bltu r7,r16,800c938 <__udivdi3+0x510>
800c6a4: a985403a cmpgeu r2,r21,r6
800c6a8: 0007883a mov r3,zero
800c6ac: 00000206 br 800c6b8 <__udivdi3+0x290>
800c6b0: 0007883a mov r3,zero
800c6b4: 0005883a mov r2,zero
800c6b8: dfc00a17 ldw ra,40(sp)
800c6bc: df000917 ldw fp,36(sp)
800c6c0: ddc00817 ldw r23,32(sp)
800c6c4: dd800717 ldw r22,28(sp)
800c6c8: dd400617 ldw r21,24(sp)
800c6cc: dd000517 ldw r20,20(sp)
800c6d0: dcc00417 ldw r19,16(sp)
800c6d4: dc800317 ldw r18,12(sp)
800c6d8: dc400217 ldw r17,8(sp)
800c6dc: dc000117 ldw r16,4(sp)
800c6e0: dec00b04 addi sp,sp,44
800c6e4: f800283a ret
800c6e8: 38804030 cmpltui r2,r7,256
800c6ec: 1000951e bne r2,zero,800c944 <__udivdi3+0x51c>
800c6f0: 3806d23a srli r3,r7,8
800c6f4: 01000204 movi r4,8
800c6f8: 003fe206 br 800c684 <__udivdi3+0x25c>
800c6fc: 88804030 cmpltui r2,r17,256
800c700: 10009b1e bne r2,zero,800c970 <__udivdi3+0x548>
800c704: 8806d23a srli r3,r17,8
800c708: 04c00204 movi r19,8
800c70c: 003fa006 br 800c590 <__udivdi3+0x168>
800c710: 30804030 cmpltui r2,r6,256
800c714: 10008e1e bne r2,zero,800c950 <__udivdi3+0x528>
800c718: 3006d23a srli r3,r6,8
800c71c: 04c00204 movi r19,8
800c720: 003f5a06 br 800c48c <__udivdi3+0x64>
800c724: 88a2983a sll r17,r17,r2
800c728: 84ecd83a srl r22,r16,r19
800c72c: 80a0983a sll r16,r16,r2
800c730: 8828d43a srli r20,r17,16
800c734: b009883a mov r4,r22
800c738: ace6d83a srl r19,r21,r19
800c73c: a00b883a mov r5,r20
800c740: a8a4983a sll r18,r21,r2
800c744: 800d05c0 call 800d05c <__umodsi3>
800c748: b009883a mov r4,r22
800c74c: a00b883a mov r5,r20
800c750: 9c26b03a or r19,r19,r16
800c754: 1021883a mov r16,r2
800c758: 800cff80 call 800cff8 <__udivsi3>
800c75c: 102f883a mov r23,r2
800c760: 8d7fffcc andi r21,r17,65535
800c764: 8020943a slli r16,r16,16
800c768: 9804d43a srli r2,r19,16
800c76c: aded383a mul r22,r21,r23
800c770: 8084b03a or r2,r16,r2
800c774: 1580062e bgeu r2,r22,800c790 <__udivdi3+0x368>
800c778: 1445883a add r2,r2,r17
800c77c: b8ffffc4 addi r3,r23,-1
800c780: 14408336 bltu r2,r17,800c990 <__udivdi3+0x568>
800c784: 1580822e bgeu r2,r22,800c990 <__udivdi3+0x568>
800c788: bdffff84 addi r23,r23,-2
800c78c: 1445883a add r2,r2,r17
800c790: 15adc83a sub r22,r2,r22
800c794: a00b883a mov r5,r20
800c798: b009883a mov r4,r22
800c79c: 800d05c0 call 800d05c <__umodsi3>
800c7a0: 1021883a mov r16,r2
800c7a4: b009883a mov r4,r22
800c7a8: a00b883a mov r5,r20
800c7ac: 800cff80 call 800cff8 <__udivsi3>
800c7b0: 8020943a slli r16,r16,16
800c7b4: a889383a mul r4,r21,r2
800c7b8: 9cffffcc andi r19,r19,65535
800c7bc: 84e0b03a or r16,r16,r19
800c7c0: 8100062e bgeu r16,r4,800c7dc <__udivdi3+0x3b4>
800c7c4: 8461883a add r16,r16,r17
800c7c8: 10ffffc4 addi r3,r2,-1
800c7cc: 84406c36 bltu r16,r17,800c980 <__udivdi3+0x558>
800c7d0: 81006b2e bgeu r16,r4,800c980 <__udivdi3+0x558>
800c7d4: 10bfff84 addi r2,r2,-2
800c7d8: 8461883a add r16,r16,r17
800c7dc: b806943a slli r3,r23,16
800c7e0: 8121c83a sub r16,r16,r4
800c7e4: 1886b03a or r3,r3,r2
800c7e8: 003f7406 br 800c5bc <__udivdi3+0x194>
800c7ec: 30f8d83a srl fp,r6,r3
800c7f0: 3d8e983a sll r7,r7,r22
800c7f4: 80eed83a srl r23,r16,r3
800c7f8: a8c6d83a srl r3,r21,r3
800c7fc: e1f8b03a or fp,fp,r7
800c800: e024d43a srli r18,fp,16
800c804: 85a0983a sll r16,r16,r22
800c808: b809883a mov r4,r23
800c80c: 900b883a mov r5,r18
800c810: 1c22b03a or r17,r3,r16
800c814: 35a8983a sll r20,r6,r22
800c818: 800d05c0 call 800d05c <__umodsi3>
800c81c: b809883a mov r4,r23
800c820: 900b883a mov r5,r18
800c824: 1027883a mov r19,r2
800c828: 800cff80 call 800cff8 <__udivsi3>
800c82c: 1021883a mov r16,r2
800c830: e0ffffcc andi r3,fp,65535
800c834: 9826943a slli r19,r19,16
800c838: 8804d43a srli r2,r17,16
800c83c: 1c09383a mul r4,r3,r16
800c840: 9884b03a or r2,r19,r2
800c844: 1100062e bgeu r2,r4,800c860 <__udivdi3+0x438>
800c848: 1705883a add r2,r2,fp
800c84c: 817fffc4 addi r5,r16,-1
800c850: 17004d36 bltu r2,fp,800c988 <__udivdi3+0x560>
800c854: 11004c2e bgeu r2,r4,800c988 <__udivdi3+0x560>
800c858: 843fff84 addi r16,r16,-2
800c85c: 1705883a add r2,r2,fp
800c860: 1127c83a sub r19,r2,r4
800c864: 900b883a mov r5,r18
800c868: 9809883a mov r4,r19
800c86c: d8c00015 stw r3,0(sp)
800c870: 800d05c0 call 800d05c <__umodsi3>
800c874: 9809883a mov r4,r19
800c878: 900b883a mov r5,r18
800c87c: 102f883a mov r23,r2
800c880: 800cff80 call 800cff8 <__udivsi3>
800c884: d8c00017 ldw r3,0(sp)
800c888: b82e943a slli r23,r23,16
800c88c: 8c7fffcc andi r17,r17,65535
800c890: 1889383a mul r4,r3,r2
800c894: bc62b03a or r17,r23,r17
800c898: 8900062e bgeu r17,r4,800c8b4 <__udivdi3+0x48c>
800c89c: 8f23883a add r17,r17,fp
800c8a0: 10ffffc4 addi r3,r2,-1
800c8a4: 8f003436 bltu r17,fp,800c978 <__udivdi3+0x550>
800c8a8: 8900332e bgeu r17,r4,800c978 <__udivdi3+0x550>
800c8ac: 10bfff84 addi r2,r2,-2
800c8b0: 8f23883a add r17,r17,fp
800c8b4: 8020943a slli r16,r16,16
800c8b8: a17fffcc andi r5,r20,65535
800c8bc: a00cd43a srli r6,r20,16
800c8c0: 8084b03a or r2,r16,r2
800c8c4: 10ffffcc andi r3,r2,65535
800c8c8: 1028d43a srli r20,r2,16
800c8cc: 1951383a mul r8,r3,r5
800c8d0: 1987383a mul r3,r3,r6
800c8d4: a14b383a mul r5,r20,r5
800c8d8: 400ed43a srli r7,r8,16
800c8dc: 8923c83a sub r17,r17,r4
800c8e0: 1947883a add r3,r3,r5
800c8e4: 38c7883a add r3,r7,r3
800c8e8: a1a9383a mul r20,r20,r6
800c8ec: 1940022e bgeu r3,r5,800c8f8 <__udivdi3+0x4d0>
800c8f0: 01000074 movhi r4,1
800c8f4: a129883a add r20,r20,r4
800c8f8: 180cd43a srli r6,r3,16
800c8fc: 3529883a add r20,r6,r20
800c900: 8d000836 bltu r17,r20,800c924 <__udivdi3+0x4fc>
800c904: 8d000226 beq r17,r20,800c910 <__udivdi3+0x4e8>
800c908: 0007883a mov r3,zero
800c90c: 003f6a06 br 800c6b8 <__udivdi3+0x290>
800c910: 1806943a slli r3,r3,16
800c914: ad8c983a sll r6,r21,r22
800c918: 423fffcc andi r8,r8,65535
800c91c: 1a07883a add r3,r3,r8
800c920: 30fff92e bgeu r6,r3,800c908 <__udivdi3+0x4e0>
800c924: 10bfffc4 addi r2,r2,-1
800c928: 003ff706 br 800c908 <__udivdi3+0x4e0>
800c92c: 3806d43a srli r3,r7,16
800c930: 01000404 movi r4,16
800c934: 003f5306 br 800c684 <__udivdi3+0x25c>
800c938: 0007883a mov r3,zero
800c93c: 00800044 movi r2,1
800c940: 003f5d06 br 800c6b8 <__udivdi3+0x290>
800c944: 3807883a mov r3,r7
800c948: 0009883a mov r4,zero
800c94c: 003f4d06 br 800c684 <__udivdi3+0x25c>
800c950: 3007883a mov r3,r6
800c954: 003ecd06 br 800c48c <__udivdi3+0x64>
800c958: 8806d43a srli r3,r17,16
800c95c: 04c00404 movi r19,16
800c960: 003f0b06 br 800c590 <__udivdi3+0x168>
800c964: 3006d43a srli r3,r6,16
800c968: 04c00404 movi r19,16
800c96c: 003ec706 br 800c48c <__udivdi3+0x64>
800c970: 8807883a mov r3,r17
800c974: 003f0606 br 800c590 <__udivdi3+0x168>
800c978: 1805883a mov r2,r3
800c97c: 003fcd06 br 800c8b4 <__udivdi3+0x48c>
800c980: 1805883a mov r2,r3
800c984: 003f9506 br 800c7dc <__udivdi3+0x3b4>
800c988: 2821883a mov r16,r5
800c98c: 003fb406 br 800c860 <__udivdi3+0x438>
800c990: 182f883a mov r23,r3
800c994: 003f7e06 br 800c790 <__udivdi3+0x368>
800c998: 10bfff84 addi r2,r2,-2
800c99c: 003f2f06 br 800c65c <__udivdi3+0x234>
800c9a0: 10bfff84 addi r2,r2,-2
800c9a4: 003eeb06 br 800c554 <__udivdi3+0x12c>
800c9a8: 843fff84 addi r16,r16,-2
800c9ac: 1445883a add r2,r2,r17
800c9b0: 003ed606 br 800c50c <__udivdi3+0xe4>
800c9b4: 843fff84 addi r16,r16,-2
800c9b8: 1445883a add r2,r2,r17
800c9bc: 003f1306 br 800c60c <__udivdi3+0x1e4>
0800c9c0 <__umoddi3>:
800c9c0: defff404 addi sp,sp,-48
800c9c4: dc400315 stw r17,12(sp)
800c9c8: dc000215 stw r16,8(sp)
800c9cc: dfc00b15 stw ra,44(sp)
800c9d0: df000a15 stw fp,40(sp)
800c9d4: ddc00915 stw r23,36(sp)
800c9d8: dd800815 stw r22,32(sp)
800c9dc: dd400715 stw r21,28(sp)
800c9e0: dd000615 stw r20,24(sp)
800c9e4: dcc00515 stw r19,20(sp)
800c9e8: dc800415 stw r18,16(sp)
800c9ec: 2823883a mov r17,r5
800c9f0: 2021883a mov r16,r4
800c9f4: 3800701e bne r7,zero,800cbb8 <__umoddi3+0x1f8>
800c9f8: 382b883a mov r21,r7
800c9fc: 3027883a mov r19,r6
800ca00: 2029883a mov r20,r4
800ca04: 2980392e bgeu r5,r6,800caec <__umoddi3+0x12c>
800ca08: 00bfffd4 movui r2,65535
800ca0c: 282f883a mov r23,r5
800ca10: 11809736 bltu r2,r6,800cc70 <__umoddi3+0x2b0>
800ca14: 30804030 cmpltui r2,r6,256
800ca18: 1001231e bne r2,zero,800cea8 <__umoddi3+0x4e8>
800ca1c: 3006d23a srli r3,r6,8
800ca20: 05400204 movi r21,8
800ca24: 00820134 movhi r2,2052
800ca28: 1885883a add r2,r3,r2
800ca2c: 109d8903 ldbu r2,30244(r2)
800ca30: 156b883a add r21,r2,r21
800ca34: 00800804 movi r2,32
800ca38: 1565c83a sub r18,r2,r21
800ca3c: 90000526 beq r18,zero,800ca54 <__umoddi3+0x94>
800ca40: 8ca2983a sll r17,r17,r18
800ca44: 856ad83a srl r21,r16,r21
800ca48: 34a6983a sll r19,r6,r18
800ca4c: 84a8983a sll r20,r16,r18
800ca50: ac6eb03a or r23,r21,r17
800ca54: 982cd43a srli r22,r19,16
800ca58: b809883a mov r4,r23
800ca5c: 9c3fffcc andi r16,r19,65535
800ca60: b00b883a mov r5,r22
800ca64: 800d05c0 call 800d05c <__umodsi3>
800ca68: b00b883a mov r5,r22
800ca6c: b809883a mov r4,r23
800ca70: 102b883a mov r21,r2
800ca74: 800cff80 call 800cff8 <__udivsi3>
800ca78: a82a943a slli r21,r21,16
800ca7c: a006d43a srli r3,r20,16
800ca80: 8085383a mul r2,r16,r2
800ca84: a8c6b03a or r3,r21,r3
800ca88: 1880032e bgeu r3,r2,800ca98 <__umoddi3+0xd8>
800ca8c: 1cc7883a add r3,r3,r19
800ca90: 1cc00136 bltu r3,r19,800ca98 <__umoddi3+0xd8>
800ca94: 18811836 bltu r3,r2,800cef8 <__umoddi3+0x538>
800ca98: 18abc83a sub r21,r3,r2
800ca9c: b00b883a mov r5,r22
800caa0: a809883a mov r4,r21
800caa4: 800d05c0 call 800d05c <__umodsi3>
800caa8: 1023883a mov r17,r2
800caac: b00b883a mov r5,r22
800cab0: a809883a mov r4,r21
800cab4: 800cff80 call 800cff8 <__udivsi3>
800cab8: 8822943a slli r17,r17,16
800cabc: 8085383a mul r2,r16,r2
800cac0: a0ffffcc andi r3,r20,65535
800cac4: 88c6b03a or r3,r17,r3
800cac8: 1880042e bgeu r3,r2,800cadc <__umoddi3+0x11c>
800cacc: 1cc7883a add r3,r3,r19
800cad0: 1cc00236 bltu r3,r19,800cadc <__umoddi3+0x11c>
800cad4: 1880012e bgeu r3,r2,800cadc <__umoddi3+0x11c>
800cad8: 1cc7883a add r3,r3,r19
800cadc: 1885c83a sub r2,r3,r2
800cae0: 1484d83a srl r2,r2,r18
800cae4: 0007883a mov r3,zero
800cae8: 00003606 br 800cbc4 <__umoddi3+0x204>
800caec: 3000041e bne r6,zero,800cb00 <__umoddi3+0x140>
800caf0: 000b883a mov r5,zero
800caf4: 01000044 movi r4,1
800caf8: 800cff80 call 800cff8 <__udivsi3>
800cafc: 1027883a mov r19,r2
800cb00: 00bfffd4 movui r2,65535
800cb04: 14c0552e bgeu r2,r19,800cc5c <__umoddi3+0x29c>
800cb08: 00804034 movhi r2,256
800cb0c: 9880ee36 bltu r19,r2,800cec8 <__umoddi3+0x508>
800cb10: 9806d63a srli r3,r19,24
800cb14: 05400604 movi r21,24
800cb18: 00820134 movhi r2,2052
800cb1c: 1885883a add r2,r3,r2
800cb20: 109d8903 ldbu r2,30244(r2)
800cb24: 156b883a add r21,r2,r21
800cb28: 00800804 movi r2,32
800cb2c: 1565c83a sub r18,r2,r21
800cb30: 9000ab1e bne r18,zero,800cde0 <__umoddi3+0x420>
800cb34: 982cd43a srli r22,r19,16
800cb38: 8ce3c83a sub r17,r17,r19
800cb3c: 9d7fffcc andi r21,r19,65535
800cb40: b00b883a mov r5,r22
800cb44: 8809883a mov r4,r17
800cb48: 800d05c0 call 800d05c <__umodsi3>
800cb4c: b00b883a mov r5,r22
800cb50: 8809883a mov r4,r17
800cb54: 1021883a mov r16,r2
800cb58: 800cff80 call 800cff8 <__udivsi3>
800cb5c: 8020943a slli r16,r16,16
800cb60: a006d43a srli r3,r20,16
800cb64: 1545383a mul r2,r2,r21
800cb68: 80c6b03a or r3,r16,r3
800cb6c: 1880042e bgeu r3,r2,800cb80 <__umoddi3+0x1c0>
800cb70: 1cc7883a add r3,r3,r19
800cb74: 1cc00236 bltu r3,r19,800cb80 <__umoddi3+0x1c0>
800cb78: 1880012e bgeu r3,r2,800cb80 <__umoddi3+0x1c0>
800cb7c: 1cc7883a add r3,r3,r19
800cb80: 18a1c83a sub r16,r3,r2
800cb84: b00b883a mov r5,r22
800cb88: 8009883a mov r4,r16
800cb8c: 800d05c0 call 800d05c <__umodsi3>
800cb90: 1023883a mov r17,r2
800cb94: b00b883a mov r5,r22
800cb98: 8009883a mov r4,r16
800cb9c: 800cff80 call 800cff8 <__udivsi3>
800cba0: 8822943a slli r17,r17,16
800cba4: 1545383a mul r2,r2,r21
800cba8: a53fffcc andi r20,r20,65535
800cbac: 8d06b03a or r3,r17,r20
800cbb0: 18bfca2e bgeu r3,r2,800cadc <__umoddi3+0x11c>
800cbb4: 003fc506 br 800cacc <__umoddi3+0x10c>
800cbb8: 2005883a mov r2,r4
800cbbc: 29c00d2e bgeu r5,r7,800cbf4 <__umoddi3+0x234>
800cbc0: 2807883a mov r3,r5
800cbc4: dfc00b17 ldw ra,44(sp)
800cbc8: df000a17 ldw fp,40(sp)
800cbcc: ddc00917 ldw r23,36(sp)
800cbd0: dd800817 ldw r22,32(sp)
800cbd4: dd400717 ldw r21,28(sp)
800cbd8: dd000617 ldw r20,24(sp)
800cbdc: dcc00517 ldw r19,20(sp)
800cbe0: dc800417 ldw r18,16(sp)
800cbe4: dc400317 ldw r17,12(sp)
800cbe8: dc000217 ldw r16,8(sp)
800cbec: dec00c04 addi sp,sp,48
800cbf0: f800283a ret
800cbf4: 013fffd4 movui r4,65535
800cbf8: 2807883a mov r3,r5
800cbfc: 21c0122e bgeu r4,r7,800cc48 <__umoddi3+0x288>
800cc00: 01004034 movhi r4,256
800cc04: 3900ad36 bltu r7,r4,800cebc <__umoddi3+0x4fc>
800cc08: 3810d63a srli r8,r7,24
800cc0c: 01400604 movi r5,24
800cc10: 01020134 movhi r4,2052
800cc14: 4109883a add r4,r8,r4
800cc18: 251d8903 ldbu r20,30244(r4)
800cc1c: 04c00804 movi r19,32
800cc20: a169883a add r20,r20,r5
800cc24: 9d27c83a sub r19,r19,r20
800cc28: 9800161e bne r19,zero,800cc84 <__umoddi3+0x2c4>
800cc2c: 3c400136 bltu r7,r17,800cc34 <__umoddi3+0x274>
800cc30: 81bfe436 bltu r16,r6,800cbc4 <__umoddi3+0x204>
800cc34: 8185c83a sub r2,r16,r6
800cc38: 89cfc83a sub r7,r17,r7
800cc3c: 8087803a cmpltu r3,r16,r2
800cc40: 38c7c83a sub r3,r7,r3
800cc44: 003fdf06 br 800cbc4 <__umoddi3+0x204>
800cc48: 39004030 cmpltui r4,r7,256
800cc4c: 2000981e bne r4,zero,800ceb0 <__umoddi3+0x4f0>
800cc50: 3810d23a srli r8,r7,8
800cc54: 01400204 movi r5,8
800cc58: 003fed06 br 800cc10 <__umoddi3+0x250>
800cc5c: 98804030 cmpltui r2,r19,256
800cc60: 10009c1e bne r2,zero,800ced4 <__umoddi3+0x514>
800cc64: 9806d23a srli r3,r19,8
800cc68: 05400204 movi r21,8
800cc6c: 003faa06 br 800cb18 <__umoddi3+0x158>
800cc70: 00804034 movhi r2,256
800cc74: 30809936 bltu r6,r2,800cedc <__umoddi3+0x51c>
800cc78: 3006d63a srli r3,r6,24
800cc7c: 05400604 movi r21,24
800cc80: 003f6806 br 800ca24 <__umoddi3+0x64>
800cc84: 3504d83a srl r2,r6,r20
800cc88: 3cce983a sll r7,r7,r19
800cc8c: 8d38d83a srl fp,r17,r20
800cc90: 8ce2983a sll r17,r17,r19
800cc94: 11eeb03a or r23,r2,r7
800cc98: b82cd43a srli r22,r23,16
800cc9c: 8504d83a srl r2,r16,r20
800cca0: e009883a mov r4,fp
800cca4: b00b883a mov r5,r22
800cca8: 34e4983a sll r18,r6,r19
800ccac: 1462b03a or r17,r2,r17
800ccb0: 800d05c0 call 800d05c <__umodsi3>
800ccb4: e009883a mov r4,fp
800ccb8: b00b883a mov r5,r22
800ccbc: 102b883a mov r21,r2
800ccc0: 800cff80 call 800cff8 <__udivsi3>
800ccc4: 100d883a mov r6,r2
800ccc8: b8ffffcc andi r3,r23,65535
800cccc: a82a943a slli r21,r21,16
800ccd0: 8804d43a srli r2,r17,16
800ccd4: 1989383a mul r4,r3,r6
800ccd8: 84e0983a sll r16,r16,r19
800ccdc: a884b03a or r2,r21,r2
800cce0: 1100062e bgeu r2,r4,800ccfc <__umoddi3+0x33c>
800cce4: 15c5883a add r2,r2,r23
800cce8: 317fffc4 addi r5,r6,-1
800ccec: 15c08036 bltu r2,r23,800cef0 <__umoddi3+0x530>
800ccf0: 11007f2e bgeu r2,r4,800cef0 <__umoddi3+0x530>
800ccf4: 31bfff84 addi r6,r6,-2
800ccf8: 15c5883a add r2,r2,r23
800ccfc: 112bc83a sub r21,r2,r4
800cd00: b00b883a mov r5,r22
800cd04: a809883a mov r4,r21
800cd08: d9800115 stw r6,4(sp)
800cd0c: d8c00015 stw r3,0(sp)
800cd10: 800d05c0 call 800d05c <__umodsi3>
800cd14: b00b883a mov r5,r22
800cd18: a809883a mov r4,r21
800cd1c: 1039883a mov fp,r2
800cd20: 800cff80 call 800cff8 <__udivsi3>
800cd24: d8c00017 ldw r3,0(sp)
800cd28: e038943a slli fp,fp,16
800cd2c: 8c7fffcc andi r17,r17,65535
800cd30: 1887383a mul r3,r3,r2
800cd34: e462b03a or r17,fp,r17
800cd38: d9800117 ldw r6,4(sp)
800cd3c: 88c0062e bgeu r17,r3,800cd58 <__umoddi3+0x398>
800cd40: 8de3883a add r17,r17,r23
800cd44: 113fffc4 addi r4,r2,-1
800cd48: 8dc06736 bltu r17,r23,800cee8 <__umoddi3+0x528>
800cd4c: 88c0662e bgeu r17,r3,800cee8 <__umoddi3+0x528>
800cd50: 10bfff84 addi r2,r2,-2
800cd54: 8de3883a add r17,r17,r23
800cd58: 300a943a slli r5,r6,16
800cd5c: 9010d43a srli r8,r18,16
800cd60: 91bfffcc andi r6,r18,65535
800cd64: 2888b03a or r4,r5,r2
800cd68: 21ffffcc andi r7,r4,65535
800cd6c: 2008d43a srli r4,r4,16
800cd70: 300b883a mov r5,r6
800cd74: 398d383a mul r6,r7,r6
800cd78: 214b383a mul r5,r4,r5
800cd7c: 3a0f383a mul r7,r7,r8
800cd80: 3004d43a srli r2,r6,16
800cd84: 88c7c83a sub r3,r17,r3
800cd88: 394f883a add r7,r7,r5
800cd8c: 11c5883a add r2,r2,r7
800cd90: 2209383a mul r4,r4,r8
800cd94: 1140022e bgeu r2,r5,800cda0 <__umoddi3+0x3e0>
800cd98: 01400074 movhi r5,1
800cd9c: 2149883a add r4,r4,r5
800cda0: 100ad43a srli r5,r2,16
800cda4: 1004943a slli r2,r2,16
800cda8: 31bfffcc andi r6,r6,65535
800cdac: 2909883a add r4,r5,r4
800cdb0: 1185883a add r2,r2,r6
800cdb4: 19003636 bltu r3,r4,800ce90 <__umoddi3+0x4d0>
800cdb8: 19003426 beq r3,r4,800ce8c <__umoddi3+0x4cc>
800cdbc: 8085c83a sub r2,r16,r2
800cdc0: 80a1803a cmpltu r16,r16,r2
800cdc4: 1907c83a sub r3,r3,r4
800cdc8: 1c07c83a sub r3,r3,r16
800cdcc: 1d20983a sll r16,r3,r20
800cdd0: 14c4d83a srl r2,r2,r19
800cdd4: 1cc6d83a srl r3,r3,r19
800cdd8: 8084b03a or r2,r16,r2
800cddc: 003f7906 br 800cbc4 <__umoddi3+0x204>
800cde0: 9ca6983a sll r19,r19,r18
800cde4: 8d68d83a srl r20,r17,r21
800cde8: 856ad83a srl r21,r16,r21
800cdec: 982cd43a srli r22,r19,16
800cdf0: a009883a mov r4,r20
800cdf4: 8ca2983a sll r17,r17,r18
800cdf8: b00b883a mov r5,r22
800cdfc: 800d05c0 call 800d05c <__umodsi3>
800ce00: a009883a mov r4,r20
800ce04: b00b883a mov r5,r22
800ce08: ac6eb03a or r23,r21,r17
800ce0c: 1023883a mov r17,r2
800ce10: 800cff80 call 800cff8 <__udivsi3>
800ce14: 9d7fffcc andi r21,r19,65535
800ce18: 8822943a slli r17,r17,16
800ce1c: b806d43a srli r3,r23,16
800ce20: a885383a mul r2,r21,r2
800ce24: 84a8983a sll r20,r16,r18
800ce28: 88c6b03a or r3,r17,r3
800ce2c: 1880042e bgeu r3,r2,800ce40 <__umoddi3+0x480>
800ce30: 1cc7883a add r3,r3,r19
800ce34: 1cc00236 bltu r3,r19,800ce40 <__umoddi3+0x480>
800ce38: 1880012e bgeu r3,r2,800ce40 <__umoddi3+0x480>
800ce3c: 1cc7883a add r3,r3,r19
800ce40: 18a3c83a sub r17,r3,r2
800ce44: 8809883a mov r4,r17
800ce48: b00b883a mov r5,r22
800ce4c: 800d05c0 call 800d05c <__umodsi3>
800ce50: 1021883a mov r16,r2
800ce54: 8809883a mov r4,r17
800ce58: b00b883a mov r5,r22
800ce5c: 800cff80 call 800cff8 <__udivsi3>
800ce60: 8022943a slli r17,r16,16
800ce64: a885383a mul r2,r21,r2
800ce68: bdffffcc andi r23,r23,65535
800ce6c: 8de2b03a or r17,r17,r23
800ce70: 8880042e bgeu r17,r2,800ce84 <__umoddi3+0x4c4>
800ce74: 8ce3883a add r17,r17,r19
800ce78: 8cc00236 bltu r17,r19,800ce84 <__umoddi3+0x4c4>
800ce7c: 8880012e bgeu r17,r2,800ce84 <__umoddi3+0x4c4>
800ce80: 8ce3883a add r17,r17,r19
800ce84: 88a3c83a sub r17,r17,r2
800ce88: 003f2d06 br 800cb40 <__umoddi3+0x180>
800ce8c: 80bfcb2e bgeu r16,r2,800cdbc <__umoddi3+0x3fc>
800ce90: 14a5c83a sub r18,r2,r18
800ce94: 1485803a cmpltu r2,r2,r18
800ce98: 15c5883a add r2,r2,r23
800ce9c: 2089c83a sub r4,r4,r2
800cea0: 9005883a mov r2,r18
800cea4: 003fc506 br 800cdbc <__umoddi3+0x3fc>
800cea8: 3007883a mov r3,r6
800ceac: 003edd06 br 800ca24 <__umoddi3+0x64>
800ceb0: 3811883a mov r8,r7
800ceb4: 000b883a mov r5,zero
800ceb8: 003f5506 br 800cc10 <__umoddi3+0x250>
800cebc: 3810d43a srli r8,r7,16
800cec0: 01400404 movi r5,16
800cec4: 003f5206 br 800cc10 <__umoddi3+0x250>
800cec8: 9806d43a srli r3,r19,16
800cecc: 05400404 movi r21,16
800ced0: 003f1106 br 800cb18 <__umoddi3+0x158>
800ced4: 9807883a mov r3,r19
800ced8: 003f0f06 br 800cb18 <__umoddi3+0x158>
800cedc: 3006d43a srli r3,r6,16
800cee0: 05400404 movi r21,16
800cee4: 003ecf06 br 800ca24 <__umoddi3+0x64>
800cee8: 2005883a mov r2,r4
800ceec: 003f9a06 br 800cd58 <__umoddi3+0x398>
800cef0: 280d883a mov r6,r5
800cef4: 003f8106 br 800ccfc <__umoddi3+0x33c>
800cef8: 1cc7883a add r3,r3,r19
800cefc: 003ee606 br 800ca98 <__umoddi3+0xd8>
0800cf00 <__divsi3>:
800cf00: 20001a16 blt r4,zero,800cf6c <__divsi3+0x6c>
800cf04: 000f883a mov r7,zero
800cf08: 2800020e bge r5,zero,800cf14 <__divsi3+0x14>
800cf0c: 014bc83a sub r5,zero,r5
800cf10: 39c0005c xori r7,r7,1
800cf14: 200d883a mov r6,r4
800cf18: 00c00044 movi r3,1
800cf1c: 2900092e bgeu r5,r4,800cf44 <__divsi3+0x44>
800cf20: 00800804 movi r2,32
800cf24: 00c00044 movi r3,1
800cf28: 00000106 br 800cf30 <__divsi3+0x30>
800cf2c: 10001226 beq r2,zero,800cf78 <__divsi3+0x78>
800cf30: 294b883a add r5,r5,r5
800cf34: 10bfffc4 addi r2,r2,-1
800cf38: 18c7883a add r3,r3,r3
800cf3c: 293ffb36 bltu r5,r4,800cf2c <__divsi3+0x2c>
800cf40: 18000d26 beq r3,zero,800cf78 <__divsi3+0x78>
800cf44: 0005883a mov r2,zero
800cf48: 31400236 bltu r6,r5,800cf54 <__divsi3+0x54>
800cf4c: 314dc83a sub r6,r6,r5
800cf50: 10c4b03a or r2,r2,r3
800cf54: 1806d07a srli r3,r3,1
800cf58: 280ad07a srli r5,r5,1
800cf5c: 183ffa1e bne r3,zero,800cf48 <__divsi3+0x48>
800cf60: 38000126 beq r7,zero,800cf68 <__divsi3+0x68>
800cf64: 0085c83a sub r2,zero,r2
800cf68: f800283a ret
800cf6c: 0109c83a sub r4,zero,r4
800cf70: 01c00044 movi r7,1
800cf74: 003fe406 br 800cf08 <__divsi3+0x8>
800cf78: 0005883a mov r2,zero
800cf7c: 003ff806 br 800cf60 <__divsi3+0x60>
0800cf80 <__modsi3>:
800cf80: 20001a16 blt r4,zero,800cfec <__modsi3+0x6c>
800cf84: 000f883a mov r7,zero
800cf88: 2005883a mov r2,r4
800cf8c: 2800010e bge r5,zero,800cf94 <__modsi3+0x14>
800cf90: 014bc83a sub r5,zero,r5
800cf94: 00c00044 movi r3,1
800cf98: 2900092e bgeu r5,r4,800cfc0 <__modsi3+0x40>
800cf9c: 01800804 movi r6,32
800cfa0: 00c00044 movi r3,1
800cfa4: 00000106 br 800cfac <__modsi3+0x2c>
800cfa8: 30000d26 beq r6,zero,800cfe0 <__modsi3+0x60>
800cfac: 294b883a add r5,r5,r5
800cfb0: 31bfffc4 addi r6,r6,-1
800cfb4: 18c7883a add r3,r3,r3
800cfb8: 293ffb36 bltu r5,r4,800cfa8 <__modsi3+0x28>
800cfbc: 18000826 beq r3,zero,800cfe0 <__modsi3+0x60>
800cfc0: 1806d07a srli r3,r3,1
800cfc4: 11400136 bltu r2,r5,800cfcc <__modsi3+0x4c>
800cfc8: 1145c83a sub r2,r2,r5
800cfcc: 280ad07a srli r5,r5,1
800cfd0: 183ffb1e bne r3,zero,800cfc0 <__modsi3+0x40>
800cfd4: 38000126 beq r7,zero,800cfdc <__modsi3+0x5c>
800cfd8: 0085c83a sub r2,zero,r2
800cfdc: f800283a ret
800cfe0: 2005883a mov r2,r4
800cfe4: 383ffd26 beq r7,zero,800cfdc <__modsi3+0x5c>
800cfe8: 003ffb06 br 800cfd8 <__modsi3+0x58>
800cfec: 0109c83a sub r4,zero,r4
800cff0: 01c00044 movi r7,1
800cff4: 003fe406 br 800cf88 <__modsi3+0x8>
0800cff8 <__udivsi3>:
800cff8: 200d883a mov r6,r4
800cffc: 2900152e bgeu r5,r4,800d054 <__udivsi3+0x5c>
800d000: 28001416 blt r5,zero,800d054 <__udivsi3+0x5c>
800d004: 00800804 movi r2,32
800d008: 00c00044 movi r3,1
800d00c: 00000206 br 800d018 <__udivsi3+0x20>
800d010: 10000e26 beq r2,zero,800d04c <__udivsi3+0x54>
800d014: 28000516 blt r5,zero,800d02c <__udivsi3+0x34>
800d018: 294b883a add r5,r5,r5
800d01c: 10bfffc4 addi r2,r2,-1
800d020: 18c7883a add r3,r3,r3
800d024: 293ffa36 bltu r5,r4,800d010 <__udivsi3+0x18>
800d028: 18000826 beq r3,zero,800d04c <__udivsi3+0x54>
800d02c: 0005883a mov r2,zero
800d030: 31400236 bltu r6,r5,800d03c <__udivsi3+0x44>
800d034: 314dc83a sub r6,r6,r5
800d038: 10c4b03a or r2,r2,r3
800d03c: 1806d07a srli r3,r3,1
800d040: 280ad07a srli r5,r5,1
800d044: 183ffa1e bne r3,zero,800d030 <__udivsi3+0x38>
800d048: f800283a ret
800d04c: 0005883a mov r2,zero
800d050: f800283a ret
800d054: 00c00044 movi r3,1
800d058: 003ff406 br 800d02c <__udivsi3+0x34>
0800d05c <__umodsi3>:
800d05c: 2005883a mov r2,r4
800d060: 2900132e bgeu r5,r4,800d0b0 <__umodsi3+0x54>
800d064: 28001216 blt r5,zero,800d0b0 <__umodsi3+0x54>
800d068: 01800804 movi r6,32
800d06c: 00c00044 movi r3,1
800d070: 00000206 br 800d07c <__umodsi3+0x20>
800d074: 30000c26 beq r6,zero,800d0a8 <__umodsi3+0x4c>
800d078: 28000516 blt r5,zero,800d090 <__umodsi3+0x34>
800d07c: 294b883a add r5,r5,r5
800d080: 31bfffc4 addi r6,r6,-1
800d084: 18c7883a add r3,r3,r3
800d088: 293ffa36 bltu r5,r4,800d074 <__umodsi3+0x18>
800d08c: 18000626 beq r3,zero,800d0a8 <__umodsi3+0x4c>
800d090: 1806d07a srli r3,r3,1
800d094: 11400136 bltu r2,r5,800d09c <__umodsi3+0x40>
800d098: 1145c83a sub r2,r2,r5
800d09c: 280ad07a srli r5,r5,1
800d0a0: 183ffb1e bne r3,zero,800d090 <__umodsi3+0x34>
800d0a4: f800283a ret
800d0a8: 2005883a mov r2,r4
800d0ac: f800283a ret
800d0b0: 00c00044 movi r3,1
800d0b4: 003ff606 br 800d090 <__umodsi3+0x34>
0800d0b8 <__adddf3>:
800d0b8: 02000434 movhi r8,16
800d0bc: defffb04 addi sp,sp,-20
800d0c0: 423fffc4 addi r8,r8,-1
800d0c4: 2a12703a and r9,r5,r8
800d0c8: 3a06703a and r3,r7,r8
800d0cc: 3804d53a srli r2,r7,20
800d0d0: dc000015 stw r16,0(sp)
800d0d4: 2820d53a srli r16,r5,20
800d0d8: 2016d77a srli r11,r4,29
800d0dc: 3014d77a srli r10,r6,29
800d0e0: 280ad7fa srli r5,r5,31
800d0e4: 481290fa slli r9,r9,3
800d0e8: 180690fa slli r3,r3,3
800d0ec: 380ed7fa srli r7,r7,31
800d0f0: dc400115 stw r17,4(sp)
800d0f4: 8401ffcc andi r16,r16,2047
800d0f8: 1081ffcc andi r2,r2,2047
800d0fc: dfc00415 stw ra,16(sp)
800d100: dcc00315 stw r19,12(sp)
800d104: dc800215 stw r18,8(sp)
800d108: 5a52b03a or r9,r11,r9
800d10c: 50c6b03a or r3,r10,r3
800d110: 2823883a mov r17,r5
800d114: 201890fa slli r12,r4,3
800d118: 301690fa slli r11,r6,3
800d11c: 8095c83a sub r10,r16,r2
800d120: 29c06a26 beq r5,r7,800d2cc <__adddf3+0x214>
800d124: 0280590e bge zero,r10,800d28c <__adddf3+0x1d4>
800d128: 10007c26 beq r2,zero,800d31c <__adddf3+0x264>
800d12c: 8081ffd8 cmpnei r2,r16,2047
800d130: 10010726 beq r2,zero,800d550 <__adddf3+0x498>
800d134: 18c02034 orhi r3,r3,128
800d138: 50800e48 cmpgei r2,r10,57
800d13c: 1000ed1e bne r2,zero,800d4f4 <__adddf3+0x43c>
800d140: 50800808 cmpgei r2,r10,32
800d144: 1001541e bne r2,zero,800d698 <__adddf3+0x5e0>
800d148: 01000804 movi r4,32
800d14c: 2289c83a sub r4,r4,r10
800d150: 1926983a sll r19,r3,r4
800d154: 5a84d83a srl r2,r11,r10
800d158: 5908983a sll r4,r11,r4
800d15c: 1a86d83a srl r3,r3,r10
800d160: 98a6b03a or r19,r19,r2
800d164: 2016c03a cmpne r11,r4,zero
800d168: 9ae6b03a or r19,r19,r11
800d16c: 48d3c83a sub r9,r9,r3
800d170: 64e7c83a sub r19,r12,r19
800d174: 64c9803a cmpltu r4,r12,r19
800d178: 4909c83a sub r4,r9,r4
800d17c: 2080202c andhi r2,r4,128
800d180: 10008726 beq r2,zero,800d3a0 <__adddf3+0x2e8>
800d184: 02402034 movhi r9,128
800d188: 4a7fffc4 addi r9,r9,-1
800d18c: 2264703a and r18,r4,r9
800d190: 9000cf26 beq r18,zero,800d4d0 <__adddf3+0x418>
800d194: 9009883a mov r4,r18
800d198: 800f7900 call 800f790 <__clzsi2>
800d19c: 10fffe04 addi r3,r2,-8
800d1a0: 01000804 movi r4,32
800d1a4: 20c9c83a sub r4,r4,r3
800d1a8: 990ad83a srl r5,r19,r4
800d1ac: 90c8983a sll r4,r18,r3
800d1b0: 98e6983a sll r19,r19,r3
800d1b4: 2908b03a or r4,r5,r4
800d1b8: 1c00be16 blt r3,r16,800d4b4 <__adddf3+0x3fc>
800d1bc: 1c21c83a sub r16,r3,r16
800d1c0: 81400044 addi r5,r16,1
800d1c4: 28800808 cmpgei r2,r5,32
800d1c8: 10011b1e bne r2,zero,800d638 <__adddf3+0x580>
800d1cc: 00800804 movi r2,32
800d1d0: 1145c83a sub r2,r2,r5
800d1d4: 9946d83a srl r3,r19,r5
800d1d8: 98a6983a sll r19,r19,r2
800d1dc: 2084983a sll r2,r4,r2
800d1e0: 2148d83a srl r4,r4,r5
800d1e4: 9826c03a cmpne r19,r19,zero
800d1e8: 10c4b03a or r2,r2,r3
800d1ec: 14e6b03a or r19,r2,r19
800d1f0: 0021883a mov r16,zero
800d1f4: 988001cc andi r2,r19,7
800d1f8: 10000726 beq r2,zero,800d218 <__adddf3+0x160>
800d1fc: 988003cc andi r2,r19,15
800d200: 10800120 cmpeqi r2,r2,4
800d204: 1000041e bne r2,zero,800d218 <__adddf3+0x160>
800d208: 99400104 addi r5,r19,4
800d20c: 2ce7803a cmpltu r19,r5,r19
800d210: 24c9883a add r4,r4,r19
800d214: 2827883a mov r19,r5
800d218: 2080202c andhi r2,r4,128
800d21c: 10006226 beq r2,zero,800d3a8 <__adddf3+0x2f0>
800d220: 84000044 addi r16,r16,1
800d224: 8081ffe0 cmpeqi r2,r16,2047
800d228: 8401ffcc andi r16,r16,2047
800d22c: 1000731e bne r2,zero,800d3fc <__adddf3+0x344>
800d230: 017fe034 movhi r5,65408
800d234: 297fffc4 addi r5,r5,-1
800d238: 214a703a and r5,r4,r5
800d23c: 2804977a slli r2,r5,29
800d240: 280a927a slli r5,r5,9
800d244: 9826d0fa srli r19,r19,3
800d248: 2808d33a srli r4,r5,12
800d24c: 14c4b03a or r2,r2,r19
800d250: 8020953a slli r16,r16,20
800d254: 00c00434 movhi r3,16
800d258: 8c403fcc andi r17,r17,255
800d25c: 882297fa slli r17,r17,31
800d260: 18ffffc4 addi r3,r3,-1
800d264: 20c6703a and r3,r4,r3
800d268: 1c06b03a or r3,r3,r16
800d26c: 1c46b03a or r3,r3,r17
800d270: dfc00417 ldw ra,16(sp)
800d274: dcc00317 ldw r19,12(sp)
800d278: dc800217 ldw r18,8(sp)
800d27c: dc400117 ldw r17,4(sp)
800d280: dc000017 ldw r16,0(sp)
800d284: dec00504 addi sp,sp,20
800d288: f800283a ret
800d28c: 50002b1e bne r10,zero,800d33c <__adddf3+0x284>
800d290: 80800044 addi r2,r16,1
800d294: 1081ff8c andi r2,r2,2046
800d298: 1000a11e bne r2,zero,800d520 <__adddf3+0x468>
800d29c: 4b0ab03a or r5,r9,r12
800d2a0: 1ac4b03a or r2,r3,r11
800d2a4: 80015c1e bne r16,zero,800d818 <__adddf3+0x760>
800d2a8: 28012826 beq r5,zero,800d74c <__adddf3+0x694>
800d2ac: 1001671e bne r2,zero,800d84c <__adddf3+0x794>
800d2b0: 4826977a slli r19,r9,29
800d2b4: 00c80034 movhi r3,8192
800d2b8: 18ffffc4 addi r3,r3,-1
800d2bc: 20c4703a and r2,r4,r3
800d2c0: 9884b03a or r2,r19,r2
800d2c4: 4812d0fa srli r9,r9,3
800d2c8: 00003d06 br 800d3c0 <__adddf3+0x308>
800d2cc: 02804f0e bge zero,r10,800d40c <__adddf3+0x354>
800d2d0: 10002426 beq r2,zero,800d364 <__adddf3+0x2ac>
800d2d4: 8081ffd8 cmpnei r2,r16,2047
800d2d8: 10009d26 beq r2,zero,800d550 <__adddf3+0x498>
800d2dc: 18c02034 orhi r3,r3,128
800d2e0: 50800e48 cmpgei r2,r10,57
800d2e4: 10003b1e bne r2,zero,800d3d4 <__adddf3+0x31c>
800d2e8: 50800808 cmpgei r2,r10,32
800d2ec: 10010326 beq r2,zero,800d6fc <__adddf3+0x644>
800d2f0: 54fff804 addi r19,r10,-32
800d2f4: 51000820 cmpeqi r4,r10,32
800d2f8: 1cc4d83a srl r2,r3,r19
800d2fc: 2000041e bne r4,zero,800d310 <__adddf3+0x258>
800d300: 01001004 movi r4,64
800d304: 2295c83a sub r10,r4,r10
800d308: 1a86983a sll r3,r3,r10
800d30c: 58d6b03a or r11,r11,r3
800d310: 5826c03a cmpne r19,r11,zero
800d314: 98a6b03a or r19,r19,r2
800d318: 00003006 br 800d3dc <__adddf3+0x324>
800d31c: 1ac4b03a or r2,r3,r11
800d320: 10007726 beq r2,zero,800d500 <__adddf3+0x448>
800d324: 50bfffc4 addi r2,r10,-1
800d328: 10011926 beq r2,zero,800d790 <__adddf3+0x6d8>
800d32c: 5281ffd8 cmpnei r10,r10,2047
800d330: 50012026 beq r10,zero,800d7b4 <__adddf3+0x6fc>
800d334: 1015883a mov r10,r2
800d338: 003f7f06 br 800d138 <__adddf3+0x80>
800d33c: 1409c83a sub r4,r2,r16
800d340: 8000a61e bne r16,zero,800d5dc <__adddf3+0x524>
800d344: 4b0ab03a or r5,r9,r12
800d348: 2800f726 beq r5,zero,800d728 <__adddf3+0x670>
800d34c: 217fffc4 addi r5,r4,-1
800d350: 28017f26 beq r5,zero,800d950 <__adddf3+0x898>
800d354: 2101ffd8 cmpnei r4,r4,2047
800d358: 2001a326 beq r4,zero,800d9e8 <__adddf3+0x930>
800d35c: 2809883a mov r4,r5
800d360: 0000a106 br 800d5e8 <__adddf3+0x530>
800d364: 1ac4b03a or r2,r3,r11
800d368: 10006526 beq r2,zero,800d500 <__adddf3+0x448>
800d36c: 50bfffc4 addi r2,r10,-1
800d370: 10000426 beq r2,zero,800d384 <__adddf3+0x2cc>
800d374: 5281ffd8 cmpnei r10,r10,2047
800d378: 50014326 beq r10,zero,800d888 <__adddf3+0x7d0>
800d37c: 1015883a mov r10,r2
800d380: 003fd706 br 800d2e0 <__adddf3+0x228>
800d384: 62e7883a add r19,r12,r11
800d388: 48d3883a add r9,r9,r3
800d38c: 9b09803a cmpltu r4,r19,r12
800d390: 4909883a add r4,r9,r4
800d394: 2080202c andhi r2,r4,128
800d398: 1000b41e bne r2,zero,800d66c <__adddf3+0x5b4>
800d39c: 04000044 movi r16,1
800d3a0: 988001cc andi r2,r19,7
800d3a4: 103f951e bne r2,zero,800d1fc <__adddf3+0x144>
800d3a8: 9826d0fa srli r19,r19,3
800d3ac: 2004977a slli r2,r4,29
800d3b0: 2012d0fa srli r9,r4,3
800d3b4: 9884b03a or r2,r19,r2
800d3b8: 80c1ffe0 cmpeqi r3,r16,2047
800d3bc: 1800351e bne r3,zero,800d494 <__adddf3+0x3dc>
800d3c0: 01000434 movhi r4,16
800d3c4: 213fffc4 addi r4,r4,-1
800d3c8: 4908703a and r4,r9,r4
800d3cc: 8401ffcc andi r16,r16,2047
800d3d0: 003f9f06 br 800d250 <__adddf3+0x198>
800d3d4: 1ac8b03a or r4,r3,r11
800d3d8: 2026c03a cmpne r19,r4,zero
800d3dc: 9b27883a add r19,r19,r12
800d3e0: 9b09803a cmpltu r4,r19,r12
800d3e4: 2249883a add r4,r4,r9
800d3e8: 2080202c andhi r2,r4,128
800d3ec: 103fec26 beq r2,zero,800d3a0 <__adddf3+0x2e8>
800d3f0: 84000044 addi r16,r16,1
800d3f4: 8081ffe0 cmpeqi r2,r16,2047
800d3f8: 10009d26 beq r2,zero,800d670 <__adddf3+0x5b8>
800d3fc: 0401ffc4 movi r16,2047
800d400: 0009883a mov r4,zero
800d404: 0005883a mov r2,zero
800d408: 003f9106 br 800d250 <__adddf3+0x198>
800d40c: 5000571e bne r10,zero,800d56c <__adddf3+0x4b4>
800d410: 80800044 addi r2,r16,1
800d414: 1141ff8c andi r5,r2,2046
800d418: 2800ed1e bne r5,zero,800d7d0 <__adddf3+0x718>
800d41c: 4b04b03a or r2,r9,r12
800d420: 8000a826 beq r16,zero,800d6c4 <__adddf3+0x60c>
800d424: 10010226 beq r2,zero,800d830 <__adddf3+0x778>
800d428: 1ad6b03a or r11,r3,r11
800d42c: 480a977a slli r5,r9,29
800d430: 4812d0fa srli r9,r9,3
800d434: 58015f26 beq r11,zero,800d9b4 <__adddf3+0x8fc>
800d438: 02080034 movhi r8,8192
800d43c: 423fffc4 addi r8,r8,-1
800d440: 2204703a and r2,r4,r8
800d444: 4900022c andhi r4,r9,8
800d448: 114ab03a or r5,r2,r5
800d44c: 20000826 beq r4,zero,800d470 <__adddf3+0x3b8>
800d450: 1808d0fa srli r4,r3,3
800d454: 2080022c andhi r2,r4,8
800d458: 1000051e bne r2,zero,800d470 <__adddf3+0x3b8>
800d45c: 1806977a slli r3,r3,29
800d460: 3204703a and r2,r6,r8
800d464: 3823883a mov r17,r7
800d468: 10cab03a or r5,r2,r3
800d46c: 2013883a mov r9,r4
800d470: 2804d77a srli r2,r5,29
800d474: 480890fa slli r4,r9,3
800d478: 00c80034 movhi r3,8192
800d47c: 18ffffc4 addi r3,r3,-1
800d480: 1108b03a or r4,r2,r4
800d484: 2004977a slli r2,r4,29
800d488: 2012d0fa srli r9,r4,3
800d48c: 28ca703a and r5,r5,r3
800d490: 1144b03a or r2,r2,r5
800d494: 4886b03a or r3,r9,r2
800d498: 18016b26 beq r3,zero,800da48 <__adddf3+0x990>
800d49c: 00c00434 movhi r3,16
800d4a0: 49000234 orhi r4,r9,8
800d4a4: 18ffffc4 addi r3,r3,-1
800d4a8: 20c8703a and r4,r4,r3
800d4ac: 0401ffc4 movi r16,2047
800d4b0: 003f6706 br 800d250 <__adddf3+0x198>
800d4b4: 017fe034 movhi r5,65408
800d4b8: 297fffc4 addi r5,r5,-1
800d4bc: 988001cc andi r2,r19,7
800d4c0: 80e1c83a sub r16,r16,r3
800d4c4: 2148703a and r4,r4,r5
800d4c8: 103f4c1e bne r2,zero,800d1fc <__adddf3+0x144>
800d4cc: 003fb606 br 800d3a8 <__adddf3+0x2f0>
800d4d0: 9809883a mov r4,r19
800d4d4: 800f7900 call 800f790 <__clzsi2>
800d4d8: 10c00604 addi r3,r2,24
800d4dc: 19000808 cmpgei r4,r3,32
800d4e0: 203f2f26 beq r4,zero,800d1a0 <__adddf3+0xe8>
800d4e4: 113ffe04 addi r4,r2,-8
800d4e8: 9908983a sll r4,r19,r4
800d4ec: 0027883a mov r19,zero
800d4f0: 003f3106 br 800d1b8 <__adddf3+0x100>
800d4f4: 1ac8b03a or r4,r3,r11
800d4f8: 2026c03a cmpne r19,r4,zero
800d4fc: 003f1c06 br 800d170 <__adddf3+0xb8>
800d500: 4826977a slli r19,r9,29
800d504: 00c80034 movhi r3,8192
800d508: 18ffffc4 addi r3,r3,-1
800d50c: 20c4703a and r2,r4,r3
800d510: 14c4b03a or r2,r2,r19
800d514: 4812d0fa srli r9,r9,3
800d518: 5021883a mov r16,r10
800d51c: 003fa606 br 800d3b8 <__adddf3+0x300>
800d520: 62e7c83a sub r19,r12,r11
800d524: 48e5c83a sub r18,r9,r3
800d528: 64c9803a cmpltu r4,r12,r19
800d52c: 9125c83a sub r18,r18,r4
800d530: 9080202c andhi r2,r18,128
800d534: 1000b21e bne r2,zero,800d800 <__adddf3+0x748>
800d538: 9c84b03a or r2,r19,r18
800d53c: 103f141e bne r2,zero,800d190 <__adddf3+0xd8>
800d540: 0013883a mov r9,zero
800d544: 0021883a mov r16,zero
800d548: 0023883a mov r17,zero
800d54c: 003f9c06 br 800d3c0 <__adddf3+0x308>
800d550: 4826977a slli r19,r9,29
800d554: 00c80034 movhi r3,8192
800d558: 18ffffc4 addi r3,r3,-1
800d55c: 20c4703a and r2,r4,r3
800d560: 14c4b03a or r2,r2,r19
800d564: 4812d0fa srli r9,r9,3
800d568: 003fca06 br 800d494 <__adddf3+0x3dc>
800d56c: 1409c83a sub r4,r2,r16
800d570: 80005e1e bne r16,zero,800d6ec <__adddf3+0x634>
800d574: 4b0ab03a or r5,r9,r12
800d578: 28011326 beq r5,zero,800d9c8 <__adddf3+0x910>
800d57c: 217fffc4 addi r5,r4,-1
800d580: 28012c26 beq r5,zero,800da34 <__adddf3+0x97c>
800d584: 2101ffd8 cmpnei r4,r4,2047
800d588: 2000a926 beq r4,zero,800d830 <__adddf3+0x778>
800d58c: 2809883a mov r4,r5
800d590: 21400e48 cmpgei r5,r4,57
800d594: 2800b91e bne r5,zero,800d87c <__adddf3+0x7c4>
800d598: 21400808 cmpgei r5,r4,32
800d59c: 28011a1e bne r5,zero,800da08 <__adddf3+0x950>
800d5a0: 01400804 movi r5,32
800d5a4: 290bc83a sub r5,r5,r4
800d5a8: 4966983a sll r19,r9,r5
800d5ac: 610cd83a srl r6,r12,r4
800d5b0: 614a983a sll r5,r12,r5
800d5b4: 4912d83a srl r9,r9,r4
800d5b8: 99a6b03a or r19,r19,r6
800d5bc: 280ac03a cmpne r5,r5,zero
800d5c0: 9966b03a or r19,r19,r5
800d5c4: 1a47883a add r3,r3,r9
800d5c8: 9ae7883a add r19,r19,r11
800d5cc: 9ac9803a cmpltu r4,r19,r11
800d5d0: 20c9883a add r4,r4,r3
800d5d4: 1021883a mov r16,r2
800d5d8: 003f8306 br 800d3e8 <__adddf3+0x330>
800d5dc: 1141ffd8 cmpnei r5,r2,2047
800d5e0: 28006326 beq r5,zero,800d770 <__adddf3+0x6b8>
800d5e4: 4a402034 orhi r9,r9,128
800d5e8: 21400e48 cmpgei r5,r4,57
800d5ec: 28006e1e bne r5,zero,800d7a8 <__adddf3+0x6f0>
800d5f0: 21400808 cmpgei r5,r4,32
800d5f4: 2800ab1e bne r5,zero,800d8a4 <__adddf3+0x7ec>
800d5f8: 01400804 movi r5,32
800d5fc: 290bc83a sub r5,r5,r4
800d600: 4966983a sll r19,r9,r5
800d604: 610cd83a srl r6,r12,r4
800d608: 614a983a sll r5,r12,r5
800d60c: 4912d83a srl r9,r9,r4
800d610: 99a6b03a or r19,r19,r6
800d614: 280ac03a cmpne r5,r5,zero
800d618: 9966b03a or r19,r19,r5
800d61c: 1a47c83a sub r3,r3,r9
800d620: 5ce7c83a sub r19,r11,r19
800d624: 5cc9803a cmpltu r4,r11,r19
800d628: 1909c83a sub r4,r3,r4
800d62c: 3823883a mov r17,r7
800d630: 1021883a mov r16,r2
800d634: 003ed106 br 800d17c <__adddf3+0xc4>
800d638: 843ff844 addi r16,r16,-31
800d63c: 28800820 cmpeqi r2,r5,32
800d640: 2420d83a srl r16,r4,r16
800d644: 1000041e bne r2,zero,800d658 <__adddf3+0x5a0>
800d648: 00801004 movi r2,64
800d64c: 114bc83a sub r5,r2,r5
800d650: 2148983a sll r4,r4,r5
800d654: 9926b03a or r19,r19,r4
800d658: 9826c03a cmpne r19,r19,zero
800d65c: 9c26b03a or r19,r19,r16
800d660: 0009883a mov r4,zero
800d664: 0021883a mov r16,zero
800d668: 003f4d06 br 800d3a0 <__adddf3+0x2e8>
800d66c: 04000084 movi r16,2
800d670: 00bfe034 movhi r2,65408
800d674: 10bfffc4 addi r2,r2,-1
800d678: 208a703a and r5,r4,r2
800d67c: 9804d07a srli r2,r19,1
800d680: 280697fa slli r3,r5,31
800d684: 9cc0004c andi r19,r19,1
800d688: 14e6b03a or r19,r2,r19
800d68c: 2808d07a srli r4,r5,1
800d690: 1ce6b03a or r19,r3,r19
800d694: 003ed706 br 800d1f4 <__adddf3+0x13c>
800d698: 54fff804 addi r19,r10,-32
800d69c: 50800820 cmpeqi r2,r10,32
800d6a0: 1ce6d83a srl r19,r3,r19
800d6a4: 1000041e bne r2,zero,800d6b8 <__adddf3+0x600>
800d6a8: 00801004 movi r2,64
800d6ac: 1295c83a sub r10,r2,r10
800d6b0: 1a86983a sll r3,r3,r10
800d6b4: 58d6b03a or r11,r11,r3
800d6b8: 5808c03a cmpne r4,r11,zero
800d6bc: 24e6b03a or r19,r4,r19
800d6c0: 003eab06 br 800d170 <__adddf3+0xb8>
800d6c4: 1000a926 beq r2,zero,800d96c <__adddf3+0x8b4>
800d6c8: 1ac4b03a or r2,r3,r11
800d6cc: 1000ae1e bne r2,zero,800d988 <__adddf3+0x8d0>
800d6d0: 4806977a slli r3,r9,29
800d6d4: 00880034 movhi r2,8192
800d6d8: 10bfffc4 addi r2,r2,-1
800d6dc: 2084703a and r2,r4,r2
800d6e0: 10c4b03a or r2,r2,r3
800d6e4: 4812d0fa srli r9,r9,3
800d6e8: 003f3506 br 800d3c0 <__adddf3+0x308>
800d6ec: 1141ffd8 cmpnei r5,r2,2047
800d6f0: 28004f26 beq r5,zero,800d830 <__adddf3+0x778>
800d6f4: 4a402034 orhi r9,r9,128
800d6f8: 003fa506 br 800d590 <__adddf3+0x4d8>
800d6fc: 01000804 movi r4,32
800d700: 2289c83a sub r4,r4,r10
800d704: 1926983a sll r19,r3,r4
800d708: 5a84d83a srl r2,r11,r10
800d70c: 5908983a sll r4,r11,r4
800d710: 1a86d83a srl r3,r3,r10
800d714: 98a6b03a or r19,r19,r2
800d718: 2016c03a cmpne r11,r4,zero
800d71c: 9ae6b03a or r19,r19,r11
800d720: 48d3883a add r9,r9,r3
800d724: 003f2d06 br 800d3dc <__adddf3+0x324>
800d728: 01480034 movhi r5,8192
800d72c: 1826977a slli r19,r3,29
800d730: 297fffc4 addi r5,r5,-1
800d734: 3144703a and r2,r6,r5
800d738: 14c4b03a or r2,r2,r19
800d73c: 1812d0fa srli r9,r3,3
800d740: 3823883a mov r17,r7
800d744: 2021883a mov r16,r4
800d748: 003f1b06 br 800d3b8 <__adddf3+0x300>
800d74c: 10007d26 beq r2,zero,800d944 <__adddf3+0x88c>
800d750: 00880034 movhi r2,8192
800d754: 1808977a slli r4,r3,29
800d758: 10bfffc4 addi r2,r2,-1
800d75c: 3084703a and r2,r6,r2
800d760: 1104b03a or r2,r2,r4
800d764: 1812d0fa srli r9,r3,3
800d768: 3823883a mov r17,r7
800d76c: 003f1406 br 800d3c0 <__adddf3+0x308>
800d770: 180a977a slli r5,r3,29
800d774: 01080034 movhi r4,8192
800d778: 213fffc4 addi r4,r4,-1
800d77c: 3104703a and r2,r6,r4
800d780: 2884b03a or r2,r5,r2
800d784: 1812d0fa srli r9,r3,3
800d788: 3823883a mov r17,r7
800d78c: 003f4106 br 800d494 <__adddf3+0x3dc>
800d790: 62e7c83a sub r19,r12,r11
800d794: 48d3c83a sub r9,r9,r3
800d798: 64c9803a cmpltu r4,r12,r19
800d79c: 4909c83a sub r4,r9,r4
800d7a0: 04000044 movi r16,1
800d7a4: 003e7506 br 800d17c <__adddf3+0xc4>
800d7a8: 4b12b03a or r9,r9,r12
800d7ac: 4826c03a cmpne r19,r9,zero
800d7b0: 003f9b06 br 800d620 <__adddf3+0x568>
800d7b4: 4826977a slli r19,r9,29
800d7b8: 00c80034 movhi r3,8192
800d7bc: 18ffffc4 addi r3,r3,-1
800d7c0: 20c4703a and r2,r4,r3
800d7c4: 9884b03a or r2,r19,r2
800d7c8: 4812d0fa srli r9,r9,3
800d7cc: 003f3106 br 800d494 <__adddf3+0x3dc>
800d7d0: 1101ffe0 cmpeqi r4,r2,2047
800d7d4: 203f091e bne r4,zero,800d3fc <__adddf3+0x344>
800d7d8: 62d7883a add r11,r12,r11
800d7dc: 5b09803a cmpltu r4,r11,r12
800d7e0: 48d3883a add r9,r9,r3
800d7e4: 490b883a add r5,r9,r4
800d7e8: 282697fa slli r19,r5,31
800d7ec: 5816d07a srli r11,r11,1
800d7f0: 2808d07a srli r4,r5,1
800d7f4: 1021883a mov r16,r2
800d7f8: 9ae6b03a or r19,r19,r11
800d7fc: 003ee806 br 800d3a0 <__adddf3+0x2e8>
800d800: 5b27c83a sub r19,r11,r12
800d804: 1a53c83a sub r9,r3,r9
800d808: 5cc9803a cmpltu r4,r11,r19
800d80c: 4925c83a sub r18,r9,r4
800d810: 3823883a mov r17,r7
800d814: 003e5e06 br 800d190 <__adddf3+0xd8>
800d818: 28002d1e bne r5,zero,800d8d0 <__adddf3+0x818>
800d81c: 103fd41e bne r2,zero,800d770 <__adddf3+0x6b8>
800d820: 00bfffc4 movi r2,-1
800d824: 0023883a mov r17,zero
800d828: 4013883a mov r9,r8
800d82c: 003f1b06 br 800d49c <__adddf3+0x3e4>
800d830: 00880034 movhi r2,8192
800d834: 1808977a slli r4,r3,29
800d838: 10bfffc4 addi r2,r2,-1
800d83c: 3084703a and r2,r6,r2
800d840: 1104b03a or r2,r2,r4
800d844: 1812d0fa srli r9,r3,3
800d848: 003f1206 br 800d494 <__adddf3+0x3dc>
800d84c: 62e7c83a sub r19,r12,r11
800d850: 48cbc83a sub r5,r9,r3
800d854: 64c9803a cmpltu r4,r12,r19
800d858: 2909c83a sub r4,r5,r4
800d85c: 2080202c andhi r2,r4,128
800d860: 10003626 beq r2,zero,800d93c <__adddf3+0x884>
800d864: 5b27c83a sub r19,r11,r12
800d868: 1a53c83a sub r9,r3,r9
800d86c: 5cc9803a cmpltu r4,r11,r19
800d870: 4909c83a sub r4,r9,r4
800d874: 3823883a mov r17,r7
800d878: 003e5e06 br 800d1f4 <__adddf3+0x13c>
800d87c: 4b12b03a or r9,r9,r12
800d880: 4826c03a cmpne r19,r9,zero
800d884: 003f5006 br 800d5c8 <__adddf3+0x510>
800d888: 4806977a slli r3,r9,29
800d88c: 00880034 movhi r2,8192
800d890: 10bfffc4 addi r2,r2,-1
800d894: 2084703a and r2,r4,r2
800d898: 10c4b03a or r2,r2,r3
800d89c: 4812d0fa srli r9,r9,3
800d8a0: 003efc06 br 800d494 <__adddf3+0x3dc>
800d8a4: 217ff804 addi r5,r4,-32
800d8a8: 21800820 cmpeqi r6,r4,32
800d8ac: 494ad83a srl r5,r9,r5
800d8b0: 3000041e bne r6,zero,800d8c4 <__adddf3+0x80c>
800d8b4: 01801004 movi r6,64
800d8b8: 3109c83a sub r4,r6,r4
800d8bc: 4912983a sll r9,r9,r4
800d8c0: 6258b03a or r12,r12,r9
800d8c4: 6026c03a cmpne r19,r12,zero
800d8c8: 9966b03a or r19,r19,r5
800d8cc: 003f5406 br 800d620 <__adddf3+0x568>
800d8d0: 480a977a slli r5,r9,29
800d8d4: 4812d0fa srli r9,r9,3
800d8d8: 10003626 beq r2,zero,800d9b4 <__adddf3+0x8fc>
800d8dc: 02080034 movhi r8,8192
800d8e0: 423fffc4 addi r8,r8,-1
800d8e4: 2204703a and r2,r4,r8
800d8e8: 4900022c andhi r4,r9,8
800d8ec: 114ab03a or r5,r2,r5
800d8f0: 20000826 beq r4,zero,800d914 <__adddf3+0x85c>
800d8f4: 1808d0fa srli r4,r3,3
800d8f8: 2080022c andhi r2,r4,8
800d8fc: 1000051e bne r2,zero,800d914 <__adddf3+0x85c>
800d900: 1806977a slli r3,r3,29
800d904: 3204703a and r2,r6,r8
800d908: 3823883a mov r17,r7
800d90c: 10cab03a or r5,r2,r3
800d910: 2013883a mov r9,r4
800d914: 480890fa slli r4,r9,3
800d918: 2804d77a srli r2,r5,29
800d91c: 00c80034 movhi r3,8192
800d920: 18ffffc4 addi r3,r3,-1
800d924: 1108b03a or r4,r2,r4
800d928: 200c977a slli r6,r4,29
800d92c: 28c4703a and r2,r5,r3
800d930: 2012d0fa srli r9,r4,3
800d934: 3084b03a or r2,r6,r2
800d938: 003ed606 br 800d494 <__adddf3+0x3dc>
800d93c: 9904b03a or r2,r19,r4
800d940: 103e971e bne r2,zero,800d3a0 <__adddf3+0x2e8>
800d944: 0013883a mov r9,zero
800d948: 0023883a mov r17,zero
800d94c: 003e9c06 br 800d3c0 <__adddf3+0x308>
800d950: 5b27c83a sub r19,r11,r12
800d954: 1a53c83a sub r9,r3,r9
800d958: 5cc9803a cmpltu r4,r11,r19
800d95c: 4909c83a sub r4,r9,r4
800d960: 3823883a mov r17,r7
800d964: 04000044 movi r16,1
800d968: 003e0406 br 800d17c <__adddf3+0xc4>
800d96c: 180a977a slli r5,r3,29
800d970: 01080034 movhi r4,8192
800d974: 213fffc4 addi r4,r4,-1
800d978: 3104703a and r2,r6,r4
800d97c: 2884b03a or r2,r5,r2
800d980: 1812d0fa srli r9,r3,3
800d984: 003e8e06 br 800d3c0 <__adddf3+0x308>
800d988: 62e7883a add r19,r12,r11
800d98c: 48d3883a add r9,r9,r3
800d990: 9b09803a cmpltu r4,r19,r12
800d994: 4909883a add r4,r9,r4
800d998: 2080202c andhi r2,r4,128
800d99c: 103e8026 beq r2,zero,800d3a0 <__adddf3+0x2e8>
800d9a0: 00bfe034 movhi r2,65408
800d9a4: 10bfffc4 addi r2,r2,-1
800d9a8: 2088703a and r4,r4,r2
800d9ac: 04000044 movi r16,1
800d9b0: 003e7b06 br 800d3a0 <__adddf3+0x2e8>
800d9b4: 00880034 movhi r2,8192
800d9b8: 10bfffc4 addi r2,r2,-1
800d9bc: 2084703a and r2,r4,r2
800d9c0: 1144b03a or r2,r2,r5
800d9c4: 003eb306 br 800d494 <__adddf3+0x3dc>
800d9c8: 180e977a slli r7,r3,29
800d9cc: 01480034 movhi r5,8192
800d9d0: 297fffc4 addi r5,r5,-1
800d9d4: 3144703a and r2,r6,r5
800d9d8: 3884b03a or r2,r7,r2
800d9dc: 1812d0fa srli r9,r3,3
800d9e0: 2021883a mov r16,r4
800d9e4: 003e7406 br 800d3b8 <__adddf3+0x300>
800d9e8: 00880034 movhi r2,8192
800d9ec: 1808977a slli r4,r3,29
800d9f0: 10bfffc4 addi r2,r2,-1
800d9f4: 3084703a and r2,r6,r2
800d9f8: 1104b03a or r2,r2,r4
800d9fc: 1812d0fa srli r9,r3,3
800da00: 3823883a mov r17,r7
800da04: 003ea306 br 800d494 <__adddf3+0x3dc>
800da08: 217ff804 addi r5,r4,-32
800da0c: 21800820 cmpeqi r6,r4,32
800da10: 494ad83a srl r5,r9,r5
800da14: 3000041e bne r6,zero,800da28 <__adddf3+0x970>
800da18: 01801004 movi r6,64
800da1c: 3109c83a sub r4,r6,r4
800da20: 4912983a sll r9,r9,r4
800da24: 6258b03a or r12,r12,r9
800da28: 6026c03a cmpne r19,r12,zero
800da2c: 9966b03a or r19,r19,r5
800da30: 003ee506 br 800d5c8 <__adddf3+0x510>
800da34: 62e7883a add r19,r12,r11
800da38: 48d3883a add r9,r9,r3
800da3c: 9ac9803a cmpltu r4,r19,r11
800da40: 4909883a add r4,r9,r4
800da44: 003e5306 br 800d394 <__adddf3+0x2dc>
800da48: 0005883a mov r2,zero
800da4c: 0401ffc4 movi r16,2047
800da50: 0009883a mov r4,zero
800da54: 003dfe06 br 800d250 <__adddf3+0x198>
0800da58 <__divdf3>:
800da58: defff104 addi sp,sp,-60
800da5c: 2804d53a srli r2,r5,20
800da60: dd000915 stw r20,36(sp)
800da64: 2828d7fa srli r20,r5,31
800da68: dc000515 stw r16,20(sp)
800da6c: 04000434 movhi r16,16
800da70: ddc00c15 stw r23,48(sp)
800da74: dc800715 stw r18,28(sp)
800da78: 843fffc4 addi r16,r16,-1
800da7c: dfc00e15 stw ra,56(sp)
800da80: df000d15 stw fp,52(sp)
800da84: dd800b15 stw r22,44(sp)
800da88: dd400a15 stw r21,40(sp)
800da8c: dcc00815 stw r19,32(sp)
800da90: dc400615 stw r17,24(sp)
800da94: 1081ffcc andi r2,r2,2047
800da98: 2025883a mov r18,r4
800da9c: 2c20703a and r16,r5,r16
800daa0: a02f883a mov r23,r20
800daa4: 10008926 beq r2,zero,800dccc <__divdf3+0x274>
800daa8: 10c1ffe0 cmpeqi r3,r2,2047
800daac: 18009f1e bne r3,zero,800dd2c <__divdf3+0x2d4>
800dab0: 800a90fa slli r5,r16,3
800dab4: 2008d77a srli r4,r4,29
800dab8: 902490fa slli r18,r18,3
800dabc: 157f0044 addi r21,r2,-1023
800dac0: 2148b03a or r4,r4,r5
800dac4: 25802034 orhi r22,r4,128
800dac8: 0023883a mov r17,zero
800dacc: 0021883a mov r16,zero
800dad0: 3806d53a srli r3,r7,20
800dad4: 01000434 movhi r4,16
800dad8: 213fffc4 addi r4,r4,-1
800dadc: 18c1ffcc andi r3,r3,2047
800dae0: 3926703a and r19,r7,r4
800dae4: 380ed7fa srli r7,r7,31
800dae8: 18006326 beq r3,zero,800dc78 <__divdf3+0x220>
800daec: 1881ffe0 cmpeqi r2,r3,2047
800daf0: 1000201e bne r2,zero,800db74 <__divdf3+0x11c>
800daf4: 980890fa slli r4,r19,3
800daf8: 300ad77a srli r5,r6,29
800dafc: 301090fa slli r8,r6,3
800db00: 18ff0044 addi r3,r3,-1023
800db04: 2908b03a or r4,r5,r4
800db08: a8ebc83a sub r21,r21,r3
800db0c: 24c02034 orhi r19,r4,128
800db10: 0007883a mov r3,zero
800db14: 89800428 cmpgeui r6,r17,16
800db18: a1f8f03a xor fp,r20,r7
800db1c: 3000ad1e bne r6,zero,800ddd4 <__divdf3+0x37c>
800db20: 882290ba slli r17,r17,2
800db24: 00820074 movhi r2,2049
800db28: 8885883a add r2,r17,r2
800db2c: 10b6cd17 ldw r2,-9420(r2)
800db30: 1000683a jmp r2
800db34: 0800ddd4 ori zero,at,887
800db38: 0800dc68 cmpgeui zero,at,881
800db3c: 0800dc0c andi zero,at,880
800db40: 0800db90 cmplti zero,at,878
800db44: 0800dc0c andi zero,at,880
800db48: 0800dd90 cmplti zero,at,886
800db4c: 0800dc0c andi zero,at,880
800db50: 0800db90 cmplti zero,at,878
800db54: 0800dc68 cmpgeui zero,at,881
800db58: 0800dc68 cmpgeui zero,at,881
800db5c: 0800dd90 cmplti zero,at,886
800db60: 0800db90 cmplti zero,at,878
800db64: 0800dba0 cmpeqi zero,at,878
800db68: 0800dba0 cmpeqi zero,at,878
800db6c: 0800dba0 cmpeqi zero,at,878
800db70: 0800dda8 cmpgeui zero,at,886
800db74: 9990b03a or r8,r19,r6
800db78: ad7e0044 addi r21,r21,-2047
800db7c: 4000801e bne r8,zero,800dd80 <__divdf3+0x328>
800db80: 8c400094 ori r17,r17,2
800db84: 0027883a mov r19,zero
800db88: 00c00084 movi r3,2
800db8c: 003fe106 br 800db14 <__divdf3+0xbc>
800db90: 382f883a mov r23,r7
800db94: 982d883a mov r22,r19
800db98: 4025883a mov r18,r8
800db9c: 1821883a mov r16,r3
800dba0: 808000a0 cmpeqi r2,r16,2
800dba4: 10017c1e bne r2,zero,800e198 <__divdf3+0x740>
800dba8: 808000e0 cmpeqi r2,r16,3
800dbac: 1001ca1e bne r2,zero,800e2d8 <__divdf3+0x880>
800dbb0: 80800060 cmpeqi r2,r16,1
800dbb4: 1000141e bne r2,zero,800dc08 <__divdf3+0x1b0>
800dbb8: ac00ffc4 addi r16,r21,1023
800dbbc: b839883a mov fp,r23
800dbc0: 0401580e bge zero,r16,800e124 <__divdf3+0x6cc>
800dbc4: 908001cc andi r2,r18,7
800dbc8: 1001921e bne r2,zero,800e214 <__divdf3+0x7bc>
800dbcc: 900ad0fa srli r5,r18,3
800dbd0: b080402c andhi r2,r22,256
800dbd4: 10000426 beq r2,zero,800dbe8 <__divdf3+0x190>
800dbd8: 00bfc034 movhi r2,65280
800dbdc: 10bfffc4 addi r2,r2,-1
800dbe0: b0ac703a and r22,r22,r2
800dbe4: ac010004 addi r16,r21,1024
800dbe8: 8081ffc8 cmpgei r2,r16,2047
800dbec: 10001e1e bne r2,zero,800dc68 <__divdf3+0x210>
800dbf0: b024977a slli r18,r22,29
800dbf4: b008927a slli r4,r22,9
800dbf8: 8081ffcc andi r2,r16,2047
800dbfc: 9164b03a or r18,r18,r5
800dc00: 2008d33a srli r4,r4,12
800dc04: 00000406 br 800dc18 <__divdf3+0x1c0>
800dc08: b839883a mov fp,r23
800dc0c: 0005883a mov r2,zero
800dc10: 0009883a mov r4,zero
800dc14: 0025883a mov r18,zero
800dc18: 1004953a slli r2,r2,20
800dc1c: 00c00434 movhi r3,16
800dc20: e03897fa slli fp,fp,31
800dc24: 18ffffc4 addi r3,r3,-1
800dc28: 20c6703a and r3,r4,r3
800dc2c: 1886b03a or r3,r3,r2
800dc30: 1f06b03a or r3,r3,fp
800dc34: 9005883a mov r2,r18
800dc38: dfc00e17 ldw ra,56(sp)
800dc3c: df000d17 ldw fp,52(sp)
800dc40: ddc00c17 ldw r23,48(sp)
800dc44: dd800b17 ldw r22,44(sp)
800dc48: dd400a17 ldw r21,40(sp)
800dc4c: dd000917 ldw r20,36(sp)
800dc50: dcc00817 ldw r19,32(sp)
800dc54: dc800717 ldw r18,28(sp)
800dc58: dc400617 ldw r17,24(sp)
800dc5c: dc000517 ldw r16,20(sp)
800dc60: dec00f04 addi sp,sp,60
800dc64: f800283a ret
800dc68: 0081ffc4 movi r2,2047
800dc6c: 0009883a mov r4,zero
800dc70: 0025883a mov r18,zero
800dc74: 003fe806 br 800dc18 <__divdf3+0x1c0>
800dc78: 9990b03a or r8,r19,r6
800dc7c: 40003c26 beq r8,zero,800dd70 <__divdf3+0x318>
800dc80: 98011826 beq r19,zero,800e0e4 <__divdf3+0x68c>
800dc84: 9809883a mov r4,r19
800dc88: d9800115 stw r6,4(sp)
800dc8c: d9c00015 stw r7,0(sp)
800dc90: 800f7900 call 800f790 <__clzsi2>
800dc94: d9c00017 ldw r7,0(sp)
800dc98: d9800117 ldw r6,4(sp)
800dc9c: 117ffd44 addi r5,r2,-11
800dca0: 00c00744 movi r3,29
800dca4: 123ffe04 addi r8,r2,-8
800dca8: 1947c83a sub r3,r3,r5
800dcac: 9a08983a sll r4,r19,r8
800dcb0: 30c6d83a srl r3,r6,r3
800dcb4: 3210983a sll r8,r6,r8
800dcb8: 1926b03a or r19,r3,r4
800dcbc: 1545883a add r2,r2,r21
800dcc0: 1540fcc4 addi r21,r2,1011
800dcc4: 0007883a mov r3,zero
800dcc8: 003f9206 br 800db14 <__divdf3+0xbc>
800dccc: 242cb03a or r22,r4,r16
800dcd0: 2023883a mov r17,r4
800dcd4: b0002126 beq r22,zero,800dd5c <__divdf3+0x304>
800dcd8: d9c00115 stw r7,4(sp)
800dcdc: d9800015 stw r6,0(sp)
800dce0: 8000f526 beq r16,zero,800e0b8 <__divdf3+0x660>
800dce4: 8009883a mov r4,r16
800dce8: 800f7900 call 800f790 <__clzsi2>
800dcec: d9800017 ldw r6,0(sp)
800dcf0: d9c00117 ldw r7,4(sp)
800dcf4: 102b883a mov r21,r2
800dcf8: 113ffd44 addi r4,r2,-11
800dcfc: 05800744 movi r22,29
800dd00: acbffe04 addi r18,r21,-8
800dd04: b12dc83a sub r22,r22,r4
800dd08: 848a983a sll r5,r16,r18
800dd0c: 8d88d83a srl r4,r17,r22
800dd10: 8ca4983a sll r18,r17,r18
800dd14: 216cb03a or r22,r4,r5
800dd18: 00bf0344 movi r2,-1011
800dd1c: 156bc83a sub r21,r2,r21
800dd20: 0023883a mov r17,zero
800dd24: 0021883a mov r16,zero
800dd28: 003f6906 br 800dad0 <__divdf3+0x78>
800dd2c: 242cb03a or r22,r4,r16
800dd30: b000051e bne r22,zero,800dd48 <__divdf3+0x2f0>
800dd34: 0025883a mov r18,zero
800dd38: 04400204 movi r17,8
800dd3c: 0541ffc4 movi r21,2047
800dd40: 04000084 movi r16,2
800dd44: 003f6206 br 800dad0 <__divdf3+0x78>
800dd48: 802d883a mov r22,r16
800dd4c: 04400304 movi r17,12
800dd50: 0541ffc4 movi r21,2047
800dd54: 040000c4 movi r16,3
800dd58: 003f5d06 br 800dad0 <__divdf3+0x78>
800dd5c: 0025883a mov r18,zero
800dd60: 04400104 movi r17,4
800dd64: 002b883a mov r21,zero
800dd68: 04000044 movi r16,1
800dd6c: 003f5806 br 800dad0 <__divdf3+0x78>
800dd70: 8c400054 ori r17,r17,1
800dd74: 0027883a mov r19,zero
800dd78: 00c00044 movi r3,1
800dd7c: 003f6506 br 800db14 <__divdf3+0xbc>
800dd80: 8c4000d4 ori r17,r17,3
800dd84: 3011883a mov r8,r6
800dd88: 00c000c4 movi r3,3
800dd8c: 003f6106 br 800db14 <__divdf3+0xbc>
800dd90: 01000434 movhi r4,16
800dd94: 0039883a mov fp,zero
800dd98: 213fffc4 addi r4,r4,-1
800dd9c: 04bfffc4 movi r18,-1
800dda0: 0081ffc4 movi r2,2047
800dda4: 003f9c06 br 800dc18 <__divdf3+0x1c0>
800dda8: b080022c andhi r2,r22,8
800ddac: 1000a126 beq r2,zero,800e034 <__divdf3+0x5dc>
800ddb0: 9880022c andhi r2,r19,8
800ddb4: 10009f1e bne r2,zero,800e034 <__divdf3+0x5dc>
800ddb8: 00800434 movhi r2,16
800ddbc: 99000234 orhi r4,r19,8
800ddc0: 10bfffc4 addi r2,r2,-1
800ddc4: 2088703a and r4,r4,r2
800ddc8: 3839883a mov fp,r7
800ddcc: 4025883a mov r18,r8
800ddd0: 003ff306 br 800dda0 <__divdf3+0x348>
800ddd4: 9d80b236 bltu r19,r22,800e0a0 <__divdf3+0x648>
800ddd8: 9d80b026 beq r19,r22,800e09c <__divdf3+0x644>
800dddc: ad7fffc4 addi r21,r21,-1
800dde0: b007883a mov r3,r22
800dde4: 0021883a mov r16,zero
800dde8: 400cd63a srli r6,r8,24
800ddec: 9826923a slli r19,r19,8
800ddf0: 4004923a slli r2,r8,8
800ddf4: 1809883a mov r4,r3
800ddf8: 34e2b03a or r17,r6,r19
800ddfc: 8828d43a srli r20,r17,16
800de00: d8c00115 stw r3,4(sp)
800de04: d8800015 stw r2,0(sp)
800de08: a00b883a mov r5,r20
800de0c: 800cff80 call 800cff8 <__udivsi3>
800de10: d8c00117 ldw r3,4(sp)
800de14: a00b883a mov r5,r20
800de18: 102d883a mov r22,r2
800de1c: 1809883a mov r4,r3
800de20: 800d05c0 call 800d05c <__umodsi3>
800de24: 1006943a slli r3,r2,16
800de28: 8dffffcc andi r23,r17,65535
800de2c: 9004d43a srli r2,r18,16
800de30: bda7383a mul r19,r23,r22
800de34: 10c4b03a or r2,r2,r3
800de38: 14c0042e bgeu r2,r19,800de4c <__divdf3+0x3f4>
800de3c: 1445883a add r2,r2,r17
800de40: b0ffffc4 addi r3,r22,-1
800de44: 1440e12e bgeu r2,r17,800e1cc <__divdf3+0x774>
800de48: 182d883a mov r22,r3
800de4c: 14e7c83a sub r19,r2,r19
800de50: a00b883a mov r5,r20
800de54: 9809883a mov r4,r19
800de58: 800cff80 call 800cff8 <__udivsi3>
800de5c: a00b883a mov r5,r20
800de60: 9809883a mov r4,r19
800de64: d8800115 stw r2,4(sp)
800de68: 800d05c0 call 800d05c <__umodsi3>
800de6c: d8c00117 ldw r3,4(sp)
800de70: 1004943a slli r2,r2,16
800de74: 94bfffcc andi r18,r18,65535
800de78: b8cb383a mul r5,r23,r3
800de7c: 9084b03a or r2,r18,r2
800de80: 1140042e bgeu r2,r5,800de94 <__divdf3+0x43c>
800de84: 1445883a add r2,r2,r17
800de88: 193fffc4 addi r4,r3,-1
800de8c: 1440cb2e bgeu r2,r17,800e1bc <__divdf3+0x764>
800de90: 2007883a mov r3,r4
800de94: b008943a slli r4,r22,16
800de98: d9800017 ldw r6,0(sp)
800de9c: 1145c83a sub r2,r2,r5
800dea0: 20ecb03a or r22,r4,r3
800dea4: b0ffffcc andi r3,r22,65535
800dea8: 300ed43a srli r7,r6,16
800deac: 323fffcc andi r8,r6,65535
800deb0: b026d43a srli r19,r22,16
800deb4: 40e5383a mul r18,r8,r3
800deb8: 38c9383a mul r4,r7,r3
800debc: 9a13383a mul r9,r19,r8
800dec0: 9006d43a srli r3,r18,16
800dec4: 2249883a add r4,r4,r9
800dec8: 1907883a add r3,r3,r4
800decc: 99c9383a mul r4,r19,r7
800ded0: 1a40022e bgeu r3,r9,800dedc <__divdf3+0x484>
800ded4: 01400074 movhi r5,1
800ded8: 2149883a add r4,r4,r5
800dedc: 1826d43a srli r19,r3,16
800dee0: 1806943a slli r3,r3,16
800dee4: 94bfffcc andi r18,r18,65535
800dee8: 9927883a add r19,r19,r4
800deec: 1ca5883a add r18,r3,r18
800def0: 14c05f36 bltu r2,r19,800e070 <__divdf3+0x618>
800def4: 14c05d26 beq r2,r19,800e06c <__divdf3+0x614>
800def8: 84a5c83a sub r18,r16,r18
800defc: 14c5c83a sub r2,r2,r19
800df00: 84a7803a cmpltu r19,r16,r18
800df04: da000215 stw r8,8(sp)
800df08: d9c00115 stw r7,4(sp)
800df0c: 14e7c83a sub r19,r2,r19
800df10: ac00ffc4 addi r16,r21,1023
800df14: 8cc0b626 beq r17,r19,800e1f0 <__divdf3+0x798>
800df18: 9809883a mov r4,r19
800df1c: a00b883a mov r5,r20
800df20: 800cff80 call 800cff8 <__udivsi3>
800df24: 9809883a mov r4,r19
800df28: a00b883a mov r5,r20
800df2c: d8800315 stw r2,12(sp)
800df30: 800d05c0 call 800d05c <__umodsi3>
800df34: d8c00317 ldw r3,12(sp)
800df38: 1008943a slli r4,r2,16
800df3c: 9004d43a srli r2,r18,16
800df40: b8e7383a mul r19,r23,r3
800df44: d9c00117 ldw r7,4(sp)
800df48: 1104b03a or r2,r2,r4
800df4c: da000217 ldw r8,8(sp)
800df50: 14c0062e bgeu r2,r19,800df6c <__divdf3+0x514>
800df54: 1445883a add r2,r2,r17
800df58: 193fffc4 addi r4,r3,-1
800df5c: 1440ab36 bltu r2,r17,800e20c <__divdf3+0x7b4>
800df60: 14c0aa2e bgeu r2,r19,800e20c <__divdf3+0x7b4>
800df64: 18ffff84 addi r3,r3,-2
800df68: 1445883a add r2,r2,r17
800df6c: 14e7c83a sub r19,r2,r19
800df70: a00b883a mov r5,r20
800df74: 9809883a mov r4,r19
800df78: da000415 stw r8,16(sp)
800df7c: d8c00315 stw r3,12(sp)
800df80: d9c00215 stw r7,8(sp)
800df84: 800cff80 call 800cff8 <__udivsi3>
800df88: a00b883a mov r5,r20
800df8c: 9809883a mov r4,r19
800df90: d8800115 stw r2,4(sp)
800df94: 800d05c0 call 800d05c <__umodsi3>
800df98: da400117 ldw r9,4(sp)
800df9c: 1004943a slli r2,r2,16
800dfa0: 94bfffcc andi r18,r18,65535
800dfa4: ba6f383a mul r23,r23,r9
800dfa8: 9084b03a or r2,r18,r2
800dfac: d9c00217 ldw r7,8(sp)
800dfb0: d8c00317 ldw r3,12(sp)
800dfb4: da000417 ldw r8,16(sp)
800dfb8: 15c0062e bgeu r2,r23,800dfd4 <__divdf3+0x57c>
800dfbc: 1445883a add r2,r2,r17
800dfc0: 493fffc4 addi r4,r9,-1
800dfc4: 14408f36 bltu r2,r17,800e204 <__divdf3+0x7ac>
800dfc8: 15c08e2e bgeu r2,r23,800e204 <__divdf3+0x7ac>
800dfcc: 4a7fff84 addi r9,r9,-2
800dfd0: 1445883a add r2,r2,r17
800dfd4: 180a943a slli r5,r3,16
800dfd8: 15c5c83a sub r2,r2,r23
800dfdc: 2a64b03a or r18,r5,r9
800dfe0: 9012d43a srli r9,r18,16
800dfe4: 913fffcc andi r4,r18,65535
800dfe8: 220b383a mul r5,r4,r8
800dfec: 3909383a mul r4,r7,r4
800dff0: 4a11383a mul r8,r9,r8
800dff4: 2806d43a srli r3,r5,16
800dff8: 3a4f383a mul r7,r7,r9
800dffc: 2209883a add r4,r4,r8
800e000: 1907883a add r3,r3,r4
800e004: 1a00022e bgeu r3,r8,800e010 <__divdf3+0x5b8>
800e008: 01000074 movhi r4,1
800e00c: 390f883a add r7,r7,r4
800e010: 1808d43a srli r4,r3,16
800e014: 1806943a slli r3,r3,16
800e018: 297fffcc andi r5,r5,65535
800e01c: 21cf883a add r7,r4,r7
800e020: 1947883a add r3,r3,r5
800e024: 11c00a36 bltu r2,r7,800e050 <__divdf3+0x5f8>
800e028: 11c00826 beq r2,r7,800e04c <__divdf3+0x5f4>
800e02c: 94800054 ori r18,r18,1
800e030: 003ee306 br 800dbc0 <__divdf3+0x168>
800e034: 00800434 movhi r2,16
800e038: b1000234 orhi r4,r22,8
800e03c: 10bfffc4 addi r2,r2,-1
800e040: 2088703a and r4,r4,r2
800e044: a039883a mov fp,r20
800e048: 003f5506 br 800dda0 <__divdf3+0x348>
800e04c: 183edc26 beq r3,zero,800dbc0 <__divdf3+0x168>
800e050: 8885883a add r2,r17,r2
800e054: 913fffc4 addi r4,r18,-1
800e058: 14406036 bltu r2,r17,800e1dc <__divdf3+0x784>
800e05c: 11c07d36 bltu r2,r7,800e254 <__divdf3+0x7fc>
800e060: 11c0a326 beq r2,r7,800e2f0 <__divdf3+0x898>
800e064: 2025883a mov r18,r4
800e068: 003ff006 br 800e02c <__divdf3+0x5d4>
800e06c: 84bfa22e bgeu r16,r18,800def8 <__divdf3+0x4a0>
800e070: d8c00017 ldw r3,0(sp)
800e074: 80e1883a add r16,r16,r3
800e078: 80c7803a cmpltu r3,r16,r3
800e07c: 1c47883a add r3,r3,r17
800e080: 10c5883a add r2,r2,r3
800e084: b0ffffc4 addi r3,r22,-1
800e088: 8880482e bgeu r17,r2,800e1ac <__divdf3+0x754>
800e08c: 14c06a36 bltu r2,r19,800e238 <__divdf3+0x7e0>
800e090: 98806826 beq r19,r2,800e234 <__divdf3+0x7dc>
800e094: 182d883a mov r22,r3
800e098: 003f9706 br 800def8 <__divdf3+0x4a0>
800e09c: 923f4f36 bltu r18,r8,800dddc <__divdf3+0x384>
800e0a0: b00a97fa slli r5,r22,31
800e0a4: 9004d07a srli r2,r18,1
800e0a8: 902097fa slli r16,r18,31
800e0ac: b006d07a srli r3,r22,1
800e0b0: 28a4b03a or r18,r5,r2
800e0b4: 003f4c06 br 800dde8 <__divdf3+0x390>
800e0b8: 800f7900 call 800f790 <__clzsi2>
800e0bc: 11000544 addi r4,r2,21
800e0c0: 21400748 cmpgei r5,r4,29
800e0c4: 15400804 addi r21,r2,32
800e0c8: d9800017 ldw r6,0(sp)
800e0cc: d9c00117 ldw r7,4(sp)
800e0d0: 283f0a26 beq r5,zero,800dcfc <__divdf3+0x2a4>
800e0d4: 113ffe04 addi r4,r2,-8
800e0d8: 912c983a sll r22,r18,r4
800e0dc: 0025883a mov r18,zero
800e0e0: 003f0d06 br 800dd18 <__divdf3+0x2c0>
800e0e4: 3009883a mov r4,r6
800e0e8: d9c00115 stw r7,4(sp)
800e0ec: d9800015 stw r6,0(sp)
800e0f0: 800f7900 call 800f790 <__clzsi2>
800e0f4: 11400544 addi r5,r2,21
800e0f8: 28c00748 cmpgei r3,r5,29
800e0fc: 1009883a mov r4,r2
800e100: d9800017 ldw r6,0(sp)
800e104: 10800804 addi r2,r2,32
800e108: d9c00117 ldw r7,4(sp)
800e10c: 183ee426 beq r3,zero,800dca0 <__divdf3+0x248>
800e110: 213ffe04 addi r4,r4,-8
800e114: 3126983a sll r19,r6,r4
800e118: 0011883a mov r8,zero
800e11c: 003ee706 br 800dcbc <__divdf3+0x264>
800e120: 04bfffc4 movi r18,-1
800e124: 01000044 movi r4,1
800e128: 2409c83a sub r4,r4,r16
800e12c: 20800e48 cmpgei r2,r4,57
800e130: 103eb61e bne r2,zero,800dc0c <__divdf3+0x1b4>
800e134: 20800808 cmpgei r2,r4,32
800e138: 10004e1e bne r2,zero,800e274 <__divdf3+0x81c>
800e13c: a8810784 addi r2,r21,1054
800e140: b086983a sll r3,r22,r2
800e144: 910ad83a srl r5,r18,r4
800e148: 9084983a sll r2,r18,r2
800e14c: b108d83a srl r4,r22,r4
800e150: 1964b03a or r18,r3,r5
800e154: 1004c03a cmpne r2,r2,zero
800e158: 90a4b03a or r18,r18,r2
800e15c: 908001cc andi r2,r18,7
800e160: 10000726 beq r2,zero,800e180 <__divdf3+0x728>
800e164: 908003cc andi r2,r18,15
800e168: 10800120 cmpeqi r2,r2,4
800e16c: 1000041e bne r2,zero,800e180 <__divdf3+0x728>
800e170: 90800104 addi r2,r18,4
800e174: 14a5803a cmpltu r18,r2,r18
800e178: 2489883a add r4,r4,r18
800e17c: 1025883a mov r18,r2
800e180: 2080202c andhi r2,r4,128
800e184: 10005026 beq r2,zero,800e2c8 <__divdf3+0x870>
800e188: 00800044 movi r2,1
800e18c: 0009883a mov r4,zero
800e190: 0025883a mov r18,zero
800e194: 003ea006 br 800dc18 <__divdf3+0x1c0>
800e198: b839883a mov fp,r23
800e19c: 0081ffc4 movi r2,2047
800e1a0: 0009883a mov r4,zero
800e1a4: 0025883a mov r18,zero
800e1a8: 003e9b06 br 800dc18 <__divdf3+0x1c0>
800e1ac: 88bfb91e bne r17,r2,800e094 <__divdf3+0x63c>
800e1b0: d9000017 ldw r4,0(sp)
800e1b4: 813fb736 bltu r16,r4,800e094 <__divdf3+0x63c>
800e1b8: 003fb406 br 800e08c <__divdf3+0x634>
800e1bc: 117f342e bgeu r2,r5,800de90 <__divdf3+0x438>
800e1c0: 18ffff84 addi r3,r3,-2
800e1c4: 1445883a add r2,r2,r17
800e1c8: 003f3206 br 800de94 <__divdf3+0x43c>
800e1cc: 14ff1e2e bgeu r2,r19,800de48 <__divdf3+0x3f0>
800e1d0: b5bfff84 addi r22,r22,-2
800e1d4: 1445883a add r2,r2,r17
800e1d8: 003f1c06 br 800de4c <__divdf3+0x3f4>
800e1dc: 2025883a mov r18,r4
800e1e0: 11ff921e bne r2,r7,800e02c <__divdf3+0x5d4>
800e1e4: d8800017 ldw r2,0(sp)
800e1e8: 10ff901e bne r2,r3,800e02c <__divdf3+0x5d4>
800e1ec: 003e7406 br 800dbc0 <__divdf3+0x168>
800e1f0: 043fcb0e bge zero,r16,800e120 <__divdf3+0x6c8>
800e1f4: 000b883a mov r5,zero
800e1f8: 04800044 movi r18,1
800e1fc: b4ad883a add r22,r22,r18
800e200: 003e7306 br 800dbd0 <__divdf3+0x178>
800e204: 2013883a mov r9,r4
800e208: 003f7206 br 800dfd4 <__divdf3+0x57c>
800e20c: 2007883a mov r3,r4
800e210: 003f5606 br 800df6c <__divdf3+0x514>
800e214: 908003cc andi r2,r18,15
800e218: 10800118 cmpnei r2,r2,4
800e21c: 103e6b26 beq r2,zero,800dbcc <__divdf3+0x174>
800e220: 91400104 addi r5,r18,4
800e224: 00bffec4 movi r2,-5
800e228: 14a5803a cmpltu r18,r2,r18
800e22c: 280ad0fa srli r5,r5,3
800e230: 003ff206 br 800e1fc <__divdf3+0x7a4>
800e234: 84bf972e bgeu r16,r18,800e094 <__divdf3+0x63c>
800e238: d8c00017 ldw r3,0(sp)
800e23c: b5bfff84 addi r22,r22,-2
800e240: 80e1883a add r16,r16,r3
800e244: 80c7803a cmpltu r3,r16,r3
800e248: 1c47883a add r3,r3,r17
800e24c: 10c5883a add r2,r2,r3
800e250: 003f2906 br 800def8 <__divdf3+0x4a0>
800e254: d9400017 ldw r5,0(sp)
800e258: 94bfff84 addi r18,r18,-2
800e25c: 2949883a add r4,r5,r5
800e260: 214b803a cmpltu r5,r4,r5
800e264: 2c4d883a add r6,r5,r17
800e268: 1185883a add r2,r2,r6
800e26c: d9000015 stw r4,0(sp)
800e270: 003fdb06 br 800e1e0 <__divdf3+0x788>
800e274: 00bff844 movi r2,-31
800e278: 1421c83a sub r16,r2,r16
800e27c: 21000820 cmpeqi r4,r4,32
800e280: b420d83a srl r16,r22,r16
800e284: 2000031e bne r4,zero,800e294 <__divdf3+0x83c>
800e288: a8810f84 addi r2,r21,1086
800e28c: b088983a sll r4,r22,r2
800e290: 9124b03a or r18,r18,r4
800e294: 9024c03a cmpne r18,r18,zero
800e298: 9424b03a or r18,r18,r16
800e29c: 914001cc andi r5,r18,7
800e2a0: 2800051e bne r5,zero,800e2b8 <__divdf3+0x860>
800e2a4: 0009883a mov r4,zero
800e2a8: 9024d0fa srli r18,r18,3
800e2ac: 0005883a mov r2,zero
800e2b0: 9164b03a or r18,r18,r5
800e2b4: 003e5806 br 800dc18 <__divdf3+0x1c0>
800e2b8: 908003cc andi r2,r18,15
800e2bc: 10800118 cmpnei r2,r2,4
800e2c0: 0009883a mov r4,zero
800e2c4: 103faa1e bne r2,zero,800e170 <__divdf3+0x718>
800e2c8: 2004927a slli r2,r4,9
800e2cc: 200a977a slli r5,r4,29
800e2d0: 1008d33a srli r4,r2,12
800e2d4: 003ff406 br 800e2a8 <__divdf3+0x850>
800e2d8: 00800434 movhi r2,16
800e2dc: b1000234 orhi r4,r22,8
800e2e0: 10bfffc4 addi r2,r2,-1
800e2e4: 2088703a and r4,r4,r2
800e2e8: b839883a mov fp,r23
800e2ec: 003eac06 br 800dda0 <__divdf3+0x348>
800e2f0: d9400017 ldw r5,0(sp)
800e2f4: 28ffd736 bltu r5,r3,800e254 <__divdf3+0x7fc>
800e2f8: 2025883a mov r18,r4
800e2fc: 003fb906 br 800e1e4 <__divdf3+0x78c>
0800e300 <__eqdf2>:
800e300: 2810d53a srli r8,r5,20
800e304: 3806d53a srli r3,r7,20
800e308: 00800434 movhi r2,16
800e30c: 4201ffcc andi r8,r8,2047
800e310: 10bfffc4 addi r2,r2,-1
800e314: 4281ffd8 cmpnei r10,r8,2047
800e318: 2892703a and r9,r5,r2
800e31c: 18c1ffcc andi r3,r3,2047
800e320: 3884703a and r2,r7,r2
800e324: 280ad7fa srli r5,r5,31
800e328: 380ed7fa srli r7,r7,31
800e32c: 50000626 beq r10,zero,800e348 <__eqdf2+0x48>
800e330: 1a81ffe0 cmpeqi r10,r3,2047
800e334: 5000021e bne r10,zero,800e340 <__eqdf2+0x40>
800e338: 40c0011e bne r8,r3,800e340 <__eqdf2+0x40>
800e33c: 48800826 beq r9,r2,800e360 <__eqdf2+0x60>
800e340: 00800044 movi r2,1
800e344: f800283a ret
800e348: 4914b03a or r10,r9,r4
800e34c: 503ffc1e bne r10,zero,800e340 <__eqdf2+0x40>
800e350: 18c1ffd8 cmpnei r3,r3,2047
800e354: 183ffa1e bne r3,zero,800e340 <__eqdf2+0x40>
800e358: 1184b03a or r2,r2,r6
800e35c: 103ff81e bne r2,zero,800e340 <__eqdf2+0x40>
800e360: 21bff71e bne r4,r6,800e340 <__eqdf2+0x40>
800e364: 29c00426 beq r5,r7,800e378 <__eqdf2+0x78>
800e368: 403ff51e bne r8,zero,800e340 <__eqdf2+0x40>
800e36c: 4904b03a or r2,r9,r4
800e370: 1004c03a cmpne r2,r2,zero
800e374: f800283a ret
800e378: 0005883a mov r2,zero
800e37c: f800283a ret
0800e380 <__gedf2>:
800e380: 2810d53a srli r8,r5,20
800e384: 3812d53a srli r9,r7,20
800e388: 00800434 movhi r2,16
800e38c: 4201ffcc andi r8,r8,2047
800e390: 10bfffc4 addi r2,r2,-1
800e394: 4281ffd8 cmpnei r10,r8,2047
800e398: 2896703a and r11,r5,r2
800e39c: 3886703a and r3,r7,r2
800e3a0: 280ad7fa srli r5,r5,31
800e3a4: 4a41ffcc andi r9,r9,2047
800e3a8: 3804d7fa srli r2,r7,31
800e3ac: 50000b26 beq r10,zero,800e3dc <__gedf2+0x5c>
800e3b0: 49c1ffd8 cmpnei r7,r9,2047
800e3b4: 38000d26 beq r7,zero,800e3ec <__gedf2+0x6c>
800e3b8: 4000191e bne r8,zero,800e420 <__gedf2+0xa0>
800e3bc: 5914b03a or r10,r11,r4
800e3c0: 500f003a cmpeq r7,r10,zero
800e3c4: 4800131e bne r9,zero,800e414 <__gedf2+0x94>
800e3c8: 1998b03a or r12,r3,r6
800e3cc: 6000111e bne r12,zero,800e414 <__gedf2+0x94>
800e3d0: 50000a1e bne r10,zero,800e3fc <__gedf2+0x7c>
800e3d4: 0005883a mov r2,zero
800e3d8: f800283a ret
800e3dc: 590eb03a or r7,r11,r4
800e3e0: 38001e1e bne r7,zero,800e45c <__gedf2+0xdc>
800e3e4: 49c1ffe0 cmpeqi r7,r9,2047
800e3e8: 38000d26 beq r7,zero,800e420 <__gedf2+0xa0>
800e3ec: 198eb03a or r7,r3,r6
800e3f0: 38001a1e bne r7,zero,800e45c <__gedf2+0xdc>
800e3f4: 40000526 beq r8,zero,800e40c <__gedf2+0x8c>
800e3f8: 28800d26 beq r5,r2,800e430 <__gedf2+0xb0>
800e3fc: 00800044 movi r2,1
800e400: 28000626 beq r5,zero,800e41c <__gedf2+0x9c>
800e404: 00bfffc4 movi r2,-1
800e408: f800283a ret
800e40c: 590eb03a or r7,r11,r4
800e410: 380f003a cmpeq r7,r7,zero
800e414: 383ff826 beq r7,zero,800e3f8 <__gedf2+0x78>
800e418: 103ffa26 beq r2,zero,800e404 <__gedf2+0x84>
800e41c: f800283a ret
800e420: 483ff51e bne r9,zero,800e3f8 <__gedf2+0x78>
800e424: 198eb03a or r7,r3,r6
800e428: 383ff31e bne r7,zero,800e3f8 <__gedf2+0x78>
800e42c: 003ff306 br 800e3fc <__gedf2+0x7c>
800e430: 4a000716 blt r9,r8,800e450 <__gedf2+0xd0>
800e434: 427ff816 blt r8,r9,800e418 <__gedf2+0x98>
800e438: 1afff036 bltu r3,r11,800e3fc <__gedf2+0x7c>
800e43c: 58c00926 beq r11,r3,800e464 <__gedf2+0xe4>
800e440: 58ffe42e bgeu r11,r3,800e3d4 <__gedf2+0x54>
800e444: 283fef26 beq r5,zero,800e404 <__gedf2+0x84>
800e448: 2805883a mov r2,r5
800e44c: f800283a ret
800e450: 103fec1e bne r2,zero,800e404 <__gedf2+0x84>
800e454: 00800044 movi r2,1
800e458: f800283a ret
800e45c: 00bfff84 movi r2,-2
800e460: f800283a ret
800e464: 313fe536 bltu r6,r4,800e3fc <__gedf2+0x7c>
800e468: 21bfda2e bgeu r4,r6,800e3d4 <__gedf2+0x54>
800e46c: 003ff506 br 800e444 <__gedf2+0xc4>
0800e470 <__ledf2>:
800e470: 2810d53a srli r8,r5,20
800e474: 3812d53a srli r9,r7,20
800e478: 00800434 movhi r2,16
800e47c: 4201ffcc andi r8,r8,2047
800e480: 10bfffc4 addi r2,r2,-1
800e484: 4281ffd8 cmpnei r10,r8,2047
800e488: 2896703a and r11,r5,r2
800e48c: 3886703a and r3,r7,r2
800e490: 280ad7fa srli r5,r5,31
800e494: 4a41ffcc andi r9,r9,2047
800e498: 3804d7fa srli r2,r7,31
800e49c: 50000b26 beq r10,zero,800e4cc <__ledf2+0x5c>
800e4a0: 49c1ffd8 cmpnei r7,r9,2047
800e4a4: 38000d26 beq r7,zero,800e4dc <__ledf2+0x6c>
800e4a8: 40001b1e bne r8,zero,800e518 <__ledf2+0xa8>
800e4ac: 5914b03a or r10,r11,r4
800e4b0: 500f003a cmpeq r7,r10,zero
800e4b4: 48000e1e bne r9,zero,800e4f0 <__ledf2+0x80>
800e4b8: 1998b03a or r12,r3,r6
800e4bc: 60000c1e bne r12,zero,800e4f0 <__ledf2+0x80>
800e4c0: 50000d1e bne r10,zero,800e4f8 <__ledf2+0x88>
800e4c4: 0005883a mov r2,zero
800e4c8: f800283a ret
800e4cc: 590eb03a or r7,r11,r4
800e4d0: 38000d1e bne r7,zero,800e508 <__ledf2+0x98>
800e4d4: 49c1ffe0 cmpeqi r7,r9,2047
800e4d8: 38000f26 beq r7,zero,800e518 <__ledf2+0xa8>
800e4dc: 198eb03a or r7,r3,r6
800e4e0: 3800091e bne r7,zero,800e508 <__ledf2+0x98>
800e4e4: 4000031e bne r8,zero,800e4f4 <__ledf2+0x84>
800e4e8: 590eb03a or r7,r11,r4
800e4ec: 380f003a cmpeq r7,r7,zero
800e4f0: 3800071e bne r7,zero,800e510 <__ledf2+0xa0>
800e4f4: 28800c26 beq r5,r2,800e528 <__ledf2+0xb8>
800e4f8: 00800044 movi r2,1
800e4fc: 28000526 beq r5,zero,800e514 <__ledf2+0xa4>
800e500: 00bfffc4 movi r2,-1
800e504: f800283a ret
800e508: 00800084 movi r2,2
800e50c: f800283a ret
800e510: 103ffb26 beq r2,zero,800e500 <__ledf2+0x90>
800e514: f800283a ret
800e518: 483ff61e bne r9,zero,800e4f4 <__ledf2+0x84>
800e51c: 198eb03a or r7,r3,r6
800e520: 383ff41e bne r7,zero,800e4f4 <__ledf2+0x84>
800e524: 003ff406 br 800e4f8 <__ledf2+0x88>
800e528: 4a00030e bge r9,r8,800e538 <__ledf2+0xc8>
800e52c: 103ff41e bne r2,zero,800e500 <__ledf2+0x90>
800e530: 00800044 movi r2,1
800e534: f800283a ret
800e538: 427ff516 blt r8,r9,800e510 <__ledf2+0xa0>
800e53c: 1affee36 bltu r3,r11,800e4f8 <__ledf2+0x88>
800e540: 58c00426 beq r11,r3,800e554 <__ledf2+0xe4>
800e544: 58ffdf2e bgeu r11,r3,800e4c4 <__ledf2+0x54>
800e548: 283fed26 beq r5,zero,800e500 <__ledf2+0x90>
800e54c: 2805883a mov r2,r5
800e550: f800283a ret
800e554: 313fe836 bltu r6,r4,800e4f8 <__ledf2+0x88>
800e558: 21bfda2e bgeu r4,r6,800e4c4 <__ledf2+0x54>
800e55c: 003ffa06 br 800e548 <__ledf2+0xd8>
0800e560 <__muldf3>:
800e560: 2806d53a srli r3,r5,20
800e564: defff504 addi sp,sp,-44
800e568: dc000215 stw r16,8(sp)
800e56c: 04000434 movhi r16,16
800e570: dd000615 stw r20,24(sp)
800e574: dc800415 stw r18,16(sp)
800e578: 843fffc4 addi r16,r16,-1
800e57c: dfc00a15 stw ra,40(sp)
800e580: ddc00915 stw r23,36(sp)
800e584: dd800815 stw r22,32(sp)
800e588: dd400715 stw r21,28(sp)
800e58c: dcc00515 stw r19,20(sp)
800e590: dc400315 stw r17,12(sp)
800e594: 18c1ffcc andi r3,r3,2047
800e598: 2025883a mov r18,r4
800e59c: 2c20703a and r16,r5,r16
800e5a0: 2828d7fa srli r20,r5,31
800e5a4: 18005c26 beq r3,zero,800e718 <__muldf3+0x1b8>
800e5a8: 1881ffe0 cmpeqi r2,r3,2047
800e5ac: 1000711e bne r2,zero,800e774 <__muldf3+0x214>
800e5b0: 800490fa slli r2,r16,3
800e5b4: 2020d77a srli r16,r4,29
800e5b8: 202290fa slli r17,r4,3
800e5bc: 1cff0044 addi r19,r3,-1023
800e5c0: 80a0b03a or r16,r16,r2
800e5c4: 84002034 orhi r16,r16,128
800e5c8: 002d883a mov r22,zero
800e5cc: 002f883a mov r23,zero
800e5d0: 3806d53a srli r3,r7,20
800e5d4: 01000434 movhi r4,16
800e5d8: 213fffc4 addi r4,r4,-1
800e5dc: 18c1ffcc andi r3,r3,2047
800e5e0: 3924703a and r18,r7,r4
800e5e4: 382ad7fa srli r21,r7,31
800e5e8: 18006926 beq r3,zero,800e790 <__muldf3+0x230>
800e5ec: 1881ffe0 cmpeqi r2,r3,2047
800e5f0: 1000211e bne r2,zero,800e678 <__muldf3+0x118>
800e5f4: 900890fa slli r4,r18,3
800e5f8: 300ad77a srli r5,r6,29
800e5fc: 301090fa slli r8,r6,3
800e600: 18ff0044 addi r3,r3,-1023
800e604: 2908b03a or r4,r5,r4
800e608: 98e7883a add r19,r19,r3
800e60c: 24802034 orhi r18,r4,128
800e610: 0007883a mov r3,zero
800e614: b1000428 cmpgeui r4,r22,16
800e618: a54cf03a xor r6,r20,r21
800e61c: 99400044 addi r5,r19,1
800e620: 2000981e bne r4,zero,800e884 <__muldf3+0x324>
800e624: b00890ba slli r4,r22,2
800e628: 00820074 movhi r2,2049
800e62c: 2085883a add r2,r4,r2
800e630: 10b98e17 ldw r2,-6600(r2)
800e634: 1000683a jmp r2
800e638: 0800e884 addi zero,at,930
800e63c: 0800e698 cmpnei zero,at,922
800e640: 0800e698 cmpnei zero,at,922
800e644: 0800e694 ori zero,at,922
800e648: 0800e6a4 muli zero,at,922
800e64c: 0800e6a4 muli zero,at,922
800e650: 0800e840 call 800e84 <OSCtxSw_SWITCH_PC+0x800e44>
800e654: 0800e694 ori zero,at,922
800e658: 0800e6a4 muli zero,at,922
800e65c: 0800e840 call 800e84 <OSCtxSw_SWITCH_PC+0x800e44>
800e660: 0800e6a4 muli zero,at,922
800e664: 0800e694 ori zero,at,922
800e668: 0800e838 rdprs zero,at,928
800e66c: 0800e838 rdprs zero,at,928
800e670: 0800e838 rdprs zero,at,928
800e674: 0800e858 cmpnei zero,at,929
800e678: 3490b03a or r8,r6,r18
800e67c: 9cc1ffc4 addi r19,r19,2047
800e680: 4000691e bne r8,zero,800e828 <__muldf3+0x2c8>
800e684: b5800094 ori r22,r22,2
800e688: 0025883a mov r18,zero
800e68c: 00c00084 movi r3,2
800e690: 003fe006 br 800e614 <__muldf3+0xb4>
800e694: a80d883a mov r6,r21
800e698: 9021883a mov r16,r18
800e69c: 4023883a mov r17,r8
800e6a0: 182f883a mov r23,r3
800e6a4: b88000a0 cmpeqi r2,r23,2
800e6a8: 10004d1e bne r2,zero,800e7e0 <__muldf3+0x280>
800e6ac: b88000e0 cmpeqi r2,r23,3
800e6b0: 1001491e bne r2,zero,800ebd8 <__muldf3+0x678>
800e6b4: b8800060 cmpeqi r2,r23,1
800e6b8: 1000d826 beq r2,zero,800ea1c <__muldf3+0x4bc>
800e6bc: 0007883a mov r3,zero
800e6c0: 0021883a mov r16,zero
800e6c4: 0023883a mov r17,zero
800e6c8: 30803fcc andi r2,r6,255
800e6cc: 01000434 movhi r4,16
800e6d0: 1806953a slli r3,r3,20
800e6d4: 213fffc4 addi r4,r4,-1
800e6d8: 100497fa slli r2,r2,31
800e6dc: 8120703a and r16,r16,r4
800e6e0: 80c6b03a or r3,r16,r3
800e6e4: 1886b03a or r3,r3,r2
800e6e8: 8805883a mov r2,r17
800e6ec: dfc00a17 ldw ra,40(sp)
800e6f0: ddc00917 ldw r23,36(sp)
800e6f4: dd800817 ldw r22,32(sp)
800e6f8: dd400717 ldw r21,28(sp)
800e6fc: dd000617 ldw r20,24(sp)
800e700: dcc00517 ldw r19,20(sp)
800e704: dc800417 ldw r18,16(sp)
800e708: dc400317 ldw r17,12(sp)
800e70c: dc000217 ldw r16,8(sp)
800e710: dec00b04 addi sp,sp,44
800e714: f800283a ret
800e718: 8122b03a or r17,r16,r4
800e71c: 88003d26 beq r17,zero,800e814 <__muldf3+0x2b4>
800e720: d9c00115 stw r7,4(sp)
800e724: d9800015 stw r6,0(sp)
800e728: 8000e826 beq r16,zero,800eacc <__muldf3+0x56c>
800e72c: 8009883a mov r4,r16
800e730: 800f7900 call 800f790 <__clzsi2>
800e734: d9800017 ldw r6,0(sp)
800e738: d9c00117 ldw r7,4(sp)
800e73c: 1007883a mov r3,r2
800e740: 117ffd44 addi r5,r2,-11
800e744: 01000744 movi r4,29
800e748: 1c7ffe04 addi r17,r3,-8
800e74c: 2149c83a sub r4,r4,r5
800e750: 8460983a sll r16,r16,r17
800e754: 9108d83a srl r4,r18,r4
800e758: 9462983a sll r17,r18,r17
800e75c: 2420b03a or r16,r4,r16
800e760: 04ff0344 movi r19,-1011
800e764: 98e7c83a sub r19,r19,r3
800e768: 002d883a mov r22,zero
800e76c: 002f883a mov r23,zero
800e770: 003f9706 br 800e5d0 <__muldf3+0x70>
800e774: 8122b03a or r17,r16,r4
800e778: 8800211e bne r17,zero,800e800 <__muldf3+0x2a0>
800e77c: 0021883a mov r16,zero
800e780: 05800204 movi r22,8
800e784: 04c1ffc4 movi r19,2047
800e788: 05c00084 movi r23,2
800e78c: 003f9006 br 800e5d0 <__muldf3+0x70>
800e790: 3490b03a or r8,r6,r18
800e794: 40001626 beq r8,zero,800e7f0 <__muldf3+0x290>
800e798: 9000c026 beq r18,zero,800ea9c <__muldf3+0x53c>
800e79c: 9009883a mov r4,r18
800e7a0: d9800015 stw r6,0(sp)
800e7a4: 800f7900 call 800f790 <__clzsi2>
800e7a8: d9800017 ldw r6,0(sp)
800e7ac: 1007883a mov r3,r2
800e7b0: 113ffd44 addi r4,r2,-11
800e7b4: 01400744 movi r5,29
800e7b8: 1a3ffe04 addi r8,r3,-8
800e7bc: 290bc83a sub r5,r5,r4
800e7c0: 314ad83a srl r5,r6,r5
800e7c4: 9208983a sll r4,r18,r8
800e7c8: 3210983a sll r8,r6,r8
800e7cc: 2924b03a or r18,r5,r4
800e7d0: 98c7c83a sub r3,r19,r3
800e7d4: 1cff0344 addi r19,r3,-1011
800e7d8: 0007883a mov r3,zero
800e7dc: 003f8d06 br 800e614 <__muldf3+0xb4>
800e7e0: 00c1ffc4 movi r3,2047
800e7e4: 0021883a mov r16,zero
800e7e8: 0023883a mov r17,zero
800e7ec: 003fb606 br 800e6c8 <__muldf3+0x168>
800e7f0: b5800054 ori r22,r22,1
800e7f4: 0025883a mov r18,zero
800e7f8: 00c00044 movi r3,1
800e7fc: 003f8506 br 800e614 <__muldf3+0xb4>
800e800: 2023883a mov r17,r4
800e804: 05800304 movi r22,12
800e808: 04c1ffc4 movi r19,2047
800e80c: 05c000c4 movi r23,3
800e810: 003f6f06 br 800e5d0 <__muldf3+0x70>
800e814: 0021883a mov r16,zero
800e818: 05800104 movi r22,4
800e81c: 0027883a mov r19,zero
800e820: 05c00044 movi r23,1
800e824: 003f6a06 br 800e5d0 <__muldf3+0x70>
800e828: b58000d4 ori r22,r22,3
800e82c: 3011883a mov r8,r6
800e830: 00c000c4 movi r3,3
800e834: 003f7706 br 800e614 <__muldf3+0xb4>
800e838: a00d883a mov r6,r20
800e83c: 003f9906 br 800e6a4 <__muldf3+0x144>
800e840: 04000434 movhi r16,16
800e844: 000d883a mov r6,zero
800e848: 843fffc4 addi r16,r16,-1
800e84c: 047fffc4 movi r17,-1
800e850: 00c1ffc4 movi r3,2047
800e854: 003f9c06 br 800e6c8 <__muldf3+0x168>
800e858: 8080022c andhi r2,r16,8
800e85c: 10008926 beq r2,zero,800ea84 <__muldf3+0x524>
800e860: 9080022c andhi r2,r18,8
800e864: 1000871e bne r2,zero,800ea84 <__muldf3+0x524>
800e868: 00800434 movhi r2,16
800e86c: 94000234 orhi r16,r18,8
800e870: 10bfffc4 addi r2,r2,-1
800e874: 80a0703a and r16,r16,r2
800e878: a80d883a mov r6,r21
800e87c: 4023883a mov r17,r8
800e880: 003ff306 br 800e850 <__muldf3+0x2f0>
800e884: 8818d43a srli r12,r17,16
800e888: 4028d43a srli r20,r8,16
800e88c: 42ffffcc andi r11,r8,65535
800e890: 8c7fffcc andi r17,r17,65535
800e894: 5c47383a mul r3,r11,r17
800e898: 62c9383a mul r4,r12,r11
800e89c: a445383a mul r2,r20,r17
800e8a0: 1810d43a srli r8,r3,16
800e8a4: 651d383a mul r14,r12,r20
800e8a8: 1105883a add r2,r2,r4
800e8ac: 4091883a add r8,r8,r2
800e8b0: 4100022e bgeu r8,r4,800e8bc <__muldf3+0x35c>
800e8b4: 00800074 movhi r2,1
800e8b8: 709d883a add r14,r14,r2
800e8bc: 901ed43a srli r15,r18,16
800e8c0: 94bfffcc andi r18,r18,65535
800e8c4: 9449383a mul r4,r18,r17
800e8c8: 648f383a mul r7,r12,r18
800e8cc: 7c63383a mul r17,r15,r17
800e8d0: 201ad43a srli r13,r4,16
800e8d4: 4014943a slli r10,r8,16
800e8d8: 89e3883a add r17,r17,r7
800e8dc: 1a7fffcc andi r9,r3,65535
800e8e0: 6c5b883a add r13,r13,r17
800e8e4: 4006d43a srli r3,r8,16
800e8e8: 5253883a add r9,r10,r9
800e8ec: 63c5383a mul r2,r12,r15
800e8f0: 69c0022e bgeu r13,r7,800e8fc <__muldf3+0x39c>
800e8f4: 01c00074 movhi r7,1
800e8f8: 11c5883a add r2,r2,r7
800e8fc: 802ad43a srli r21,r16,16
800e900: 823fffcc andi r8,r16,65535
800e904: 5a2d383a mul r22,r11,r8
800e908: a20f383a mul r7,r20,r8
800e90c: aad7383a mul r11,r21,r11
800e910: 6814943a slli r10,r13,16
800e914: b018d43a srli r12,r22,16
800e918: 6822d43a srli r17,r13,16
800e91c: 213fffcc andi r4,r4,65535
800e920: 3acf883a add r7,r7,r11
800e924: 5115883a add r10,r10,r4
800e928: 61cf883a add r7,r12,r7
800e92c: 889b883a add r13,r17,r2
800e930: 1a87883a add r3,r3,r10
800e934: a569383a mul r20,r20,r21
800e938: 3ac0022e bgeu r7,r11,800e944 <__muldf3+0x3e4>
800e93c: 00800074 movhi r2,1
800e940: a0a9883a add r20,r20,r2
800e944: 9217383a mul r11,r18,r8
800e948: aca5383a mul r18,r21,r18
800e94c: 7a11383a mul r8,r15,r8
800e950: 5820d43a srli r16,r11,16
800e954: 3808d43a srli r4,r7,16
800e958: 380e943a slli r7,r7,16
800e95c: 4491883a add r8,r8,r18
800e960: b5bfffcc andi r22,r22,65535
800e964: 8211883a add r8,r16,r8
800e968: 2529883a add r20,r4,r20
800e96c: 3d8f883a add r7,r7,r22
800e970: 7d59383a mul r12,r15,r21
800e974: 4480022e bgeu r8,r18,800e980 <__muldf3+0x420>
800e978: 00800074 movhi r2,1
800e97c: 6099883a add r12,r12,r2
800e980: 4004943a slli r2,r8,16
800e984: 5affffcc andi r11,r11,65535
800e988: 1b87883a add r3,r3,r14
800e98c: 12c5883a add r2,r2,r11
800e990: 1a95803a cmpltu r10,r3,r10
800e994: 1345883a add r2,r2,r13
800e998: 19c7883a add r3,r3,r7
800e99c: 129d883a add r14,r2,r10
800e9a0: 19cf803a cmpltu r7,r3,r7
800e9a4: 7509883a add r4,r14,r20
800e9a8: 4010d43a srli r8,r8,16
800e9ac: 21d7883a add r11,r4,r7
800e9b0: 1345803a cmpltu r2,r2,r13
800e9b4: 72a1803a cmpltu r16,r14,r10
800e9b8: 1420b03a or r16,r2,r16
800e9bc: 2509803a cmpltu r4,r4,r20
800e9c0: 59cf803a cmpltu r7,r11,r7
800e9c4: 21ceb03a or r7,r4,r7
800e9c8: 8221883a add r16,r16,r8
800e9cc: 81e1883a add r16,r16,r7
800e9d0: 1822927a slli r17,r3,9
800e9d4: 8321883a add r16,r16,r12
800e9d8: 8020927a slli r16,r16,9
800e9dc: 5808d5fa srli r4,r11,23
800e9e0: 1806d5fa srli r3,r3,23
800e9e4: 8a62b03a or r17,r17,r9
800e9e8: 5804927a slli r2,r11,9
800e9ec: 8120b03a or r16,r16,r4
800e9f0: 8822c03a cmpne r17,r17,zero
800e9f4: 88e2b03a or r17,r17,r3
800e9f8: 80c0402c andhi r3,r16,256
800e9fc: 88a2b03a or r17,r17,r2
800ea00: 18005a26 beq r3,zero,800eb6c <__muldf3+0x60c>
800ea04: 8804d07a srli r2,r17,1
800ea08: 800697fa slli r3,r16,31
800ea0c: 8c40004c andi r17,r17,1
800ea10: 8020d07a srli r16,r16,1
800ea14: 1462b03a or r17,r2,r17
800ea18: 88e2b03a or r17,r17,r3
800ea1c: 28c0ffc4 addi r3,r5,1023
800ea20: 00c0350e bge zero,r3,800eaf8 <__muldf3+0x598>
800ea24: 888001cc andi r2,r17,7
800ea28: 10000726 beq r2,zero,800ea48 <__muldf3+0x4e8>
800ea2c: 888003cc andi r2,r17,15
800ea30: 10800120 cmpeqi r2,r2,4
800ea34: 1000041e bne r2,zero,800ea48 <__muldf3+0x4e8>
800ea38: 88800104 addi r2,r17,4
800ea3c: 1463803a cmpltu r17,r2,r17
800ea40: 8461883a add r16,r16,r17
800ea44: 1023883a mov r17,r2
800ea48: 8080402c andhi r2,r16,256
800ea4c: 10000426 beq r2,zero,800ea60 <__muldf3+0x500>
800ea50: 00bfc034 movhi r2,65280
800ea54: 10bfffc4 addi r2,r2,-1
800ea58: 80a0703a and r16,r16,r2
800ea5c: 28c10004 addi r3,r5,1024
800ea60: 1881ffc8 cmpgei r2,r3,2047
800ea64: 103f5e1e bne r2,zero,800e7e0 <__muldf3+0x280>
800ea68: 8004977a slli r2,r16,29
800ea6c: 8822d0fa srli r17,r17,3
800ea70: 8020927a slli r16,r16,9
800ea74: 18c1ffcc andi r3,r3,2047
800ea78: 1462b03a or r17,r2,r17
800ea7c: 8020d33a srli r16,r16,12
800ea80: 003f1106 br 800e6c8 <__muldf3+0x168>
800ea84: 00800434 movhi r2,16
800ea88: 84000234 orhi r16,r16,8
800ea8c: 10bfffc4 addi r2,r2,-1
800ea90: 80a0703a and r16,r16,r2
800ea94: a00d883a mov r6,r20
800ea98: 003f6d06 br 800e850 <__muldf3+0x2f0>
800ea9c: 3009883a mov r4,r6
800eaa0: d9800015 stw r6,0(sp)
800eaa4: 800f7900 call 800f790 <__clzsi2>
800eaa8: 11000544 addi r4,r2,21
800eaac: 21400748 cmpgei r5,r4,29
800eab0: 10c00804 addi r3,r2,32
800eab4: d9800017 ldw r6,0(sp)
800eab8: 283f3e26 beq r5,zero,800e7b4 <__muldf3+0x254>
800eabc: 10bffe04 addi r2,r2,-8
800eac0: 30a4983a sll r18,r6,r2
800eac4: 0011883a mov r8,zero
800eac8: 003f4106 br 800e7d0 <__muldf3+0x270>
800eacc: 800f7900 call 800f790 <__clzsi2>
800ead0: 11400544 addi r5,r2,21
800ead4: 29000748 cmpgei r4,r5,29
800ead8: 10c00804 addi r3,r2,32
800eadc: d9800017 ldw r6,0(sp)
800eae0: d9c00117 ldw r7,4(sp)
800eae4: 203f1726 beq r4,zero,800e744 <__muldf3+0x1e4>
800eae8: 10bffe04 addi r2,r2,-8
800eaec: 90a0983a sll r16,r18,r2
800eaf0: 0023883a mov r17,zero
800eaf4: 003f1a06 br 800e760 <__muldf3+0x200>
800eaf8: 00800044 movi r2,1
800eafc: 10c5c83a sub r2,r2,r3
800eb00: 11000e48 cmpgei r4,r2,57
800eb04: 203eed1e bne r4,zero,800e6bc <__muldf3+0x15c>
800eb08: 11000808 cmpgei r4,r2,32
800eb0c: 2000191e bne r4,zero,800eb74 <__muldf3+0x614>
800eb10: 29410784 addi r5,r5,1054
800eb14: 8146983a sll r3,r16,r5
800eb18: 8888d83a srl r4,r17,r2
800eb1c: 894a983a sll r5,r17,r5
800eb20: 80a0d83a srl r16,r16,r2
800eb24: 1904b03a or r2,r3,r4
800eb28: 2822c03a cmpne r17,r5,zero
800eb2c: 1444b03a or r2,r2,r17
800eb30: 10c001cc andi r3,r2,7
800eb34: 18000726 beq r3,zero,800eb54 <__muldf3+0x5f4>
800eb38: 10c003cc andi r3,r2,15
800eb3c: 18c00120 cmpeqi r3,r3,4
800eb40: 1800041e bne r3,zero,800eb54 <__muldf3+0x5f4>
800eb44: 10c00104 addi r3,r2,4
800eb48: 1885803a cmpltu r2,r3,r2
800eb4c: 80a1883a add r16,r16,r2
800eb50: 1805883a mov r2,r3
800eb54: 80c0202c andhi r3,r16,128
800eb58: 18001b26 beq r3,zero,800ebc8 <__muldf3+0x668>
800eb5c: 00c00044 movi r3,1
800eb60: 0021883a mov r16,zero
800eb64: 0023883a mov r17,zero
800eb68: 003ed706 br 800e6c8 <__muldf3+0x168>
800eb6c: 980b883a mov r5,r19
800eb70: 003faa06 br 800ea1c <__muldf3+0x4bc>
800eb74: 013ff844 movi r4,-31
800eb78: 20c7c83a sub r3,r4,r3
800eb7c: 10800820 cmpeqi r2,r2,32
800eb80: 80c6d83a srl r3,r16,r3
800eb84: 1000031e bne r2,zero,800eb94 <__muldf3+0x634>
800eb88: 28810f84 addi r2,r5,1086
800eb8c: 8084983a sll r2,r16,r2
800eb90: 88a2b03a or r17,r17,r2
800eb94: 8822c03a cmpne r17,r17,zero
800eb98: 88c4b03a or r2,r17,r3
800eb9c: 144001cc andi r17,r2,7
800eba0: 8800051e bne r17,zero,800ebb8 <__muldf3+0x658>
800eba4: 0021883a mov r16,zero
800eba8: 1004d0fa srli r2,r2,3
800ebac: 0007883a mov r3,zero
800ebb0: 1462b03a or r17,r2,r17
800ebb4: 003ec406 br 800e6c8 <__muldf3+0x168>
800ebb8: 10c003cc andi r3,r2,15
800ebbc: 18c00118 cmpnei r3,r3,4
800ebc0: 0021883a mov r16,zero
800ebc4: 183fdf1e bne r3,zero,800eb44 <__muldf3+0x5e4>
800ebc8: 8006927a slli r3,r16,9
800ebcc: 8022977a slli r17,r16,29
800ebd0: 1820d33a srli r16,r3,12
800ebd4: 003ff406 br 800eba8 <__muldf3+0x648>
800ebd8: 00800434 movhi r2,16
800ebdc: 84000234 orhi r16,r16,8
800ebe0: 10bfffc4 addi r2,r2,-1
800ebe4: 80a0703a and r16,r16,r2
800ebe8: 003f1906 br 800e850 <__muldf3+0x2f0>
0800ebec <__subdf3>:
800ebec: 00800434 movhi r2,16
800ebf0: 3812d53a srli r9,r7,20
800ebf4: 10bfffc4 addi r2,r2,-1
800ebf8: defffb04 addi sp,sp,-20
800ebfc: 2890703a and r8,r5,r2
800ec00: 3884703a and r2,r7,r2
800ec04: 2806d7fa srli r3,r5,31
800ec08: dcc00315 stw r19,12(sp)
800ec0c: dc400115 stw r17,4(sp)
800ec10: 280ad53a srli r5,r5,20
800ec14: 401090fa slli r8,r8,3
800ec18: 2026d77a srli r19,r4,29
800ec1c: 100490fa slli r2,r2,3
800ec20: 3022d77a srli r17,r6,29
800ec24: 4a81ffcc andi r10,r9,2047
800ec28: dc800215 stw r18,8(sp)
800ec2c: dc000015 stw r16,0(sp)
800ec30: dfc00415 stw ra,16(sp)
800ec34: 5241ffe0 cmpeqi r9,r10,2047
800ec38: 1825883a mov r18,r3
800ec3c: 2c01ffcc andi r16,r5,2047
800ec40: 18c03fcc andi r3,r3,255
800ec44: 9a18b03a or r12,r19,r8
800ec48: 201a90fa slli r13,r4,3
800ec4c: 380ed7fa srli r7,r7,31
800ec50: 8896b03a or r11,r17,r2
800ec54: 301c90fa slli r14,r6,3
800ec58: 4800711e bne r9,zero,800ee20 <__subdf3+0x234>
800ec5c: 39c0005c xori r7,r7,1
800ec60: 8291c83a sub r8,r16,r10
800ec64: 19c05a26 beq r3,r7,800edd0 <__subdf3+0x1e4>
800ec68: 0200720e bge zero,r8,800ee34 <__subdf3+0x248>
800ec6c: 50008126 beq r10,zero,800ee74 <__subdf3+0x288>
800ec70: 8081ffd8 cmpnei r2,r16,2047
800ec74: 10011626 beq r2,zero,800f0d0 <__subdf3+0x4e4>
800ec78: 5ac02034 orhi r11,r11,128
800ec7c: 40800e48 cmpgei r2,r8,57
800ec80: 1000fe1e bne r2,zero,800f07c <__subdf3+0x490>
800ec84: 40800808 cmpgei r2,r8,32
800ec88: 10015e1e bne r2,zero,800f204 <__subdf3+0x618>
800ec8c: 00800804 movi r2,32
800ec90: 1205c83a sub r2,r2,r8
800ec94: 58a2983a sll r17,r11,r2
800ec98: 7206d83a srl r3,r14,r8
800ec9c: 709c983a sll r14,r14,r2
800eca0: 5a04d83a srl r2,r11,r8
800eca4: 88e2b03a or r17,r17,r3
800eca8: 701cc03a cmpne r14,r14,zero
800ecac: 8ba2b03a or r17,r17,r14
800ecb0: 6099c83a sub r12,r12,r2
800ecb4: 6c63c83a sub r17,r13,r17
800ecb8: 6c49803a cmpltu r4,r13,r17
800ecbc: 6109c83a sub r4,r12,r4
800ecc0: 2080202c andhi r2,r4,128
800ecc4: 10009f26 beq r2,zero,800ef44 <__subdf3+0x358>
800ecc8: 04c02034 movhi r19,128
800eccc: 9cffffc4 addi r19,r19,-1
800ecd0: 24e6703a and r19,r4,r19
800ecd4: 9800e026 beq r19,zero,800f058 <__subdf3+0x46c>
800ecd8: 9809883a mov r4,r19
800ecdc: 800f7900 call 800f790 <__clzsi2>
800ece0: 123ffe04 addi r8,r2,-8
800ece4: 01000804 movi r4,32
800ece8: 2209c83a sub r4,r4,r8
800ecec: 8906d83a srl r3,r17,r4
800ecf0: 9a08983a sll r4,r19,r8
800ecf4: 8a22983a sll r17,r17,r8
800ecf8: 1908b03a or r4,r3,r4
800ecfc: 4400cf16 blt r8,r16,800f03c <__subdf3+0x450>
800ed00: 4411c83a sub r8,r8,r16
800ed04: 40800044 addi r2,r8,1
800ed08: 10c00808 cmpgei r3,r2,32
800ed0c: 1801251e bne r3,zero,800f1a4 <__subdf3+0x5b8>
800ed10: 00c00804 movi r3,32
800ed14: 1887c83a sub r3,r3,r2
800ed18: 888ad83a srl r5,r17,r2
800ed1c: 88e2983a sll r17,r17,r3
800ed20: 20c6983a sll r3,r4,r3
800ed24: 2088d83a srl r4,r4,r2
800ed28: 8822c03a cmpne r17,r17,zero
800ed2c: 1946b03a or r3,r3,r5
800ed30: 1c62b03a or r17,r3,r17
800ed34: 0021883a mov r16,zero
800ed38: 888001cc andi r2,r17,7
800ed3c: 10000726 beq r2,zero,800ed5c <__subdf3+0x170>
800ed40: 888003cc andi r2,r17,15
800ed44: 10800120 cmpeqi r2,r2,4
800ed48: 1000041e bne r2,zero,800ed5c <__subdf3+0x170>
800ed4c: 88c00104 addi r3,r17,4
800ed50: 1c63803a cmpltu r17,r3,r17
800ed54: 2449883a add r4,r4,r17
800ed58: 1823883a mov r17,r3
800ed5c: 2080202c andhi r2,r4,128
800ed60: 10007a26 beq r2,zero,800ef4c <__subdf3+0x360>
800ed64: 82000044 addi r8,r16,1
800ed68: 4081ffe0 cmpeqi r2,r8,2047
800ed6c: 4201ffcc andi r8,r8,2047
800ed70: 10008c1e bne r2,zero,800efa4 <__subdf3+0x3b8>
800ed74: 00bfe034 movhi r2,65408
800ed78: 10bfffc4 addi r2,r2,-1
800ed7c: 2084703a and r2,r4,r2
800ed80: 1008927a slli r4,r2,9
800ed84: 8822d0fa srli r17,r17,3
800ed88: 100c977a slli r6,r2,29
800ed8c: 2008d33a srli r4,r4,12
800ed90: 3444b03a or r2,r6,r17
800ed94: 4010953a slli r8,r8,20
800ed98: 00c00434 movhi r3,16
800ed9c: 94803fcc andi r18,r18,255
800eda0: 902497fa slli r18,r18,31
800eda4: 18ffffc4 addi r3,r3,-1
800eda8: 20c6703a and r3,r4,r3
800edac: 1a06b03a or r3,r3,r8
800edb0: 1c86b03a or r3,r3,r18
800edb4: dfc00417 ldw ra,16(sp)
800edb8: dcc00317 ldw r19,12(sp)
800edbc: dc800217 ldw r18,8(sp)
800edc0: dc400117 ldw r17,4(sp)
800edc4: dc000017 ldw r16,0(sp)
800edc8: dec00504 addi sp,sp,20
800edcc: f800283a ret
800edd0: 0200320e bge zero,r8,800ee9c <__subdf3+0x2b0>
800edd4: 50004c26 beq r10,zero,800ef08 <__subdf3+0x31c>
800edd8: 8081ffd8 cmpnei r2,r16,2047
800eddc: 1000bc26 beq r2,zero,800f0d0 <__subdf3+0x4e4>
800ede0: 5ac02034 orhi r11,r11,128
800ede4: 40800e48 cmpgei r2,r8,57
800ede8: 1000641e bne r2,zero,800ef7c <__subdf3+0x390>
800edec: 40800808 cmpgei r2,r8,32
800edf0: 10011726 beq r2,zero,800f250 <__subdf3+0x664>
800edf4: 447ff804 addi r17,r8,-32
800edf8: 40800820 cmpeqi r2,r8,32
800edfc: 5c46d83a srl r3,r11,r17
800ee00: 1000041e bne r2,zero,800ee14 <__subdf3+0x228>
800ee04: 00801004 movi r2,64
800ee08: 1205c83a sub r2,r2,r8
800ee0c: 5884983a sll r2,r11,r2
800ee10: 709cb03a or r14,r14,r2
800ee14: 7022c03a cmpne r17,r14,zero
800ee18: 88e2b03a or r17,r17,r3
800ee1c: 00005906 br 800ef84 <__subdf3+0x398>
800ee20: 5b8ab03a or r5,r11,r14
800ee24: 823e0044 addi r8,r16,-2047
800ee28: 28001a1e bne r5,zero,800ee94 <__subdf3+0x2a8>
800ee2c: 39c0005c xori r7,r7,1
800ee30: 19c01a26 beq r3,r7,800ee9c <__subdf3+0x2b0>
800ee34: 4000291e bne r8,zero,800eedc <__subdf3+0x2f0>
800ee38: 80800044 addi r2,r16,1
800ee3c: 1081ff8c andi r2,r2,2046
800ee40: 1000911e bne r2,zero,800f088 <__subdf3+0x49c>
800ee44: 6346b03a or r3,r12,r13
800ee48: 5b84b03a or r2,r11,r14
800ee4c: 8001551e bne r16,zero,800f3a4 <__subdf3+0x7b8>
800ee50: 18011b26 beq r3,zero,800f2c0 <__subdf3+0x6d4>
800ee54: 1001641e bne r2,zero,800f3e8 <__subdf3+0x7fc>
800ee58: 00880034 movhi r2,8192
800ee5c: 6022977a slli r17,r12,29
800ee60: 10bfffc4 addi r2,r2,-1
800ee64: 2088703a and r4,r4,r2
800ee68: 2444b03a or r2,r4,r17
800ee6c: 6026d0fa srli r19,r12,3
800ee70: 00003d06 br 800ef68 <__subdf3+0x37c>
800ee74: 5b84b03a or r2,r11,r14
800ee78: 10008e26 beq r2,zero,800f0b4 <__subdf3+0x4c8>
800ee7c: 40bfffc4 addi r2,r8,-1
800ee80: 10011f26 beq r2,zero,800f300 <__subdf3+0x714>
800ee84: 4201ffd8 cmpnei r8,r8,2047
800ee88: 40012d26 beq r8,zero,800f340 <__subdf3+0x754>
800ee8c: 1011883a mov r8,r2
800ee90: 003f7a06 br 800ec7c <__subdf3+0x90>
800ee94: 39c03fcc andi r7,r7,255
800ee98: 19ffe61e bne r3,r7,800ee34 <__subdf3+0x248>
800ee9c: 4000931e bne r8,zero,800f0ec <__subdf3+0x500>
800eea0: 80c00044 addi r3,r16,1
800eea4: 1881ff8c andi r2,r3,2046
800eea8: 10012c1e bne r2,zero,800f35c <__subdf3+0x770>
800eeac: 6344b03a or r2,r12,r13
800eeb0: 8000f91e bne r16,zero,800f298 <__subdf3+0x6ac>
800eeb4: 10017326 beq r2,zero,800f484 <__subdf3+0x898>
800eeb8: 5b84b03a or r2,r11,r14
800eebc: 1001781e bne r2,zero,800f4a0 <__subdf3+0x8b4>
800eec0: 6004977a slli r2,r12,29
800eec4: 00c80034 movhi r3,8192
800eec8: 18ffffc4 addi r3,r3,-1
800eecc: 20c6703a and r3,r4,r3
800eed0: 10c4b03a or r2,r2,r3
800eed4: 6026d0fa srli r19,r12,3
800eed8: 00002306 br 800ef68 <__subdf3+0x37c>
800eedc: 5411c83a sub r8,r10,r16
800eee0: 3825883a mov r18,r7
800eee4: 8000991e bne r16,zero,800f14c <__subdf3+0x560>
800eee8: 6344b03a or r2,r12,r13
800eeec: 1000e326 beq r2,zero,800f27c <__subdf3+0x690>
800eef0: 40bfffc4 addi r2,r8,-1
800eef4: 10015d26 beq r2,zero,800f46c <__subdf3+0x880>
800eef8: 4201ffd8 cmpnei r8,r8,2047
800eefc: 4000f926 beq r8,zero,800f2e4 <__subdf3+0x6f8>
800ef00: 1011883a mov r8,r2
800ef04: 00009406 br 800f158 <__subdf3+0x56c>
800ef08: 5b84b03a or r2,r11,r14
800ef0c: 10010226 beq r2,zero,800f318 <__subdf3+0x72c>
800ef10: 40bfffc4 addi r2,r8,-1
800ef14: 10000426 beq r2,zero,800ef28 <__subdf3+0x33c>
800ef18: 4201ffd8 cmpnei r8,r8,2047
800ef1c: 40014126 beq r8,zero,800f424 <__subdf3+0x838>
800ef20: 1011883a mov r8,r2
800ef24: 003faf06 br 800ede4 <__subdf3+0x1f8>
800ef28: 6ba3883a add r17,r13,r14
800ef2c: 62c9883a add r4,r12,r11
800ef30: 8b5b803a cmpltu r13,r17,r13
800ef34: 2349883a add r4,r4,r13
800ef38: 2080202c andhi r2,r4,128
800ef3c: 1000a61e bne r2,zero,800f1d8 <__subdf3+0x5ec>
800ef40: 04000044 movi r16,1
800ef44: 888001cc andi r2,r17,7
800ef48: 103f7d1e bne r2,zero,800ed40 <__subdf3+0x154>
800ef4c: 8822d0fa srli r17,r17,3
800ef50: 2004977a slli r2,r4,29
800ef54: 2026d0fa srli r19,r4,3
800ef58: 8011883a mov r8,r16
800ef5c: 8884b03a or r2,r17,r2
800ef60: 40c1ffe0 cmpeqi r3,r8,2047
800ef64: 18002d1e bne r3,zero,800f01c <__subdf3+0x430>
800ef68: 01000434 movhi r4,16
800ef6c: 213fffc4 addi r4,r4,-1
800ef70: 9908703a and r4,r19,r4
800ef74: 4201ffcc andi r8,r8,2047
800ef78: 003f8606 br 800ed94 <__subdf3+0x1a8>
800ef7c: 5ba2b03a or r17,r11,r14
800ef80: 8822c03a cmpne r17,r17,zero
800ef84: 8b63883a add r17,r17,r13
800ef88: 8b49803a cmpltu r4,r17,r13
800ef8c: 2309883a add r4,r4,r12
800ef90: 2080202c andhi r2,r4,128
800ef94: 103feb26 beq r2,zero,800ef44 <__subdf3+0x358>
800ef98: 84000044 addi r16,r16,1
800ef9c: 8081ffe0 cmpeqi r2,r16,2047
800efa0: 10008e26 beq r2,zero,800f1dc <__subdf3+0x5f0>
800efa4: 0201ffc4 movi r8,2047
800efa8: 0009883a mov r4,zero
800efac: 0005883a mov r2,zero
800efb0: 003f7806 br 800ed94 <__subdf3+0x1a8>
800efb4: 6010977a slli r8,r12,29
800efb8: 6026d0fa srli r19,r12,3
800efbc: 1000bb26 beq r2,zero,800f2ac <__subdf3+0x6c0>
800efc0: 01480034 movhi r5,8192
800efc4: 297fffc4 addi r5,r5,-1
800efc8: 2146703a and r3,r4,r5
800efcc: 9880022c andhi r2,r19,8
800efd0: 1a06b03a or r3,r3,r8
800efd4: 10000826 beq r2,zero,800eff8 <__subdf3+0x40c>
800efd8: 5808d0fa srli r4,r11,3
800efdc: 2080022c andhi r2,r4,8
800efe0: 1000051e bne r2,zero,800eff8 <__subdf3+0x40c>
800efe4: 5804977a slli r2,r11,29
800efe8: 3146703a and r3,r6,r5
800efec: 3825883a mov r18,r7
800eff0: 1886b03a or r3,r3,r2
800eff4: 2027883a mov r19,r4
800eff8: 1804d77a srli r2,r3,29
800effc: 980890fa slli r4,r19,3
800f000: 01480034 movhi r5,8192
800f004: 297fffc4 addi r5,r5,-1
800f008: 1108b03a or r4,r2,r4
800f00c: 2004977a slli r2,r4,29
800f010: 2026d0fa srli r19,r4,3
800f014: 1946703a and r3,r3,r5
800f018: 10c4b03a or r2,r2,r3
800f01c: 14c6b03a or r3,r2,r19
800f020: 18014926 beq r3,zero,800f548 <__subdf3+0x95c>
800f024: 00c00434 movhi r3,16
800f028: 99000234 orhi r4,r19,8
800f02c: 18ffffc4 addi r3,r3,-1
800f030: 20c8703a and r4,r4,r3
800f034: 0201ffc4 movi r8,2047
800f038: 003f5606 br 800ed94 <__subdf3+0x1a8>
800f03c: 00bfe034 movhi r2,65408
800f040: 10bfffc4 addi r2,r2,-1
800f044: 2088703a and r4,r4,r2
800f048: 888001cc andi r2,r17,7
800f04c: 8221c83a sub r16,r16,r8
800f050: 103f3b1e bne r2,zero,800ed40 <__subdf3+0x154>
800f054: 003fbd06 br 800ef4c <__subdf3+0x360>
800f058: 8809883a mov r4,r17
800f05c: 800f7900 call 800f790 <__clzsi2>
800f060: 12000604 addi r8,r2,24
800f064: 40c00808 cmpgei r3,r8,32
800f068: 183f1e26 beq r3,zero,800ece4 <__subdf3+0xf8>
800f06c: 113ffe04 addi r4,r2,-8
800f070: 8908983a sll r4,r17,r4
800f074: 0023883a mov r17,zero
800f078: 003f2006 br 800ecfc <__subdf3+0x110>
800f07c: 5ba2b03a or r17,r11,r14
800f080: 8822c03a cmpne r17,r17,zero
800f084: 003f0b06 br 800ecb4 <__subdf3+0xc8>
800f088: 6ba3c83a sub r17,r13,r14
800f08c: 62e7c83a sub r19,r12,r11
800f090: 6c49803a cmpltu r4,r13,r17
800f094: 9927c83a sub r19,r19,r4
800f098: 9880202c andhi r2,r19,128
800f09c: 1000bb1e bne r2,zero,800f38c <__subdf3+0x7a0>
800f0a0: 8cc4b03a or r2,r17,r19
800f0a4: 103f0b1e bne r2,zero,800ecd4 <__subdf3+0xe8>
800f0a8: 0027883a mov r19,zero
800f0ac: 0025883a mov r18,zero
800f0b0: 003fad06 br 800ef68 <__subdf3+0x37c>
800f0b4: 00880034 movhi r2,8192
800f0b8: 6022977a slli r17,r12,29
800f0bc: 10bfffc4 addi r2,r2,-1
800f0c0: 2088703a and r4,r4,r2
800f0c4: 2444b03a or r2,r4,r17
800f0c8: 6026d0fa srli r19,r12,3
800f0cc: 003fa406 br 800ef60 <__subdf3+0x374>
800f0d0: 00880034 movhi r2,8192
800f0d4: 6022977a slli r17,r12,29
800f0d8: 10bfffc4 addi r2,r2,-1
800f0dc: 2088703a and r4,r4,r2
800f0e0: 2444b03a or r2,r4,r17
800f0e4: 6026d0fa srli r19,r12,3
800f0e8: 003fcc06 br 800f01c <__subdf3+0x430>
800f0ec: 5411c83a sub r8,r10,r16
800f0f0: 80004f26 beq r16,zero,800f230 <__subdf3+0x644>
800f0f4: 5081ffd8 cmpnei r2,r10,2047
800f0f8: 1000b426 beq r2,zero,800f3cc <__subdf3+0x7e0>
800f0fc: 63002034 orhi r12,r12,128
800f100: 40800e48 cmpgei r2,r8,57
800f104: 1000c41e bne r2,zero,800f418 <__subdf3+0x82c>
800f108: 40800808 cmpgei r2,r8,32
800f10c: 1000f91e bne r2,zero,800f4f4 <__subdf3+0x908>
800f110: 00800804 movi r2,32
800f114: 1205c83a sub r2,r2,r8
800f118: 60a2983a sll r17,r12,r2
800f11c: 6a06d83a srl r3,r13,r8
800f120: 6884983a sll r2,r13,r2
800f124: 6210d83a srl r8,r12,r8
800f128: 88e2b03a or r17,r17,r3
800f12c: 1004c03a cmpne r2,r2,zero
800f130: 88a2b03a or r17,r17,r2
800f134: 5a17883a add r11,r11,r8
800f138: 8ba3883a add r17,r17,r14
800f13c: 8b85803a cmpltu r2,r17,r14
800f140: 12c9883a add r4,r2,r11
800f144: 5021883a mov r16,r10
800f148: 003f9106 br 800ef90 <__subdf3+0x3a4>
800f14c: 5081ffd8 cmpnei r2,r10,2047
800f150: 10006426 beq r2,zero,800f2e4 <__subdf3+0x6f8>
800f154: 63002034 orhi r12,r12,128
800f158: 40800e48 cmpgei r2,r8,57
800f15c: 1000751e bne r2,zero,800f334 <__subdf3+0x748>
800f160: 40800808 cmpgei r2,r8,32
800f164: 1000b61e bne r2,zero,800f440 <__subdf3+0x854>
800f168: 00800804 movi r2,32
800f16c: 1205c83a sub r2,r2,r8
800f170: 60a2983a sll r17,r12,r2
800f174: 6a06d83a srl r3,r13,r8
800f178: 6884983a sll r2,r13,r2
800f17c: 6210d83a srl r8,r12,r8
800f180: 88e2b03a or r17,r17,r3
800f184: 1004c03a cmpne r2,r2,zero
800f188: 88a2b03a or r17,r17,r2
800f18c: 5a17c83a sub r11,r11,r8
800f190: 7463c83a sub r17,r14,r17
800f194: 7445803a cmpltu r2,r14,r17
800f198: 5889c83a sub r4,r11,r2
800f19c: 5021883a mov r16,r10
800f1a0: 003ec706 br 800ecc0 <__subdf3+0xd4>
800f1a4: 423ff844 addi r8,r8,-31
800f1a8: 10c00820 cmpeqi r3,r2,32
800f1ac: 2210d83a srl r8,r4,r8
800f1b0: 1800041e bne r3,zero,800f1c4 <__subdf3+0x5d8>
800f1b4: 00c01004 movi r3,64
800f1b8: 1885c83a sub r2,r3,r2
800f1bc: 2088983a sll r4,r4,r2
800f1c0: 8922b03a or r17,r17,r4
800f1c4: 8822c03a cmpne r17,r17,zero
800f1c8: 8a22b03a or r17,r17,r8
800f1cc: 0009883a mov r4,zero
800f1d0: 0021883a mov r16,zero
800f1d4: 003f5b06 br 800ef44 <__subdf3+0x358>
800f1d8: 04000084 movi r16,2
800f1dc: 00bfe034 movhi r2,65408
800f1e0: 10bfffc4 addi r2,r2,-1
800f1e4: 2084703a and r2,r4,r2
800f1e8: 8806d07a srli r3,r17,1
800f1ec: 100a97fa slli r5,r2,31
800f1f0: 8c40004c andi r17,r17,1
800f1f4: 1c62b03a or r17,r3,r17
800f1f8: 1008d07a srli r4,r2,1
800f1fc: 2c62b03a or r17,r5,r17
800f200: 003ecd06 br 800ed38 <__subdf3+0x14c>
800f204: 447ff804 addi r17,r8,-32
800f208: 40800820 cmpeqi r2,r8,32
800f20c: 5c46d83a srl r3,r11,r17
800f210: 1000041e bne r2,zero,800f224 <__subdf3+0x638>
800f214: 00801004 movi r2,64
800f218: 1205c83a sub r2,r2,r8
800f21c: 5884983a sll r2,r11,r2
800f220: 709cb03a or r14,r14,r2
800f224: 7022c03a cmpne r17,r14,zero
800f228: 88e2b03a or r17,r17,r3
800f22c: 003ea106 br 800ecb4 <__subdf3+0xc8>
800f230: 6344b03a or r2,r12,r13
800f234: 1000a526 beq r2,zero,800f4cc <__subdf3+0x8e0>
800f238: 40bfffc4 addi r2,r8,-1
800f23c: 1000bd26 beq r2,zero,800f534 <__subdf3+0x948>
800f240: 4201ffd8 cmpnei r8,r8,2047
800f244: 40006126 beq r8,zero,800f3cc <__subdf3+0x7e0>
800f248: 1011883a mov r8,r2
800f24c: 003fac06 br 800f100 <__subdf3+0x514>
800f250: 00800804 movi r2,32
800f254: 1205c83a sub r2,r2,r8
800f258: 58a2983a sll r17,r11,r2
800f25c: 7206d83a srl r3,r14,r8
800f260: 709c983a sll r14,r14,r2
800f264: 5a04d83a srl r2,r11,r8
800f268: 88e2b03a or r17,r17,r3
800f26c: 701cc03a cmpne r14,r14,zero
800f270: 8ba2b03a or r17,r17,r14
800f274: 6099883a add r12,r12,r2
800f278: 003f4206 br 800ef84 <__subdf3+0x398>
800f27c: 5808977a slli r4,r11,29
800f280: 00c80034 movhi r3,8192
800f284: 18ffffc4 addi r3,r3,-1
800f288: 30cc703a and r6,r6,r3
800f28c: 2184b03a or r2,r4,r6
800f290: 5826d0fa srli r19,r11,3
800f294: 003f3206 br 800ef60 <__subdf3+0x374>
800f298: 10004c26 beq r2,zero,800f3cc <__subdf3+0x7e0>
800f29c: 5b9cb03a or r14,r11,r14
800f2a0: 6010977a slli r8,r12,29
800f2a4: 6026d0fa srli r19,r12,3
800f2a8: 703f451e bne r14,zero,800efc0 <__subdf3+0x3d4>
800f2ac: 00880034 movhi r2,8192
800f2b0: 10bfffc4 addi r2,r2,-1
800f2b4: 2084703a and r2,r4,r2
800f2b8: 1204b03a or r2,r2,r8
800f2bc: 003f5706 br 800f01c <__subdf3+0x430>
800f2c0: 103f7926 beq r2,zero,800f0a8 <__subdf3+0x4bc>
800f2c4: 5804977a slli r2,r11,29
800f2c8: 00c80034 movhi r3,8192
800f2cc: 18ffffc4 addi r3,r3,-1
800f2d0: 30c6703a and r3,r6,r3
800f2d4: 10c4b03a or r2,r2,r3
800f2d8: 5826d0fa srli r19,r11,3
800f2dc: 3825883a mov r18,r7
800f2e0: 003f2106 br 800ef68 <__subdf3+0x37c>
800f2e4: 5804977a slli r2,r11,29
800f2e8: 00c80034 movhi r3,8192
800f2ec: 18ffffc4 addi r3,r3,-1
800f2f0: 30c6703a and r3,r6,r3
800f2f4: 10c4b03a or r2,r2,r3
800f2f8: 5826d0fa srli r19,r11,3
800f2fc: 003f4706 br 800f01c <__subdf3+0x430>
800f300: 6ba3c83a sub r17,r13,r14
800f304: 62c9c83a sub r4,r12,r11
800f308: 6c5b803a cmpltu r13,r13,r17
800f30c: 2349c83a sub r4,r4,r13
800f310: 04000044 movi r16,1
800f314: 003e6a06 br 800ecc0 <__subdf3+0xd4>
800f318: 6004977a slli r2,r12,29
800f31c: 00c80034 movhi r3,8192
800f320: 18ffffc4 addi r3,r3,-1
800f324: 20c8703a and r4,r4,r3
800f328: 1104b03a or r2,r2,r4
800f32c: 6026d0fa srli r19,r12,3
800f330: 003f0b06 br 800ef60 <__subdf3+0x374>
800f334: 6366b03a or r19,r12,r13
800f338: 9822c03a cmpne r17,r19,zero
800f33c: 003f9406 br 800f190 <__subdf3+0x5a4>
800f340: 6004977a slli r2,r12,29
800f344: 00c80034 movhi r3,8192
800f348: 18ffffc4 addi r3,r3,-1
800f34c: 20c8703a and r4,r4,r3
800f350: 1104b03a or r2,r2,r4
800f354: 6026d0fa srli r19,r12,3
800f358: 003f3006 br 800f01c <__subdf3+0x430>
800f35c: 1881ffe0 cmpeqi r2,r3,2047
800f360: 103f101e bne r2,zero,800efa4 <__subdf3+0x3b8>
800f364: 6b9d883a add r14,r13,r14
800f368: 62c9883a add r4,r12,r11
800f36c: 7345803a cmpltu r2,r14,r13
800f370: 2085883a add r2,r4,r2
800f374: 102297fa slli r17,r2,31
800f378: 701cd07a srli r14,r14,1
800f37c: 1008d07a srli r4,r2,1
800f380: 1821883a mov r16,r3
800f384: 8ba2b03a or r17,r17,r14
800f388: 003eee06 br 800ef44 <__subdf3+0x358>
800f38c: 7363c83a sub r17,r14,r13
800f390: 5b09c83a sub r4,r11,r12
800f394: 7467803a cmpltu r19,r14,r17
800f398: 24e7c83a sub r19,r4,r19
800f39c: 3825883a mov r18,r7
800f3a0: 003e4c06 br 800ecd4 <__subdf3+0xe8>
800f3a4: 183f031e bne r3,zero,800efb4 <__subdf3+0x3c8>
800f3a8: 10005d26 beq r2,zero,800f520 <__subdf3+0x934>
800f3ac: 00880034 movhi r2,8192
800f3b0: 5806977a slli r3,r11,29
800f3b4: 10bfffc4 addi r2,r2,-1
800f3b8: 3084703a and r2,r6,r2
800f3bc: 10c4b03a or r2,r2,r3
800f3c0: 5826d0fa srli r19,r11,3
800f3c4: 3825883a mov r18,r7
800f3c8: 003f1406 br 800f01c <__subdf3+0x430>
800f3cc: 00880034 movhi r2,8192
800f3d0: 5806977a slli r3,r11,29
800f3d4: 10bfffc4 addi r2,r2,-1
800f3d8: 3084703a and r2,r6,r2
800f3dc: 10c4b03a or r2,r2,r3
800f3e0: 5826d0fa srli r19,r11,3
800f3e4: 003f0d06 br 800f01c <__subdf3+0x430>
800f3e8: 6ba3c83a sub r17,r13,r14
800f3ec: 62c5c83a sub r2,r12,r11
800f3f0: 6c49803a cmpltu r4,r13,r17
800f3f4: 1109c83a sub r4,r2,r4
800f3f8: 2080202c andhi r2,r4,128
800f3fc: 10003a26 beq r2,zero,800f4e8 <__subdf3+0x8fc>
800f400: 7363c83a sub r17,r14,r13
800f404: 5b09c83a sub r4,r11,r12
800f408: 745d803a cmpltu r14,r14,r17
800f40c: 2389c83a sub r4,r4,r14
800f410: 3825883a mov r18,r7
800f414: 003e4806 br 800ed38 <__subdf3+0x14c>
800f418: 6362b03a or r17,r12,r13
800f41c: 8822c03a cmpne r17,r17,zero
800f420: 003f4506 br 800f138 <__subdf3+0x54c>
800f424: 6004977a slli r2,r12,29
800f428: 00c80034 movhi r3,8192
800f42c: 18ffffc4 addi r3,r3,-1
800f430: 20c6703a and r3,r4,r3
800f434: 10c4b03a or r2,r2,r3
800f438: 6026d0fa srli r19,r12,3
800f43c: 003ef706 br 800f01c <__subdf3+0x430>
800f440: 40bff804 addi r2,r8,-32
800f444: 40c00820 cmpeqi r3,r8,32
800f448: 6084d83a srl r2,r12,r2
800f44c: 1800041e bne r3,zero,800f460 <__subdf3+0x874>
800f450: 04c01004 movi r19,64
800f454: 9a11c83a sub r8,r19,r8
800f458: 6226983a sll r19,r12,r8
800f45c: 6cdab03a or r13,r13,r19
800f460: 6822c03a cmpne r17,r13,zero
800f464: 88a2b03a or r17,r17,r2
800f468: 003f4906 br 800f190 <__subdf3+0x5a4>
800f46c: 7363c83a sub r17,r14,r13
800f470: 5b09c83a sub r4,r11,r12
800f474: 745d803a cmpltu r14,r14,r17
800f478: 2389c83a sub r4,r4,r14
800f47c: 04000044 movi r16,1
800f480: 003e0f06 br 800ecc0 <__subdf3+0xd4>
800f484: 00880034 movhi r2,8192
800f488: 5806977a slli r3,r11,29
800f48c: 10bfffc4 addi r2,r2,-1
800f490: 3084703a and r2,r6,r2
800f494: 10c4b03a or r2,r2,r3
800f498: 5826d0fa srli r19,r11,3
800f49c: 003eb206 br 800ef68 <__subdf3+0x37c>
800f4a0: 6ba3883a add r17,r13,r14
800f4a4: 62c9883a add r4,r12,r11
800f4a8: 8b5b803a cmpltu r13,r17,r13
800f4ac: 2349883a add r4,r4,r13
800f4b0: 2080202c andhi r2,r4,128
800f4b4: 103ea326 beq r2,zero,800ef44 <__subdf3+0x358>
800f4b8: 00bfe034 movhi r2,65408
800f4bc: 10bfffc4 addi r2,r2,-1
800f4c0: 2088703a and r4,r4,r2
800f4c4: 04000044 movi r16,1
800f4c8: 003e9e06 br 800ef44 <__subdf3+0x358>
800f4cc: 00880034 movhi r2,8192
800f4d0: 5806977a slli r3,r11,29
800f4d4: 10bfffc4 addi r2,r2,-1
800f4d8: 3084703a and r2,r6,r2
800f4dc: 10c4b03a or r2,r2,r3
800f4e0: 5826d0fa srli r19,r11,3
800f4e4: 003e9e06 br 800ef60 <__subdf3+0x374>
800f4e8: 8904b03a or r2,r17,r4
800f4ec: 103eee26 beq r2,zero,800f0a8 <__subdf3+0x4bc>
800f4f0: 003e9406 br 800ef44 <__subdf3+0x358>
800f4f4: 40bff804 addi r2,r8,-32
800f4f8: 40c00820 cmpeqi r3,r8,32
800f4fc: 6084d83a srl r2,r12,r2
800f500: 1800041e bne r3,zero,800f514 <__subdf3+0x928>
800f504: 04c01004 movi r19,64
800f508: 9a11c83a sub r8,r19,r8
800f50c: 6226983a sll r19,r12,r8
800f510: 6cdab03a or r13,r13,r19
800f514: 6822c03a cmpne r17,r13,zero
800f518: 88a2b03a or r17,r17,r2
800f51c: 003f0606 br 800f138 <__subdf3+0x54c>
800f520: 04c00434 movhi r19,16
800f524: 9cffffc4 addi r19,r19,-1
800f528: 0025883a mov r18,zero
800f52c: 00bfffc4 movi r2,-1
800f530: 003ebc06 br 800f024 <__subdf3+0x438>
800f534: 6ba3883a add r17,r13,r14
800f538: 62c9883a add r4,r12,r11
800f53c: 8b9d803a cmpltu r14,r17,r14
800f540: 2389883a add r4,r4,r14
800f544: 003e7c06 br 800ef38 <__subdf3+0x34c>
800f548: 0005883a mov r2,zero
800f54c: 0201ffc4 movi r8,2047
800f550: 0009883a mov r4,zero
800f554: 003e0f06 br 800ed94 <__subdf3+0x1a8>
0800f558 <__unorddf2>:
800f558: 2806d53a srli r3,r5,20
800f55c: 3810d53a srli r8,r7,20
800f560: 00800434 movhi r2,16
800f564: 18c1ffcc andi r3,r3,2047
800f568: 10bfffc4 addi r2,r2,-1
800f56c: 18c1ffd8 cmpnei r3,r3,2047
800f570: 288a703a and r5,r5,r2
800f574: 388e703a and r7,r7,r2
800f578: 4201ffcc andi r8,r8,2047
800f57c: 18000426 beq r3,zero,800f590 <__unorddf2+0x38>
800f580: 4201ffd8 cmpnei r8,r8,2047
800f584: 40000626 beq r8,zero,800f5a0 <__unorddf2+0x48>
800f588: 0005883a mov r2,zero
800f58c: f800283a ret
800f590: 214ab03a or r5,r4,r5
800f594: 283ffa26 beq r5,zero,800f580 <__unorddf2+0x28>
800f598: 00800044 movi r2,1
800f59c: f800283a ret
800f5a0: 398eb03a or r7,r7,r6
800f5a4: 3804c03a cmpne r2,r7,zero
800f5a8: f800283a ret
0800f5ac <__fixdfsi>:
800f5ac: 280cd53a srli r6,r5,20
800f5b0: 00c00434 movhi r3,16
800f5b4: 18ffffc4 addi r3,r3,-1
800f5b8: 3181ffcc andi r6,r6,2047
800f5bc: 31c0ffd0 cmplti r7,r6,1023
800f5c0: 28c6703a and r3,r5,r3
800f5c4: 280ad7fa srli r5,r5,31
800f5c8: 3800061e bne r7,zero,800f5e4 <__fixdfsi+0x38>
800f5cc: 30810790 cmplti r2,r6,1054
800f5d0: 1000061e bne r2,zero,800f5ec <__fixdfsi+0x40>
800f5d4: 00a00034 movhi r2,32768
800f5d8: 10bfffc4 addi r2,r2,-1
800f5dc: 2885883a add r2,r5,r2
800f5e0: f800283a ret
800f5e4: 0005883a mov r2,zero
800f5e8: f800283a ret
800f5ec: 00810cc4 movi r2,1075
800f5f0: 118fc83a sub r7,r2,r6
800f5f4: 38800808 cmpgei r2,r7,32
800f5f8: 18c00434 orhi r3,r3,16
800f5fc: 1000071e bne r2,zero,800f61c <__fixdfsi+0x70>
800f600: 30befb44 addi r2,r6,-1043
800f604: 1886983a sll r3,r3,r2
800f608: 21c4d83a srl r2,r4,r7
800f60c: 1884b03a or r2,r3,r2
800f610: 283ff526 beq r5,zero,800f5e8 <__fixdfsi+0x3c>
800f614: 0085c83a sub r2,zero,r2
800f618: f800283a ret
800f61c: 008104c4 movi r2,1043
800f620: 1185c83a sub r2,r2,r6
800f624: 1884d83a srl r2,r3,r2
800f628: 003ff906 br 800f610 <__fixdfsi+0x64>
0800f62c <__floatsidf>:
800f62c: defffd04 addi sp,sp,-12
800f630: dfc00215 stw ra,8(sp)
800f634: dc400115 stw r17,4(sp)
800f638: dc000015 stw r16,0(sp)
800f63c: 20001326 beq r4,zero,800f68c <__floatsidf+0x60>
800f640: 2021883a mov r16,r4
800f644: 2022d7fa srli r17,r4,31
800f648: 20002116 blt r4,zero,800f6d0 <__floatsidf+0xa4>
800f64c: 8009883a mov r4,r16
800f650: 800f7900 call 800f790 <__clzsi2>
800f654: 01010784 movi r4,1054
800f658: 2089c83a sub r4,r4,r2
800f65c: 10c002c8 cmpgei r3,r2,11
800f660: 2101ffcc andi r4,r4,2047
800f664: 18001c1e bne r3,zero,800f6d8 <__floatsidf+0xac>
800f668: 018002c4 movi r6,11
800f66c: 308dc83a sub r6,r6,r2
800f670: 818ad83a srl r5,r16,r6
800f674: 00c00434 movhi r3,16
800f678: 10800544 addi r2,r2,21
800f67c: 18ffffc4 addi r3,r3,-1
800f680: 8084983a sll r2,r16,r2
800f684: 28ca703a and r5,r5,r3
800f688: 00000406 br 800f69c <__floatsidf+0x70>
800f68c: 0023883a mov r17,zero
800f690: 0009883a mov r4,zero
800f694: 000b883a mov r5,zero
800f698: 0005883a mov r2,zero
800f69c: 2008953a slli r4,r4,20
800f6a0: 8c403fcc andi r17,r17,255
800f6a4: 01800434 movhi r6,16
800f6a8: 31bfffc4 addi r6,r6,-1
800f6ac: 880697fa slli r3,r17,31
800f6b0: 298a703a and r5,r5,r6
800f6b4: 290ab03a or r5,r5,r4
800f6b8: 28c6b03a or r3,r5,r3
800f6bc: dfc00217 ldw ra,8(sp)
800f6c0: dc400117 ldw r17,4(sp)
800f6c4: dc000017 ldw r16,0(sp)
800f6c8: dec00304 addi sp,sp,12
800f6cc: f800283a ret
800f6d0: 0121c83a sub r16,zero,r4
800f6d4: 003fdd06 br 800f64c <__floatsidf+0x20>
800f6d8: 10bffd44 addi r2,r2,-11
800f6dc: 808a983a sll r5,r16,r2
800f6e0: 00800434 movhi r2,16
800f6e4: 10bfffc4 addi r2,r2,-1
800f6e8: 288a703a and r5,r5,r2
800f6ec: 0005883a mov r2,zero
800f6f0: 003fea06 br 800f69c <__floatsidf+0x70>
0800f6f4 <__floatunsidf>:
800f6f4: defffe04 addi sp,sp,-8
800f6f8: dc000015 stw r16,0(sp)
800f6fc: dfc00115 stw ra,4(sp)
800f700: 2021883a mov r16,r4
800f704: 20000f26 beq r4,zero,800f744 <__floatunsidf+0x50>
800f708: 800f7900 call 800f790 <__clzsi2>
800f70c: 01010784 movi r4,1054
800f710: 2089c83a sub r4,r4,r2
800f714: 10c002c8 cmpgei r3,r2,11
800f718: 2101ffcc andi r4,r4,2047
800f71c: 1800151e bne r3,zero,800f774 <__floatunsidf+0x80>
800f720: 00c002c4 movi r3,11
800f724: 1887c83a sub r3,r3,r2
800f728: 80c6d83a srl r3,r16,r3
800f72c: 01400434 movhi r5,16
800f730: 10800544 addi r2,r2,21
800f734: 297fffc4 addi r5,r5,-1
800f738: 80a0983a sll r16,r16,r2
800f73c: 1944703a and r2,r3,r5
800f740: 00000206 br 800f74c <__floatunsidf+0x58>
800f744: 0009883a mov r4,zero
800f748: 0005883a mov r2,zero
800f74c: 2008953a slli r4,r4,20
800f750: 00c00434 movhi r3,16
800f754: 18ffffc4 addi r3,r3,-1
800f758: 10c6703a and r3,r2,r3
800f75c: 1906b03a or r3,r3,r4
800f760: 8005883a mov r2,r16
800f764: dfc00117 ldw ra,4(sp)
800f768: dc000017 ldw r16,0(sp)
800f76c: dec00204 addi sp,sp,8
800f770: f800283a ret
800f774: 10bffd44 addi r2,r2,-11
800f778: 8084983a sll r2,r16,r2
800f77c: 00c00434 movhi r3,16
800f780: 18ffffc4 addi r3,r3,-1
800f784: 10c4703a and r2,r2,r3
800f788: 0021883a mov r16,zero
800f78c: 003fef06 br 800f74c <__floatunsidf+0x58>
0800f790 <__clzsi2>:
800f790: 00bfffd4 movui r2,65535
800f794: 11000b36 bltu r2,r4,800f7c4 <__clzsi2+0x34>
800f798: 20804030 cmpltui r2,r4,256
800f79c: 1000071e bne r2,zero,800f7bc <__clzsi2+0x2c>
800f7a0: 2008d23a srli r4,r4,8
800f7a4: 01400604 movi r5,24
800f7a8: 00c20134 movhi r3,2052
800f7ac: 20c7883a add r3,r4,r3
800f7b0: 189d8903 ldbu r2,30244(r3)
800f7b4: 2885c83a sub r2,r5,r2
800f7b8: f800283a ret
800f7bc: 01400804 movi r5,32
800f7c0: 003ff906 br 800f7a8 <__clzsi2+0x18>
800f7c4: 00804034 movhi r2,256
800f7c8: 20800336 bltu r4,r2,800f7d8 <__clzsi2+0x48>
800f7cc: 2008d63a srli r4,r4,24
800f7d0: 01400204 movi r5,8
800f7d4: 003ff406 br 800f7a8 <__clzsi2+0x18>
800f7d8: 2008d43a srli r4,r4,16
800f7dc: 01400404 movi r5,16
800f7e0: 003ff106 br 800f7a8 <__clzsi2+0x18>
0800f7e4 <alt_flash_open_dev>:
#include "priv/alt_file.h"
ALT_LLIST_HEAD(alt_flash_dev_list);
alt_flash_fd* alt_flash_open_dev(const char* name)
{
800f7e4: defffc04 addi sp,sp,-16
800f7e8: dfc00315 stw ra,12(sp)
800f7ec: df000215 stw fp,8(sp)
800f7f0: df000204 addi fp,sp,8
800f7f4: e13ffe15 stw r4,-8(fp)
alt_flash_dev* dev = (alt_flash_dev*)alt_find_dev(name, &alt_flash_dev_list);
800f7f8: d1600404 addi r5,gp,-32752
800f7fc: e13ffe17 ldw r4,-8(fp)
800f800: 80374040 call 8037404 <alt_find_dev>
800f804: e0bfff15 stw r2,-4(fp)
if ((dev) && dev->open)
800f808: e0bfff17 ldw r2,-4(fp)
800f80c: 10000926 beq r2,zero,800f834 <alt_flash_open_dev+0x50>
800f810: e0bfff17 ldw r2,-4(fp)
800f814: 10800317 ldw r2,12(r2)
800f818: 10000626 beq r2,zero,800f834 <alt_flash_open_dev+0x50>
{
return dev->open(dev, name);
800f81c: e0bfff17 ldw r2,-4(fp)
800f820: 10800317 ldw r2,12(r2)
800f824: e17ffe17 ldw r5,-8(fp)
800f828: e13fff17 ldw r4,-4(fp)
800f82c: 103ee83a callr r2
800f830: 00000106 br 800f838 <alt_flash_open_dev+0x54>
}
return dev;
800f834: e0bfff17 ldw r2,-4(fp)
}
800f838: e037883a mov sp,fp
800f83c: dfc00117 ldw ra,4(sp)
800f840: df000017 ldw fp,0(sp)
800f844: dec00204 addi sp,sp,8
800f848: f800283a ret
0800f84c <alt_flash_close_dev>:
void alt_flash_close_dev(alt_flash_fd* fd)
{
800f84c: defffd04 addi sp,sp,-12
800f850: dfc00215 stw ra,8(sp)
800f854: df000115 stw fp,4(sp)
800f858: df000104 addi fp,sp,4
800f85c: e13fff15 stw r4,-4(fp)
if (fd && fd->close)
800f860: e0bfff17 ldw r2,-4(fp)
800f864: 10000826 beq r2,zero,800f888 <alt_flash_close_dev+0x3c>
800f868: e0bfff17 ldw r2,-4(fp)
800f86c: 10800417 ldw r2,16(r2)
800f870: 10000526 beq r2,zero,800f888 <alt_flash_close_dev+0x3c>
{
fd->close(fd);
800f874: e0bfff17 ldw r2,-4(fp)
800f878: 10800417 ldw r2,16(r2)
800f87c: e13fff17 ldw r4,-4(fp)
800f880: 103ee83a callr r2
}
return;
800f884: 0001883a nop
800f888: 0001883a nop
}
800f88c: e037883a mov sp,fp
800f890: dfc00117 ldw ra,4(sp)
800f894: df000017 ldw fp,0(sp)
800f898: dec00204 addi sp,sp,8
800f89c: f800283a ret
0800f8a0 <alt_get_errno>:
#undef errno
extern int errno;
static ALT_INLINE int* alt_get_errno(void)
{
800f8a0: defffe04 addi sp,sp,-8
800f8a4: dfc00115 stw ra,4(sp)
800f8a8: df000015 stw fp,0(sp)
800f8ac: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
800f8b0: d0a02717 ldw r2,-32612(gp)
800f8b4: 10000326 beq r2,zero,800f8c4 <alt_get_errno+0x24>
800f8b8: d0a02717 ldw r2,-32612(gp)
800f8bc: 103ee83a callr r2
800f8c0: 00000106 br 800f8c8 <alt_get_errno+0x28>
800f8c4: d0a04204 addi r2,gp,-32504
}
800f8c8: e037883a mov sp,fp
800f8cc: dfc00117 ldw ra,4(sp)
800f8d0: df000017 ldw fp,0(sp)
800f8d4: dec00204 addi sp,sp,8
800f8d8: f800283a ret
0800f8dc <fstat>:
}
#else /* !ALT_USE_DIRECT_DRIVERS */
int ALT_FSTAT (int file, struct stat *st)
{
800f8dc: defffb04 addi sp,sp,-20
800f8e0: dfc00415 stw ra,16(sp)
800f8e4: df000315 stw fp,12(sp)
800f8e8: df000304 addi fp,sp,12
800f8ec: e13ffe15 stw r4,-8(fp)
800f8f0: e17ffd15 stw r5,-12(fp)
* A common error case is that when the file descriptor was created, the call
* to open() failed resulting in a negative file descriptor. This is trapped
* below so that we don't try and process an invalid file descriptor.
*/
fd = (file < 0) ? NULL : &alt_fd_list[file];
800f8f4: e0bffe17 ldw r2,-8(fp)
800f8f8: 10000616 blt r2,zero,800f914 <fstat+0x38>
800f8fc: e0bffe17 ldw r2,-8(fp)
800f900: 10c00324 muli r3,r2,12
800f904: 00820174 movhi r2,2053
800f908: 10b21a04 addi r2,r2,-14232
800f90c: 1885883a add r2,r3,r2
800f910: 00000106 br 800f918 <fstat+0x3c>
800f914: 0005883a mov r2,zero
800f918: e0bfff15 stw r2,-4(fp)
if (fd)
800f91c: e0bfff17 ldw r2,-4(fp)
800f920: 10001026 beq r2,zero,800f964 <fstat+0x88>
{
/* Call the drivers fstat() function to fill out the "st" structure. */
if (fd->dev->fstat)
800f924: e0bfff17 ldw r2,-4(fp)
800f928: 10800017 ldw r2,0(r2)
800f92c: 10800817 ldw r2,32(r2)
800f930: 10000726 beq r2,zero,800f950 <fstat+0x74>
{
return fd->dev->fstat(fd, st);
800f934: e0bfff17 ldw r2,-4(fp)
800f938: 10800017 ldw r2,0(r2)
800f93c: 10800817 ldw r2,32(r2)
800f940: e17ffd17 ldw r5,-12(fp)
800f944: e13fff17 ldw r4,-4(fp)
800f948: 103ee83a callr r2
800f94c: 00000a06 br 800f978 <fstat+0x9c>
* device.
*/
else
{
st->st_mode = _IFCHR;
800f950: e0bffd17 ldw r2,-12(fp)
800f954: 00c80004 movi r3,8192
800f958: 10c00115 stw r3,4(r2)
return 0;
800f95c: 0005883a mov r2,zero
800f960: 00000506 br 800f978 <fstat+0x9c>
}
}
else
{
ALT_ERRNO = EBADFD;
800f964: 800f8a00 call 800f8a0 <alt_get_errno>
800f968: 1007883a mov r3,r2
800f96c: 00801444 movi r2,81
800f970: 18800015 stw r2,0(r3)
return -1;
800f974: 00bfffc4 movi r2,-1
}
}
800f978: e037883a mov sp,fp
800f97c: dfc00117 ldw ra,4(sp)
800f980: df000017 ldw fp,0(sp)
800f984: dec00204 addi sp,sp,8
800f988: f800283a ret
0800f98c <alt_get_errno>:
{
800f98c: defffe04 addi sp,sp,-8
800f990: dfc00115 stw ra,4(sp)
800f994: df000015 stw fp,0(sp)
800f998: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
800f99c: d0a02717 ldw r2,-32612(gp)
800f9a0: 10000326 beq r2,zero,800f9b0 <alt_get_errno+0x24>
800f9a4: d0a02717 ldw r2,-32612(gp)
800f9a8: 103ee83a callr r2
800f9ac: 00000106 br 800f9b4 <alt_get_errno+0x28>
800f9b0: d0a04204 addi r2,gp,-32504
}
800f9b4: e037883a mov sp,fp
800f9b8: dfc00117 ldw ra,4(sp)
800f9bc: df000017 ldw fp,0(sp)
800f9c0: dec00204 addi sp,sp,8
800f9c4: f800283a ret
0800f9c8 <isatty>:
*
* ALT_ISATTY is mapped onto the isatty() system call in alt_syscall.h
*/
int ALT_ISATTY (int file)
{
800f9c8: deffea04 addi sp,sp,-88
800f9cc: dfc01515 stw ra,84(sp)
800f9d0: df001415 stw fp,80(sp)
800f9d4: df001404 addi fp,sp,80
800f9d8: e13fec15 stw r4,-80(fp)
* A common error case is that when the file descriptor was created, the call
* to open() failed resulting in a negative file descriptor. This is trapped
* below so that we don't try and process an invalid file descriptor.
*/
fd = (file < 0) ? NULL : &alt_fd_list[file];
800f9dc: e0bfec17 ldw r2,-80(fp)
800f9e0: 10000616 blt r2,zero,800f9fc <isatty+0x34>
800f9e4: e0bfec17 ldw r2,-80(fp)
800f9e8: 10c00324 muli r3,r2,12
800f9ec: 00820174 movhi r2,2053
800f9f0: 10b21a04 addi r2,r2,-14232
800f9f4: 1885883a add r2,r3,r2
800f9f8: 00000106 br 800fa00 <isatty+0x38>
800f9fc: 0005883a mov r2,zero
800fa00: e0bfff15 stw r2,-4(fp)
if (fd)
800fa04: e0bfff17 ldw r2,-4(fp)
800fa08: 10000e26 beq r2,zero,800fa44 <isatty+0x7c>
/*
* If a device driver does not provide an fstat() function, then it is
* treated as a terminal device by default.
*/
if (!fd->dev->fstat)
800fa0c: e0bfff17 ldw r2,-4(fp)
800fa10: 10800017 ldw r2,0(r2)
800fa14: 10800817 ldw r2,32(r2)
800fa18: 1000021e bne r2,zero,800fa24 <isatty+0x5c>
{
return 1;
800fa1c: 00800044 movi r2,1
800fa20: 00000d06 br 800fa58 <isatty+0x90>
* this is called so that the device can identify itself.
*/
else
{
fstat (file, &stat);
800fa24: e0bfed04 addi r2,fp,-76
800fa28: 100b883a mov r5,r2
800fa2c: e13fec17 ldw r4,-80(fp)
800fa30: 800f8dc0 call 800f8dc <fstat>
return (stat.st_mode == _IFCHR) ? 1 : 0;
800fa34: e0bfee17 ldw r2,-72(fp)
800fa38: 10880020 cmpeqi r2,r2,8192
800fa3c: 10803fcc andi r2,r2,255
800fa40: 00000506 br 800fa58 <isatty+0x90>
}
}
else
{
ALT_ERRNO = EBADFD;
800fa44: 800f98c0 call 800f98c <alt_get_errno>
800fa48: 1007883a mov r3,r2
800fa4c: 00801444 movi r2,81
800fa50: 18800015 stw r2,0(r3)
return 0;
800fa54: 0005883a mov r2,zero
}
}
800fa58: e037883a mov sp,fp
800fa5c: dfc00117 ldw ra,4(sp)
800fa60: df000017 ldw fp,0(sp)
800fa64: dec00204 addi sp,sp,8
800fa68: f800283a ret
0800fa6c <alt_get_errno>:
{
800fa6c: defffe04 addi sp,sp,-8
800fa70: dfc00115 stw ra,4(sp)
800fa74: df000015 stw fp,0(sp)
800fa78: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
800fa7c: d0a02717 ldw r2,-32612(gp)
800fa80: 10000326 beq r2,zero,800fa90 <alt_get_errno+0x24>
800fa84: d0a02717 ldw r2,-32612(gp)
800fa88: 103ee83a callr r2
800fa8c: 00000106 br 800fa94 <alt_get_errno+0x28>
800fa90: d0a04204 addi r2,gp,-32504
}
800fa94: e037883a mov sp,fp
800fa98: dfc00117 ldw ra,4(sp)
800fa9c: df000017 ldw fp,0(sp)
800faa0: dec00204 addi sp,sp,8
800faa4: f800283a ret
0800faa8 <lseek>:
* ALT_LSEEK is mapped onto the lseek() system call in alt_syscall.h
*
*/
off_t ALT_LSEEK (int file, off_t ptr, int dir)
{
800faa8: defff904 addi sp,sp,-28
800faac: dfc00615 stw ra,24(sp)
800fab0: df000515 stw fp,20(sp)
800fab4: df000504 addi fp,sp,20
800fab8: e13ffd15 stw r4,-12(fp)
800fabc: e17ffc15 stw r5,-16(fp)
800fac0: e1bffb15 stw r6,-20(fp)
alt_fd* fd;
off_t rc = 0;
800fac4: e03fff15 stw zero,-4(fp)
* A common error case is that when the file descriptor was created, the call
* to open() failed resulting in a negative file descriptor. This is trapped
* below so that we don't try and process an invalid file descriptor.
*/
fd = (file < 0) ? NULL : &alt_fd_list[file];
800fac8: e0bffd17 ldw r2,-12(fp)
800facc: 10000616 blt r2,zero,800fae8 <lseek+0x40>
800fad0: e0bffd17 ldw r2,-12(fp)
800fad4: 10c00324 muli r3,r2,12
800fad8: 00820174 movhi r2,2053
800fadc: 10b21a04 addi r2,r2,-14232
800fae0: 1885883a add r2,r3,r2
800fae4: 00000106 br 800faec <lseek+0x44>
800fae8: 0005883a mov r2,zero
800faec: e0bffe15 stw r2,-8(fp)
if (fd)
800faf0: e0bffe17 ldw r2,-8(fp)
800faf4: 10001026 beq r2,zero,800fb38 <lseek+0x90>
/*
* If the device driver provides an implementation of the lseek() function,
* then call that to process the request.
*/
if (fd->dev->lseek)
800faf8: e0bffe17 ldw r2,-8(fp)
800fafc: 10800017 ldw r2,0(r2)
800fb00: 10800717 ldw r2,28(r2)
800fb04: 10000926 beq r2,zero,800fb2c <lseek+0x84>
{
rc = fd->dev->lseek(fd, ptr, dir);
800fb08: e0bffe17 ldw r2,-8(fp)
800fb0c: 10800017 ldw r2,0(r2)
800fb10: 10800717 ldw r2,28(r2)
800fb14: e1bffb17 ldw r6,-20(fp)
800fb18: e17ffc17 ldw r5,-16(fp)
800fb1c: e13ffe17 ldw r4,-8(fp)
800fb20: 103ee83a callr r2
800fb24: e0bfff15 stw r2,-4(fp)
800fb28: 00000506 br 800fb40 <lseek+0x98>
* Otherwise return an error.
*/
else
{
rc = -ENOTSUP;
800fb2c: 00bfde84 movi r2,-134
800fb30: e0bfff15 stw r2,-4(fp)
800fb34: 00000206 br 800fb40 <lseek+0x98>
}
}
else
{
rc = -EBADFD;
800fb38: 00bfebc4 movi r2,-81
800fb3c: e0bfff15 stw r2,-4(fp)
}
if (rc < 0)
800fb40: e0bfff17 ldw r2,-4(fp)
800fb44: 1000070e bge r2,zero,800fb64 <lseek+0xbc>
{
ALT_ERRNO = -rc;
800fb48: 800fa6c0 call 800fa6c <alt_get_errno>
800fb4c: 1007883a mov r3,r2
800fb50: e0bfff17 ldw r2,-4(fp)
800fb54: 0085c83a sub r2,zero,r2
800fb58: 18800015 stw r2,0(r3)
rc = -1;
800fb5c: 00bfffc4 movi r2,-1
800fb60: e0bfff15 stw r2,-4(fp)
}
return rc;
800fb64: e0bfff17 ldw r2,-4(fp)
}
800fb68: e037883a mov sp,fp
800fb6c: dfc00117 ldw ra,4(sp)
800fb70: df000017 ldw fp,0(sp)
800fb74: dec00204 addi sp,sp,8
800fb78: f800283a ret
0800fb7c <alt_main>:
* devices/filesystems/components in the system; and call the entry point for
* the users application, i.e. main().
*/
void alt_main (void)
{
800fb7c: defffb04 addi sp,sp,-20
800fb80: dfc00415 stw ra,16(sp)
800fb84: df000315 stw fp,12(sp)
800fb88: df000304 addi fp,sp,12
#endif
/* ALT LOG - please see HAL/sys/alt_log_printf.h for details */
ALT_LOG_PRINT_BOOT("[alt_main.c] Entering alt_main, calling alt_irq_init.\r\n");
/* Initialize the interrupt controller. */
alt_irq_init (NULL);
800fb8c: 0009883a mov r4,zero
800fb90: 80177c80 call 80177c8 <alt_irq_init>
/* Initialize the operating system */
ALT_LOG_PRINT_BOOT("[alt_main.c] Done alt_irq_init, calling alt_os_init.\r\n");
ALT_OS_INIT();
800fb94: 801077c0 call 801077c <OSInit>
800fb98: 01000044 movi r4,1
800fb9c: 80157740 call 8015774 <OSSemCreate>
800fba0: d0a04815 stw r2,-32480(gp)
800fba4: 01000044 movi r4,1
800fba8: 80157740 call 8015774 <OSSemCreate>
800fbac: d0a04a15 stw r2,-32472(gp)
800fbb0: d0a08b04 addi r2,gp,-32212
800fbb4: e0bffe15 stw r2,-8(fp)
800fbb8: 00800044 movi r2,1
800fbbc: e0bffd8d sth r2,-10(fp)
*/
static ALT_INLINE int ALT_ALWAYS_INLINE alt_sem_create (OS_EVENT** sem,
INT16U value)
{
*sem = OSSemCreate (value);
800fbc0: e0bffd8b ldhu r2,-10(fp)
800fbc4: 1009883a mov r4,r2
800fbc8: 80157740 call 8015774 <OSSemCreate>
800fbcc: 1007883a mov r3,r2
800fbd0: e0bffe17 ldw r2,-8(fp)
800fbd4: 10c00015 stw r3,0(r2)
ALT_LOG_PRINT_BOOT("[alt_main.c] Done OS Init, calling alt_sem_create.\r\n");
ALT_SEM_CREATE (&alt_fd_list_lock, 1);
/* Initialize the device drivers/software components. */
ALT_LOG_PRINT_BOOT("[alt_main.c] Calling alt_sys_init.\r\n");
alt_sys_init();
800fbd8: 80178000 call 8017800 <alt_sys_init>
* devices be present (not equal to /dev/null) and if direct drivers
* aren't being used.
*/
ALT_LOG_PRINT_BOOT("[alt_main.c] Redirecting IO.\r\n");
alt_io_redirect(ALT_STDOUT, ALT_STDIN, ALT_STDERR);
800fbdc: 01820134 movhi r6,2052
800fbe0: 319dc904 addi r6,r6,30500
800fbe4: 01420134 movhi r5,2052
800fbe8: 295dc904 addi r5,r5,30500
800fbec: 01020134 movhi r4,2052
800fbf0: 211dc904 addi r4,r4,30500
800fbf4: 80377d80 call 80377d8 <alt_io_redirect>
/*
* Call the C++ constructors
*/
ALT_LOG_PRINT_BOOT("[alt_main.c] Calling C++ constructors.\r\n");
_do_ctors ();
800fbf8: 80373440 call 8037344 <_do_ctors>
* redefined as _exit()). This is in the interest of reducing code footprint,
* in that the atexit() overhead is removed when it's not needed.
*/
ALT_LOG_PRINT_BOOT("[alt_main.c] Calling atexit.\r\n");
atexit (_do_dtors);
800fbfc: 010200f4 movhi r4,2051
800fc00: 211ce904 addi r4,r4,29604
800fc04: 8042a900 call 8042a90 <atexit>
ALT_LOG_PRINT_BOOT("[alt_main.c] Calling main.\r\n");
#ifdef ALT_NO_EXIT
main (alt_argc, alt_argv, alt_envp);
#else
result = main (alt_argc, alt_argv, alt_envp);
800fc08: d0a04417 ldw r2,-32496(gp)
800fc0c: d0e04517 ldw r3,-32492(gp)
800fc10: d1204617 ldw r4,-32488(gp)
800fc14: 200d883a mov r6,r4
800fc18: 180b883a mov r5,r3
800fc1c: 1009883a mov r4,r2
800fc20: 80011780 call 8001178 <main>
800fc24: e0bfff15 stw r2,-4(fp)
close(STDOUT_FILENO);
800fc28: 01000044 movi r4,1
800fc2c: 8022a600 call 8022a60 <close>
exit (result);
800fc30: e13fff17 ldw r4,-4(fp)
800fc34: 8042abc0 call 8042abc <exit>
0800fc38 <sbrk>:
#endif
caddr_t ALT_SBRK (int incr) __attribute__ ((no_instrument_function ));
caddr_t ALT_SBRK (int incr)
{
800fc38: defff904 addi sp,sp,-28
800fc3c: df000615 stw fp,24(sp)
800fc40: df000604 addi fp,sp,24
800fc44: e13ffa15 stw r4,-24(fp)
NIOS2_READ_STATUS (context);
800fc48: 0005303a rdctl r2,status
800fc4c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
800fc50: e0fffd17 ldw r3,-12(fp)
800fc54: 00bfff84 movi r2,-2
800fc58: 1884703a and r2,r3,r2
800fc5c: 1001703a wrctl status,r2
return context;
800fc60: e0bffd17 ldw r2,-12(fp)
alt_irq_context context;
char *prev_heap_end;
context = alt_irq_disable_all();
800fc64: e0bfff15 stw r2,-4(fp)
/* Always return data aligned on a word boundary */
heap_end = (char *)(((unsigned int)heap_end + 3) & ~3);
800fc68: d0a00617 ldw r2,-32744(gp)
800fc6c: 10c000c4 addi r3,r2,3
800fc70: 00bfff04 movi r2,-4
800fc74: 1884703a and r2,r3,r2
800fc78: d0a00615 stw r2,-32744(gp)
if (((heap_end + incr) - __alt_heap_start) > ALT_MAX_HEAP_BYTES) {
alt_irq_enable_all(context);
return (caddr_t)-1;
}
#else
if ((heap_end + incr) > __alt_heap_limit) {
800fc7c: d0e00617 ldw r3,-32744(gp)
800fc80: e0bffa17 ldw r2,-24(fp)
800fc84: 1887883a add r3,r3,r2
800fc88: 00840034 movhi r2,4096
800fc8c: 10800004 addi r2,r2,0
800fc90: 10c0062e bgeu r2,r3,800fcac <sbrk+0x74>
800fc94: e0bfff17 ldw r2,-4(fp)
800fc98: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
800fc9c: e0bffc17 ldw r2,-16(fp)
800fca0: 1001703a wrctl status,r2
alt_irq_enable_all(context);
return (caddr_t)-1;
800fca4: 00bfffc4 movi r2,-1
800fca8: 00000b06 br 800fcd8 <sbrk+0xa0>
}
#endif
prev_heap_end = heap_end;
800fcac: d0a00617 ldw r2,-32744(gp)
800fcb0: e0bffe15 stw r2,-8(fp)
heap_end += incr;
800fcb4: d0e00617 ldw r3,-32744(gp)
800fcb8: e0bffa17 ldw r2,-24(fp)
800fcbc: 1885883a add r2,r3,r2
800fcc0: d0a00615 stw r2,-32744(gp)
800fcc4: e0bfff17 ldw r2,-4(fp)
800fcc8: e0bffb15 stw r2,-20(fp)
800fccc: e0bffb17 ldw r2,-20(fp)
800fcd0: 1001703a wrctl status,r2
#endif
alt_irq_enable_all(context);
return (caddr_t) prev_heap_end;
800fcd4: e0bffe17 ldw r2,-8(fp)
}
800fcd8: e037883a mov sp,fp
800fcdc: df000017 ldw fp,0(sp)
800fce0: dec00104 addi sp,sp,4
800fce4: f800283a ret
0800fce8 <__env_lock>:
/*
*
*/
void __env_lock ( struct _reent *_r )
{
800fce8: deffdf04 addi sp,sp,-132
800fcec: dfc02015 stw ra,128(sp)
800fcf0: df001f15 stw fp,124(sp)
800fcf4: df001f04 addi fp,sp,124
800fcf8: e13fe115 stw r4,-124(fp)
INT8U err;
int id;
/* use our priority as a task id */
err = OSTaskQuery( OS_PRIO_SELF, &tcb );
800fcfc: e0bfe404 addi r2,fp,-112
800fd00: 100b883a mov r5,r2
800fd04: 01003fc4 movi r4,255
800fd08: 80172200 call 8017220 <OSTaskQuery>
800fd0c: e0bfe245 stb r2,-119(fp)
if (err != OS_NO_ERR)
800fd10: e0bfe243 ldbu r2,-119(fp)
800fd14: 10803fcc andi r2,r2,255
800fd18: 10001e1e bne r2,zero,800fd94 <__env_lock+0xac>
return;
id = tcb.OSTCBPrio;
800fd1c: e0bff083 ldbu r2,-62(fp)
800fd20: 10803fcc andi r2,r2,255
800fd24: e0bfff15 stw r2,-4(fp)
/* see if we own the environment already */
OSSemQuery( alt_envsem, &semdata );
800fd28: d0a04817 ldw r2,-32480(gp)
800fd2c: e0ffe284 addi r3,fp,-118
800fd30: 180b883a mov r5,r3
800fd34: 1009883a mov r4,r2
800fd38: 8015e840 call 8015e84 <OSSemQuery>
if( semdata.OSEventGrp && id == lockid )
800fd3c: e0bfe3c3 ldbu r2,-113(fp)
800fd40: 10803fcc andi r2,r2,255
800fd44: 10000726 beq r2,zero,800fd64 <__env_lock+0x7c>
800fd48: d0a00717 ldw r2,-32740(gp)
800fd4c: e0ffff17 ldw r3,-4(fp)
800fd50: 1880041e bne r3,r2,800fd64 <__env_lock+0x7c>
{
/* we do; just count the recursion */
locks++;
800fd54: d0a04717 ldw r2,-32484(gp)
800fd58: 10800044 addi r2,r2,1
800fd5c: d0a04715 stw r2,-32484(gp)
800fd60: 00000a06 br 800fd8c <__env_lock+0xa4>
}
else
{
/* wait on the other task to yield, then claim ownership */
OSSemPend( alt_envsem, 0, &err );
800fd64: d0a04817 ldw r2,-32480(gp)
800fd68: e0ffe244 addi r3,fp,-119
800fd6c: 180d883a mov r6,r3
800fd70: 000b883a mov r5,zero
800fd74: 1009883a mov r4,r2
800fd78: 8015a600 call 8015a60 <OSSemPend>
locks = 1;
800fd7c: 00800044 movi r2,1
800fd80: d0a04715 stw r2,-32484(gp)
lockid = id;
800fd84: e0bfff17 ldw r2,-4(fp)
800fd88: d0a00715 stw r2,-32740(gp)
}
#endif /* OS_THREAD_SAFE_NEWLIB */
return;
800fd8c: 0001883a nop
800fd90: 00000106 br 800fd98 <__env_lock+0xb0>
return;
800fd94: 0001883a nop
}
800fd98: e037883a mov sp,fp
800fd9c: dfc00117 ldw ra,4(sp)
800fda0: df000017 ldw fp,0(sp)
800fda4: dec00204 addi sp,sp,8
800fda8: f800283a ret
0800fdac <__env_unlock>:
/*
*
*/
void __env_unlock ( struct _reent *_r )
{
800fdac: defffd04 addi sp,sp,-12
800fdb0: dfc00215 stw ra,8(sp)
800fdb4: df000115 stw fp,4(sp)
800fdb8: df000104 addi fp,sp,4
800fdbc: e13fff15 stw r4,-4(fp)
#if OS_THREAD_SAFE_NEWLIB
if (locks == 0)
800fdc0: d0a04717 ldw r2,-32484(gp)
800fdc4: 10000b26 beq r2,zero,800fdf4 <__env_unlock+0x48>
/*
* release the environment once the number of locks == the number
* of unlocks
*/
if( (--locks) == 0 )
800fdc8: d0a04717 ldw r2,-32484(gp)
800fdcc: 10bfffc4 addi r2,r2,-1
800fdd0: d0a04715 stw r2,-32484(gp)
800fdd4: d0a04717 ldw r2,-32484(gp)
800fdd8: 1000071e bne r2,zero,800fdf8 <__env_unlock+0x4c>
{
lockid = -1;
800fddc: 00bfffc4 movi r2,-1
800fde0: d0a00715 stw r2,-32740(gp)
OSSemPost( alt_envsem );
800fde4: d0a04817 ldw r2,-32480(gp)
800fde8: 1009883a mov r4,r2
800fdec: 8015d840 call 8015d84 <OSSemPost>
800fdf0: 00000106 br 800fdf8 <__env_unlock+0x4c>
return;
800fdf4: 0001883a nop
}
#endif /* OS_THREAD_SAFE_NEWLIB */
}
800fdf8: e037883a mov sp,fp
800fdfc: dfc00117 ldw ra,4(sp)
800fe00: df000017 ldw fp,0(sp)
800fe04: dec00204 addi sp,sp,8
800fe08: f800283a ret
0800fe0c <__malloc_lock>:
/*
*
*/
void __malloc_lock ( struct _reent *_r )
{
800fe0c: deffdb04 addi sp,sp,-148
800fe10: dfc02415 stw ra,144(sp)
800fe14: df002315 stw fp,140(sp)
800fe18: df002304 addi fp,sp,140
800fe1c: e13fdd15 stw r4,-140(fp)
OS_TCB tcb;
OS_SEM_DATA semdata;
INT8U err;
int id;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
800fe20: e03fff15 stw zero,-4(fp)
#endif
if (OSRunning != OS_TRUE)
800fe24: d0a04b43 ldbu r2,-32467(gp)
800fe28: 10803fcc andi r2,r2,255
800fe2c: 10800060 cmpeqi r2,r2,1
800fe30: 10003626 beq r2,zero,800ff0c <__malloc_lock+0x100>
return;
/* use our priority as a task id */
err = OSTaskQuery( OS_PRIO_SELF, &tcb );
800fe34: e0bfe004 addi r2,fp,-128
800fe38: 100b883a mov r5,r2
800fe3c: 01003fc4 movi r4,255
800fe40: 80172200 call 8017220 <OSTaskQuery>
800fe44: e0bfde45 stb r2,-135(fp)
if (err != OS_NO_ERR)
800fe48: e0bfde43 ldbu r2,-135(fp)
800fe4c: 10803fcc andi r2,r2,255
800fe50: 1000301e bne r2,zero,800ff14 <__malloc_lock+0x108>
return;
id = tcb.OSTCBPrio;
800fe54: e0bfec83 ldbu r2,-78(fp)
800fe58: 10803fcc andi r2,r2,255
800fe5c: e0bffe15 stw r2,-8(fp)
/* see if we own the heap already */
OSSemQuery( alt_heapsem, &semdata );
800fe60: d0a04a17 ldw r2,-32472(gp)
800fe64: e0ffde84 addi r3,fp,-134
800fe68: 180b883a mov r5,r3
800fe6c: 1009883a mov r4,r2
800fe70: 8015e840 call 8015e84 <OSSemQuery>
NIOS2_READ_STATUS (context);
800fe74: 0005303a rdctl r2,status
800fe78: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
800fe7c: e0fffd17 ldw r3,-12(fp)
800fe80: 00bfff84 movi r2,-2
800fe84: 1884703a and r2,r3,r2
800fe88: 1001703a wrctl status,r2
return context;
800fe8c: e0bffd17 ldw r2,-12(fp)
OS_ENTER_CRITICAL();
800fe90: e0bfff15 stw r2,-4(fp)
if( !semdata.OSCnt && id == lockid )
800fe94: e0bfde8b ldhu r2,-134(fp)
800fe98: 10bfffcc andi r2,r2,65535
800fe9c: 10000b1e bne r2,zero,800fecc <__malloc_lock+0xc0>
800fea0: d0a00817 ldw r2,-32736(gp)
800fea4: e0fffe17 ldw r3,-8(fp)
800fea8: 1880081e bne r3,r2,800fecc <__malloc_lock+0xc0>
{
/* we do; just count the recursion */
locks++;
800feac: d0a04917 ldw r2,-32476(gp)
800feb0: 10800044 addi r2,r2,1
800feb4: d0a04915 stw r2,-32476(gp)
800feb8: e0bfff17 ldw r2,-4(fp)
800febc: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
800fec0: e0bffc17 ldw r2,-16(fp)
800fec4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
800fec8: 00000e06 br 800ff04 <__malloc_lock+0xf8>
800fecc: e0bfff17 ldw r2,-4(fp)
800fed0: e0bffb15 stw r2,-20(fp)
800fed4: e0bffb17 ldw r2,-20(fp)
800fed8: 1001703a wrctl status,r2
else
{
/* wait on the other task to yield the heap, then claim ownership of it */
OS_EXIT_CRITICAL();
OSSemPend( alt_heapsem, 0, &err );
800fedc: d0a04a17 ldw r2,-32472(gp)
800fee0: e0ffde44 addi r3,fp,-135
800fee4: 180d883a mov r6,r3
800fee8: 000b883a mov r5,zero
800feec: 1009883a mov r4,r2
800fef0: 8015a600 call 8015a60 <OSSemPend>
locks = 1;
800fef4: 00800044 movi r2,1
800fef8: d0a04915 stw r2,-32476(gp)
lockid = id;
800fefc: e0bffe17 ldw r2,-8(fp)
800ff00: d0a00815 stw r2,-32736(gp)
}
#endif /* OS_THREAD_SAFE_NEWLIB */
return;
800ff04: 0001883a nop
800ff08: 00000306 br 800ff18 <__malloc_lock+0x10c>
return;
800ff0c: 0001883a nop
800ff10: 00000106 br 800ff18 <__malloc_lock+0x10c>
return;
800ff14: 0001883a nop
}
800ff18: e037883a mov sp,fp
800ff1c: dfc00117 ldw ra,4(sp)
800ff20: df000017 ldw fp,0(sp)
800ff24: dec00204 addi sp,sp,8
800ff28: f800283a ret
0800ff2c <__malloc_unlock>:
/*
*
*/
void __malloc_unlock ( struct _reent *_r )
{
800ff2c: defff804 addi sp,sp,-32
800ff30: dfc00715 stw ra,28(sp)
800ff34: df000615 stw fp,24(sp)
800ff38: df000604 addi fp,sp,24
800ff3c: e13ffa15 stw r4,-24(fp)
#if OS_THREAD_SAFE_NEWLIB
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
800ff40: e03fff15 stw zero,-4(fp)
#endif
if (OSRunning != OS_TRUE)
800ff44: d0a04b43 ldbu r2,-32467(gp)
800ff48: 10803fcc andi r2,r2,255
800ff4c: 10800060 cmpeqi r2,r2,1
800ff50: 10002326 beq r2,zero,800ffe0 <__malloc_unlock+0xb4>
NIOS2_READ_STATUS (context);
800ff54: 0005303a rdctl r2,status
800ff58: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
800ff5c: e0fffe17 ldw r3,-8(fp)
800ff60: 00bfff84 movi r2,-2
800ff64: 1884703a and r2,r3,r2
800ff68: 1001703a wrctl status,r2
return context;
800ff6c: e0bffe17 ldw r2,-8(fp)
return;
OS_ENTER_CRITICAL();
800ff70: e0bfff15 stw r2,-4(fp)
if (locks == 0)
800ff74: d0a04917 ldw r2,-32476(gp)
800ff78: 1000051e bne r2,zero,800ff90 <__malloc_unlock+0x64>
800ff7c: e0bfff17 ldw r2,-4(fp)
800ff80: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
800ff84: e0bffd17 ldw r2,-12(fp)
800ff88: 1001703a wrctl status,r2
{
OS_EXIT_CRITICAL();
return;
800ff8c: 00001506 br 800ffe4 <__malloc_unlock+0xb8>
}
/* release the heap once the number of locks == the number of unlocks */
if( (--locks) == 0 )
800ff90: d0a04917 ldw r2,-32476(gp)
800ff94: 10bfffc4 addi r2,r2,-1
800ff98: d0a04915 stw r2,-32476(gp)
800ff9c: d0a04917 ldw r2,-32476(gp)
800ffa0: 10000a1e bne r2,zero,800ffcc <__malloc_unlock+0xa0>
{
lockid = -1;
800ffa4: 00bfffc4 movi r2,-1
800ffa8: d0a00815 stw r2,-32736(gp)
800ffac: e0bfff17 ldw r2,-4(fp)
800ffb0: e0bffc15 stw r2,-16(fp)
800ffb4: e0bffc17 ldw r2,-16(fp)
800ffb8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OSSemPost( alt_heapsem );
800ffbc: d0a04a17 ldw r2,-32472(gp)
800ffc0: 1009883a mov r4,r2
800ffc4: 8015d840 call 8015d84 <OSSemPost>
800ffc8: 00000606 br 800ffe4 <__malloc_unlock+0xb8>
800ffcc: e0bfff17 ldw r2,-4(fp)
800ffd0: e0bffb15 stw r2,-20(fp)
800ffd4: e0bffb17 ldw r2,-20(fp)
800ffd8: 1001703a wrctl status,r2
800ffdc: 00000106 br 800ffe4 <__malloc_unlock+0xb8>
return;
800ffe0: 0001883a nop
{
OS_EXIT_CRITICAL();
}
#endif /* OS_THREAD_SAFE_NEWLIB */
}
800ffe4: e037883a mov sp,fp
800ffe8: dfc00117 ldw ra,4(sp)
800ffec: df000017 ldw fp,0(sp)
800fff0: dec00204 addi sp,sp,8
800fff4: f800283a ret
0800fff8 <OSEventNameGet>:
*********************************************************************************************************
*/
#if (OS_EVENT_EN) && (OS_EVENT_NAME_SIZE > 1)
INT8U OSEventNameGet (OS_EVENT *pevent, INT8U *pname, INT8U *perr)
{
800fff8: defff704 addi sp,sp,-36
800fffc: dfc00815 stw ra,32(sp)
8010000: df000715 stw fp,28(sp)
8010004: df000704 addi fp,sp,28
8010008: e13ffb15 stw r4,-20(fp)
801000c: e17ffa15 stw r5,-24(fp)
8010010: e1bff915 stw r6,-28(fp)
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8010014: e03fff15 stw zero,-4(fp)
if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
*perr = OS_ERR_PNAME_NULL;
return (0);
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
8010018: d0a05703 ldbu r2,-32420(gp)
801001c: 10803fcc andi r2,r2,255
8010020: 10000526 beq r2,zero,8010038 <OSEventNameGet+0x40>
*perr = OS_ERR_NAME_GET_ISR;
8010024: e0bff917 ldw r2,-28(fp)
8010028: 00c00444 movi r3,17
801002c: 10c00005 stb r3,0(r2)
return (0);
8010030: 0005883a mov r2,zero
8010034: 00002106 br 80100bc <OSEventNameGet+0xc4>
}
switch (pevent->OSEventType) {
8010038: e0bffb17 ldw r2,-20(fp)
801003c: 10800003 ldbu r2,0(r2)
8010040: 10803fcc andi r2,r2,255
8010044: 10bfffc4 addi r2,r2,-1
8010048: 10800128 cmpgeui r2,r2,4
801004c: 10000526 beq r2,zero,8010064 <OSEventNameGet+0x6c>
case OS_EVENT_TYPE_MBOX:
case OS_EVENT_TYPE_Q:
break;
default:
*perr = OS_ERR_EVENT_TYPE;
8010050: e0bff917 ldw r2,-28(fp)
8010054: 00c00044 movi r3,1
8010058: 10c00005 stb r3,0(r2)
return (0);
801005c: 0005883a mov r2,zero
8010060: 00001606 br 80100bc <OSEventNameGet+0xc4>
break;
8010064: 0001883a nop
NIOS2_READ_STATUS (context);
8010068: 0005303a rdctl r2,status
801006c: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8010070: e0fffc17 ldw r3,-16(fp)
8010074: 00bfff84 movi r2,-2
8010078: 1884703a and r2,r3,r2
801007c: 1001703a wrctl status,r2
return context;
8010080: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
8010084: e0bfff15 stw r2,-4(fp)
len = OS_StrCopy(pname, pevent->OSEventName); /* Copy name from OS_EVENT */
8010088: e0bffb17 ldw r2,-20(fp)
801008c: 10800384 addi r2,r2,14
8010090: 100b883a mov r5,r2
8010094: e13ffa17 ldw r4,-24(fp)
8010098: 80117a00 call 80117a0 <OS_StrCopy>
801009c: e0bffec5 stb r2,-5(fp)
80100a0: e0bfff17 ldw r2,-4(fp)
80100a4: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
80100a8: e0bffd17 ldw r2,-12(fp)
80100ac: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
80100b0: e0bff917 ldw r2,-28(fp)
80100b4: 10000005 stb zero,0(r2)
return (len);
80100b8: e0bffec3 ldbu r2,-5(fp)
}
80100bc: e037883a mov sp,fp
80100c0: dfc00117 ldw ra,4(sp)
80100c4: df000017 ldw fp,0(sp)
80100c8: dec00204 addi sp,sp,8
80100cc: f800283a ret
080100d0 <OSEventNameSet>:
*********************************************************************************************************
*/
#if (OS_EVENT_EN) && (OS_EVENT_NAME_SIZE > 1)
void OSEventNameSet (OS_EVENT *pevent, INT8U *pname, INT8U *perr)
{
80100d0: defff604 addi sp,sp,-40
80100d4: dfc00915 stw ra,36(sp)
80100d8: df000815 stw fp,32(sp)
80100dc: df000804 addi fp,sp,32
80100e0: e13ffa15 stw r4,-24(fp)
80100e4: e17ff915 stw r5,-28(fp)
80100e8: e1bff815 stw r6,-32(fp)
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80100ec: e03fff15 stw zero,-4(fp)
if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
*perr = OS_ERR_PNAME_NULL;
return;
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
80100f0: d0a05703 ldbu r2,-32420(gp)
80100f4: 10803fcc andi r2,r2,255
80100f8: 10000426 beq r2,zero,801010c <OSEventNameSet+0x3c>
*perr = OS_ERR_NAME_SET_ISR;
80100fc: e0bff817 ldw r2,-32(fp)
8010100: 00c00484 movi r3,18
8010104: 10c00005 stb r3,0(r2)
return;
8010108: 00002c06 br 80101bc <OSEventNameSet+0xec>
}
switch (pevent->OSEventType) {
801010c: e0bffa17 ldw r2,-24(fp)
8010110: 10800003 ldbu r2,0(r2)
8010114: 10803fcc andi r2,r2,255
8010118: 10bfffc4 addi r2,r2,-1
801011c: 10800128 cmpgeui r2,r2,4
8010120: 10000426 beq r2,zero,8010134 <OSEventNameSet+0x64>
case OS_EVENT_TYPE_MBOX:
case OS_EVENT_TYPE_Q:
break;
default:
*perr = OS_ERR_EVENT_TYPE;
8010124: e0bff817 ldw r2,-32(fp)
8010128: 00c00044 movi r3,1
801012c: 10c00005 stb r3,0(r2)
return;
8010130: 00002206 br 80101bc <OSEventNameSet+0xec>
break;
8010134: 0001883a nop
NIOS2_READ_STATUS (context);
8010138: 0005303a rdctl r2,status
801013c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8010140: e0fffd17 ldw r3,-12(fp)
8010144: 00bfff84 movi r2,-2
8010148: 1884703a and r2,r3,r2
801014c: 1001703a wrctl status,r2
return context;
8010150: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
8010154: e0bfff15 stw r2,-4(fp)
len = OS_StrLen(pname); /* Can we fit the string in the storage area? */
8010158: e13ff917 ldw r4,-28(fp)
801015c: 80118140 call 8011814 <OS_StrLen>
8010160: e0bffec5 stb r2,-5(fp)
if (len > (OS_EVENT_NAME_SIZE - 1)) { /* No */
8010164: e0bffec3 ldbu r2,-5(fp)
8010168: 10800830 cmpltui r2,r2,32
801016c: 1000081e bne r2,zero,8010190 <OSEventNameSet+0xc0>
8010170: e0bfff17 ldw r2,-4(fp)
8010174: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8010178: e0bffc17 ldw r2,-16(fp)
801017c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_EVENT_NAME_TOO_LONG;
8010180: e0bff817 ldw r2,-32(fp)
8010184: 00c002c4 movi r3,11
8010188: 10c00005 stb r3,0(r2)
return;
801018c: 00000b06 br 80101bc <OSEventNameSet+0xec>
}
(void)OS_StrCopy(pevent->OSEventName, pname); /* Yes, copy name to the event control block */
8010190: e0bffa17 ldw r2,-24(fp)
8010194: 10800384 addi r2,r2,14
8010198: e17ff917 ldw r5,-28(fp)
801019c: 1009883a mov r4,r2
80101a0: 80117a00 call 80117a0 <OS_StrCopy>
80101a4: e0bfff17 ldw r2,-4(fp)
80101a8: e0bffb15 stw r2,-20(fp)
80101ac: e0bffb17 ldw r2,-20(fp)
80101b0: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
80101b4: e0bff817 ldw r2,-32(fp)
80101b8: 10000005 stb zero,0(r2)
}
80101bc: e037883a mov sp,fp
80101c0: dfc00117 ldw ra,4(sp)
80101c4: df000017 ldw fp,0(sp)
80101c8: dec00204 addi sp,sp,8
80101cc: f800283a ret
080101d0 <OSEventPendMulti>:
*********************************************************************************************************
*/
/*$PAGE*/
#if ((OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0))
INT16U OSEventPendMulti (OS_EVENT **pevents_pend, OS_EVENT **pevents_rdy, void **pmsgs_rdy, INT16U timeout, INT8U *perr)
{
80101d0: deffed04 addi sp,sp,-76
80101d4: dfc01215 stw ra,72(sp)
80101d8: df001115 stw fp,68(sp)
80101dc: df001104 addi fp,sp,68
80101e0: e13ff215 stw r4,-56(fp)
80101e4: e17ff115 stw r5,-60(fp)
80101e8: e1bff015 stw r6,-64(fp)
80101ec: 3805883a mov r2,r7
80101f0: e0bfef0d sth r2,-68(fp)
#endif
BOOLEAN events_rdy;
INT16U events_rdy_nbr;
INT8U events_stat;
#if (OS_CRITICAL_METHOD == 3) /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80101f4: e03ffb15 stw zero,-20(fp)
*perr = OS_ERR_PEVENT_NULL;
return (0);
}
#endif
*pevents_rdy = (OS_EVENT *)0; /* Init array to NULL in case of errors */
80101f8: e0bff117 ldw r2,-60(fp)
80101fc: 10000015 stw zero,0(r2)
pevents = pevents_pend;
8010200: e0bff217 ldw r2,-56(fp)
8010204: e0bfff15 stw r2,-4(fp)
pevent = *pevents;
8010208: e0bfff17 ldw r2,-4(fp)
801020c: 10800017 ldw r2,0(r2)
8010210: e0bffe15 stw r2,-8(fp)
while (pevent != (OS_EVENT *)0) {
8010214: 00001906 br 801027c <OSEventPendMulti+0xac>
switch (pevent->OSEventType) { /* Validate event block types */
8010218: e0bffe17 ldw r2,-8(fp)
801021c: 10800003 ldbu r2,0(r2)
8010220: 10803fcc andi r2,r2,255
8010224: 10c000a0 cmpeqi r3,r2,2
8010228: 1800091e bne r3,zero,8010250 <OSEventPendMulti+0x80>
801022c: 10c000e0 cmpeqi r3,r2,3
8010230: 1800091e bne r3,zero,8010258 <OSEventPendMulti+0x88>
8010234: 10800060 cmpeqi r2,r2,1
8010238: 1000091e bne r2,zero,8010260 <OSEventPendMulti+0x90>
#endif
case OS_EVENT_TYPE_MUTEX:
case OS_EVENT_TYPE_FLAG:
default:
*perr = OS_ERR_EVENT_TYPE;
801023c: e0800217 ldw r2,8(fp)
8010240: 00c00044 movi r3,1
8010244: 10c00005 stb r3,0(r2)
return (0);
8010248: 0005883a mov r2,zero
801024c: 00014606 br 8010768 <OSEventPendMulti+0x598>
break;
8010250: 0001883a nop
8010254: 00000306 br 8010264 <OSEventPendMulti+0x94>
break;
8010258: 0001883a nop
801025c: 00000106 br 8010264 <OSEventPendMulti+0x94>
break;
8010260: 0001883a nop
}
pevents++;
8010264: e0bfff17 ldw r2,-4(fp)
8010268: 10800104 addi r2,r2,4
801026c: e0bfff15 stw r2,-4(fp)
pevent = *pevents;
8010270: e0bfff17 ldw r2,-4(fp)
8010274: 10800017 ldw r2,0(r2)
8010278: e0bffe15 stw r2,-8(fp)
while (pevent != (OS_EVENT *)0) {
801027c: e0bffe17 ldw r2,-8(fp)
8010280: 103fe51e bne r2,zero,8010218 <OSEventPendMulti+0x48>
}
if (OSIntNesting > 0) { /* See if called from ISR ... */
8010284: d0a05703 ldbu r2,-32420(gp)
8010288: 10803fcc andi r2,r2,255
801028c: 10000526 beq r2,zero,80102a4 <OSEventPendMulti+0xd4>
*perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
8010290: e0800217 ldw r2,8(fp)
8010294: 00c00084 movi r3,2
8010298: 10c00005 stb r3,0(r2)
return (0);
801029c: 0005883a mov r2,zero
80102a0: 00013106 br 8010768 <OSEventPendMulti+0x598>
}
if (OSLockNesting > 0) { /* See if called with scheduler locked ... */
80102a4: d0a04b03 ldbu r2,-32468(gp)
80102a8: 10803fcc andi r2,r2,255
80102ac: 10000526 beq r2,zero,80102c4 <OSEventPendMulti+0xf4>
*perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
80102b0: e0800217 ldw r2,8(fp)
80102b4: 00c00344 movi r3,13
80102b8: 10c00005 stb r3,0(r2)
return (0);
80102bc: 0005883a mov r2,zero
80102c0: 00012906 br 8010768 <OSEventPendMulti+0x598>
NIOS2_READ_STATUS (context);
80102c4: 0005303a rdctl r2,status
80102c8: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80102cc: e0fff917 ldw r3,-28(fp)
80102d0: 00bfff84 movi r2,-2
80102d4: 1884703a and r2,r3,r2
80102d8: 1001703a wrctl status,r2
return context;
80102dc: e0bff917 ldw r2,-28(fp)
}
/*$PAGE*/
OS_ENTER_CRITICAL();
80102e0: e0bffb15 stw r2,-20(fp)
events_rdy = OS_FALSE;
80102e4: e03ffdc5 stb zero,-9(fp)
events_rdy_nbr = 0;
80102e8: e03ffd0d sth zero,-12(fp)
events_stat = OS_STAT_RDY;
80102ec: e03ffcc5 stb zero,-13(fp)
pevents = pevents_pend;
80102f0: e0bff217 ldw r2,-56(fp)
80102f4: e0bfff15 stw r2,-4(fp)
pevent = *pevents;
80102f8: e0bfff17 ldw r2,-4(fp)
80102fc: 10800017 ldw r2,0(r2)
8010300: e0bffe15 stw r2,-8(fp)
while (pevent != (OS_EVENT *)0) { /* See if any events already available */
8010304: 00008106 br 801050c <OSEventPendMulti+0x33c>
switch (pevent->OSEventType) {
8010308: e0bffe17 ldw r2,-8(fp)
801030c: 10800003 ldbu r2,0(r2)
8010310: 10803fcc andi r2,r2,255
8010314: 10c000a0 cmpeqi r3,r2,2
8010318: 18003c1e bne r3,zero,801040c <OSEventPendMulti+0x23c>
801031c: 10c000e0 cmpeqi r3,r2,3
8010320: 1800031e bne r3,zero,8010330 <OSEventPendMulti+0x160>
8010324: 10800060 cmpeqi r2,r2,1
8010328: 10001e1e bne r2,zero,80103a4 <OSEventPendMulti+0x1d4>
801032c: 00006606 br 80104c8 <OSEventPendMulti+0x2f8>
#if (OS_SEM_EN > 0)
case OS_EVENT_TYPE_SEM:
if (pevent->OSEventCnt > 0) { /* If semaphore count > 0, resource available; */
8010330: e0bffe17 ldw r2,-8(fp)
8010334: 1080020b ldhu r2,8(r2)
8010338: 10bfffcc andi r2,r2,65535
801033c: 10001526 beq r2,zero,8010394 <OSEventPendMulti+0x1c4>
pevent->OSEventCnt--; /* ... decrement semaphore, ... */
8010340: e0bffe17 ldw r2,-8(fp)
8010344: 1080020b ldhu r2,8(r2)
8010348: 10bfffc4 addi r2,r2,-1
801034c: 1007883a mov r3,r2
8010350: e0bffe17 ldw r2,-8(fp)
8010354: 10c0020d sth r3,8(r2)
*pevents_rdy++ = pevent; /* ... and return available semaphore event */
8010358: e0bff117 ldw r2,-60(fp)
801035c: 10c00104 addi r3,r2,4
8010360: e0fff115 stw r3,-60(fp)
8010364: e0fffe17 ldw r3,-8(fp)
8010368: 10c00015 stw r3,0(r2)
events_rdy = OS_TRUE;
801036c: 00800044 movi r2,1
8010370: e0bffdc5 stb r2,-9(fp)
*pmsgs_rdy++ = (void *)0; /* NO message returned for semaphores */
8010374: e0bff017 ldw r2,-64(fp)
8010378: 10c00104 addi r3,r2,4
801037c: e0fff015 stw r3,-64(fp)
8010380: 10000015 stw zero,0(r2)
events_rdy_nbr++;
8010384: e0bffd0b ldhu r2,-12(fp)
8010388: 10800044 addi r2,r2,1
801038c: e0bffd0d sth r2,-12(fp)
} else {
events_stat |= OS_STAT_SEM; /* Configure multi-pend for semaphore events */
}
break;
8010390: 00005806 br 80104f4 <OSEventPendMulti+0x324>
events_stat |= OS_STAT_SEM; /* Configure multi-pend for semaphore events */
8010394: e0bffcc3 ldbu r2,-13(fp)
8010398: 10800054 ori r2,r2,1
801039c: e0bffcc5 stb r2,-13(fp)
break;
80103a0: 00005406 br 80104f4 <OSEventPendMulti+0x324>
#endif
#if (OS_MBOX_EN > 0)
case OS_EVENT_TYPE_MBOX:
if (pevent->OSEventPtr != (void *)0) { /* If mailbox NOT empty; ... */
80103a4: e0bffe17 ldw r2,-8(fp)
80103a8: 10800117 ldw r2,4(r2)
80103ac: 10001326 beq r2,zero,80103fc <OSEventPendMulti+0x22c>
/* ... return available message, ... */
*pmsgs_rdy++ = (void *)pevent->OSEventPtr;
80103b0: e0bff017 ldw r2,-64(fp)
80103b4: 10c00104 addi r3,r2,4
80103b8: e0fff015 stw r3,-64(fp)
80103bc: e0fffe17 ldw r3,-8(fp)
80103c0: 18c00117 ldw r3,4(r3)
80103c4: 10c00015 stw r3,0(r2)
pevent->OSEventPtr = (void *)0;
80103c8: e0bffe17 ldw r2,-8(fp)
80103cc: 10000115 stw zero,4(r2)
*pevents_rdy++ = pevent; /* ... and return available mailbox event */
80103d0: e0bff117 ldw r2,-60(fp)
80103d4: 10c00104 addi r3,r2,4
80103d8: e0fff115 stw r3,-60(fp)
80103dc: e0fffe17 ldw r3,-8(fp)
80103e0: 10c00015 stw r3,0(r2)
events_rdy = OS_TRUE;
80103e4: 00800044 movi r2,1
80103e8: e0bffdc5 stb r2,-9(fp)
events_rdy_nbr++;
80103ec: e0bffd0b ldhu r2,-12(fp)
80103f0: 10800044 addi r2,r2,1
80103f4: e0bffd0d sth r2,-12(fp)
} else {
events_stat |= OS_STAT_MBOX; /* Configure multi-pend for mailbox events */
}
break;
80103f8: 00003e06 br 80104f4 <OSEventPendMulti+0x324>
events_stat |= OS_STAT_MBOX; /* Configure multi-pend for mailbox events */
80103fc: e0bffcc3 ldbu r2,-13(fp)
8010400: 10800094 ori r2,r2,2
8010404: e0bffcc5 stb r2,-13(fp)
break;
8010408: 00003a06 br 80104f4 <OSEventPendMulti+0x324>
#endif
#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
case OS_EVENT_TYPE_Q:
pq = (OS_Q *)pevent->OSEventPtr;
801040c: e0bffe17 ldw r2,-8(fp)
8010410: 10800117 ldw r2,4(r2)
8010414: e0bffa15 stw r2,-24(fp)
if (pq->OSQEntries > 0) { /* If queue NOT empty; ... */
8010418: e0bffa17 ldw r2,-24(fp)
801041c: 1080058b ldhu r2,22(r2)
8010420: 10bfffcc andi r2,r2,65535
8010424: 10002426 beq r2,zero,80104b8 <OSEventPendMulti+0x2e8>
/* ... return available message, ... */
*pmsgs_rdy++ = (void *)*pq->OSQOut++;
8010428: e0bffa17 ldw r2,-24(fp)
801042c: 10c00417 ldw r3,16(r2)
8010430: 19000104 addi r4,r3,4
8010434: e0bffa17 ldw r2,-24(fp)
8010438: 11000415 stw r4,16(r2)
801043c: e0bff017 ldw r2,-64(fp)
8010440: 11000104 addi r4,r2,4
8010444: e13ff015 stw r4,-64(fp)
8010448: 18c00017 ldw r3,0(r3)
801044c: 10c00015 stw r3,0(r2)
if (pq->OSQOut == pq->OSQEnd) { /* If OUT ptr at queue end, ... */
8010450: e0bffa17 ldw r2,-24(fp)
8010454: 10c00417 ldw r3,16(r2)
8010458: e0bffa17 ldw r2,-24(fp)
801045c: 10800217 ldw r2,8(r2)
8010460: 1880041e bne r3,r2,8010474 <OSEventPendMulti+0x2a4>
pq->OSQOut = pq->OSQStart; /* ... wrap to queue start */
8010464: e0bffa17 ldw r2,-24(fp)
8010468: 10c00117 ldw r3,4(r2)
801046c: e0bffa17 ldw r2,-24(fp)
8010470: 10c00415 stw r3,16(r2)
}
pq->OSQEntries--; /* Update number of queue entries */
8010474: e0bffa17 ldw r2,-24(fp)
8010478: 1080058b ldhu r2,22(r2)
801047c: 10bfffc4 addi r2,r2,-1
8010480: 1007883a mov r3,r2
8010484: e0bffa17 ldw r2,-24(fp)
8010488: 10c0058d sth r3,22(r2)
*pevents_rdy++ = pevent; /* ... and return available queue event */
801048c: e0bff117 ldw r2,-60(fp)
8010490: 10c00104 addi r3,r2,4
8010494: e0fff115 stw r3,-60(fp)
8010498: e0fffe17 ldw r3,-8(fp)
801049c: 10c00015 stw r3,0(r2)
events_rdy = OS_TRUE;
80104a0: 00800044 movi r2,1
80104a4: e0bffdc5 stb r2,-9(fp)
events_rdy_nbr++;
80104a8: e0bffd0b ldhu r2,-12(fp)
80104ac: 10800044 addi r2,r2,1
80104b0: e0bffd0d sth r2,-12(fp)
} else {
events_stat |= OS_STAT_Q; /* Configure multi-pend for queue events */
}
break;
80104b4: 00000f06 br 80104f4 <OSEventPendMulti+0x324>
events_stat |= OS_STAT_Q; /* Configure multi-pend for queue events */
80104b8: e0bffcc3 ldbu r2,-13(fp)
80104bc: 10800114 ori r2,r2,4
80104c0: e0bffcc5 stb r2,-13(fp)
break;
80104c4: 00000b06 br 80104f4 <OSEventPendMulti+0x324>
80104c8: e0bffb17 ldw r2,-20(fp)
80104cc: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context);
80104d0: e0bff817 ldw r2,-32(fp)
80104d4: 1001703a wrctl status,r2
case OS_EVENT_TYPE_MUTEX:
case OS_EVENT_TYPE_FLAG:
default:
OS_EXIT_CRITICAL();
*pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */
80104d8: e0bff117 ldw r2,-60(fp)
80104dc: 10000015 stw zero,0(r2)
*perr = OS_ERR_EVENT_TYPE;
80104e0: e0800217 ldw r2,8(fp)
80104e4: 00c00044 movi r3,1
80104e8: 10c00005 stb r3,0(r2)
return (events_rdy_nbr);
80104ec: e0bffd0b ldhu r2,-12(fp)
80104f0: 00009d06 br 8010768 <OSEventPendMulti+0x598>
}
pevents++;
80104f4: e0bfff17 ldw r2,-4(fp)
80104f8: 10800104 addi r2,r2,4
80104fc: e0bfff15 stw r2,-4(fp)
pevent = *pevents;
8010500: e0bfff17 ldw r2,-4(fp)
8010504: 10800017 ldw r2,0(r2)
8010508: e0bffe15 stw r2,-8(fp)
while (pevent != (OS_EVENT *)0) { /* See if any events already available */
801050c: e0bffe17 ldw r2,-8(fp)
8010510: 103f7d1e bne r2,zero,8010308 <OSEventPendMulti+0x138>
}
if ( events_rdy == OS_TRUE) { /* Return any events already available */
8010514: e0bffdc3 ldbu r2,-9(fp)
8010518: 10800058 cmpnei r2,r2,1
801051c: 10000a1e bne r2,zero,8010548 <OSEventPendMulti+0x378>
*pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */
8010520: e0bff117 ldw r2,-60(fp)
8010524: 10000015 stw zero,0(r2)
8010528: e0bffb17 ldw r2,-20(fp)
801052c: e0bff715 stw r2,-36(fp)
8010530: e0bff717 ldw r2,-36(fp)
8010534: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8010538: e0800217 ldw r2,8(fp)
801053c: 10000005 stb zero,0(r2)
return (events_rdy_nbr);
8010540: e0bffd0b ldhu r2,-12(fp)
8010544: 00008806 br 8010768 <OSEventPendMulti+0x598>
}
/*$PAGE*/
/* Otherwise, must wait until any event occurs */
OSTCBCur->OSTCBStat |= events_stat | /* Resource not available, ... */
8010548: d0a05817 ldw r2,-32416(gp)
801054c: 10800c03 ldbu r2,48(r2)
8010550: e0fffcc3 ldbu r3,-13(fp)
8010554: 1884b03a or r2,r3,r2
8010558: 1009883a mov r4,r2
801055c: d0a05817 ldw r2,-32416(gp)
8010560: 00ffe004 movi r3,-128
8010564: 20c6b03a or r3,r4,r3
8010568: 10c00c05 stb r3,48(r2)
OS_STAT_MULTI; /* ... pend on multiple events */
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
801056c: d0a05817 ldw r2,-32416(gp)
8010570: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB */
8010574: d0a05817 ldw r2,-32416(gp)
8010578: e0ffef0b ldhu r3,-68(fp)
801057c: 10c00b8d sth r3,46(r2)
OS_EventTaskWaitMulti(pevents_pend); /* Suspend task until events or timeout occurs */
8010580: e13ff217 ldw r4,-56(fp)
8010584: 8010f680 call 8010f68 <OS_EventTaskWaitMulti>
8010588: e0bffb17 ldw r2,-20(fp)
801058c: e0bff515 stw r2,-44(fp)
8010590: e0bff517 ldw r2,-44(fp)
8010594: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* Find next highest priority task ready */
8010598: 801166c0 call 801166c <OS_Sched>
NIOS2_READ_STATUS (context);
801059c: 0005303a rdctl r2,status
80105a0: e0bff615 stw r2,-40(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80105a4: e0fff617 ldw r3,-40(fp)
80105a8: 00bfff84 movi r2,-2
80105ac: 1884703a and r2,r3,r2
80105b0: 1001703a wrctl status,r2
return context;
80105b4: e0bff617 ldw r2,-40(fp)
OS_ENTER_CRITICAL();
80105b8: e0bffb15 stw r2,-20(fp)
switch (OSTCBCur->OSTCBStatPend) { /* Handle event posted, aborted, or timed-out */
80105bc: d0a05817 ldw r2,-32416(gp)
80105c0: 10800c43 ldbu r2,49(r2)
80105c4: 10803fcc andi r2,r2,255
80105c8: 10000226 beq r2,zero,80105d4 <OSEventPendMulti+0x404>
80105cc: 10800098 cmpnei r2,r2,2
80105d0: 1000181e bne r2,zero,8010634 <OSEventPendMulti+0x464>
case OS_STAT_PEND_OK:
case OS_STAT_PEND_ABORT:
pevent = OSTCBCur->OSTCBEventPtr;
80105d4: d0a05817 ldw r2,-32416(gp)
80105d8: 10800717 ldw r2,28(r2)
80105dc: e0bffe15 stw r2,-8(fp)
if (pevent != (OS_EVENT *)0) { /* If task event ptr != NULL, ... */
80105e0: e0bffe17 ldw r2,-8(fp)
80105e4: 10000b26 beq r2,zero,8010614 <OSEventPendMulti+0x444>
*pevents_rdy++ = pevent; /* ... return available event ... */
80105e8: e0bff117 ldw r2,-60(fp)
80105ec: 10c00104 addi r3,r2,4
80105f0: e0fff115 stw r3,-60(fp)
80105f4: e0fffe17 ldw r3,-8(fp)
80105f8: 10c00015 stw r3,0(r2)
*pevents_rdy = (OS_EVENT *)0; /* ... & NULL terminate return event array */
80105fc: e0bff117 ldw r2,-60(fp)
8010600: 10000015 stw zero,0(r2)
events_rdy_nbr++;
8010604: e0bffd0b ldhu r2,-12(fp)
8010608: 10800044 addi r2,r2,1
801060c: e0bffd0d sth r2,-12(fp)
} else { /* Else NO event available, handle as timeout */
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_TO;
OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
}
break;
8010610: 00000d06 br 8010648 <OSEventPendMulti+0x478>
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_TO;
8010614: d0a05817 ldw r2,-32416(gp)
8010618: 00c00044 movi r3,1
801061c: 10c00c45 stb r3,49(r2)
OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
8010620: d0a05817 ldw r2,-32416(gp)
8010624: e17ff217 ldw r5,-56(fp)
8010628: 1009883a mov r4,r2
801062c: 80111600 call 8011160 <OS_EventTaskRemoveMulti>
break;
8010630: 00000506 br 8010648 <OSEventPendMulti+0x478>
case OS_STAT_PEND_TO:
default: /* ... remove task from events' wait lists */
OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
8010634: d0a05817 ldw r2,-32416(gp)
8010638: e17ff217 ldw r5,-56(fp)
801063c: 1009883a mov r4,r2
8010640: 80111600 call 8011160 <OS_EventTaskRemoveMulti>
break;
8010644: 0001883a nop
}
switch (OSTCBCur->OSTCBStatPend) {
8010648: d0a05817 ldw r2,-32416(gp)
801064c: 10800c43 ldbu r2,49(r2)
8010650: 10803fcc andi r2,r2,255
8010654: 10000326 beq r2,zero,8010664 <OSEventPendMulti+0x494>
8010658: 108000a0 cmpeqi r2,r2,2
801065c: 1000231e bne r2,zero,80106ec <OSEventPendMulti+0x51c>
8010660: 00002a06 br 801070c <OSEventPendMulti+0x53c>
case OS_STAT_PEND_OK:
switch (pevent->OSEventType) { /* Return event's message */
8010664: e0bffe17 ldw r2,-8(fp)
8010668: 10800003 ldbu r2,0(r2)
801066c: 10803fcc andi r2,r2,255
8010670: 0080100e bge zero,r2,80106b4 <OSEventPendMulti+0x4e4>
8010674: 10c000d0 cmplti r3,r2,3
8010678: 1800071e bne r3,zero,8010698 <OSEventPendMulti+0x4c8>
801067c: 108000d8 cmpnei r2,r2,3
8010680: 10000c1e bne r2,zero,80106b4 <OSEventPendMulti+0x4e4>
#if (OS_SEM_EN > 0)
case OS_EVENT_TYPE_SEM:
*pmsgs_rdy++ = (void *)0; /* NO message returned for semaphores */
8010684: e0bff017 ldw r2,-64(fp)
8010688: 10c00104 addi r3,r2,4
801068c: e0fff015 stw r3,-64(fp)
8010690: 10000015 stw zero,0(r2)
break;
8010694: 00001206 br 80106e0 <OSEventPendMulti+0x510>
#if ((OS_MBOX_EN > 0) || \
((OS_Q_EN > 0) && (OS_MAX_QS > 0)))
case OS_EVENT_TYPE_MBOX:
case OS_EVENT_TYPE_Q:
*pmsgs_rdy++ = (void *)OSTCBCur->OSTCBMsg; /* Return received message */
8010698: d0e05817 ldw r3,-32416(gp)
801069c: e0bff017 ldw r2,-64(fp)
80106a0: 11000104 addi r4,r2,4
80106a4: e13ff015 stw r4,-64(fp)
80106a8: 18c00917 ldw r3,36(r3)
80106ac: 10c00015 stw r3,0(r2)
break;
80106b0: 00000b06 br 80106e0 <OSEventPendMulti+0x510>
80106b4: e0bffb17 ldw r2,-20(fp)
80106b8: e0bff415 stw r2,-48(fp)
NIOS2_WRITE_STATUS (context);
80106bc: e0bff417 ldw r2,-48(fp)
80106c0: 1001703a wrctl status,r2
case OS_EVENT_TYPE_MUTEX:
case OS_EVENT_TYPE_FLAG:
default:
OS_EXIT_CRITICAL();
*pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */
80106c4: e0bff117 ldw r2,-60(fp)
80106c8: 10000015 stw zero,0(r2)
*perr = OS_ERR_EVENT_TYPE;
80106cc: e0800217 ldw r2,8(fp)
80106d0: 00c00044 movi r3,1
80106d4: 10c00005 stb r3,0(r2)
return (events_rdy_nbr);
80106d8: e0bffd0b ldhu r2,-12(fp)
80106dc: 00002206 br 8010768 <OSEventPendMulti+0x598>
}
*perr = OS_ERR_NONE;
80106e0: e0800217 ldw r2,8(fp)
80106e4: 10000005 stb zero,0(r2)
break;
80106e8: 00001006 br 801072c <OSEventPendMulti+0x55c>
case OS_STAT_PEND_ABORT:
*pmsgs_rdy++ = (void *)0; /* NO message returned for abort */
80106ec: e0bff017 ldw r2,-64(fp)
80106f0: 10c00104 addi r3,r2,4
80106f4: e0fff015 stw r3,-64(fp)
80106f8: 10000015 stw zero,0(r2)
*perr = OS_ERR_PEND_ABORT; /* Indicate that event aborted */
80106fc: e0800217 ldw r2,8(fp)
8010700: 00c00384 movi r3,14
8010704: 10c00005 stb r3,0(r2)
break;
8010708: 00000806 br 801072c <OSEventPendMulti+0x55c>
case OS_STAT_PEND_TO:
default:
*pmsgs_rdy++ = (void *)0; /* NO message returned for timeout */
801070c: e0bff017 ldw r2,-64(fp)
8010710: 10c00104 addi r3,r2,4
8010714: e0fff015 stw r3,-64(fp)
8010718: 10000015 stw zero,0(r2)
*perr = OS_ERR_TIMEOUT; /* Indicate that events timed out */
801071c: e0800217 ldw r2,8(fp)
8010720: 00c00284 movi r3,10
8010724: 10c00005 stb r3,0(r2)
break;
8010728: 0001883a nop
}
OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */
801072c: d0a05817 ldw r2,-32416(gp)
8010730: 10000c05 stb zero,48(r2)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */
8010734: d0a05817 ldw r2,-32416(gp)
8010738: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */
801073c: d0a05817 ldw r2,-32416(gp)
8010740: 10000715 stw zero,28(r2)
OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;
8010744: d0a05817 ldw r2,-32416(gp)
8010748: 10000815 stw zero,32(r2)
OSTCBCur->OSTCBMsg = (void *)0; /* Clear task message */
801074c: d0a05817 ldw r2,-32416(gp)
8010750: 10000915 stw zero,36(r2)
8010754: e0bffb17 ldw r2,-20(fp)
8010758: e0bff315 stw r2,-52(fp)
801075c: e0bff317 ldw r2,-52(fp)
8010760: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (events_rdy_nbr);
8010764: e0bffd0b ldhu r2,-12(fp)
}
8010768: e037883a mov sp,fp
801076c: dfc00117 ldw ra,4(sp)
8010770: df000017 ldw fp,0(sp)
8010774: dec00204 addi sp,sp,8
8010778: f800283a ret
0801077c <OSInit>:
* Returns : none
*********************************************************************************************************
*/
void OSInit (void)
{
801077c: defffe04 addi sp,sp,-8
8010780: dfc00115 stw ra,4(sp)
8010784: df000015 stw fp,0(sp)
8010788: d839883a mov fp,sp
OSInitHookBegin(); /* Call port specific initialization code */
801078c: 80386580 call 8038658 <OSInitHookBegin>
OS_InitMisc(); /* Initialize miscellaneous variables */
8010790: 80113a00 call 80113a0 <OS_InitMisc>
OS_InitRdyList(); /* Initialize the Ready List */
8010794: 80113dc0 call 80113dc <OS_InitRdyList>
OS_InitTCBList(); /* Initialize the free list of OS_TCBs */
8010798: 80114cc0 call 80114cc <OS_InitTCBList>
OS_InitEventList(); /* Initialize the free list of OS_EVENTs */
801079c: 80112c00 call 80112c0 <OS_InitEventList>
#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
OS_FlagInit(); /* Initialize the event flag structures */
80107a0: 8012ed80 call 8012ed8 <OS_FlagInit>
#endif
#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
OS_MemInit(); /* Initialize the memory manager */
80107a4: 80136580 call 8013658 <OS_MemInit>
#endif
#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
OS_QInit(); /* Initialize the message queue structures */
80107a8: 801562c0 call 801562c <OS_QInit>
#endif
OS_InitTaskIdle(); /* Create the Idle Task */
80107ac: 80114480 call 8011448 <OS_InitTaskIdle>
#if OS_TMR_EN > 0
OSTmr_Init(); /* Initialize the Timer Manager */
#endif
OSInitHookEnd(); /* Call port specific init. code */
80107b0: 80386780 call 8038678 <OSInitHookEnd>
#if OS_DEBUG_EN > 0
OSDebugInit();
#endif
}
80107b4: 0001883a nop
80107b8: e037883a mov sp,fp
80107bc: dfc00117 ldw ra,4(sp)
80107c0: df000017 ldw fp,0(sp)
80107c4: dec00204 addi sp,sp,8
80107c8: f800283a ret
080107cc <OSIntEnter>:
* 5) You are allowed to nest interrupts up to 255 levels deep.
*********************************************************************************************************
*/
void OSIntEnter (void)
{
80107cc: deffff04 addi sp,sp,-4
80107d0: df000015 stw fp,0(sp)
80107d4: d839883a mov fp,sp
if (OSRunning == OS_TRUE) {
80107d8: d0a04b43 ldbu r2,-32467(gp)
80107dc: 10803fcc andi r2,r2,255
80107e0: 10800058 cmpnei r2,r2,1
80107e4: 1000071e bne r2,zero,8010804 <OSIntEnter+0x38>
if (OSIntNesting < 255u) {
80107e8: d0a05703 ldbu r2,-32420(gp)
80107ec: 10803fcc andi r2,r2,255
80107f0: 10803fe0 cmpeqi r2,r2,255
80107f4: 1000031e bne r2,zero,8010804 <OSIntEnter+0x38>
OSIntNesting++; /* Increment ISR nesting level */
80107f8: d0a05703 ldbu r2,-32420(gp)
80107fc: 10800044 addi r2,r2,1
8010800: d0a05705 stb r2,-32420(gp)
}
}
}
8010804: 0001883a nop
8010808: e037883a mov sp,fp
801080c: df000017 ldw fp,0(sp)
8010810: dec00104 addi sp,sp,4
8010814: f800283a ret
08010818 <OSIntExit>:
* 2) Rescheduling is prevented when the scheduler is locked (see OS_SchedLock())
*********************************************************************************************************
*/
void OSIntExit (void)
{
8010818: defffb04 addi sp,sp,-20
801081c: dfc00415 stw ra,16(sp)
8010820: df000315 stw fp,12(sp)
8010824: df000304 addi fp,sp,12
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8010828: e03fff15 stw zero,-4(fp)
#endif
if (OSRunning == OS_TRUE) {
801082c: d0a04b43 ldbu r2,-32467(gp)
8010830: 10803fcc andi r2,r2,255
8010834: 10800058 cmpnei r2,r2,1
8010838: 10002d1e bne r2,zero,80108f0 <OSIntExit+0xd8>
NIOS2_READ_STATUS (context);
801083c: 0005303a rdctl r2,status
8010840: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8010844: e0fffe17 ldw r3,-8(fp)
8010848: 00bfff84 movi r2,-2
801084c: 1884703a and r2,r3,r2
8010850: 1001703a wrctl status,r2
return context;
8010854: e0bffe17 ldw r2,-8(fp)
OS_ENTER_CRITICAL();
8010858: e0bfff15 stw r2,-4(fp)
if (OSIntNesting > 0) { /* Prevent OSIntNesting from wrapping */
801085c: d0a05703 ldbu r2,-32420(gp)
8010860: 10803fcc andi r2,r2,255
8010864: 10000326 beq r2,zero,8010874 <OSIntExit+0x5c>
OSIntNesting--;
8010868: d0a05703 ldbu r2,-32420(gp)
801086c: 10bfffc4 addi r2,r2,-1
8010870: d0a05705 stb r2,-32420(gp)
}
if (OSIntNesting == 0) { /* Reschedule only if all ISRs complete ... */
8010874: d0a05703 ldbu r2,-32420(gp)
8010878: 10803fcc andi r2,r2,255
801087c: 1000181e bne r2,zero,80108e0 <OSIntExit+0xc8>
if (OSLockNesting == 0) { /* ... and not locked. */
8010880: d0a04b03 ldbu r2,-32468(gp)
8010884: 10803fcc andi r2,r2,255
8010888: 1000151e bne r2,zero,80108e0 <OSIntExit+0xc8>
OS_SchedNew();
801088c: 80117340 call 8011734 <OS_SchedNew>
if (OSPrioHighRdy != OSPrioCur) { /* No Ctx Sw if current task is highest rdy */
8010890: d0e04d03 ldbu r3,-32460(gp)
8010894: d0a04d43 ldbu r2,-32459(gp)
8010898: 18c03fcc andi r3,r3,255
801089c: 10803fcc andi r2,r2,255
80108a0: 18800f26 beq r3,r2,80108e0 <OSIntExit+0xc8>
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
80108a4: d0a04d03 ldbu r2,-32460(gp)
80108a8: 10803fcc andi r2,r2,255
80108ac: 100690ba slli r3,r2,2
80108b0: 008201b4 movhi r2,2054
80108b4: 1885883a add r2,r3,r2
80108b8: 10b55d17 ldw r2,-10892(r2)
80108bc: d0a05315 stw r2,-32436(gp)
#if OS_TASK_PROFILE_EN > 0
OSTCBHighRdy->OSTCBCtxSwCtr++; /* Inc. # of context switches to this task */
80108c0: d0a05317 ldw r2,-32436(gp)
80108c4: 10c00e17 ldw r3,56(r2)
80108c8: 18c00044 addi r3,r3,1
80108cc: 10c00e15 stw r3,56(r2)
#endif
OSCtxSwCtr++; /* Keep track of the number of ctx switches */
80108d0: d0a04f17 ldw r2,-32452(gp)
80108d4: 10800044 addi r2,r2,1
80108d8: d0a04f15 stw r2,-32452(gp)
OSIntCtxSw(); /* Perform interrupt level ctx switch */
80108dc: 80383880 call 8038388 <OSCtxSw>
80108e0: e0bfff17 ldw r2,-4(fp)
80108e4: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
80108e8: e0bffd17 ldw r2,-12(fp)
80108ec: 1001703a wrctl status,r2
}
}
}
OS_EXIT_CRITICAL();
}
}
80108f0: 0001883a nop
80108f4: e037883a mov sp,fp
80108f8: dfc00117 ldw ra,4(sp)
80108fc: df000017 ldw fp,0(sp)
8010900: dec00204 addi sp,sp,8
8010904: f800283a ret
08010908 <OSSchedLock>:
*********************************************************************************************************
*/
#if OS_SCHED_LOCK_EN > 0
void OSSchedLock (void)
{
8010908: defffc04 addi sp,sp,-16
801090c: df000315 stw fp,12(sp)
8010910: df000304 addi fp,sp,12
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8010914: e03fff15 stw zero,-4(fp)
#endif
if (OSRunning == OS_TRUE) { /* Make sure multitasking is running */
8010918: d0a04b43 ldbu r2,-32467(gp)
801091c: 10803fcc andi r2,r2,255
8010920: 10800058 cmpnei r2,r2,1
8010924: 1000161e bne r2,zero,8010980 <OSSchedLock+0x78>
NIOS2_READ_STATUS (context);
8010928: 0005303a rdctl r2,status
801092c: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8010930: e0fffe17 ldw r3,-8(fp)
8010934: 00bfff84 movi r2,-2
8010938: 1884703a and r2,r3,r2
801093c: 1001703a wrctl status,r2
return context;
8010940: e0bffe17 ldw r2,-8(fp)
OS_ENTER_CRITICAL();
8010944: e0bfff15 stw r2,-4(fp)
if (OSIntNesting == 0) { /* Can't call from an ISR */
8010948: d0a05703 ldbu r2,-32420(gp)
801094c: 10803fcc andi r2,r2,255
8010950: 1000071e bne r2,zero,8010970 <OSSchedLock+0x68>
if (OSLockNesting < 255u) { /* Prevent OSLockNesting from wrapping back to 0 */
8010954: d0a04b03 ldbu r2,-32468(gp)
8010958: 10803fcc andi r2,r2,255
801095c: 10803fe0 cmpeqi r2,r2,255
8010960: 1000031e bne r2,zero,8010970 <OSSchedLock+0x68>
OSLockNesting++; /* Increment lock nesting level */
8010964: d0a04b03 ldbu r2,-32468(gp)
8010968: 10800044 addi r2,r2,1
801096c: d0a04b05 stb r2,-32468(gp)
8010970: e0bfff17 ldw r2,-4(fp)
8010974: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8010978: e0bffd17 ldw r2,-12(fp)
801097c: 1001703a wrctl status,r2
}
}
OS_EXIT_CRITICAL();
}
}
8010980: 0001883a nop
8010984: e037883a mov sp,fp
8010988: df000017 ldw fp,0(sp)
801098c: dec00104 addi sp,sp,4
8010990: f800283a ret
08010994 <OSSchedUnlock>:
*********************************************************************************************************
*/
#if OS_SCHED_LOCK_EN > 0
void OSSchedUnlock (void)
{
8010994: defff804 addi sp,sp,-32
8010998: dfc00715 stw ra,28(sp)
801099c: df000615 stw fp,24(sp)
80109a0: df000604 addi fp,sp,24
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80109a4: e03fff15 stw zero,-4(fp)
#endif
if (OSRunning == OS_TRUE) { /* Make sure multitasking is running */
80109a8: d0a04b43 ldbu r2,-32467(gp)
80109ac: 10803fcc andi r2,r2,255
80109b0: 10800058 cmpnei r2,r2,1
80109b4: 1000281e bne r2,zero,8010a58 <OSSchedUnlock+0xc4>
NIOS2_READ_STATUS (context);
80109b8: 0005303a rdctl r2,status
80109bc: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80109c0: e0fffe17 ldw r3,-8(fp)
80109c4: 00bfff84 movi r2,-2
80109c8: 1884703a and r2,r3,r2
80109cc: 1001703a wrctl status,r2
return context;
80109d0: e0bffe17 ldw r2,-8(fp)
OS_ENTER_CRITICAL();
80109d4: e0bfff15 stw r2,-4(fp)
if (OSLockNesting > 0) { /* Do not decrement if already 0 */
80109d8: d0a04b03 ldbu r2,-32468(gp)
80109dc: 10803fcc andi r2,r2,255
80109e0: 10001926 beq r2,zero,8010a48 <OSSchedUnlock+0xb4>
OSLockNesting--; /* Decrement lock nesting level */
80109e4: d0a04b03 ldbu r2,-32468(gp)
80109e8: 10bfffc4 addi r2,r2,-1
80109ec: d0a04b05 stb r2,-32468(gp)
if (OSLockNesting == 0) { /* See if scheduler is enabled and ... */
80109f0: d0a04b03 ldbu r2,-32468(gp)
80109f4: 10803fcc andi r2,r2,255
80109f8: 10000e1e bne r2,zero,8010a34 <OSSchedUnlock+0xa0>
if (OSIntNesting == 0) { /* ... not in an ISR */
80109fc: d0a05703 ldbu r2,-32420(gp)
8010a00: 10803fcc andi r2,r2,255
8010a04: 1000061e bne r2,zero,8010a20 <OSSchedUnlock+0x8c>
8010a08: e0bfff17 ldw r2,-4(fp)
8010a0c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8010a10: e0bffd17 ldw r2,-12(fp)
8010a14: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* See if a HPT is ready */
8010a18: 801166c0 call 801166c <OS_Sched>
}
} else {
OS_EXIT_CRITICAL();
}
}
}
8010a1c: 00000e06 br 8010a58 <OSSchedUnlock+0xc4>
8010a20: e0bfff17 ldw r2,-4(fp)
8010a24: e0bffc15 stw r2,-16(fp)
8010a28: e0bffc17 ldw r2,-16(fp)
8010a2c: 1001703a wrctl status,r2
8010a30: 00000906 br 8010a58 <OSSchedUnlock+0xc4>
8010a34: e0bfff17 ldw r2,-4(fp)
8010a38: e0bffb15 stw r2,-20(fp)
8010a3c: e0bffb17 ldw r2,-20(fp)
8010a40: 1001703a wrctl status,r2
8010a44: 00000406 br 8010a58 <OSSchedUnlock+0xc4>
8010a48: e0bfff17 ldw r2,-4(fp)
8010a4c: e0bffa15 stw r2,-24(fp)
8010a50: e0bffa17 ldw r2,-24(fp)
8010a54: 1001703a wrctl status,r2
8010a58: 0001883a nop
8010a5c: e037883a mov sp,fp
8010a60: dfc00117 ldw ra,4(sp)
8010a64: df000017 ldw fp,0(sp)
8010a68: dec00204 addi sp,sp,8
8010a6c: f800283a ret
08010a70 <OSStart>:
* d_ Execute the task.
*********************************************************************************************************
*/
void OSStart (void)
{
8010a70: defffe04 addi sp,sp,-8
8010a74: dfc00115 stw ra,4(sp)
8010a78: df000015 stw fp,0(sp)
8010a7c: d839883a mov fp,sp
if (OSRunning == OS_FALSE) {
8010a80: d0a04b43 ldbu r2,-32467(gp)
8010a84: 10803fcc andi r2,r2,255
8010a88: 10000d1e bne r2,zero,8010ac0 <OSStart+0x50>
OS_SchedNew(); /* Find highest priority's task priority number */
8010a8c: 80117340 call 8011734 <OS_SchedNew>
OSPrioCur = OSPrioHighRdy;
8010a90: d0a04d03 ldbu r2,-32460(gp)
8010a94: d0a04d45 stb r2,-32459(gp)
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run */
8010a98: d0a04d03 ldbu r2,-32460(gp)
8010a9c: 10803fcc andi r2,r2,255
8010aa0: 100690ba slli r3,r2,2
8010aa4: 008201b4 movhi r2,2054
8010aa8: 1885883a add r2,r3,r2
8010aac: 10b55d17 ldw r2,-10892(r2)
8010ab0: d0a05315 stw r2,-32436(gp)
OSTCBCur = OSTCBHighRdy;
8010ab4: d0a05317 ldw r2,-32436(gp)
8010ab8: d0a05815 stw r2,-32416(gp)
OSStartHighRdy(); /* Execute target specific code to start task */
8010abc: 80384140 call 8038414 <OSStartHighRdy>
}
}
8010ac0: 0001883a nop
8010ac4: e037883a mov sp,fp
8010ac8: dfc00117 ldw ra,4(sp)
8010acc: df000017 ldw fp,0(sp)
8010ad0: dec00204 addi sp,sp,8
8010ad4: f800283a ret
08010ad8 <OSTimeTick>:
* Returns : none
*********************************************************************************************************
*/
void OSTimeTick (void)
{
8010ad8: defff804 addi sp,sp,-32
8010adc: dfc00715 stw ra,28(sp)
8010ae0: df000615 stw fp,24(sp)
8010ae4: df000604 addi fp,sp,24
OS_TCB *ptcb;
#if OS_TICK_STEP_EN > 0
BOOLEAN step;
#endif
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8010ae8: e03ffe15 stw zero,-8(fp)
#endif
#if OS_TIME_TICK_HOOK_EN > 0
OSTimeTickHook(); /* Call user definable hook */
8010aec: 803862c0 call 803862c <OSTimeTickHook>
NIOS2_READ_STATUS (context);
8010af0: 0005303a rdctl r2,status
8010af4: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8010af8: e0fffc17 ldw r3,-16(fp)
8010afc: 00bfff84 movi r2,-2
8010b00: 1884703a and r2,r3,r2
8010b04: 1001703a wrctl status,r2
return context;
8010b08: e0bffc17 ldw r2,-16(fp)
#endif
#if OS_TIME_GET_SET_EN > 0
OS_ENTER_CRITICAL(); /* Update the 32-bit tick counter */
8010b0c: e0bffe15 stw r2,-8(fp)
OSTime++;
8010b10: d0a05917 ldw r2,-32412(gp)
8010b14: 10800044 addi r2,r2,1
8010b18: d0a05915 stw r2,-32412(gp)
8010b1c: e0bffe17 ldw r2,-8(fp)
8010b20: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8010b24: e0bffd17 ldw r2,-12(fp)
8010b28: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
#endif
if (OSRunning == OS_TRUE) {
8010b2c: d0a04b43 ldbu r2,-32467(gp)
8010b30: 10803fcc andi r2,r2,255
8010b34: 10800058 cmpnei r2,r2,1
8010b38: 1000511e bne r2,zero,8010c80 <OSTimeTick+0x1a8>
}
if (step == OS_FALSE) { /* Return if waiting for step command */
return;
}
#endif
ptcb = OSTCBList; /* Point at first TCB in TCB list */
8010b3c: d0a04e17 ldw r2,-32456(gp)
8010b40: e0bfff15 stw r2,-4(fp)
while (ptcb->OSTCBPrio != OS_TASK_IDLE_PRIO) { /* Go through all TCBs in TCB list */
8010b44: 00004906 br 8010c6c <OSTimeTick+0x194>
NIOS2_READ_STATUS (context);
8010b48: 0005303a rdctl r2,status
8010b4c: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8010b50: e0fffb17 ldw r3,-20(fp)
8010b54: 00bfff84 movi r2,-2
8010b58: 1884703a and r2,r3,r2
8010b5c: 1001703a wrctl status,r2
return context;
8010b60: e0bffb17 ldw r2,-20(fp)
OS_ENTER_CRITICAL();
8010b64: e0bffe15 stw r2,-8(fp)
if (ptcb->OSTCBDly != 0) { /* No, Delayed or waiting for event with TO */
8010b68: e0bfff17 ldw r2,-4(fp)
8010b6c: 10800b8b ldhu r2,46(r2)
8010b70: 10bfffcc andi r2,r2,65535
8010b74: 10003626 beq r2,zero,8010c50 <OSTimeTick+0x178>
if (--ptcb->OSTCBDly == 0) { /* Decrement nbr of ticks to end of delay */
8010b78: e0bfff17 ldw r2,-4(fp)
8010b7c: 10800b8b ldhu r2,46(r2)
8010b80: 10bfffc4 addi r2,r2,-1
8010b84: 1007883a mov r3,r2
8010b88: e0bfff17 ldw r2,-4(fp)
8010b8c: 10c00b8d sth r3,46(r2)
8010b90: e0bfff17 ldw r2,-4(fp)
8010b94: 10800b8b ldhu r2,46(r2)
8010b98: 10bfffcc andi r2,r2,65535
8010b9c: 10002c1e bne r2,zero,8010c50 <OSTimeTick+0x178>
/* Check for timeout */
if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
8010ba0: e0bfff17 ldw r2,-4(fp)
8010ba4: 10800c03 ldbu r2,48(r2)
8010ba8: 10803fcc andi r2,r2,255
8010bac: 10800dcc andi r2,r2,55
8010bb0: 10000b26 beq r2,zero,8010be0 <OSTimeTick+0x108>
ptcb->OSTCBStat &= ~(INT8U)OS_STAT_PEND_ANY; /* Yes, Clear status flag */
8010bb4: e0bfff17 ldw r2,-4(fp)
8010bb8: 10c00c03 ldbu r3,48(r2)
8010bbc: 00bff204 movi r2,-56
8010bc0: 1884703a and r2,r3,r2
8010bc4: 1007883a mov r3,r2
8010bc8: e0bfff17 ldw r2,-4(fp)
8010bcc: 10c00c05 stb r3,48(r2)
ptcb->OSTCBStatPend = OS_STAT_PEND_TO; /* Indicate PEND timeout */
8010bd0: e0bfff17 ldw r2,-4(fp)
8010bd4: 00c00044 movi r3,1
8010bd8: 10c00c45 stb r3,49(r2)
8010bdc: 00000206 br 8010be8 <OSTimeTick+0x110>
} else {
ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
8010be0: e0bfff17 ldw r2,-4(fp)
8010be4: 10000c45 stb zero,49(r2)
}
if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended? */
8010be8: e0bfff17 ldw r2,-4(fp)
8010bec: 10800c03 ldbu r2,48(r2)
8010bf0: 10803fcc andi r2,r2,255
8010bf4: 1080020c andi r2,r2,8
8010bf8: 1000151e bne r2,zero,8010c50 <OSTimeTick+0x178>
OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make ready */
8010bfc: e0bfff17 ldw r2,-4(fp)
8010c00: 10c00d83 ldbu r3,54(r2)
8010c04: d0a05503 ldbu r2,-32428(gp)
8010c08: 1884b03a or r2,r3,r2
8010c0c: d0a05505 stb r2,-32428(gp)
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
8010c10: e0bfff17 ldw r2,-4(fp)
8010c14: 10800d03 ldbu r2,52(r2)
8010c18: 10c03fcc andi r3,r2,255
8010c1c: d0a05544 addi r2,gp,-32427
8010c20: 1885883a add r2,r3,r2
8010c24: 11000003 ldbu r4,0(r2)
8010c28: e0bfff17 ldw r2,-4(fp)
8010c2c: 10800d43 ldbu r2,53(r2)
8010c30: e0ffff17 ldw r3,-4(fp)
8010c34: 18c00d03 ldbu r3,52(r3)
8010c38: 18c03fcc andi r3,r3,255
8010c3c: 2084b03a or r2,r4,r2
8010c40: 1009883a mov r4,r2
8010c44: d0a05544 addi r2,gp,-32427
8010c48: 1885883a add r2,r3,r2
8010c4c: 11000005 stb r4,0(r2)
}
}
}
ptcb = ptcb->OSTCBNext; /* Point at next TCB in TCB list */
8010c50: e0bfff17 ldw r2,-4(fp)
8010c54: 10800517 ldw r2,20(r2)
8010c58: e0bfff15 stw r2,-4(fp)
8010c5c: e0bffe17 ldw r2,-8(fp)
8010c60: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8010c64: e0bffa17 ldw r2,-24(fp)
8010c68: 1001703a wrctl status,r2
while (ptcb->OSTCBPrio != OS_TASK_IDLE_PRIO) { /* Go through all TCBs in TCB list */
8010c6c: e0bfff17 ldw r2,-4(fp)
8010c70: 10800c83 ldbu r2,50(r2)
8010c74: 10803fcc andi r2,r2,255
8010c78: 10800518 cmpnei r2,r2,20
8010c7c: 103fb21e bne r2,zero,8010b48 <OSTimeTick+0x70>
OS_EXIT_CRITICAL();
}
}
}
8010c80: 0001883a nop
8010c84: e037883a mov sp,fp
8010c88: dfc00117 ldw ra,4(sp)
8010c8c: df000017 ldw fp,0(sp)
8010c90: dec00204 addi sp,sp,8
8010c94: f800283a ret
08010c98 <OSVersion>:
* Returns : the version number of uC/OS-II multiplied by 100.
*********************************************************************************************************
*/
INT16U OSVersion (void)
{
8010c98: deffff04 addi sp,sp,-4
8010c9c: df000015 stw fp,0(sp)
8010ca0: d839883a mov fp,sp
return (OS_VERSION);
8010ca4: 00804784 movi r2,286
}
8010ca8: e037883a mov sp,fp
8010cac: df000017 ldw fp,0(sp)
8010cb0: dec00104 addi sp,sp,4
8010cb4: f800283a ret
08010cb8 <OS_Dummy>:
*********************************************************************************************************
*/
#if OS_TASK_DEL_EN > 0
void OS_Dummy (void)
{
8010cb8: deffff04 addi sp,sp,-4
8010cbc: df000015 stw fp,0(sp)
8010cc0: d839883a mov fp,sp
}
8010cc4: 0001883a nop
8010cc8: e037883a mov sp,fp
8010ccc: df000017 ldw fp,0(sp)
8010cd0: dec00104 addi sp,sp,4
8010cd4: f800283a ret
08010cd8 <OS_EventTaskRdy>:
* Note : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if (OS_EVENT_EN)
INT8U OS_EventTaskRdy (OS_EVENT *pevent, void *pmsg, INT8U msk, INT8U pend_stat)
{
8010cd8: defff804 addi sp,sp,-32
8010cdc: dfc00715 stw ra,28(sp)
8010ce0: df000615 stw fp,24(sp)
8010ce4: df000604 addi fp,sp,24
8010ce8: e13ffd15 stw r4,-12(fp)
8010cec: e17ffc15 stw r5,-16(fp)
8010cf0: 3005883a mov r2,r6
8010cf4: 3807883a mov r3,r7
8010cf8: e0bffb05 stb r2,-20(fp)
8010cfc: 1805883a mov r2,r3
8010d00: e0bffa05 stb r2,-24(fp)
INT16U *ptbl;
#endif
#if OS_LOWEST_PRIO <= 63
y = OSUnMapTbl[pevent->OSEventGrp]; /* Find HPT waiting for message */
8010d04: e0bffd17 ldw r2,-12(fp)
8010d08: 10800283 ldbu r2,10(r2)
8010d0c: 10c03fcc andi r3,r2,255
8010d10: 00820134 movhi r2,2052
8010d14: 1885883a add r2,r3,r2
8010d18: 109dcd03 ldbu r2,30516(r2)
8010d1c: e0bfffc5 stb r2,-1(fp)
x = OSUnMapTbl[pevent->OSEventTbl[y]];
8010d20: e0bfffc3 ldbu r2,-1(fp)
8010d24: e0fffd17 ldw r3,-12(fp)
8010d28: 1885883a add r2,r3,r2
8010d2c: 108002c3 ldbu r2,11(r2)
8010d30: 10c03fcc andi r3,r2,255
8010d34: 00820134 movhi r2,2052
8010d38: 1885883a add r2,r3,r2
8010d3c: 109dcd03 ldbu r2,30516(r2)
8010d40: e0bfff85 stb r2,-2(fp)
prio = (INT8U)((y << 3) + x); /* Find priority of task getting the msg */
8010d44: e0bfffc3 ldbu r2,-1(fp)
8010d48: 100490fa slli r2,r2,3
8010d4c: 1007883a mov r3,r2
8010d50: e0bfff83 ldbu r2,-2(fp)
8010d54: 10c5883a add r2,r2,r3
8010d58: e0bfff45 stb r2,-3(fp)
x = OSUnMapTbl[(*ptbl >> 8) & 0xFF] + 8;
}
prio = (INT8U)((y << 4) + x); /* Find priority of task getting the msg */
#endif
ptcb = OSTCBPrioTbl[prio]; /* Point to this task's OS_TCB */
8010d5c: e0bfff43 ldbu r2,-3(fp)
8010d60: 100690ba slli r3,r2,2
8010d64: 008201b4 movhi r2,2054
8010d68: 1885883a add r2,r3,r2
8010d6c: 10b55d17 ldw r2,-10892(r2)
8010d70: e0bffe15 stw r2,-8(fp)
ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from readying task */
8010d74: e0bffe17 ldw r2,-8(fp)
8010d78: 10000b8d sth zero,46(r2)
#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
ptcb->OSTCBMsg = pmsg; /* Send message directly to waiting task */
8010d7c: e0bffe17 ldw r2,-8(fp)
8010d80: e0fffc17 ldw r3,-16(fp)
8010d84: 10c00915 stw r3,36(r2)
#else
pmsg = pmsg; /* Prevent compiler warning if not used */
#endif
ptcb->OSTCBStat &= ~msk; /* Clear bit associated with event type */
8010d88: e0bffe17 ldw r2,-8(fp)
8010d8c: 10800c03 ldbu r2,48(r2)
8010d90: 1007883a mov r3,r2
8010d94: e0bffb03 ldbu r2,-20(fp)
8010d98: 0084303a nor r2,zero,r2
8010d9c: 1884703a and r2,r3,r2
8010da0: 1007883a mov r3,r2
8010da4: e0bffe17 ldw r2,-8(fp)
8010da8: 10c00c05 stb r3,48(r2)
ptcb->OSTCBStatPend = pend_stat; /* Set pend status of post or abort */
8010dac: e0bffe17 ldw r2,-8(fp)
8010db0: e0fffa03 ldbu r3,-24(fp)
8010db4: 10c00c45 stb r3,49(r2)
/* See if task is ready (could be susp'd) */
if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {
8010db8: e0bffe17 ldw r2,-8(fp)
8010dbc: 10800c03 ldbu r2,48(r2)
8010dc0: 10803fcc andi r2,r2,255
8010dc4: 1080020c andi r2,r2,8
8010dc8: 1000111e bne r2,zero,8010e10 <OS_EventTaskRdy+0x138>
OSRdyGrp |= ptcb->OSTCBBitY; /* Put task in the ready to run list */
8010dcc: e0bffe17 ldw r2,-8(fp)
8010dd0: 10c00d83 ldbu r3,54(r2)
8010dd4: d0a05503 ldbu r2,-32428(gp)
8010dd8: 1884b03a or r2,r3,r2
8010ddc: d0a05505 stb r2,-32428(gp)
OSRdyTbl[y] |= ptcb->OSTCBBitX;
8010de0: e0ffffc3 ldbu r3,-1(fp)
8010de4: d0a05544 addi r2,gp,-32427
8010de8: 1885883a add r2,r3,r2
8010dec: 11000003 ldbu r4,0(r2)
8010df0: e0bffe17 ldw r2,-8(fp)
8010df4: 10800d43 ldbu r2,53(r2)
8010df8: e0ffffc3 ldbu r3,-1(fp)
8010dfc: 2084b03a or r2,r4,r2
8010e00: 1009883a mov r4,r2
8010e04: d0a05544 addi r2,gp,-32427
8010e08: 1885883a add r2,r3,r2
8010e0c: 11000005 stb r4,0(r2)
}
OS_EventTaskRemove(ptcb, pevent); /* Remove this task from event wait list */
8010e10: e17ffd17 ldw r5,-12(fp)
8010e14: e13ffe17 ldw r4,-8(fp)
8010e18: 80110b00 call 80110b0 <OS_EventTaskRemove>
#if (OS_EVENT_MULTI_EN > 0)
if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) { /* Remove this task from events' wait lists */
8010e1c: e0bffe17 ldw r2,-8(fp)
8010e20: 10800817 ldw r2,32(r2)
8010e24: 10000826 beq r2,zero,8010e48 <OS_EventTaskRdy+0x170>
OS_EventTaskRemoveMulti(ptcb, ptcb->OSTCBEventMultiPtr);
8010e28: e0bffe17 ldw r2,-8(fp)
8010e2c: 10800817 ldw r2,32(r2)
8010e30: 100b883a mov r5,r2
8010e34: e13ffe17 ldw r4,-8(fp)
8010e38: 80111600 call 8011160 <OS_EventTaskRemoveMulti>
ptcb->OSTCBEventPtr = (OS_EVENT *)pevent;/* Return event as first multi-pend event ready*/
8010e3c: e0bffe17 ldw r2,-8(fp)
8010e40: e0fffd17 ldw r3,-12(fp)
8010e44: 10c00715 stw r3,28(r2)
}
#endif
return (prio);
8010e48: e0bfff43 ldbu r2,-3(fp)
}
8010e4c: e037883a mov sp,fp
8010e50: dfc00117 ldw ra,4(sp)
8010e54: df000017 ldw fp,0(sp)
8010e58: dec00204 addi sp,sp,8
8010e5c: f800283a ret
08010e60 <OS_EventTaskWait>:
* Note : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if (OS_EVENT_EN)
void OS_EventTaskWait (OS_EVENT *pevent)
{
8010e60: defffd04 addi sp,sp,-12
8010e64: df000215 stw fp,8(sp)
8010e68: df000204 addi fp,sp,8
8010e6c: e13ffe15 stw r4,-8(fp)
INT8U y;
OSTCBCur->OSTCBEventPtr = pevent; /* Store ptr to ECB in TCB */
8010e70: d0a05817 ldw r2,-32416(gp)
8010e74: e0fffe17 ldw r3,-8(fp)
8010e78: 10c00715 stw r3,28(r2)
pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting list */
8010e7c: d0a05817 ldw r2,-32416(gp)
8010e80: 10800d03 ldbu r2,52(r2)
8010e84: 10803fcc andi r2,r2,255
8010e88: e0fffe17 ldw r3,-8(fp)
8010e8c: 1885883a add r2,r3,r2
8010e90: 110002c3 ldbu r4,11(r2)
8010e94: d0a05817 ldw r2,-32416(gp)
8010e98: 10c00d43 ldbu r3,53(r2)
8010e9c: d0a05817 ldw r2,-32416(gp)
8010ea0: 10800d03 ldbu r2,52(r2)
8010ea4: 10803fcc andi r2,r2,255
8010ea8: 20c6b03a or r3,r4,r3
8010eac: 1809883a mov r4,r3
8010eb0: e0fffe17 ldw r3,-8(fp)
8010eb4: 1885883a add r2,r3,r2
8010eb8: 110002c5 stb r4,11(r2)
pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
8010ebc: e0bffe17 ldw r2,-8(fp)
8010ec0: 10c00283 ldbu r3,10(r2)
8010ec4: d0a05817 ldw r2,-32416(gp)
8010ec8: 10800d83 ldbu r2,54(r2)
8010ecc: 1884b03a or r2,r3,r2
8010ed0: 1007883a mov r3,r2
8010ed4: e0bffe17 ldw r2,-8(fp)
8010ed8: 10c00285 stb r3,10(r2)
y = OSTCBCur->OSTCBY; /* Task no longer ready */
8010edc: d0a05817 ldw r2,-32416(gp)
8010ee0: 10800d03 ldbu r2,52(r2)
8010ee4: e0bfffc5 stb r2,-1(fp)
OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
8010ee8: e0ffffc3 ldbu r3,-1(fp)
8010eec: d0a05544 addi r2,gp,-32427
8010ef0: 1885883a add r2,r3,r2
8010ef4: 10800003 ldbu r2,0(r2)
8010ef8: 1007883a mov r3,r2
8010efc: d0a05817 ldw r2,-32416(gp)
8010f00: 10800d43 ldbu r2,53(r2)
8010f04: 0084303a nor r2,zero,r2
8010f08: 1884703a and r2,r3,r2
8010f0c: e0ffffc3 ldbu r3,-1(fp)
8010f10: 1009883a mov r4,r2
8010f14: d0a05544 addi r2,gp,-32427
8010f18: 1885883a add r2,r3,r2
8010f1c: 11000005 stb r4,0(r2)
if (OSRdyTbl[y] == 0) {
8010f20: e0ffffc3 ldbu r3,-1(fp)
8010f24: d0a05544 addi r2,gp,-32427
8010f28: 1885883a add r2,r3,r2
8010f2c: 10800003 ldbu r2,0(r2)
8010f30: 10803fcc andi r2,r2,255
8010f34: 1000071e bne r2,zero,8010f54 <OS_EventTaskWait+0xf4>
OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pending */
8010f38: d0a05817 ldw r2,-32416(gp)
8010f3c: 10800d83 ldbu r2,54(r2)
8010f40: 0084303a nor r2,zero,r2
8010f44: 1007883a mov r3,r2
8010f48: d0a05503 ldbu r2,-32428(gp)
8010f4c: 1884703a and r2,r3,r2
8010f50: d0a05505 stb r2,-32428(gp)
}
}
8010f54: 0001883a nop
8010f58: e037883a mov sp,fp
8010f5c: df000017 ldw fp,0(sp)
8010f60: dec00104 addi sp,sp,4
8010f64: f800283a ret
08010f68 <OS_EventTaskWaitMulti>:
* Note : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if ((OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0))
void OS_EventTaskWaitMulti (OS_EVENT **pevents_wait)
{
8010f68: defffb04 addi sp,sp,-20
8010f6c: df000415 stw fp,16(sp)
8010f70: df000404 addi fp,sp,16
8010f74: e13ffc15 stw r4,-16(fp)
OS_EVENT **pevents;
OS_EVENT *pevent;
INT8U y;
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
8010f78: d0a05817 ldw r2,-32416(gp)
8010f7c: 10000715 stw zero,28(r2)
OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)pevents_wait; /* Store ptr to ECBs in TCB */
8010f80: d0a05817 ldw r2,-32416(gp)
8010f84: e0fffc17 ldw r3,-16(fp)
8010f88: 10c00815 stw r3,32(r2)
pevents = pevents_wait;
8010f8c: e0bffc17 ldw r2,-16(fp)
8010f90: e0bfff15 stw r2,-4(fp)
pevent = *pevents;
8010f94: e0bfff17 ldw r2,-4(fp)
8010f98: 10800017 ldw r2,0(r2)
8010f9c: e0bffe15 stw r2,-8(fp)
while (pevent != (OS_EVENT *)0) { /* Put task in waiting lists */
8010fa0: 00001e06 br 801101c <OS_EventTaskWaitMulti+0xb4>
pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
8010fa4: d0a05817 ldw r2,-32416(gp)
8010fa8: 10800d03 ldbu r2,52(r2)
8010fac: 10803fcc andi r2,r2,255
8010fb0: e0fffe17 ldw r3,-8(fp)
8010fb4: 1885883a add r2,r3,r2
8010fb8: 110002c3 ldbu r4,11(r2)
8010fbc: d0a05817 ldw r2,-32416(gp)
8010fc0: 10c00d43 ldbu r3,53(r2)
8010fc4: d0a05817 ldw r2,-32416(gp)
8010fc8: 10800d03 ldbu r2,52(r2)
8010fcc: 10803fcc andi r2,r2,255
8010fd0: 20c6b03a or r3,r4,r3
8010fd4: 1809883a mov r4,r3
8010fd8: e0fffe17 ldw r3,-8(fp)
8010fdc: 1885883a add r2,r3,r2
8010fe0: 110002c5 stb r4,11(r2)
pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
8010fe4: e0bffe17 ldw r2,-8(fp)
8010fe8: 10c00283 ldbu r3,10(r2)
8010fec: d0a05817 ldw r2,-32416(gp)
8010ff0: 10800d83 ldbu r2,54(r2)
8010ff4: 1884b03a or r2,r3,r2
8010ff8: 1007883a mov r3,r2
8010ffc: e0bffe17 ldw r2,-8(fp)
8011000: 10c00285 stb r3,10(r2)
pevents++;
8011004: e0bfff17 ldw r2,-4(fp)
8011008: 10800104 addi r2,r2,4
801100c: e0bfff15 stw r2,-4(fp)
pevent = *pevents;
8011010: e0bfff17 ldw r2,-4(fp)
8011014: 10800017 ldw r2,0(r2)
8011018: e0bffe15 stw r2,-8(fp)
while (pevent != (OS_EVENT *)0) { /* Put task in waiting lists */
801101c: e0bffe17 ldw r2,-8(fp)
8011020: 103fe01e bne r2,zero,8010fa4 <OS_EventTaskWaitMulti+0x3c>
}
y = OSTCBCur->OSTCBY; /* Task no longer ready */
8011024: d0a05817 ldw r2,-32416(gp)
8011028: 10800d03 ldbu r2,52(r2)
801102c: e0bffdc5 stb r2,-9(fp)
OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
8011030: e0fffdc3 ldbu r3,-9(fp)
8011034: d0a05544 addi r2,gp,-32427
8011038: 1885883a add r2,r3,r2
801103c: 10800003 ldbu r2,0(r2)
8011040: 1007883a mov r3,r2
8011044: d0a05817 ldw r2,-32416(gp)
8011048: 10800d43 ldbu r2,53(r2)
801104c: 0084303a nor r2,zero,r2
8011050: 1884703a and r2,r3,r2
8011054: e0fffdc3 ldbu r3,-9(fp)
8011058: 1009883a mov r4,r2
801105c: d0a05544 addi r2,gp,-32427
8011060: 1885883a add r2,r3,r2
8011064: 11000005 stb r4,0(r2)
if (OSRdyTbl[y] == 0) {
8011068: e0fffdc3 ldbu r3,-9(fp)
801106c: d0a05544 addi r2,gp,-32427
8011070: 1885883a add r2,r3,r2
8011074: 10800003 ldbu r2,0(r2)
8011078: 10803fcc andi r2,r2,255
801107c: 1000071e bne r2,zero,801109c <OS_EventTaskWaitMulti+0x134>
OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pending */
8011080: d0a05817 ldw r2,-32416(gp)
8011084: 10800d83 ldbu r2,54(r2)
8011088: 0084303a nor r2,zero,r2
801108c: 1007883a mov r3,r2
8011090: d0a05503 ldbu r2,-32428(gp)
8011094: 1884703a and r2,r3,r2
8011098: d0a05505 stb r2,-32428(gp)
}
}
801109c: 0001883a nop
80110a0: e037883a mov sp,fp
80110a4: df000017 ldw fp,0(sp)
80110a8: dec00104 addi sp,sp,4
80110ac: f800283a ret
080110b0 <OS_EventTaskRemove>:
*********************************************************************************************************
*/
#if (OS_EVENT_EN)
void OS_EventTaskRemove (OS_TCB *ptcb,
OS_EVENT *pevent)
{
80110b0: defffc04 addi sp,sp,-16
80110b4: df000315 stw fp,12(sp)
80110b8: df000304 addi fp,sp,12
80110bc: e13ffe15 stw r4,-8(fp)
80110c0: e17ffd15 stw r5,-12(fp)
INT8U y;
y = ptcb->OSTCBY;
80110c4: e0bffe17 ldw r2,-8(fp)
80110c8: 10800d03 ldbu r2,52(r2)
80110cc: e0bfffc5 stb r2,-1(fp)
pevent->OSEventTbl[y] &= ~ptcb->OSTCBBitX; /* Remove task from wait list */
80110d0: e0bfffc3 ldbu r2,-1(fp)
80110d4: e0fffd17 ldw r3,-12(fp)
80110d8: 1885883a add r2,r3,r2
80110dc: 108002c3 ldbu r2,11(r2)
80110e0: 1007883a mov r3,r2
80110e4: e0bffe17 ldw r2,-8(fp)
80110e8: 10800d43 ldbu r2,53(r2)
80110ec: 0084303a nor r2,zero,r2
80110f0: 1884703a and r2,r3,r2
80110f4: 1007883a mov r3,r2
80110f8: e0bfffc3 ldbu r2,-1(fp)
80110fc: 1809883a mov r4,r3
8011100: e0fffd17 ldw r3,-12(fp)
8011104: 1885883a add r2,r3,r2
8011108: 110002c5 stb r4,11(r2)
if (pevent->OSEventTbl[y] == 0) {
801110c: e0bfffc3 ldbu r2,-1(fp)
8011110: e0fffd17 ldw r3,-12(fp)
8011114: 1885883a add r2,r3,r2
8011118: 108002c3 ldbu r2,11(r2)
801111c: 10803fcc andi r2,r2,255
8011120: 10000a1e bne r2,zero,801114c <OS_EventTaskRemove+0x9c>
pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
8011124: e0bffd17 ldw r2,-12(fp)
8011128: 10800283 ldbu r2,10(r2)
801112c: 1007883a mov r3,r2
8011130: e0bffe17 ldw r2,-8(fp)
8011134: 10800d83 ldbu r2,54(r2)
8011138: 0084303a nor r2,zero,r2
801113c: 1884703a and r2,r3,r2
8011140: 1007883a mov r3,r2
8011144: e0bffd17 ldw r2,-12(fp)
8011148: 10c00285 stb r3,10(r2)
}
}
801114c: 0001883a nop
8011150: e037883a mov sp,fp
8011154: df000017 ldw fp,0(sp)
8011158: dec00104 addi sp,sp,4
801115c: f800283a ret
08011160 <OS_EventTaskRemoveMulti>:
*********************************************************************************************************
*/
#if ((OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0))
void OS_EventTaskRemoveMulti (OS_TCB *ptcb,
OS_EVENT **pevents_multi)
{
8011160: defffa04 addi sp,sp,-24
8011164: df000515 stw fp,20(sp)
8011168: df000504 addi fp,sp,20
801116c: e13ffc15 stw r4,-16(fp)
8011170: e17ffb15 stw r5,-20(fp)
INT16U bity;
INT16U bitx;
#endif
y = ptcb->OSTCBY;
8011174: e0bffc17 ldw r2,-16(fp)
8011178: 10800d03 ldbu r2,52(r2)
801117c: e0bffdc5 stb r2,-9(fp)
bity = ptcb->OSTCBBitY;
8011180: e0bffc17 ldw r2,-16(fp)
8011184: 10800d83 ldbu r2,54(r2)
8011188: e0bffd85 stb r2,-10(fp)
bitx = ptcb->OSTCBBitX;
801118c: e0bffc17 ldw r2,-16(fp)
8011190: 10800d43 ldbu r2,53(r2)
8011194: e0bffd45 stb r2,-11(fp)
pevents = pevents_multi;
8011198: e0bffb17 ldw r2,-20(fp)
801119c: e0bfff15 stw r2,-4(fp)
pevent = *pevents;
80111a0: e0bfff17 ldw r2,-4(fp)
80111a4: 10800017 ldw r2,0(r2)
80111a8: e0bffe15 stw r2,-8(fp)
while (pevent != (OS_EVENT *)0) { /* Remove task from all events' wait lists */
80111ac: 00002306 br 801123c <OS_EventTaskRemoveMulti+0xdc>
pevent->OSEventTbl[y] &= ~bitx;
80111b0: e0bffdc3 ldbu r2,-9(fp)
80111b4: e0fffe17 ldw r3,-8(fp)
80111b8: 1885883a add r2,r3,r2
80111bc: 108002c3 ldbu r2,11(r2)
80111c0: 1007883a mov r3,r2
80111c4: e0bffd43 ldbu r2,-11(fp)
80111c8: 0084303a nor r2,zero,r2
80111cc: 1884703a and r2,r3,r2
80111d0: 1007883a mov r3,r2
80111d4: e0bffdc3 ldbu r2,-9(fp)
80111d8: 1809883a mov r4,r3
80111dc: e0fffe17 ldw r3,-8(fp)
80111e0: 1885883a add r2,r3,r2
80111e4: 110002c5 stb r4,11(r2)
if (pevent->OSEventTbl[y] == 0) {
80111e8: e0bffdc3 ldbu r2,-9(fp)
80111ec: e0fffe17 ldw r3,-8(fp)
80111f0: 1885883a add r2,r3,r2
80111f4: 108002c3 ldbu r2,11(r2)
80111f8: 10803fcc andi r2,r2,255
80111fc: 1000091e bne r2,zero,8011224 <OS_EventTaskRemoveMulti+0xc4>
pevent->OSEventGrp &= ~bity;
8011200: e0bffe17 ldw r2,-8(fp)
8011204: 10800283 ldbu r2,10(r2)
8011208: 1007883a mov r3,r2
801120c: e0bffd83 ldbu r2,-10(fp)
8011210: 0084303a nor r2,zero,r2
8011214: 1884703a and r2,r3,r2
8011218: 1007883a mov r3,r2
801121c: e0bffe17 ldw r2,-8(fp)
8011220: 10c00285 stb r3,10(r2)
}
pevents++;
8011224: e0bfff17 ldw r2,-4(fp)
8011228: 10800104 addi r2,r2,4
801122c: e0bfff15 stw r2,-4(fp)
pevent = *pevents;
8011230: e0bfff17 ldw r2,-4(fp)
8011234: 10800017 ldw r2,0(r2)
8011238: e0bffe15 stw r2,-8(fp)
while (pevent != (OS_EVENT *)0) { /* Remove task from all events' wait lists */
801123c: e0bffe17 ldw r2,-8(fp)
8011240: 103fdb1e bne r2,zero,80111b0 <OS_EventTaskRemoveMulti+0x50>
}
}
8011244: 0001883a nop
8011248: e037883a mov sp,fp
801124c: df000017 ldw fp,0(sp)
8011250: dec00104 addi sp,sp,4
8011254: f800283a ret
08011258 <OS_EventWaitListInit>:
* Note : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if (OS_EVENT_EN)
void OS_EventWaitListInit (OS_EVENT *pevent)
{
8011258: defffc04 addi sp,sp,-16
801125c: df000315 stw fp,12(sp)
8011260: df000304 addi fp,sp,12
8011264: e13ffd15 stw r4,-12(fp)
INT16U *ptbl;
#endif
INT8U i;
pevent->OSEventGrp = 0; /* No task waiting on event */
8011268: e0bffd17 ldw r2,-12(fp)
801126c: 10000285 stb zero,10(r2)
ptbl = &pevent->OSEventTbl[0];
8011270: e0bffd17 ldw r2,-12(fp)
8011274: 108002c4 addi r2,r2,11
8011278: e0bfff15 stw r2,-4(fp)
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
801127c: e03ffec5 stb zero,-5(fp)
8011280: 00000706 br 80112a0 <OS_EventWaitListInit+0x48>
*ptbl++ = 0;
8011284: e0bfff17 ldw r2,-4(fp)
8011288: 10c00044 addi r3,r2,1
801128c: e0ffff15 stw r3,-4(fp)
8011290: 10000005 stb zero,0(r2)
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
8011294: e0bffec3 ldbu r2,-5(fp)
8011298: 10800044 addi r2,r2,1
801129c: e0bffec5 stb r2,-5(fp)
80112a0: e0bffec3 ldbu r2,-5(fp)
80112a4: 108000f0 cmpltui r2,r2,3
80112a8: 103ff61e bne r2,zero,8011284 <OS_EventWaitListInit+0x2c>
}
}
80112ac: 0001883a nop
80112b0: e037883a mov sp,fp
80112b4: df000017 ldw fp,0(sp)
80112b8: dec00104 addi sp,sp,4
80112bc: f800283a ret
080112c0 <OS_InitEventList>:
* Returns : none
*********************************************************************************************************
*/
static void OS_InitEventList (void)
{
80112c0: defffb04 addi sp,sp,-20
80112c4: dfc00415 stw ra,16(sp)
80112c8: df000315 stw fp,12(sp)
80112cc: df000304 addi fp,sp,12
INT16U i;
OS_EVENT *pevent1;
OS_EVENT *pevent2;
OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl)); /* Clear the event table */
80112d0: 0142d004 movi r5,2880
80112d4: 010201b4 movhi r4,2054
80112d8: 2131eb04 addi r4,r4,-14420
80112dc: 80115b00 call 80115b0 <OS_MemClr>
pevent1 = &OSEventTbl[0];
80112e0: 008201b4 movhi r2,2054
80112e4: 10b1eb04 addi r2,r2,-14420
80112e8: e0bffe15 stw r2,-8(fp)
pevent2 = &OSEventTbl[1];
80112ec: 008201b4 movhi r2,2054
80112f0: 10b1f704 addi r2,r2,-14372
80112f4: e0bffd15 stw r2,-12(fp)
for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
80112f8: e03fff8d sth zero,-2(fp)
80112fc: 00001306 br 801134c <OS_InitEventList+0x8c>
pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
8011300: e0bffe17 ldw r2,-8(fp)
8011304: 10000005 stb zero,0(r2)
pevent1->OSEventPtr = pevent2;
8011308: e0bffe17 ldw r2,-8(fp)
801130c: e0fffd17 ldw r3,-12(fp)
8011310: 10c00115 stw r3,4(r2)
#if OS_EVENT_NAME_SIZE > 1
pevent1->OSEventName[0] = '?'; /* Unknown name */
8011314: e0bffe17 ldw r2,-8(fp)
8011318: 00c00fc4 movi r3,63
801131c: 10c00385 stb r3,14(r2)
pevent1->OSEventName[1] = OS_ASCII_NUL;
8011320: e0bffe17 ldw r2,-8(fp)
8011324: 100003c5 stb zero,15(r2)
#endif
pevent1++;
8011328: e0bffe17 ldw r2,-8(fp)
801132c: 10800c04 addi r2,r2,48
8011330: e0bffe15 stw r2,-8(fp)
pevent2++;
8011334: e0bffd17 ldw r2,-12(fp)
8011338: 10800c04 addi r2,r2,48
801133c: e0bffd15 stw r2,-12(fp)
for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
8011340: e0bfff8b ldhu r2,-2(fp)
8011344: 10800044 addi r2,r2,1
8011348: e0bfff8d sth r2,-2(fp)
801134c: e0bfff8b ldhu r2,-2(fp)
8011350: 10800ef0 cmpltui r2,r2,59
8011354: 103fea1e bne r2,zero,8011300 <OS_InitEventList+0x40>
}
pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
8011358: e0bffe17 ldw r2,-8(fp)
801135c: 10000005 stb zero,0(r2)
pevent1->OSEventPtr = (OS_EVENT *)0;
8011360: e0bffe17 ldw r2,-8(fp)
8011364: 10000115 stw zero,4(r2)
#if OS_EVENT_NAME_SIZE > 1
pevent1->OSEventName[0] = '?';
8011368: e0bffe17 ldw r2,-8(fp)
801136c: 00c00fc4 movi r3,63
8011370: 10c00385 stb r3,14(r2)
pevent1->OSEventName[1] = OS_ASCII_NUL;
8011374: e0bffe17 ldw r2,-8(fp)
8011378: 100003c5 stb zero,15(r2)
#endif
OSEventFreeList = &OSEventTbl[0];
801137c: 008201b4 movhi r2,2054
8011380: 10b1eb04 addi r2,r2,-14420
8011384: d0a05615 stw r2,-32424(gp)
OSEventFreeList->OSEventName[0] = '?'; /* Unknown name */
OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
#endif
#endif
#endif
}
8011388: 0001883a nop
801138c: e037883a mov sp,fp
8011390: dfc00117 ldw ra,4(sp)
8011394: df000017 ldw fp,0(sp)
8011398: dec00204 addi sp,sp,8
801139c: f800283a ret
080113a0 <OS_InitMisc>:
* Returns : none
*********************************************************************************************************
*/
static void OS_InitMisc (void)
{
80113a0: deffff04 addi sp,sp,-4
80113a4: df000015 stw fp,0(sp)
80113a8: d839883a mov fp,sp
#if OS_TIME_GET_SET_EN > 0
OSTime = 0L; /* Clear the 32-bit system clock */
80113ac: d0205915 stw zero,-32412(gp)
#endif
OSIntNesting = 0; /* Clear the interrupt nesting counter */
80113b0: d0205705 stb zero,-32420(gp)
OSLockNesting = 0; /* Clear the scheduling lock counter */
80113b4: d0204b05 stb zero,-32468(gp)
OSTaskCtr = 0; /* Clear the number of tasks */
80113b8: d0205105 stb zero,-32444(gp)
OSRunning = OS_FALSE; /* Indicate that multitasking not started */
80113bc: d0204b45 stb zero,-32467(gp)
OSCtxSwCtr = 0; /* Clear the context switch counter */
80113c0: d0204f15 stw zero,-32452(gp)
OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
80113c4: d0204c15 stw zero,-32464(gp)
#if OS_TASK_STAT_EN > 0
OSIdleCtrRun = 0L;
OSIdleCtrMax = 0L;
OSStatRdy = OS_FALSE; /* Statistic task is not ready */
#endif
}
80113c8: 0001883a nop
80113cc: e037883a mov sp,fp
80113d0: df000017 ldw fp,0(sp)
80113d4: dec00104 addi sp,sp,4
80113d8: f800283a ret
080113dc <OS_InitRdyList>:
* Returns : none
*********************************************************************************************************
*/
static void OS_InitRdyList (void)
{
80113dc: defffd04 addi sp,sp,-12
80113e0: df000215 stw fp,8(sp)
80113e4: df000204 addi fp,sp,8
#else
INT16U *prdytbl;
#endif
OSRdyGrp = 0; /* Clear the ready list */
80113e8: d0205505 stb zero,-32428(gp)
prdytbl = &OSRdyTbl[0];
80113ec: d0a05544 addi r2,gp,-32427
80113f0: e0bffe15 stw r2,-8(fp)
for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
80113f4: e03fffc5 stb zero,-1(fp)
80113f8: 00000706 br 8011418 <OS_InitRdyList+0x3c>
*prdytbl++ = 0;
80113fc: e0bffe17 ldw r2,-8(fp)
8011400: 10c00044 addi r3,r2,1
8011404: e0fffe15 stw r3,-8(fp)
8011408: 10000005 stb zero,0(r2)
for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
801140c: e0bfffc3 ldbu r2,-1(fp)
8011410: 10800044 addi r2,r2,1
8011414: e0bfffc5 stb r2,-1(fp)
8011418: e0bfffc3 ldbu r2,-1(fp)
801141c: 108000f0 cmpltui r2,r2,3
8011420: 103ff61e bne r2,zero,80113fc <OS_InitRdyList+0x20>
}
OSPrioCur = 0;
8011424: d0204d45 stb zero,-32459(gp)
OSPrioHighRdy = 0;
8011428: d0204d05 stb zero,-32460(gp)
OSTCBHighRdy = (OS_TCB *)0;
801142c: d0205315 stw zero,-32436(gp)
OSTCBCur = (OS_TCB *)0;
8011430: d0205815 stw zero,-32416(gp)
}
8011434: 0001883a nop
8011438: e037883a mov sp,fp
801143c: df000017 ldw fp,0(sp)
8011440: dec00104 addi sp,sp,4
8011444: f800283a ret
08011448 <OS_InitTaskIdle>:
* Returns : none
*********************************************************************************************************
*/
static void OS_InitTaskIdle (void)
{
8011448: defff804 addi sp,sp,-32
801144c: dfc00715 stw ra,28(sp)
8011450: df000615 stw fp,24(sp)
8011454: df000604 addi fp,sp,24
#endif
#if OS_TASK_CREATE_EXT_EN > 0
#if OS_STK_GROWTH == 1
(void)OSTaskCreateExt(OS_TaskIdle,
8011458: 008000c4 movi r2,3
801145c: d8800415 stw r2,16(sp)
8011460: d8000315 stw zero,12(sp)
8011464: 00808004 movi r2,512
8011468: d8800215 stw r2,8(sp)
801146c: 008201b4 movhi r2,2054
8011470: 10afeb04 addi r2,r2,-16468
8011474: d8800115 stw r2,4(sp)
8011478: 00bfffd4 movui r2,65535
801147c: d8800015 stw r2,0(sp)
8011480: 01c00504 movi r7,20
8011484: 018201b4 movhi r6,2054
8011488: 31b1ea04 addi r6,r6,-14424
801148c: 000b883a mov r5,zero
8011490: 01020074 movhi r4,2049
8011494: 21061a04 addi r4,r4,6248
8011498: 801664c0 call 801664c <OSTaskCreateExt>
OS_TASK_IDLE_PRIO);
#endif
#endif
#if OS_TASK_NAME_SIZE > 14
OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"uC/OS-II Idle", &err);
801149c: e0bfffc4 addi r2,fp,-1
80114a0: 100d883a mov r6,r2
80114a4: 01420134 movhi r5,2052
80114a8: 295e0d04 addi r5,r5,30772
80114ac: 01000504 movi r4,20
80114b0: 8016d640 call 8016d64 <OSTaskNameSet>
#else
#if OS_TASK_NAME_SIZE > 7
OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"OS-Idle", &err);
#endif
#endif
}
80114b4: 0001883a nop
80114b8: e037883a mov sp,fp
80114bc: dfc00117 ldw ra,4(sp)
80114c0: df000017 ldw fp,0(sp)
80114c4: dec00204 addi sp,sp,8
80114c8: f800283a ret
080114cc <OS_InitTCBList>:
* Returns : none
*********************************************************************************************************
*/
static void OS_InitTCBList (void)
{
80114cc: defffb04 addi sp,sp,-20
80114d0: dfc00415 stw ra,16(sp)
80114d4: df000315 stw fp,12(sp)
80114d8: df000304 addi fp,sp,12
INT8U i;
OS_TCB *ptcb1;
OS_TCB *ptcb2;
OS_MemClr((INT8U *)&OSTCBTbl[0], sizeof(OSTCBTbl)); /* Clear all the TCBs */
80114dc: 0140a204 movi r5,648
80114e0: 010201b4 movhi r4,2054
80114e4: 2134bb04 addi r4,r4,-11540
80114e8: 80115b00 call 80115b0 <OS_MemClr>
OS_MemClr((INT8U *)&OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl)); /* Clear the priority table */
80114ec: 01401504 movi r5,84
80114f0: 010201b4 movhi r4,2054
80114f4: 21355d04 addi r4,r4,-10892
80114f8: 80115b00 call 80115b0 <OS_MemClr>
ptcb1 = &OSTCBTbl[0];
80114fc: 008201b4 movhi r2,2054
8011500: 10b4bb04 addi r2,r2,-11540
8011504: e0bffe15 stw r2,-8(fp)
ptcb2 = &OSTCBTbl[1];
8011508: 008201b4 movhi r2,2054
801150c: 10b4d604 addi r2,r2,-11432
8011510: e0bffd15 stw r2,-12(fp)
for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
8011514: e03fffc5 stb zero,-1(fp)
8011518: 00001106 br 8011560 <OS_InitTCBList+0x94>
ptcb1->OSTCBNext = ptcb2;
801151c: e0bffe17 ldw r2,-8(fp)
8011520: e0fffd17 ldw r3,-12(fp)
8011524: 10c00515 stw r3,20(r2)
#if OS_TASK_NAME_SIZE > 1
ptcb1->OSTCBTaskName[0] = '?'; /* Unknown name */
8011528: e0bffe17 ldw r2,-8(fp)
801152c: 00c00fc4 movi r3,63
8011530: 10c01305 stb r3,76(r2)
ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
8011534: e0bffe17 ldw r2,-8(fp)
8011538: 10001345 stb zero,77(r2)
#endif
ptcb1++;
801153c: e0bffe17 ldw r2,-8(fp)
8011540: 10801b04 addi r2,r2,108
8011544: e0bffe15 stw r2,-8(fp)
ptcb2++;
8011548: e0bffd17 ldw r2,-12(fp)
801154c: 10801b04 addi r2,r2,108
8011550: e0bffd15 stw r2,-12(fp)
for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
8011554: e0bfffc3 ldbu r2,-1(fp)
8011558: 10800044 addi r2,r2,1
801155c: e0bfffc5 stb r2,-1(fp)
8011560: e0bfffc3 ldbu r2,-1(fp)
8011564: 10800170 cmpltui r2,r2,5
8011568: 103fec1e bne r2,zero,801151c <OS_InitTCBList+0x50>
}
ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
801156c: e0bffe17 ldw r2,-8(fp)
8011570: 10000515 stw zero,20(r2)
#if OS_TASK_NAME_SIZE > 1
ptcb1->OSTCBTaskName[0] = '?'; /* Unknown name */
8011574: e0bffe17 ldw r2,-8(fp)
8011578: 00c00fc4 movi r3,63
801157c: 10c01305 stb r3,76(r2)
ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
8011580: e0bffe17 ldw r2,-8(fp)
8011584: 10001345 stb zero,77(r2)
#endif
OSTCBList = (OS_TCB *)0; /* TCB lists initializations */
8011588: d0204e15 stw zero,-32456(gp)
OSTCBFreeList = &OSTCBTbl[0];
801158c: 008201b4 movhi r2,2054
8011590: 10b4bb04 addi r2,r2,-11540
8011594: d0a05015 stw r2,-32448(gp)
}
8011598: 0001883a nop
801159c: e037883a mov sp,fp
80115a0: dfc00117 ldw ra,4(sp)
80115a4: df000017 ldw fp,0(sp)
80115a8: dec00204 addi sp,sp,8
80115ac: f800283a ret
080115b0 <OS_MemClr>:
* of the alignment of the destination.
*********************************************************************************************************
*/
void OS_MemClr (INT8U *pdest, INT16U size)
{
80115b0: defffd04 addi sp,sp,-12
80115b4: df000215 stw fp,8(sp)
80115b8: df000204 addi fp,sp,8
80115bc: e13fff15 stw r4,-4(fp)
80115c0: 2805883a mov r2,r5
80115c4: e0bffe0d sth r2,-8(fp)
while (size > 0) {
80115c8: 00000706 br 80115e8 <OS_MemClr+0x38>
*pdest++ = (INT8U)0;
80115cc: e0bfff17 ldw r2,-4(fp)
80115d0: 10c00044 addi r3,r2,1
80115d4: e0ffff15 stw r3,-4(fp)
80115d8: 10000005 stb zero,0(r2)
size--;
80115dc: e0bffe0b ldhu r2,-8(fp)
80115e0: 10bfffc4 addi r2,r2,-1
80115e4: e0bffe0d sth r2,-8(fp)
while (size > 0) {
80115e8: e0bffe0b ldhu r2,-8(fp)
80115ec: 103ff71e bne r2,zero,80115cc <OS_MemClr+0x1c>
}
}
80115f0: 0001883a nop
80115f4: e037883a mov sp,fp
80115f8: df000017 ldw fp,0(sp)
80115fc: dec00104 addi sp,sp,4
8011600: f800283a ret
08011604 <OS_MemCopy>:
* of the alignment of the source and destination.
*********************************************************************************************************
*/
void OS_MemCopy (INT8U *pdest, INT8U *psrc, INT16U size)
{
8011604: defffc04 addi sp,sp,-16
8011608: df000315 stw fp,12(sp)
801160c: df000304 addi fp,sp,12
8011610: e13fff15 stw r4,-4(fp)
8011614: e17ffe15 stw r5,-8(fp)
8011618: 3005883a mov r2,r6
801161c: e0bffd0d sth r2,-12(fp)
while (size > 0) {
8011620: 00000b06 br 8011650 <OS_MemCopy+0x4c>
*pdest++ = *psrc++;
8011624: e0fffe17 ldw r3,-8(fp)
8011628: 18800044 addi r2,r3,1
801162c: e0bffe15 stw r2,-8(fp)
8011630: e0bfff17 ldw r2,-4(fp)
8011634: 11000044 addi r4,r2,1
8011638: e13fff15 stw r4,-4(fp)
801163c: 18c00003 ldbu r3,0(r3)
8011640: 10c00005 stb r3,0(r2)
size--;
8011644: e0bffd0b ldhu r2,-12(fp)
8011648: 10bfffc4 addi r2,r2,-1
801164c: e0bffd0d sth r2,-12(fp)
while (size > 0) {
8011650: e0bffd0b ldhu r2,-12(fp)
8011654: 103ff31e bne r2,zero,8011624 <OS_MemCopy+0x20>
}
}
8011658: 0001883a nop
801165c: e037883a mov sp,fp
8011660: df000017 ldw fp,0(sp)
8011664: dec00104 addi sp,sp,4
8011668: f800283a ret
0801166c <OS_Sched>:
* 2) Rescheduling is prevented when the scheduler is locked (see OS_SchedLock())
*********************************************************************************************************
*/
void OS_Sched (void)
{
801166c: defffb04 addi sp,sp,-20
8011670: dfc00415 stw ra,16(sp)
8011674: df000315 stw fp,12(sp)
8011678: df000304 addi fp,sp,12
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801167c: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
8011680: 0005303a rdctl r2,status
8011684: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8011688: e0fffe17 ldw r3,-8(fp)
801168c: 00bfff84 movi r2,-2
8011690: 1884703a and r2,r3,r2
8011694: 1001703a wrctl status,r2
return context;
8011698: e0bffe17 ldw r2,-8(fp)
#endif
OS_ENTER_CRITICAL();
801169c: e0bfff15 stw r2,-4(fp)
if (OSIntNesting == 0) { /* Schedule only if all ISRs done and ... */
80116a0: d0a05703 ldbu r2,-32420(gp)
80116a4: 10803fcc andi r2,r2,255
80116a8: 1000181e bne r2,zero,801170c <OS_Sched+0xa0>
if (OSLockNesting == 0) { /* ... scheduler is not locked */
80116ac: d0a04b03 ldbu r2,-32468(gp)
80116b0: 10803fcc andi r2,r2,255
80116b4: 1000151e bne r2,zero,801170c <OS_Sched+0xa0>
OS_SchedNew();
80116b8: 80117340 call 8011734 <OS_SchedNew>
if (OSPrioHighRdy != OSPrioCur) { /* No Ctx Sw if current task is highest rdy */
80116bc: d0e04d03 ldbu r3,-32460(gp)
80116c0: d0a04d43 ldbu r2,-32459(gp)
80116c4: 18c03fcc andi r3,r3,255
80116c8: 10803fcc andi r2,r2,255
80116cc: 18800f26 beq r3,r2,801170c <OS_Sched+0xa0>
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
80116d0: d0a04d03 ldbu r2,-32460(gp)
80116d4: 10803fcc andi r2,r2,255
80116d8: 100690ba slli r3,r2,2
80116dc: 008201b4 movhi r2,2054
80116e0: 1885883a add r2,r3,r2
80116e4: 10b55d17 ldw r2,-10892(r2)
80116e8: d0a05315 stw r2,-32436(gp)
#if OS_TASK_PROFILE_EN > 0
OSTCBHighRdy->OSTCBCtxSwCtr++; /* Inc. # of context switches to this task */
80116ec: d0a05317 ldw r2,-32436(gp)
80116f0: 10c00e17 ldw r3,56(r2)
80116f4: 18c00044 addi r3,r3,1
80116f8: 10c00e15 stw r3,56(r2)
#endif
OSCtxSwCtr++; /* Increment context switch counter */
80116fc: d0a04f17 ldw r2,-32452(gp)
8011700: 10800044 addi r2,r2,1
8011704: d0a04f15 stw r2,-32452(gp)
OS_TASK_SW(); /* Perform a context switch */
8011708: 80383880 call 8038388 <OSCtxSw>
801170c: e0bfff17 ldw r2,-4(fp)
8011710: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8011714: e0bffd17 ldw r2,-12(fp)
8011718: 1001703a wrctl status,r2
}
}
}
OS_EXIT_CRITICAL();
}
801171c: 0001883a nop
8011720: e037883a mov sp,fp
8011724: dfc00117 ldw ra,4(sp)
8011728: df000017 ldw fp,0(sp)
801172c: dec00204 addi sp,sp,8
8011730: f800283a ret
08011734 <OS_SchedNew>:
* 2) Interrupts are assumed to be disabled when this function is called.
*********************************************************************************************************
*/
static void OS_SchedNew (void)
{
8011734: defffe04 addi sp,sp,-8
8011738: df000115 stw fp,4(sp)
801173c: df000104 addi fp,sp,4
#if OS_LOWEST_PRIO <= 63 /* See if we support up to 64 tasks */
INT8U y;
y = OSUnMapTbl[OSRdyGrp];
8011740: d0a05503 ldbu r2,-32428(gp)
8011744: 10c03fcc andi r3,r2,255
8011748: 00820134 movhi r2,2052
801174c: 1885883a add r2,r3,r2
8011750: 109dcd03 ldbu r2,30516(r2)
8011754: e0bfffc5 stb r2,-1(fp)
OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
8011758: e0bfffc3 ldbu r2,-1(fp)
801175c: 100490fa slli r2,r2,3
8011760: 1009883a mov r4,r2
8011764: e0ffffc3 ldbu r3,-1(fp)
8011768: d0a05544 addi r2,gp,-32427
801176c: 1885883a add r2,r3,r2
8011770: 10800003 ldbu r2,0(r2)
8011774: 10c03fcc andi r3,r2,255
8011778: 00820134 movhi r2,2052
801177c: 1885883a add r2,r3,r2
8011780: 109dcd03 ldbu r2,30516(r2)
8011784: 2085883a add r2,r4,r2
8011788: d0a04d05 stb r2,-32460(gp)
OSPrioHighRdy = (INT8U)((y << 4) + OSUnMapTbl[(*ptbl & 0xFF)]);
} else {
OSPrioHighRdy = (INT8U)((y << 4) + OSUnMapTbl[(*ptbl >> 8) & 0xFF] + 8);
}
#endif
}
801178c: 0001883a nop
8011790: e037883a mov sp,fp
8011794: df000017 ldw fp,0(sp)
8011798: dec00104 addi sp,sp,4
801179c: f800283a ret
080117a0 <OS_StrCopy>:
*********************************************************************************************************
*/
#if (OS_EVENT_NAME_SIZE > 1) || (OS_FLAG_NAME_SIZE > 1) || (OS_MEM_NAME_SIZE > 1) || (OS_TASK_NAME_SIZE > 1) || (OS_TMR_CFG_NAME_SIZE > 1)
INT8U OS_StrCopy (INT8U *pdest, INT8U *psrc)
{
80117a0: defffc04 addi sp,sp,-16
80117a4: df000315 stw fp,12(sp)
80117a8: df000304 addi fp,sp,12
80117ac: e13ffe15 stw r4,-8(fp)
80117b0: e17ffd15 stw r5,-12(fp)
INT8U len;
len = 0;
80117b4: e03fffc5 stb zero,-1(fp)
while (*psrc != OS_ASCII_NUL) {
80117b8: 00000b06 br 80117e8 <OS_StrCopy+0x48>
*pdest++ = *psrc++;
80117bc: e0fffd17 ldw r3,-12(fp)
80117c0: 18800044 addi r2,r3,1
80117c4: e0bffd15 stw r2,-12(fp)
80117c8: e0bffe17 ldw r2,-8(fp)
80117cc: 11000044 addi r4,r2,1
80117d0: e13ffe15 stw r4,-8(fp)
80117d4: 18c00003 ldbu r3,0(r3)
80117d8: 10c00005 stb r3,0(r2)
len++;
80117dc: e0bfffc3 ldbu r2,-1(fp)
80117e0: 10800044 addi r2,r2,1
80117e4: e0bfffc5 stb r2,-1(fp)
while (*psrc != OS_ASCII_NUL) {
80117e8: e0bffd17 ldw r2,-12(fp)
80117ec: 10800003 ldbu r2,0(r2)
80117f0: 10803fcc andi r2,r2,255
80117f4: 103ff11e bne r2,zero,80117bc <OS_StrCopy+0x1c>
}
*pdest = OS_ASCII_NUL;
80117f8: e0bffe17 ldw r2,-8(fp)
80117fc: 10000005 stb zero,0(r2)
return (len);
8011800: e0bfffc3 ldbu r2,-1(fp)
}
8011804: e037883a mov sp,fp
8011808: df000017 ldw fp,0(sp)
801180c: dec00104 addi sp,sp,4
8011810: f800283a ret
08011814 <OS_StrLen>:
*********************************************************************************************************
*/
#if (OS_EVENT_NAME_SIZE > 1) || (OS_FLAG_NAME_SIZE > 1) || (OS_MEM_NAME_SIZE > 1) || (OS_TASK_NAME_SIZE > 1) || (OS_TMR_CFG_NAME_SIZE > 1)
INT8U OS_StrLen (INT8U *psrc)
{
8011814: defffd04 addi sp,sp,-12
8011818: df000215 stw fp,8(sp)
801181c: df000204 addi fp,sp,8
8011820: e13ffe15 stw r4,-8(fp)
INT8U len;
len = 0;
8011824: e03fffc5 stb zero,-1(fp)
while (*psrc != OS_ASCII_NUL) {
8011828: 00000606 br 8011844 <OS_StrLen+0x30>
psrc++;
801182c: e0bffe17 ldw r2,-8(fp)
8011830: 10800044 addi r2,r2,1
8011834: e0bffe15 stw r2,-8(fp)
len++;
8011838: e0bfffc3 ldbu r2,-1(fp)
801183c: 10800044 addi r2,r2,1
8011840: e0bfffc5 stb r2,-1(fp)
while (*psrc != OS_ASCII_NUL) {
8011844: e0bffe17 ldw r2,-8(fp)
8011848: 10800003 ldbu r2,0(r2)
801184c: 10803fcc andi r2,r2,255
8011850: 103ff61e bne r2,zero,801182c <OS_StrLen+0x18>
}
return (len);
8011854: e0bfffc3 ldbu r2,-1(fp)
}
8011858: e037883a mov sp,fp
801185c: df000017 ldw fp,0(sp)
8011860: dec00104 addi sp,sp,4
8011864: f800283a ret
08011868 <OS_TaskIdle>:
* power.
*********************************************************************************************************
*/
void OS_TaskIdle (void *p_arg)
{
8011868: defffa04 addi sp,sp,-24
801186c: dfc00515 stw ra,20(sp)
8011870: df000415 stw fp,16(sp)
8011874: df000404 addi fp,sp,16
8011878: e13ffc15 stw r4,-16(fp)
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801187c: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
8011880: 0005303a rdctl r2,status
8011884: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8011888: e0fffd17 ldw r3,-12(fp)
801188c: 00bfff84 movi r2,-2
8011890: 1884703a and r2,r3,r2
8011894: 1001703a wrctl status,r2
return context;
8011898: e0bffd17 ldw r2,-12(fp)
(void)p_arg; /* Prevent compiler warning for not using 'p_arg' */
for (;;) {
OS_ENTER_CRITICAL();
801189c: e0bfff15 stw r2,-4(fp)
OSIdleCtr++;
80118a0: d0a04c17 ldw r2,-32464(gp)
80118a4: 10800044 addi r2,r2,1
80118a8: d0a04c15 stw r2,-32464(gp)
80118ac: e0bfff17 ldw r2,-4(fp)
80118b0: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context);
80118b4: e0bffe17 ldw r2,-8(fp)
80118b8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OSTaskIdleHook(); /* Call user definable HOOK */
80118bc: 80386980 call 8038698 <OSTaskIdleHook>
OS_ENTER_CRITICAL();
80118c0: 003fef06 br 8011880 <OS_TaskIdle+0x18>
080118c4 <OS_TCBInit>:
* Note : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
INT8U OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt)
{
80118c4: defff204 addi sp,sp,-56
80118c8: dfc00d15 stw ra,52(sp)
80118cc: df000c15 stw fp,48(sp)
80118d0: df000c04 addi fp,sp,48
80118d4: 2007883a mov r3,r4
80118d8: e17ff715 stw r5,-36(fp)
80118dc: e1bff615 stw r6,-40(fp)
80118e0: 3809883a mov r4,r7
80118e4: e0800417 ldw r2,16(fp)
80118e8: e0fff805 stb r3,-32(fp)
80118ec: 2007883a mov r3,r4
80118f0: e0fff50d sth r3,-44(fp)
80118f4: e0bff40d sth r2,-48(fp)
OS_TCB *ptcb;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80118f8: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
80118fc: 0005303a rdctl r2,status
8011900: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8011904: e0fffd17 ldw r3,-12(fp)
8011908: 00bfff84 movi r2,-2
801190c: 1884703a and r2,r3,r2
8011910: 1001703a wrctl status,r2
return context;
8011914: e0bffd17 ldw r2,-12(fp)
#endif
OS_ENTER_CRITICAL();
8011918: e0bfff15 stw r2,-4(fp)
ptcb = OSTCBFreeList; /* Get a free TCB from the free TCB list */
801191c: d0a05017 ldw r2,-32448(gp)
8011920: e0bffe15 stw r2,-8(fp)
if (ptcb != (OS_TCB *)0) {
8011924: e0bffe17 ldw r2,-8(fp)
8011928: 10009126 beq r2,zero,8011b70 <OS_TCBInit+0x2ac>
OSTCBFreeList = ptcb->OSTCBNext; /* Update pointer to free TCB list */
801192c: e0bffe17 ldw r2,-8(fp)
8011930: 10800517 ldw r2,20(r2)
8011934: d0a05015 stw r2,-32448(gp)
8011938: e0bfff17 ldw r2,-4(fp)
801193c: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8011940: e0bffb17 ldw r2,-20(fp)
8011944: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
ptcb->OSTCBStkPtr = ptos; /* Load Stack pointer in TCB */
8011948: e0bffe17 ldw r2,-8(fp)
801194c: e0fff717 ldw r3,-36(fp)
8011950: 10c00015 stw r3,0(r2)
ptcb->OSTCBPrio = prio; /* Load task priority into TCB */
8011954: e0bffe17 ldw r2,-8(fp)
8011958: e0fff803 ldbu r3,-32(fp)
801195c: 10c00c85 stb r3,50(r2)
ptcb->OSTCBStat = OS_STAT_RDY; /* Task is ready to run */
8011960: e0bffe17 ldw r2,-8(fp)
8011964: 10000c05 stb zero,48(r2)
ptcb->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */
8011968: e0bffe17 ldw r2,-8(fp)
801196c: 10000c45 stb zero,49(r2)
ptcb->OSTCBDly = 0; /* Task is not delayed */
8011970: e0bffe17 ldw r2,-8(fp)
8011974: 10000b8d sth zero,46(r2)
#if OS_TASK_CREATE_EXT_EN > 0
ptcb->OSTCBExtPtr = pext; /* Store pointer to TCB extension */
8011978: e0bffe17 ldw r2,-8(fp)
801197c: e0c00317 ldw r3,12(fp)
8011980: 10c00115 stw r3,4(r2)
ptcb->OSTCBStkSize = stk_size; /* Store stack size */
8011984: e0bffe17 ldw r2,-8(fp)
8011988: e0c00217 ldw r3,8(fp)
801198c: 10c00315 stw r3,12(r2)
ptcb->OSTCBStkBottom = pbos; /* Store pointer to bottom of stack */
8011990: e0bffe17 ldw r2,-8(fp)
8011994: e0fff617 ldw r3,-40(fp)
8011998: 10c00215 stw r3,8(r2)
ptcb->OSTCBOpt = opt; /* Store task options */
801199c: e0bffe17 ldw r2,-8(fp)
80119a0: e0fff40b ldhu r3,-48(fp)
80119a4: 10c0040d sth r3,16(r2)
ptcb->OSTCBId = id; /* Store task ID */
80119a8: e0bffe17 ldw r2,-8(fp)
80119ac: e0fff50b ldhu r3,-44(fp)
80119b0: 10c0048d sth r3,18(r2)
opt = opt;
id = id;
#endif
#if OS_TASK_DEL_EN > 0
ptcb->OSTCBDelReq = OS_ERR_NONE;
80119b4: e0bffe17 ldw r2,-8(fp)
80119b8: 10000dc5 stb zero,55(r2)
#endif
#if OS_LOWEST_PRIO <= 63
ptcb->OSTCBY = (INT8U)(prio >> 3); /* Pre-compute X, Y, BitX and BitY */
80119bc: e0bff803 ldbu r2,-32(fp)
80119c0: 1004d0fa srli r2,r2,3
80119c4: 1007883a mov r3,r2
80119c8: e0bffe17 ldw r2,-8(fp)
80119cc: 10c00d05 stb r3,52(r2)
ptcb->OSTCBX = (INT8U)(prio & 0x07);
80119d0: e0bff803 ldbu r2,-32(fp)
80119d4: 108001cc andi r2,r2,7
80119d8: 1007883a mov r3,r2
80119dc: e0bffe17 ldw r2,-8(fp)
80119e0: 10c00cc5 stb r3,51(r2)
ptcb->OSTCBBitY = (INT8U)(1 << ptcb->OSTCBY);
80119e4: e0bffe17 ldw r2,-8(fp)
80119e8: 10800d03 ldbu r2,52(r2)
80119ec: 10803fcc andi r2,r2,255
80119f0: 00c00044 movi r3,1
80119f4: 1884983a sll r2,r3,r2
80119f8: 1007883a mov r3,r2
80119fc: e0bffe17 ldw r2,-8(fp)
8011a00: 10c00d85 stb r3,54(r2)
ptcb->OSTCBBitX = (INT8U)(1 << ptcb->OSTCBX);
8011a04: e0bffe17 ldw r2,-8(fp)
8011a08: 10800cc3 ldbu r2,51(r2)
8011a0c: 10803fcc andi r2,r2,255
8011a10: 00c00044 movi r3,1
8011a14: 1884983a sll r2,r3,r2
8011a18: 1007883a mov r3,r2
8011a1c: e0bffe17 ldw r2,-8(fp)
8011a20: 10c00d45 stb r3,53(r2)
ptcb->OSTCBBitY = (INT16U)(1 << ptcb->OSTCBY);
ptcb->OSTCBBitX = (INT16U)(1 << ptcb->OSTCBX);
#endif
#if (OS_EVENT_EN)
ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Task is not pending on an event */
8011a24: e0bffe17 ldw r2,-8(fp)
8011a28: 10000715 stw zero,28(r2)
#if (OS_EVENT_MULTI_EN > 0)
ptcb->OSTCBEventMultiPtr = (OS_EVENT **)0; /* Task is not pending on any events */
8011a2c: e0bffe17 ldw r2,-8(fp)
8011a30: 10000815 stw zero,32(r2)
#endif
#endif
#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) && (OS_TASK_DEL_EN > 0)
ptcb->OSTCBFlagNode = (OS_FLAG_NODE *)0; /* Task is not pending on an event flag */
8011a34: e0bffe17 ldw r2,-8(fp)
8011a38: 10000a15 stw zero,40(r2)
#endif
#if (OS_MBOX_EN > 0) || ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
ptcb->OSTCBMsg = (void *)0; /* No message received */
8011a3c: e0bffe17 ldw r2,-8(fp)
8011a40: 10000915 stw zero,36(r2)
#endif
#if OS_TASK_PROFILE_EN > 0
ptcb->OSTCBCtxSwCtr = 0L; /* Initialize profiling variables */
8011a44: e0bffe17 ldw r2,-8(fp)
8011a48: 10000e15 stw zero,56(r2)
ptcb->OSTCBCyclesStart = 0L;
8011a4c: e0bffe17 ldw r2,-8(fp)
8011a50: 10001015 stw zero,64(r2)
ptcb->OSTCBCyclesTot = 0L;
8011a54: e0bffe17 ldw r2,-8(fp)
8011a58: 10000f15 stw zero,60(r2)
ptcb->OSTCBStkBase = (OS_STK *)0;
8011a5c: e0bffe17 ldw r2,-8(fp)
8011a60: 10001115 stw zero,68(r2)
ptcb->OSTCBStkUsed = 0L;
8011a64: e0bffe17 ldw r2,-8(fp)
8011a68: 10001215 stw zero,72(r2)
#endif
#if OS_TASK_NAME_SIZE > 1
ptcb->OSTCBTaskName[0] = '?'; /* Unknown name at task creation */
8011a6c: e0bffe17 ldw r2,-8(fp)
8011a70: 00c00fc4 movi r3,63
8011a74: 10c01305 stb r3,76(r2)
ptcb->OSTCBTaskName[1] = OS_ASCII_NUL;
8011a78: e0bffe17 ldw r2,-8(fp)
8011a7c: 10001345 stb zero,77(r2)
#endif
OSTCBInitHook(ptcb);
8011a80: e13ffe17 ldw r4,-8(fp)
8011a84: 80386b80 call 80386b8 <OSTCBInitHook>
OSTaskCreateHook(ptcb); /* Call user defined hook */
8011a88: e13ffe17 ldw r4,-8(fp)
8011a8c: 80385a40 call 80385a4 <OSTaskCreateHook>
NIOS2_READ_STATUS (context);
8011a90: 0005303a rdctl r2,status
8011a94: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8011a98: e0fffc17 ldw r3,-16(fp)
8011a9c: 00bfff84 movi r2,-2
8011aa0: 1884703a and r2,r3,r2
8011aa4: 1001703a wrctl status,r2
return context;
8011aa8: e0bffc17 ldw r2,-16(fp)
OS_ENTER_CRITICAL();
8011aac: e0bfff15 stw r2,-4(fp)
OSTCBPrioTbl[prio] = ptcb;
8011ab0: e0bff803 ldbu r2,-32(fp)
8011ab4: 100890ba slli r4,r2,2
8011ab8: e0fffe17 ldw r3,-8(fp)
8011abc: 008201b4 movhi r2,2054
8011ac0: 2085883a add r2,r4,r2
8011ac4: 10f55d15 stw r3,-10892(r2)
ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */
8011ac8: d0e04e17 ldw r3,-32456(gp)
8011acc: e0bffe17 ldw r2,-8(fp)
8011ad0: 10c00515 stw r3,20(r2)
ptcb->OSTCBPrev = (OS_TCB *)0;
8011ad4: e0bffe17 ldw r2,-8(fp)
8011ad8: 10000615 stw zero,24(r2)
if (OSTCBList != (OS_TCB *)0) {
8011adc: d0a04e17 ldw r2,-32456(gp)
8011ae0: 10000326 beq r2,zero,8011af0 <OS_TCBInit+0x22c>
OSTCBList->OSTCBPrev = ptcb;
8011ae4: d0a04e17 ldw r2,-32456(gp)
8011ae8: e0fffe17 ldw r3,-8(fp)
8011aec: 10c00615 stw r3,24(r2)
}
OSTCBList = ptcb;
8011af0: e0bffe17 ldw r2,-8(fp)
8011af4: d0a04e15 stw r2,-32456(gp)
OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready to run */
8011af8: e0bffe17 ldw r2,-8(fp)
8011afc: 10c00d83 ldbu r3,54(r2)
8011b00: d0a05503 ldbu r2,-32428(gp)
8011b04: 1884b03a or r2,r3,r2
8011b08: d0a05505 stb r2,-32428(gp)
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
8011b0c: e0bffe17 ldw r2,-8(fp)
8011b10: 10800d03 ldbu r2,52(r2)
8011b14: 10c03fcc andi r3,r2,255
8011b18: d0a05544 addi r2,gp,-32427
8011b1c: 1885883a add r2,r3,r2
8011b20: 11000003 ldbu r4,0(r2)
8011b24: e0bffe17 ldw r2,-8(fp)
8011b28: 10800d43 ldbu r2,53(r2)
8011b2c: e0fffe17 ldw r3,-8(fp)
8011b30: 18c00d03 ldbu r3,52(r3)
8011b34: 18c03fcc andi r3,r3,255
8011b38: 2084b03a or r2,r4,r2
8011b3c: 1009883a mov r4,r2
8011b40: d0a05544 addi r2,gp,-32427
8011b44: 1885883a add r2,r3,r2
8011b48: 11000005 stb r4,0(r2)
OSTaskCtr++; /* Increment the #tasks counter */
8011b4c: d0a05103 ldbu r2,-32444(gp)
8011b50: 10800044 addi r2,r2,1
8011b54: d0a05105 stb r2,-32444(gp)
8011b58: e0bfff17 ldw r2,-4(fp)
8011b5c: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8011b60: e0bffa17 ldw r2,-24(fp)
8011b64: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
8011b68: 0005883a mov r2,zero
8011b6c: 00000506 br 8011b84 <OS_TCBInit+0x2c0>
8011b70: e0bfff17 ldw r2,-4(fp)
8011b74: e0bff915 stw r2,-28(fp)
8011b78: e0bff917 ldw r2,-28(fp)
8011b7c: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NO_MORE_TCB);
8011b80: 00801084 movi r2,66
}
8011b84: e037883a mov sp,fp
8011b88: dfc00117 ldw ra,4(sp)
8011b8c: df000017 ldw fp,0(sp)
8011b90: dec00204 addi sp,sp,8
8011b94: f800283a ret
08011b98 <OSFlagAccept>:
*********************************************************************************************************
*/
#if OS_FLAG_ACCEPT_EN > 0
OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *perr)
{
8011b98: defff204 addi sp,sp,-56
8011b9c: df000d15 stw fp,52(sp)
8011ba0: df000d04 addi fp,sp,52
8011ba4: e13ff615 stw r4,-40(fp)
8011ba8: 2805883a mov r2,r5
8011bac: 3007883a mov r3,r6
8011bb0: e1fff315 stw r7,-52(fp)
8011bb4: e0bff50d sth r2,-44(fp)
8011bb8: 1805883a mov r2,r3
8011bbc: e0bff405 stb r2,-48(fp)
OS_FLAGS flags_rdy;
INT8U result;
BOOLEAN consume;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8011bc0: e03ffe15 stw zero,-8(fp)
if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
*perr = OS_ERR_FLAG_INVALID_PGRP;
return ((OS_FLAGS)0);
}
#endif
if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */
8011bc4: e0bff617 ldw r2,-40(fp)
8011bc8: 10800003 ldbu r2,0(r2)
8011bcc: 10803fcc andi r2,r2,255
8011bd0: 10800160 cmpeqi r2,r2,5
8011bd4: 1000051e bne r2,zero,8011bec <OSFlagAccept+0x54>
*perr = OS_ERR_EVENT_TYPE;
8011bd8: e0bff317 ldw r2,-52(fp)
8011bdc: 00c00044 movi r3,1
8011be0: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
8011be4: 0005883a mov r2,zero
8011be8: 00009f06 br 8011e68 <OSFlagAccept+0x2d0>
}
result = (INT8U)(wait_type & OS_FLAG_CONSUME);
8011bec: e0fff403 ldbu r3,-48(fp)
8011bf0: 00bfe004 movi r2,-128
8011bf4: 1884703a and r2,r3,r2
8011bf8: e0bffdc5 stb r2,-9(fp)
if (result != (INT8U)0) { /* See if we need to consume the flags */
8011bfc: e0bffdc3 ldbu r2,-9(fp)
8011c00: 10000626 beq r2,zero,8011c1c <OSFlagAccept+0x84>
wait_type &= ~OS_FLAG_CONSUME;
8011c04: e0bff403 ldbu r2,-48(fp)
8011c08: 10801fcc andi r2,r2,127
8011c0c: e0bff405 stb r2,-48(fp)
consume = OS_TRUE;
8011c10: 00800044 movi r2,1
8011c14: e0bfff45 stb r2,-3(fp)
8011c18: 00000106 br 8011c20 <OSFlagAccept+0x88>
} else {
consume = OS_FALSE;
8011c1c: e03fff45 stb zero,-3(fp)
}
/*$PAGE*/
*perr = OS_ERR_NONE; /* Assume NO error until proven otherwise. */
8011c20: e0bff317 ldw r2,-52(fp)
8011c24: 10000005 stb zero,0(r2)
NIOS2_READ_STATUS (context);
8011c28: 0005303a rdctl r2,status
8011c2c: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8011c30: e0fffc17 ldw r3,-16(fp)
8011c34: 00bfff84 movi r2,-2
8011c38: 1884703a and r2,r3,r2
8011c3c: 1001703a wrctl status,r2
return context;
8011c40: e0bffc17 ldw r2,-16(fp)
OS_ENTER_CRITICAL();
8011c44: e0bffe15 stw r2,-8(fp)
switch (wait_type) {
8011c48: e0bff403 ldbu r2,-48(fp)
8011c4c: 10c00060 cmpeqi r3,r2,1
8011c50: 18005f1e bne r3,zero,8011dd0 <OSFlagAccept+0x238>
8011c54: 10c00088 cmpgei r3,r2,2
8011c58: 1800021e bne r3,zero,8011c64 <OSFlagAccept+0xcc>
8011c5c: 10003f26 beq r2,zero,8011d5c <OSFlagAccept+0x1c4>
8011c60: 00007706 br 8011e40 <OSFlagAccept+0x2a8>
8011c64: 10c000a0 cmpeqi r3,r2,2
8011c68: 1800031e bne r3,zero,8011c78 <OSFlagAccept+0xe0>
8011c6c: 108000e0 cmpeqi r2,r2,3
8011c70: 10001e1e bne r2,zero,8011cec <OSFlagAccept+0x154>
8011c74: 00007206 br 8011e40 <OSFlagAccept+0x2a8>
case OS_FLAG_WAIT_SET_ALL: /* See if all required flags are set */
flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
8011c78: e0bff617 ldw r2,-40(fp)
8011c7c: 1080020b ldhu r2,8(r2)
8011c80: e0fff50b ldhu r3,-44(fp)
8011c84: 1884703a and r2,r3,r2
8011c88: e0bfff8d sth r2,-2(fp)
if (flags_rdy == flags) { /* Must match ALL the bits that we want */
8011c8c: e0ffff8b ldhu r3,-2(fp)
8011c90: e0bff50b ldhu r2,-44(fp)
8011c94: 18800d1e bne r3,r2,8011ccc <OSFlagAccept+0x134>
if (consume == OS_TRUE) { /* See if we need to consume the flags */
8011c98: e0bfff43 ldbu r2,-3(fp)
8011c9c: 10800058 cmpnei r2,r2,1
8011ca0: 10000d1e bne r2,zero,8011cd8 <OSFlagAccept+0x140>
pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */
8011ca4: e0bff617 ldw r2,-40(fp)
8011ca8: 1080020b ldhu r2,8(r2)
8011cac: 1007883a mov r3,r2
8011cb0: e0bfff8b ldhu r2,-2(fp)
8011cb4: 0084303a nor r2,zero,r2
8011cb8: 1884703a and r2,r3,r2
8011cbc: 1007883a mov r3,r2
8011cc0: e0bff617 ldw r2,-40(fp)
8011cc4: 10c0020d sth r3,8(r2)
8011cc8: 00000306 br 8011cd8 <OSFlagAccept+0x140>
}
} else {
*perr = OS_ERR_FLAG_NOT_RDY;
8011ccc: e0bff317 ldw r2,-52(fp)
8011cd0: 00c01c04 movi r3,112
8011cd4: 10c00005 stb r3,0(r2)
8011cd8: e0bffe17 ldw r2,-8(fp)
8011cdc: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8011ce0: e0bffb17 ldw r2,-20(fp)
8011ce4: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
break;
8011ce8: 00005e06 br 8011e64 <OSFlagAccept+0x2cc>
case OS_FLAG_WAIT_SET_ANY:
flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
8011cec: e0bff617 ldw r2,-40(fp)
8011cf0: 1080020b ldhu r2,8(r2)
8011cf4: e0fff50b ldhu r3,-44(fp)
8011cf8: 1884703a and r2,r3,r2
8011cfc: e0bfff8d sth r2,-2(fp)
if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
8011d00: e0bfff8b ldhu r2,-2(fp)
8011d04: 10000d26 beq r2,zero,8011d3c <OSFlagAccept+0x1a4>
if (consume == OS_TRUE) { /* See if we need to consume the flags */
8011d08: e0bfff43 ldbu r2,-3(fp)
8011d0c: 10800058 cmpnei r2,r2,1
8011d10: 10000d1e bne r2,zero,8011d48 <OSFlagAccept+0x1b0>
pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
8011d14: e0bff617 ldw r2,-40(fp)
8011d18: 1080020b ldhu r2,8(r2)
8011d1c: 1007883a mov r3,r2
8011d20: e0bfff8b ldhu r2,-2(fp)
8011d24: 0084303a nor r2,zero,r2
8011d28: 1884703a and r2,r3,r2
8011d2c: 1007883a mov r3,r2
8011d30: e0bff617 ldw r2,-40(fp)
8011d34: 10c0020d sth r3,8(r2)
8011d38: 00000306 br 8011d48 <OSFlagAccept+0x1b0>
}
} else {
*perr = OS_ERR_FLAG_NOT_RDY;
8011d3c: e0bff317 ldw r2,-52(fp)
8011d40: 00c01c04 movi r3,112
8011d44: 10c00005 stb r3,0(r2)
8011d48: e0bffe17 ldw r2,-8(fp)
8011d4c: e0bffa15 stw r2,-24(fp)
8011d50: e0bffa17 ldw r2,-24(fp)
8011d54: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
break;
8011d58: 00004206 br 8011e64 <OSFlagAccept+0x2cc>
#if OS_FLAG_WAIT_CLR_EN > 0
case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
8011d5c: e0bff617 ldw r2,-40(fp)
8011d60: 1080020b ldhu r2,8(r2)
8011d64: 0084303a nor r2,zero,r2
8011d68: 1007883a mov r3,r2
8011d6c: e0bff50b ldhu r2,-44(fp)
8011d70: 1884703a and r2,r3,r2
8011d74: e0bfff8d sth r2,-2(fp)
if (flags_rdy == flags) { /* Must match ALL the bits that we want */
8011d78: e0ffff8b ldhu r3,-2(fp)
8011d7c: e0bff50b ldhu r2,-44(fp)
8011d80: 18800b1e bne r3,r2,8011db0 <OSFlagAccept+0x218>
if (consume == OS_TRUE) { /* See if we need to consume the flags */
8011d84: e0bfff43 ldbu r2,-3(fp)
8011d88: 10800058 cmpnei r2,r2,1
8011d8c: 10000b1e bne r2,zero,8011dbc <OSFlagAccept+0x224>
pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
8011d90: e0bff617 ldw r2,-40(fp)
8011d94: 1080020b ldhu r2,8(r2)
8011d98: e0ffff8b ldhu r3,-2(fp)
8011d9c: 1884b03a or r2,r3,r2
8011da0: 1007883a mov r3,r2
8011da4: e0bff617 ldw r2,-40(fp)
8011da8: 10c0020d sth r3,8(r2)
8011dac: 00000306 br 8011dbc <OSFlagAccept+0x224>
}
} else {
*perr = OS_ERR_FLAG_NOT_RDY;
8011db0: e0bff317 ldw r2,-52(fp)
8011db4: 00c01c04 movi r3,112
8011db8: 10c00005 stb r3,0(r2)
8011dbc: e0bffe17 ldw r2,-8(fp)
8011dc0: e0bff915 stw r2,-28(fp)
8011dc4: e0bff917 ldw r2,-28(fp)
8011dc8: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
break;
8011dcc: 00002506 br 8011e64 <OSFlagAccept+0x2cc>
case OS_FLAG_WAIT_CLR_ANY:
flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
8011dd0: e0bff617 ldw r2,-40(fp)
8011dd4: 1080020b ldhu r2,8(r2)
8011dd8: 0084303a nor r2,zero,r2
8011ddc: 1007883a mov r3,r2
8011de0: e0bff50b ldhu r2,-44(fp)
8011de4: 1884703a and r2,r3,r2
8011de8: e0bfff8d sth r2,-2(fp)
if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
8011dec: e0bfff8b ldhu r2,-2(fp)
8011df0: 10000b26 beq r2,zero,8011e20 <OSFlagAccept+0x288>
if (consume == OS_TRUE) { /* See if we need to consume the flags */
8011df4: e0bfff43 ldbu r2,-3(fp)
8011df8: 10800058 cmpnei r2,r2,1
8011dfc: 10000b1e bne r2,zero,8011e2c <OSFlagAccept+0x294>
pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
8011e00: e0bff617 ldw r2,-40(fp)
8011e04: 1080020b ldhu r2,8(r2)
8011e08: e0ffff8b ldhu r3,-2(fp)
8011e0c: 1884b03a or r2,r3,r2
8011e10: 1007883a mov r3,r2
8011e14: e0bff617 ldw r2,-40(fp)
8011e18: 10c0020d sth r3,8(r2)
8011e1c: 00000306 br 8011e2c <OSFlagAccept+0x294>
}
} else {
*perr = OS_ERR_FLAG_NOT_RDY;
8011e20: e0bff317 ldw r2,-52(fp)
8011e24: 00c01c04 movi r3,112
8011e28: 10c00005 stb r3,0(r2)
8011e2c: e0bffe17 ldw r2,-8(fp)
8011e30: e0bff815 stw r2,-32(fp)
8011e34: e0bff817 ldw r2,-32(fp)
8011e38: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
break;
8011e3c: 00000906 br 8011e64 <OSFlagAccept+0x2cc>
8011e40: e0bffe17 ldw r2,-8(fp)
8011e44: e0bff715 stw r2,-36(fp)
8011e48: e0bff717 ldw r2,-36(fp)
8011e4c: 1001703a wrctl status,r2
#endif
default:
OS_EXIT_CRITICAL();
flags_rdy = (OS_FLAGS)0;
8011e50: e03fff8d sth zero,-2(fp)
*perr = OS_ERR_FLAG_WAIT_TYPE;
8011e54: e0bff317 ldw r2,-52(fp)
8011e58: 00c01bc4 movi r3,111
8011e5c: 10c00005 stb r3,0(r2)
break;
8011e60: 0001883a nop
}
return (flags_rdy);
8011e64: e0bfff8b ldhu r2,-2(fp)
}
8011e68: e037883a mov sp,fp
8011e6c: df000017 ldw fp,0(sp)
8011e70: dec00104 addi sp,sp,4
8011e74: f800283a ret
08011e78 <OSFlagCreate>:
* Called from: Task ONLY
*********************************************************************************************************
*/
OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *perr)
{
8011e78: defff804 addi sp,sp,-32
8011e7c: df000715 stw fp,28(sp)
8011e80: df000704 addi fp,sp,28
8011e84: 2005883a mov r2,r4
8011e88: e17ff915 stw r5,-28(fp)
8011e8c: e0bffa0d sth r2,-24(fp)
OS_FLAG_GRP *pgrp;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8011e90: e03fff15 stw zero,-4(fp)
#if OS_ARG_CHK_EN > 0
if (perr == (INT8U *)0) { /* Validate 'perr' */
return ((OS_FLAG_GRP *)0);
}
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
8011e94: d0a05703 ldbu r2,-32420(gp)
8011e98: 10803fcc andi r2,r2,255
8011e9c: 10000526 beq r2,zero,8011eb4 <OSFlagCreate+0x3c>
*perr = OS_ERR_CREATE_ISR; /* ... can't CREATE from an ISR */
8011ea0: e0bff917 ldw r2,-28(fp)
8011ea4: 00c00404 movi r3,16
8011ea8: 10c00005 stb r3,0(r2)
return ((OS_FLAG_GRP *)0);
8011eac: 0005883a mov r2,zero
8011eb0: 00002b06 br 8011f60 <OSFlagCreate+0xe8>
NIOS2_READ_STATUS (context);
8011eb4: 0005303a rdctl r2,status
8011eb8: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8011ebc: e0fffd17 ldw r3,-12(fp)
8011ec0: 00bfff84 movi r2,-2
8011ec4: 1884703a and r2,r3,r2
8011ec8: 1001703a wrctl status,r2
return context;
8011ecc: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
8011ed0: e0bfff15 stw r2,-4(fp)
pgrp = OSFlagFreeList; /* Get next free event flag */
8011ed4: d0a05a17 ldw r2,-32408(gp)
8011ed8: e0bffe15 stw r2,-8(fp)
if (pgrp != (OS_FLAG_GRP *)0) { /* See if we have event flag groups available */
8011edc: e0bffe17 ldw r2,-8(fp)
8011ee0: 10001726 beq r2,zero,8011f40 <OSFlagCreate+0xc8>
/* Adjust free list */
OSFlagFreeList = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
8011ee4: d0a05a17 ldw r2,-32408(gp)
8011ee8: 10800117 ldw r2,4(r2)
8011eec: d0a05a15 stw r2,-32408(gp)
pgrp->OSFlagType = OS_EVENT_TYPE_FLAG; /* Set to event flag group type */
8011ef0: e0bffe17 ldw r2,-8(fp)
8011ef4: 00c00144 movi r3,5
8011ef8: 10c00005 stb r3,0(r2)
pgrp->OSFlagFlags = flags; /* Set to desired initial value */
8011efc: e0bffe17 ldw r2,-8(fp)
8011f00: e0fffa0b ldhu r3,-24(fp)
8011f04: 10c0020d sth r3,8(r2)
pgrp->OSFlagWaitList = (void *)0; /* Clear list of tasks waiting on flags */
8011f08: e0bffe17 ldw r2,-8(fp)
8011f0c: 10000115 stw zero,4(r2)
#if OS_FLAG_NAME_SIZE > 1
pgrp->OSFlagName[0] = '?';
8011f10: e0bffe17 ldw r2,-8(fp)
8011f14: 00c00fc4 movi r3,63
8011f18: 10c00285 stb r3,10(r2)
pgrp->OSFlagName[1] = OS_ASCII_NUL;
8011f1c: e0bffe17 ldw r2,-8(fp)
8011f20: 100002c5 stb zero,11(r2)
8011f24: e0bfff17 ldw r2,-4(fp)
8011f28: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8011f2c: e0bffc17 ldw r2,-16(fp)
8011f30: 1001703a wrctl status,r2
#endif
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8011f34: e0bff917 ldw r2,-28(fp)
8011f38: 10000005 stb zero,0(r2)
8011f3c: 00000706 br 8011f5c <OSFlagCreate+0xe4>
8011f40: e0bfff17 ldw r2,-4(fp)
8011f44: e0bffb15 stw r2,-20(fp)
8011f48: e0bffb17 ldw r2,-20(fp)
8011f4c: 1001703a wrctl status,r2
} else {
OS_EXIT_CRITICAL();
*perr = OS_ERR_FLAG_GRP_DEPLETED;
8011f50: e0bff917 ldw r2,-28(fp)
8011f54: 00c01c84 movi r3,114
8011f58: 10c00005 stb r3,0(r2)
}
return (pgrp); /* Return pointer to event flag group */
8011f5c: e0bffe17 ldw r2,-8(fp)
}
8011f60: e037883a mov sp,fp
8011f64: df000017 ldw fp,0(sp)
8011f68: dec00104 addi sp,sp,4
8011f6c: f800283a ret
08011f70 <OSFlagDel>:
*********************************************************************************************************
*/
#if OS_FLAG_DEL_EN > 0
OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, INT8U opt, INT8U *perr)
{
8011f70: defff204 addi sp,sp,-56
8011f74: dfc00d15 stw ra,52(sp)
8011f78: df000c15 stw fp,48(sp)
8011f7c: df000c04 addi fp,sp,48
8011f80: e13ff615 stw r4,-40(fp)
8011f84: 2805883a mov r2,r5
8011f88: e1bff415 stw r6,-48(fp)
8011f8c: e0bff505 stb r2,-44(fp)
BOOLEAN tasks_waiting;
OS_FLAG_NODE *pnode;
OS_FLAG_GRP *pgrp_return;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8011f90: e03ffc15 stw zero,-16(fp)
if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
*perr = OS_ERR_FLAG_INVALID_PGRP;
return (pgrp);
}
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
8011f94: d0a05703 ldbu r2,-32420(gp)
8011f98: 10803fcc andi r2,r2,255
8011f9c: 10000526 beq r2,zero,8011fb4 <OSFlagDel+0x44>
*perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
8011fa0: e0bff417 ldw r2,-48(fp)
8011fa4: 00c003c4 movi r3,15
8011fa8: 10c00005 stb r3,0(r2)
return (pgrp);
8011fac: e0bff617 ldw r2,-40(fp)
8011fb0: 00007106 br 8012178 <OSFlagDel+0x208>
}
if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event group type */
8011fb4: e0bff617 ldw r2,-40(fp)
8011fb8: 10800003 ldbu r2,0(r2)
8011fbc: 10803fcc andi r2,r2,255
8011fc0: 10800160 cmpeqi r2,r2,5
8011fc4: 1000051e bne r2,zero,8011fdc <OSFlagDel+0x6c>
*perr = OS_ERR_EVENT_TYPE;
8011fc8: e0bff417 ldw r2,-48(fp)
8011fcc: 00c00044 movi r3,1
8011fd0: 10c00005 stb r3,0(r2)
return (pgrp);
8011fd4: e0bff617 ldw r2,-40(fp)
8011fd8: 00006706 br 8012178 <OSFlagDel+0x208>
NIOS2_READ_STATUS (context);
8011fdc: 0005303a rdctl r2,status
8011fe0: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8011fe4: e0fffb17 ldw r3,-20(fp)
8011fe8: 00bfff84 movi r2,-2
8011fec: 1884703a and r2,r3,r2
8011ff0: 1001703a wrctl status,r2
return context;
8011ff4: e0bffb17 ldw r2,-20(fp)
}
OS_ENTER_CRITICAL();
8011ff8: e0bffc15 stw r2,-16(fp)
if (pgrp->OSFlagWaitList != (void *)0) { /* See if any tasks waiting on event flags */
8011ffc: e0bff617 ldw r2,-40(fp)
8012000: 10800117 ldw r2,4(r2)
8012004: 10000326 beq r2,zero,8012014 <OSFlagDel+0xa4>
tasks_waiting = OS_TRUE; /* Yes */
8012008: 00800044 movi r2,1
801200c: e0bfffc5 stb r2,-1(fp)
8012010: 00000106 br 8012018 <OSFlagDel+0xa8>
} else {
tasks_waiting = OS_FALSE; /* No */
8012014: e03fffc5 stb zero,-1(fp)
}
switch (opt) {
8012018: e0bff503 ldbu r2,-44(fp)
801201c: 10000326 beq r2,zero,801202c <OSFlagDel+0xbc>
8012020: 10800060 cmpeqi r2,r2,1
8012024: 1000231e bne r2,zero,80120b4 <OSFlagDel+0x144>
8012028: 00004806 br 801214c <OSFlagDel+0x1dc>
case OS_DEL_NO_PEND: /* Delete group if no task waiting */
if (tasks_waiting == OS_FALSE) {
801202c: e0bfffc3 ldbu r2,-1(fp)
8012030: 1000161e bne r2,zero,801208c <OSFlagDel+0x11c>
#if OS_FLAG_NAME_SIZE > 1
pgrp->OSFlagName[0] = '?'; /* Unknown name */
8012034: e0bff617 ldw r2,-40(fp)
8012038: 00c00fc4 movi r3,63
801203c: 10c00285 stb r3,10(r2)
pgrp->OSFlagName[1] = OS_ASCII_NUL;
8012040: e0bff617 ldw r2,-40(fp)
8012044: 100002c5 stb zero,11(r2)
#endif
pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED;
8012048: e0bff617 ldw r2,-40(fp)
801204c: 10000005 stb zero,0(r2)
pgrp->OSFlagWaitList = (void *)OSFlagFreeList; /* Return group to free list */
8012050: d0e05a17 ldw r3,-32408(gp)
8012054: e0bff617 ldw r2,-40(fp)
8012058: 10c00115 stw r3,4(r2)
pgrp->OSFlagFlags = (OS_FLAGS)0;
801205c: e0bff617 ldw r2,-40(fp)
8012060: 1000020d sth zero,8(r2)
OSFlagFreeList = pgrp;
8012064: e0bff617 ldw r2,-40(fp)
8012068: d0a05a15 stw r2,-32408(gp)
801206c: e0bffc17 ldw r2,-16(fp)
8012070: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8012074: e0bffa17 ldw r2,-24(fp)
8012078: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
801207c: e0bff417 ldw r2,-48(fp)
8012080: 10000005 stb zero,0(r2)
pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */
8012084: e03ffd15 stw zero,-12(fp)
} else {
OS_EXIT_CRITICAL();
*perr = OS_ERR_TASK_WAITING;
pgrp_return = pgrp;
}
break;
8012088: 00003a06 br 8012174 <OSFlagDel+0x204>
801208c: e0bffc17 ldw r2,-16(fp)
8012090: e0bff915 stw r2,-28(fp)
8012094: e0bff917 ldw r2,-28(fp)
8012098: 1001703a wrctl status,r2
*perr = OS_ERR_TASK_WAITING;
801209c: e0bff417 ldw r2,-48(fp)
80120a0: 00c01244 movi r3,73
80120a4: 10c00005 stb r3,0(r2)
pgrp_return = pgrp;
80120a8: e0bff617 ldw r2,-40(fp)
80120ac: e0bffd15 stw r2,-12(fp)
break;
80120b0: 00003006 br 8012174 <OSFlagDel+0x204>
case OS_DEL_ALWAYS: /* Always delete the event flag group */
pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
80120b4: e0bff617 ldw r2,-40(fp)
80120b8: 10800117 ldw r2,4(r2)
80120bc: e0bffe15 stw r2,-8(fp)
while (pnode != (OS_FLAG_NODE *)0) { /* Ready ALL tasks waiting for flags */
80120c0: 00000606 br 80120dc <OSFlagDel+0x16c>
(void)OS_FlagTaskRdy(pnode, (OS_FLAGS)0);
80120c4: 000b883a mov r5,zero
80120c8: e13ffe17 ldw r4,-8(fp)
80120cc: 8012fb80 call 8012fb8 <OS_FlagTaskRdy>
pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext;
80120d0: e0bffe17 ldw r2,-8(fp)
80120d4: 10800017 ldw r2,0(r2)
80120d8: e0bffe15 stw r2,-8(fp)
while (pnode != (OS_FLAG_NODE *)0) { /* Ready ALL tasks waiting for flags */
80120dc: e0bffe17 ldw r2,-8(fp)
80120e0: 103ff81e bne r2,zero,80120c4 <OSFlagDel+0x154>
}
#if OS_FLAG_NAME_SIZE > 1
pgrp->OSFlagName[0] = '?'; /* Unknown name */
80120e4: e0bff617 ldw r2,-40(fp)
80120e8: 00c00fc4 movi r3,63
80120ec: 10c00285 stb r3,10(r2)
pgrp->OSFlagName[1] = OS_ASCII_NUL;
80120f0: e0bff617 ldw r2,-40(fp)
80120f4: 100002c5 stb zero,11(r2)
#endif
pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED;
80120f8: e0bff617 ldw r2,-40(fp)
80120fc: 10000005 stb zero,0(r2)
pgrp->OSFlagWaitList = (void *)OSFlagFreeList;/* Return group to free list */
8012100: d0e05a17 ldw r3,-32408(gp)
8012104: e0bff617 ldw r2,-40(fp)
8012108: 10c00115 stw r3,4(r2)
pgrp->OSFlagFlags = (OS_FLAGS)0;
801210c: e0bff617 ldw r2,-40(fp)
8012110: 1000020d sth zero,8(r2)
OSFlagFreeList = pgrp;
8012114: e0bff617 ldw r2,-40(fp)
8012118: d0a05a15 stw r2,-32408(gp)
801211c: e0bffc17 ldw r2,-16(fp)
8012120: e0bff815 stw r2,-32(fp)
8012124: e0bff817 ldw r2,-32(fp)
8012128: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
801212c: e0bfffc3 ldbu r2,-1(fp)
8012130: 10800058 cmpnei r2,r2,1
8012134: 1000011e bne r2,zero,801213c <OSFlagDel+0x1cc>
OS_Sched(); /* Find highest priority task ready to run */
8012138: 801166c0 call 801166c <OS_Sched>
}
*perr = OS_ERR_NONE;
801213c: e0bff417 ldw r2,-48(fp)
8012140: 10000005 stb zero,0(r2)
pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */
8012144: e03ffd15 stw zero,-12(fp)
break;
8012148: 00000a06 br 8012174 <OSFlagDel+0x204>
801214c: e0bffc17 ldw r2,-16(fp)
8012150: e0bff715 stw r2,-36(fp)
8012154: e0bff717 ldw r2,-36(fp)
8012158: 1001703a wrctl status,r2
default:
OS_EXIT_CRITICAL();
*perr = OS_ERR_INVALID_OPT;
801215c: e0bff417 ldw r2,-48(fp)
8012160: 00c001c4 movi r3,7
8012164: 10c00005 stb r3,0(r2)
pgrp_return = pgrp;
8012168: e0bff617 ldw r2,-40(fp)
801216c: e0bffd15 stw r2,-12(fp)
break;
8012170: 0001883a nop
}
return (pgrp_return);
8012174: e0bffd17 ldw r2,-12(fp)
}
8012178: e037883a mov sp,fp
801217c: dfc00117 ldw ra,4(sp)
8012180: df000017 ldw fp,0(sp)
8012184: dec00204 addi sp,sp,8
8012188: f800283a ret
0801218c <OSFlagNameGet>:
*********************************************************************************************************
*/
#if OS_FLAG_NAME_SIZE > 1
INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *perr)
{
801218c: defff604 addi sp,sp,-40
8012190: dfc00915 stw ra,36(sp)
8012194: df000815 stw fp,32(sp)
8012198: df000804 addi fp,sp,32
801219c: e13ffa15 stw r4,-24(fp)
80121a0: e17ff915 stw r5,-28(fp)
80121a4: e1bff815 stw r6,-32(fp)
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80121a8: e03fff15 stw zero,-4(fp)
if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
*perr = OS_ERR_PNAME_NULL;
return (0);
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
80121ac: d0a05703 ldbu r2,-32420(gp)
80121b0: 10803fcc andi r2,r2,255
80121b4: 10000526 beq r2,zero,80121cc <OSFlagNameGet+0x40>
*perr = OS_ERR_NAME_GET_ISR;
80121b8: e0bff817 ldw r2,-32(fp)
80121bc: 00c00444 movi r3,17
80121c0: 10c00005 stb r3,0(r2)
return (0);
80121c4: 0005883a mov r2,zero
80121c8: 00002306 br 8012258 <OSFlagNameGet+0xcc>
NIOS2_READ_STATUS (context);
80121cc: 0005303a rdctl r2,status
80121d0: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80121d4: e0fffd17 ldw r3,-12(fp)
80121d8: 00bfff84 movi r2,-2
80121dc: 1884703a and r2,r3,r2
80121e0: 1001703a wrctl status,r2
return context;
80121e4: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
80121e8: e0bfff15 stw r2,-4(fp)
if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
80121ec: e0bffa17 ldw r2,-24(fp)
80121f0: 10800003 ldbu r2,0(r2)
80121f4: 10803fcc andi r2,r2,255
80121f8: 10800160 cmpeqi r2,r2,5
80121fc: 1000091e bne r2,zero,8012224 <OSFlagNameGet+0x98>
8012200: e0bfff17 ldw r2,-4(fp)
8012204: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8012208: e0bffc17 ldw r2,-16(fp)
801220c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_EVENT_TYPE;
8012210: e0bff817 ldw r2,-32(fp)
8012214: 00c00044 movi r3,1
8012218: 10c00005 stb r3,0(r2)
return (0);
801221c: 0005883a mov r2,zero
8012220: 00000d06 br 8012258 <OSFlagNameGet+0xcc>
}
len = OS_StrCopy(pname, pgrp->OSFlagName); /* Copy name from OS_FLAG_GRP */
8012224: e0bffa17 ldw r2,-24(fp)
8012228: 10800284 addi r2,r2,10
801222c: 100b883a mov r5,r2
8012230: e13ff917 ldw r4,-28(fp)
8012234: 80117a00 call 80117a0 <OS_StrCopy>
8012238: e0bffec5 stb r2,-5(fp)
801223c: e0bfff17 ldw r2,-4(fp)
8012240: e0bffb15 stw r2,-20(fp)
8012244: e0bffb17 ldw r2,-20(fp)
8012248: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
801224c: e0bff817 ldw r2,-32(fp)
8012250: 10000005 stb zero,0(r2)
return (len);
8012254: e0bffec3 ldbu r2,-5(fp)
}
8012258: e037883a mov sp,fp
801225c: dfc00117 ldw ra,4(sp)
8012260: df000017 ldw fp,0(sp)
8012264: dec00204 addi sp,sp,8
8012268: f800283a ret
0801226c <OSFlagNameSet>:
*********************************************************************************************************
*/
#if OS_FLAG_NAME_SIZE > 1
void OSFlagNameSet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *perr)
{
801226c: defff504 addi sp,sp,-44
8012270: dfc00a15 stw ra,40(sp)
8012274: df000915 stw fp,36(sp)
8012278: df000904 addi fp,sp,36
801227c: e13ff915 stw r4,-28(fp)
8012280: e17ff815 stw r5,-32(fp)
8012284: e1bff715 stw r6,-36(fp)
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8012288: e03fff15 stw zero,-4(fp)
if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
*perr = OS_ERR_PNAME_NULL;
return;
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
801228c: d0a05703 ldbu r2,-32420(gp)
8012290: 10803fcc andi r2,r2,255
8012294: 10000426 beq r2,zero,80122a8 <OSFlagNameSet+0x3c>
*perr = OS_ERR_NAME_SET_ISR;
8012298: e0bff717 ldw r2,-36(fp)
801229c: 00c00484 movi r3,18
80122a0: 10c00005 stb r3,0(r2)
return;
80122a4: 00002f06 br 8012364 <OSFlagNameSet+0xf8>
NIOS2_READ_STATUS (context);
80122a8: 0005303a rdctl r2,status
80122ac: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80122b0: e0fffd17 ldw r3,-12(fp)
80122b4: 00bfff84 movi r2,-2
80122b8: 1884703a and r2,r3,r2
80122bc: 1001703a wrctl status,r2
return context;
80122c0: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
80122c4: e0bfff15 stw r2,-4(fp)
if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
80122c8: e0bff917 ldw r2,-28(fp)
80122cc: 10800003 ldbu r2,0(r2)
80122d0: 10803fcc andi r2,r2,255
80122d4: 10800160 cmpeqi r2,r2,5
80122d8: 1000081e bne r2,zero,80122fc <OSFlagNameSet+0x90>
80122dc: e0bfff17 ldw r2,-4(fp)
80122e0: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
80122e4: e0bffc17 ldw r2,-16(fp)
80122e8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_EVENT_TYPE;
80122ec: e0bff717 ldw r2,-36(fp)
80122f0: 00c00044 movi r3,1
80122f4: 10c00005 stb r3,0(r2)
return;
80122f8: 00001a06 br 8012364 <OSFlagNameSet+0xf8>
}
len = OS_StrLen(pname); /* Can we fit the string in the storage area? */
80122fc: e13ff817 ldw r4,-32(fp)
8012300: 80118140 call 8011814 <OS_StrLen>
8012304: e0bffec5 stb r2,-5(fp)
if (len > (OS_FLAG_NAME_SIZE - 1)) { /* No */
8012308: e0bffec3 ldbu r2,-5(fp)
801230c: 10800830 cmpltui r2,r2,32
8012310: 1000081e bne r2,zero,8012334 <OSFlagNameSet+0xc8>
8012314: e0bfff17 ldw r2,-4(fp)
8012318: e0bffb15 stw r2,-20(fp)
801231c: e0bffb17 ldw r2,-20(fp)
8012320: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_FLAG_NAME_TOO_LONG;
8012324: e0bff717 ldw r2,-36(fp)
8012328: 00c01cc4 movi r3,115
801232c: 10c00005 stb r3,0(r2)
return;
8012330: 00000c06 br 8012364 <OSFlagNameSet+0xf8>
}
(void)OS_StrCopy(pgrp->OSFlagName, pname); /* Yes, copy name from OS_FLAG_GRP */
8012334: e0bff917 ldw r2,-28(fp)
8012338: 10800284 addi r2,r2,10
801233c: e17ff817 ldw r5,-32(fp)
8012340: 1009883a mov r4,r2
8012344: 80117a00 call 80117a0 <OS_StrCopy>
8012348: e0bfff17 ldw r2,-4(fp)
801234c: e0bffa15 stw r2,-24(fp)
8012350: e0bffa17 ldw r2,-24(fp)
8012354: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8012358: e0bff717 ldw r2,-36(fp)
801235c: 10000005 stb zero,0(r2)
return;
8012360: 0001883a nop
}
8012364: e037883a mov sp,fp
8012368: dfc00117 ldw ra,4(sp)
801236c: df000017 ldw fp,0(sp)
8012370: dec00204 addi sp,sp,8
8012374: f800283a ret
08012378 <OSFlagPend>:
* event flags.
*********************************************************************************************************
*/
OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *perr)
{
8012378: deffe204 addi sp,sp,-120
801237c: dfc01d15 stw ra,116(sp)
8012380: df001c15 stw fp,112(sp)
8012384: df001c04 addi fp,sp,112
8012388: e13fe815 stw r4,-96(fp)
801238c: 2805883a mov r2,r5
8012390: 3009883a mov r4,r6
8012394: 3807883a mov r3,r7
8012398: e0bfe70d sth r2,-100(fp)
801239c: 2005883a mov r2,r4
80123a0: e0bfe605 stb r2,-104(fp)
80123a4: 1805883a mov r2,r3
80123a8: e0bfe50d sth r2,-108(fp)
OS_FLAGS flags_rdy;
INT8U result;
INT8U pend_stat;
BOOLEAN consume;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80123ac: e03ffe15 stw zero,-8(fp)
if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
*perr = OS_ERR_FLAG_INVALID_PGRP;
return ((OS_FLAGS)0);
}
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
80123b0: d0a05703 ldbu r2,-32420(gp)
80123b4: 10803fcc andi r2,r2,255
80123b8: 10000526 beq r2,zero,80123d0 <OSFlagPend+0x58>
*perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
80123bc: e0800217 ldw r2,8(fp)
80123c0: 00c00084 movi r3,2
80123c4: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
80123c8: 0005883a mov r2,zero
80123cc: 00014b06 br 80128fc <OSFlagPend+0x584>
}
if (OSLockNesting > 0) { /* See if called with scheduler locked ... */
80123d0: d0a04b03 ldbu r2,-32468(gp)
80123d4: 10803fcc andi r2,r2,255
80123d8: 10000526 beq r2,zero,80123f0 <OSFlagPend+0x78>
*perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
80123dc: e0800217 ldw r2,8(fp)
80123e0: 00c00344 movi r3,13
80123e4: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
80123e8: 0005883a mov r2,zero
80123ec: 00014306 br 80128fc <OSFlagPend+0x584>
}
if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */
80123f0: e0bfe817 ldw r2,-96(fp)
80123f4: 10800003 ldbu r2,0(r2)
80123f8: 10803fcc andi r2,r2,255
80123fc: 10800160 cmpeqi r2,r2,5
8012400: 1000051e bne r2,zero,8012418 <OSFlagPend+0xa0>
*perr = OS_ERR_EVENT_TYPE;
8012404: e0800217 ldw r2,8(fp)
8012408: 00c00044 movi r3,1
801240c: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
8012410: 0005883a mov r2,zero
8012414: 00013906 br 80128fc <OSFlagPend+0x584>
}
result = (INT8U)(wait_type & OS_FLAG_CONSUME);
8012418: e0ffe603 ldbu r3,-104(fp)
801241c: 00bfe004 movi r2,-128
8012420: 1884703a and r2,r3,r2
8012424: e0bffdc5 stb r2,-9(fp)
if (result != (INT8U)0) { /* See if we need to consume the flags */
8012428: e0bffdc3 ldbu r2,-9(fp)
801242c: 10000626 beq r2,zero,8012448 <OSFlagPend+0xd0>
wait_type &= ~(INT8U)OS_FLAG_CONSUME;
8012430: e0bfe603 ldbu r2,-104(fp)
8012434: 10801fcc andi r2,r2,127
8012438: e0bfe605 stb r2,-104(fp)
consume = OS_TRUE;
801243c: 00800044 movi r2,1
8012440: e0bfffc5 stb r2,-1(fp)
8012444: 00000106 br 801244c <OSFlagPend+0xd4>
} else {
consume = OS_FALSE;
8012448: e03fffc5 stb zero,-1(fp)
NIOS2_READ_STATUS (context);
801244c: 0005303a rdctl r2,status
8012450: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8012454: e0fffb17 ldw r3,-20(fp)
8012458: 00bfff84 movi r2,-2
801245c: 1884703a and r2,r3,r2
8012460: 1001703a wrctl status,r2
return context;
8012464: e0bffb17 ldw r2,-20(fp)
}
/*$PAGE*/
OS_ENTER_CRITICAL();
8012468: e0bffe15 stw r2,-8(fp)
switch (wait_type) {
801246c: e0bfe603 ldbu r2,-104(fp)
8012470: 10c00060 cmpeqi r3,r2,1
8012474: 1800921e bne r3,zero,80126c0 <OSFlagPend+0x348>
8012478: 10c00088 cmpgei r3,r2,2
801247c: 1800021e bne r3,zero,8012488 <OSFlagPend+0x110>
8012480: 10006126 beq r2,zero,8012608 <OSFlagPend+0x290>
8012484: 0000bb06 br 8012774 <OSFlagPend+0x3fc>
8012488: 10c000a0 cmpeqi r3,r2,2
801248c: 1800031e bne r3,zero,801249c <OSFlagPend+0x124>
8012490: 108000e0 cmpeqi r2,r2,3
8012494: 10002f1e bne r2,zero,8012554 <OSFlagPend+0x1dc>
8012498: 0000b606 br 8012774 <OSFlagPend+0x3fc>
case OS_FLAG_WAIT_SET_ALL: /* See if all required flags are set */
flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
801249c: e0bfe817 ldw r2,-96(fp)
80124a0: 1080020b ldhu r2,8(r2)
80124a4: e0ffe70b ldhu r3,-100(fp)
80124a8: 1884703a and r2,r3,r2
80124ac: e0bffd0d sth r2,-12(fp)
if (flags_rdy == flags) { /* Must match ALL the bits that we want */
80124b0: e0fffd0b ldhu r3,-12(fp)
80124b4: e0bfe70b ldhu r2,-100(fp)
80124b8: 1880171e bne r3,r2,8012518 <OSFlagPend+0x1a0>
if (consume == OS_TRUE) { /* See if we need to consume the flags */
80124bc: e0bfffc3 ldbu r2,-1(fp)
80124c0: 10800058 cmpnei r2,r2,1
80124c4: 1000091e bne r2,zero,80124ec <OSFlagPend+0x174>
pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */
80124c8: e0bfe817 ldw r2,-96(fp)
80124cc: 1080020b ldhu r2,8(r2)
80124d0: 1007883a mov r3,r2
80124d4: e0bffd0b ldhu r2,-12(fp)
80124d8: 0084303a nor r2,zero,r2
80124dc: 1884703a and r2,r3,r2
80124e0: 1007883a mov r3,r2
80124e4: e0bfe817 ldw r2,-96(fp)
80124e8: 10c0020d sth r3,8(r2)
}
OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */
80124ec: d0a05817 ldw r2,-32416(gp)
80124f0: e0fffd0b ldhu r3,-12(fp)
80124f4: 10c00b0d sth r3,44(r2)
80124f8: e0bffe17 ldw r2,-8(fp)
80124fc: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8012500: e0bffa17 ldw r2,-24(fp)
8012504: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */
*perr = OS_ERR_NONE;
8012508: e0800217 ldw r2,8(fp)
801250c: 10000005 stb zero,0(r2)
return (flags_rdy);
8012510: e0bffd0b ldhu r2,-12(fp)
8012514: 0000f906 br 80128fc <OSFlagPend+0x584>
} else { /* Block task until events occur or timeout */
OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
8012518: e13fe70b ldhu r4,-100(fp)
801251c: e17fe603 ldbu r5,-104(fp)
8012520: e0bfe50b ldhu r2,-108(fp)
8012524: e0ffe904 addi r3,fp,-92
8012528: d8800015 stw r2,0(sp)
801252c: 280f883a mov r7,r5
8012530: 200d883a mov r6,r4
8012534: 180b883a mov r5,r3
8012538: e13fe817 ldw r4,-96(fp)
801253c: 8012d740 call 8012d74 <OS_FlagBlock>
8012540: e0bffe17 ldw r2,-8(fp)
8012544: e0bff915 stw r2,-28(fp)
8012548: e0bff917 ldw r2,-28(fp)
801254c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
}
break;
8012550: 00009206 br 801279c <OSFlagPend+0x424>
case OS_FLAG_WAIT_SET_ANY:
flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
8012554: e0bfe817 ldw r2,-96(fp)
8012558: 1080020b ldhu r2,8(r2)
801255c: e0ffe70b ldhu r3,-100(fp)
8012560: 1884703a and r2,r3,r2
8012564: e0bffd0d sth r2,-12(fp)
if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
8012568: e0bffd0b ldhu r2,-12(fp)
801256c: 10001726 beq r2,zero,80125cc <OSFlagPend+0x254>
if (consume == OS_TRUE) { /* See if we need to consume the flags */
8012570: e0bfffc3 ldbu r2,-1(fp)
8012574: 10800058 cmpnei r2,r2,1
8012578: 1000091e bne r2,zero,80125a0 <OSFlagPend+0x228>
pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
801257c: e0bfe817 ldw r2,-96(fp)
8012580: 1080020b ldhu r2,8(r2)
8012584: 1007883a mov r3,r2
8012588: e0bffd0b ldhu r2,-12(fp)
801258c: 0084303a nor r2,zero,r2
8012590: 1884703a and r2,r3,r2
8012594: 1007883a mov r3,r2
8012598: e0bfe817 ldw r2,-96(fp)
801259c: 10c0020d sth r3,8(r2)
}
OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */
80125a0: d0a05817 ldw r2,-32416(gp)
80125a4: e0fffd0b ldhu r3,-12(fp)
80125a8: 10c00b0d sth r3,44(r2)
80125ac: e0bffe17 ldw r2,-8(fp)
80125b0: e0bff815 stw r2,-32(fp)
80125b4: e0bff817 ldw r2,-32(fp)
80125b8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */
*perr = OS_ERR_NONE;
80125bc: e0800217 ldw r2,8(fp)
80125c0: 10000005 stb zero,0(r2)
return (flags_rdy);
80125c4: e0bffd0b ldhu r2,-12(fp)
80125c8: 0000cc06 br 80128fc <OSFlagPend+0x584>
} else { /* Block task until events occur or timeout */
OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
80125cc: e13fe70b ldhu r4,-100(fp)
80125d0: e17fe603 ldbu r5,-104(fp)
80125d4: e0bfe50b ldhu r2,-108(fp)
80125d8: e0ffe904 addi r3,fp,-92
80125dc: d8800015 stw r2,0(sp)
80125e0: 280f883a mov r7,r5
80125e4: 200d883a mov r6,r4
80125e8: 180b883a mov r5,r3
80125ec: e13fe817 ldw r4,-96(fp)
80125f0: 8012d740 call 8012d74 <OS_FlagBlock>
80125f4: e0bffe17 ldw r2,-8(fp)
80125f8: e0bff715 stw r2,-36(fp)
80125fc: e0bff717 ldw r2,-36(fp)
8012600: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
}
break;
8012604: 00006506 br 801279c <OSFlagPend+0x424>
#if OS_FLAG_WAIT_CLR_EN > 0
case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
8012608: e0bfe817 ldw r2,-96(fp)
801260c: 1080020b ldhu r2,8(r2)
8012610: 0084303a nor r2,zero,r2
8012614: 1007883a mov r3,r2
8012618: e0bfe70b ldhu r2,-100(fp)
801261c: 1884703a and r2,r3,r2
8012620: e0bffd0d sth r2,-12(fp)
if (flags_rdy == flags) { /* Must match ALL the bits that we want */
8012624: e0fffd0b ldhu r3,-12(fp)
8012628: e0bfe70b ldhu r2,-100(fp)
801262c: 1880151e bne r3,r2,8012684 <OSFlagPend+0x30c>
if (consume == OS_TRUE) { /* See if we need to consume the flags */
8012630: e0bfffc3 ldbu r2,-1(fp)
8012634: 10800058 cmpnei r2,r2,1
8012638: 1000071e bne r2,zero,8012658 <OSFlagPend+0x2e0>
pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
801263c: e0bfe817 ldw r2,-96(fp)
8012640: 1080020b ldhu r2,8(r2)
8012644: e0fffd0b ldhu r3,-12(fp)
8012648: 1884b03a or r2,r3,r2
801264c: 1007883a mov r3,r2
8012650: e0bfe817 ldw r2,-96(fp)
8012654: 10c0020d sth r3,8(r2)
}
OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */
8012658: d0a05817 ldw r2,-32416(gp)
801265c: e0fffd0b ldhu r3,-12(fp)
8012660: 10c00b0d sth r3,44(r2)
8012664: e0bffe17 ldw r2,-8(fp)
8012668: e0bff615 stw r2,-40(fp)
801266c: e0bff617 ldw r2,-40(fp)
8012670: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */
*perr = OS_ERR_NONE;
8012674: e0800217 ldw r2,8(fp)
8012678: 10000005 stb zero,0(r2)
return (flags_rdy);
801267c: e0bffd0b ldhu r2,-12(fp)
8012680: 00009e06 br 80128fc <OSFlagPend+0x584>
} else { /* Block task until events occur or timeout */
OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
8012684: e13fe70b ldhu r4,-100(fp)
8012688: e17fe603 ldbu r5,-104(fp)
801268c: e0bfe50b ldhu r2,-108(fp)
8012690: e0ffe904 addi r3,fp,-92
8012694: d8800015 stw r2,0(sp)
8012698: 280f883a mov r7,r5
801269c: 200d883a mov r6,r4
80126a0: 180b883a mov r5,r3
80126a4: e13fe817 ldw r4,-96(fp)
80126a8: 8012d740 call 8012d74 <OS_FlagBlock>
80126ac: e0bffe17 ldw r2,-8(fp)
80126b0: e0bff515 stw r2,-44(fp)
80126b4: e0bff517 ldw r2,-44(fp)
80126b8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
}
break;
80126bc: 00003706 br 801279c <OSFlagPend+0x424>
case OS_FLAG_WAIT_CLR_ANY:
flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
80126c0: e0bfe817 ldw r2,-96(fp)
80126c4: 1080020b ldhu r2,8(r2)
80126c8: 0084303a nor r2,zero,r2
80126cc: 1007883a mov r3,r2
80126d0: e0bfe70b ldhu r2,-100(fp)
80126d4: 1884703a and r2,r3,r2
80126d8: e0bffd0d sth r2,-12(fp)
if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
80126dc: e0bffd0b ldhu r2,-12(fp)
80126e0: 10001526 beq r2,zero,8012738 <OSFlagPend+0x3c0>
if (consume == OS_TRUE) { /* See if we need to consume the flags */
80126e4: e0bfffc3 ldbu r2,-1(fp)
80126e8: 10800058 cmpnei r2,r2,1
80126ec: 1000071e bne r2,zero,801270c <OSFlagPend+0x394>
pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
80126f0: e0bfe817 ldw r2,-96(fp)
80126f4: 1080020b ldhu r2,8(r2)
80126f8: e0fffd0b ldhu r3,-12(fp)
80126fc: 1884b03a or r2,r3,r2
8012700: 1007883a mov r3,r2
8012704: e0bfe817 ldw r2,-96(fp)
8012708: 10c0020d sth r3,8(r2)
}
OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */
801270c: d0a05817 ldw r2,-32416(gp)
8012710: e0fffd0b ldhu r3,-12(fp)
8012714: 10c00b0d sth r3,44(r2)
8012718: e0bffe17 ldw r2,-8(fp)
801271c: e0bff415 stw r2,-48(fp)
8012720: e0bff417 ldw r2,-48(fp)
8012724: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */
*perr = OS_ERR_NONE;
8012728: e0800217 ldw r2,8(fp)
801272c: 10000005 stb zero,0(r2)
return (flags_rdy);
8012730: e0bffd0b ldhu r2,-12(fp)
8012734: 00007106 br 80128fc <OSFlagPend+0x584>
} else { /* Block task until events occur or timeout */
OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
8012738: e13fe70b ldhu r4,-100(fp)
801273c: e17fe603 ldbu r5,-104(fp)
8012740: e0bfe50b ldhu r2,-108(fp)
8012744: e0ffe904 addi r3,fp,-92
8012748: d8800015 stw r2,0(sp)
801274c: 280f883a mov r7,r5
8012750: 200d883a mov r6,r4
8012754: 180b883a mov r5,r3
8012758: e13fe817 ldw r4,-96(fp)
801275c: 8012d740 call 8012d74 <OS_FlagBlock>
8012760: e0bffe17 ldw r2,-8(fp)
8012764: e0bff315 stw r2,-52(fp)
8012768: e0bff317 ldw r2,-52(fp)
801276c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
}
break;
8012770: 00000a06 br 801279c <OSFlagPend+0x424>
8012774: e0bffe17 ldw r2,-8(fp)
8012778: e0bff215 stw r2,-56(fp)
801277c: e0bff217 ldw r2,-56(fp)
8012780: 1001703a wrctl status,r2
#endif
default:
OS_EXIT_CRITICAL();
flags_rdy = (OS_FLAGS)0;
8012784: e03ffd0d sth zero,-12(fp)
*perr = OS_ERR_FLAG_WAIT_TYPE;
8012788: e0800217 ldw r2,8(fp)
801278c: 00c01bc4 movi r3,111
8012790: 10c00005 stb r3,0(r2)
return (flags_rdy);
8012794: e0bffd0b ldhu r2,-12(fp)
8012798: 00005806 br 80128fc <OSFlagPend+0x584>
}
/*$PAGE*/
OS_Sched(); /* Find next HPT ready to run */
801279c: 801166c0 call 801166c <OS_Sched>
NIOS2_READ_STATUS (context);
80127a0: 0005303a rdctl r2,status
80127a4: e0bff115 stw r2,-60(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80127a8: e0fff117 ldw r3,-60(fp)
80127ac: 00bfff84 movi r2,-2
80127b0: 1884703a and r2,r3,r2
80127b4: 1001703a wrctl status,r2
return context;
80127b8: e0bff117 ldw r2,-60(fp)
OS_ENTER_CRITICAL();
80127bc: e0bffe15 stw r2,-8(fp)
if (OSTCBCur->OSTCBStatPend != OS_STAT_PEND_OK) { /* Have we timed-out or aborted? */
80127c0: d0a05817 ldw r2,-32416(gp)
80127c4: 10800c43 ldbu r2,49(r2)
80127c8: 10803fcc andi r2,r2,255
80127cc: 10001c26 beq r2,zero,8012840 <OSFlagPend+0x4c8>
pend_stat = OSTCBCur->OSTCBStatPend;
80127d0: d0a05817 ldw r2,-32416(gp)
80127d4: 10800c43 ldbu r2,49(r2)
80127d8: e0bffcc5 stb r2,-13(fp)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
80127dc: d0a05817 ldw r2,-32416(gp)
80127e0: 10000c45 stb zero,49(r2)
OS_FlagUnlink(&node);
80127e4: e0bfe904 addi r2,fp,-92
80127e8: 1009883a mov r4,r2
80127ec: 80130ac0 call 80130ac <OS_FlagUnlink>
OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Yes, make task ready-to-run */
80127f0: d0a05817 ldw r2,-32416(gp)
80127f4: 10000c05 stb zero,48(r2)
80127f8: e0bffe17 ldw r2,-8(fp)
80127fc: e0bff015 stw r2,-64(fp)
NIOS2_WRITE_STATUS (context);
8012800: e0bff017 ldw r2,-64(fp)
8012804: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
flags_rdy = (OS_FLAGS)0;
8012808: e03ffd0d sth zero,-12(fp)
switch (pend_stat) {
801280c: e0bffcc3 ldbu r2,-13(fp)
8012810: 10800098 cmpnei r2,r2,2
8012814: 1000041e bne r2,zero,8012828 <OSFlagPend+0x4b0>
case OS_STAT_PEND_ABORT:
*perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted waiting */
8012818: e0800217 ldw r2,8(fp)
801281c: 00c00384 movi r3,14
8012820: 10c00005 stb r3,0(r2)
break;
8012824: 00000406 br 8012838 <OSFlagPend+0x4c0>
case OS_STAT_PEND_TO:
default:
*perr = OS_ERR_TIMEOUT; /* Indicate that we timed-out waiting */
8012828: e0800217 ldw r2,8(fp)
801282c: 00c00284 movi r3,10
8012830: 10c00005 stb r3,0(r2)
break;
8012834: 0001883a nop
}
return (flags_rdy);
8012838: e0bffd0b ldhu r2,-12(fp)
801283c: 00002f06 br 80128fc <OSFlagPend+0x584>
}
flags_rdy = OSTCBCur->OSTCBFlagsRdy;
8012840: d0a05817 ldw r2,-32416(gp)
8012844: 10800b0b ldhu r2,44(r2)
8012848: e0bffd0d sth r2,-12(fp)
if (consume == OS_TRUE) { /* See if we need to consume the flags */
801284c: e0bfffc3 ldbu r2,-1(fp)
8012850: 10800058 cmpnei r2,r2,1
8012854: 1000211e bne r2,zero,80128dc <OSFlagPend+0x564>
switch (wait_type) {
8012858: e0bfe603 ldbu r2,-104(fp)
801285c: 10001616 blt r2,zero,80128b8 <OSFlagPend+0x540>
8012860: 10c00090 cmplti r3,r2,2
8012864: 18000c1e bne r3,zero,8012898 <OSFlagPend+0x520>
8012868: 10800108 cmpgei r2,r2,4
801286c: 1000121e bne r2,zero,80128b8 <OSFlagPend+0x540>
case OS_FLAG_WAIT_SET_ALL:
case OS_FLAG_WAIT_SET_ANY: /* Clear ONLY the flags we got */
pgrp->OSFlagFlags &= ~flags_rdy;
8012870: e0bfe817 ldw r2,-96(fp)
8012874: 1080020b ldhu r2,8(r2)
8012878: 1007883a mov r3,r2
801287c: e0bffd0b ldhu r2,-12(fp)
8012880: 0084303a nor r2,zero,r2
8012884: 1884703a and r2,r3,r2
8012888: 1007883a mov r3,r2
801288c: e0bfe817 ldw r2,-96(fp)
8012890: 10c0020d sth r3,8(r2)
break;
8012894: 00001206 br 80128e0 <OSFlagPend+0x568>
#if OS_FLAG_WAIT_CLR_EN > 0
case OS_FLAG_WAIT_CLR_ALL:
case OS_FLAG_WAIT_CLR_ANY: /* Set ONLY the flags we got */
pgrp->OSFlagFlags |= flags_rdy;
8012898: e0bfe817 ldw r2,-96(fp)
801289c: 1080020b ldhu r2,8(r2)
80128a0: e0fffd0b ldhu r3,-12(fp)
80128a4: 1884b03a or r2,r3,r2
80128a8: 1007883a mov r3,r2
80128ac: e0bfe817 ldw r2,-96(fp)
80128b0: 10c0020d sth r3,8(r2)
break;
80128b4: 00000a06 br 80128e0 <OSFlagPend+0x568>
80128b8: e0bffe17 ldw r2,-8(fp)
80128bc: e0bfef15 stw r2,-68(fp)
80128c0: e0bfef17 ldw r2,-68(fp)
80128c4: 1001703a wrctl status,r2
#endif
default:
OS_EXIT_CRITICAL();
*perr = OS_ERR_FLAG_WAIT_TYPE;
80128c8: e0800217 ldw r2,8(fp)
80128cc: 00c01bc4 movi r3,111
80128d0: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
80128d4: 0005883a mov r2,zero
80128d8: 00000806 br 80128fc <OSFlagPend+0x584>
}
}
80128dc: 0001883a nop
80128e0: e0bffe17 ldw r2,-8(fp)
80128e4: e0bfee15 stw r2,-72(fp)
80128e8: e0bfee17 ldw r2,-72(fp)
80128ec: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE; /* Event(s) must have occurred */
80128f0: e0800217 ldw r2,8(fp)
80128f4: 10000005 stb zero,0(r2)
return (flags_rdy);
80128f8: e0bffd0b ldhu r2,-12(fp)
}
80128fc: e037883a mov sp,fp
8012900: dfc00117 ldw ra,4(sp)
8012904: df000017 ldw fp,0(sp)
8012908: dec00204 addi sp,sp,8
801290c: f800283a ret
08012910 <OSFlagPendGetFlagsRdy>:
* Called from: Task ONLY
*********************************************************************************************************
*/
OS_FLAGS OSFlagPendGetFlagsRdy (void)
{
8012910: defffb04 addi sp,sp,-20
8012914: df000415 stw fp,16(sp)
8012918: df000404 addi fp,sp,16
OS_FLAGS flags;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801291c: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
8012920: 0005303a rdctl r2,status
8012924: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8012928: e0fffc17 ldw r3,-16(fp)
801292c: 00bfff84 movi r2,-2
8012930: 1884703a and r2,r3,r2
8012934: 1001703a wrctl status,r2
return context;
8012938: e0bffc17 ldw r2,-16(fp)
#endif
OS_ENTER_CRITICAL();
801293c: e0bfff15 stw r2,-4(fp)
flags = OSTCBCur->OSTCBFlagsRdy;
8012940: d0a05817 ldw r2,-32416(gp)
8012944: 10800b0b ldhu r2,44(r2)
8012948: e0bffe8d sth r2,-6(fp)
801294c: e0bfff17 ldw r2,-4(fp)
8012950: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8012954: e0bffd17 ldw r2,-12(fp)
8012958: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (flags);
801295c: e0bffe8b ldhu r2,-6(fp)
}
8012960: e037883a mov sp,fp
8012964: df000017 ldw fp,0(sp)
8012968: dec00104 addi sp,sp,4
801296c: f800283a ret
08012970 <OSFlagPost>:
* 2) The amount of time interrupts are DISABLED depends on the number of tasks waiting on
* the event flag group.
*********************************************************************************************************
*/
OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *perr)
{
8012970: deffef04 addi sp,sp,-68
8012974: dfc01015 stw ra,64(sp)
8012978: df000f15 stw fp,60(sp)
801297c: df000f04 addi fp,sp,60
8012980: e13ff415 stw r4,-48(fp)
8012984: 2805883a mov r2,r5
8012988: 3007883a mov r3,r6
801298c: e1fff115 stw r7,-60(fp)
8012990: e0bff30d sth r2,-52(fp)
8012994: 1805883a mov r2,r3
8012998: e0bff205 stb r2,-56(fp)
BOOLEAN sched;
OS_FLAGS flags_cur;
OS_FLAGS flags_rdy;
BOOLEAN rdy;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801299c: e03ffd15 stw zero,-12(fp)
if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
*perr = OS_ERR_FLAG_INVALID_PGRP;
return ((OS_FLAGS)0);
}
#endif
if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Make sure we are pointing to an event flag grp */
80129a0: e0bff417 ldw r2,-48(fp)
80129a4: 10800003 ldbu r2,0(r2)
80129a8: 10803fcc andi r2,r2,255
80129ac: 10800160 cmpeqi r2,r2,5
80129b0: 1000051e bne r2,zero,80129c8 <OSFlagPost+0x58>
*perr = OS_ERR_EVENT_TYPE;
80129b4: e0bff117 ldw r2,-60(fp)
80129b8: 00c00044 movi r3,1
80129bc: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
80129c0: 0005883a mov r2,zero
80129c4: 0000c006 br 8012cc8 <OSFlagPost+0x358>
NIOS2_READ_STATUS (context);
80129c8: 0005303a rdctl r2,status
80129cc: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80129d0: e0fffa17 ldw r3,-24(fp)
80129d4: 00bfff84 movi r2,-2
80129d8: 1884703a and r2,r3,r2
80129dc: 1001703a wrctl status,r2
return context;
80129e0: e0bffa17 ldw r2,-24(fp)
}
/*$PAGE*/
OS_ENTER_CRITICAL();
80129e4: e0bffd15 stw r2,-12(fp)
switch (opt) {
80129e8: e0bff203 ldbu r2,-56(fp)
80129ec: 10000326 beq r2,zero,80129fc <OSFlagPost+0x8c>
80129f0: 10800060 cmpeqi r2,r2,1
80129f4: 10000b1e bne r2,zero,8012a24 <OSFlagPost+0xb4>
80129f8: 00001206 br 8012a44 <OSFlagPost+0xd4>
case OS_FLAG_CLR:
pgrp->OSFlagFlags &= ~flags; /* Clear the flags specified in the group */
80129fc: e0bff417 ldw r2,-48(fp)
8012a00: 1080020b ldhu r2,8(r2)
8012a04: 1007883a mov r3,r2
8012a08: e0bff30b ldhu r2,-52(fp)
8012a0c: 0084303a nor r2,zero,r2
8012a10: 1884703a and r2,r3,r2
8012a14: 1007883a mov r3,r2
8012a18: e0bff417 ldw r2,-48(fp)
8012a1c: 10c0020d sth r3,8(r2)
break;
8012a20: 00001106 br 8012a68 <OSFlagPost+0xf8>
case OS_FLAG_SET:
pgrp->OSFlagFlags |= flags; /* Set the flags specified in the group */
8012a24: e0bff417 ldw r2,-48(fp)
8012a28: 1080020b ldhu r2,8(r2)
8012a2c: e0fff30b ldhu r3,-52(fp)
8012a30: 1884b03a or r2,r3,r2
8012a34: 1007883a mov r3,r2
8012a38: e0bff417 ldw r2,-48(fp)
8012a3c: 10c0020d sth r3,8(r2)
break;
8012a40: 00000906 br 8012a68 <OSFlagPost+0xf8>
8012a44: e0bffd17 ldw r2,-12(fp)
8012a48: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
8012a4c: e0bff917 ldw r2,-28(fp)
8012a50: 1001703a wrctl status,r2
default:
OS_EXIT_CRITICAL(); /* INVALID option */
*perr = OS_ERR_FLAG_INVALID_OPT;
8012a54: e0bff117 ldw r2,-60(fp)
8012a58: 00c01c44 movi r3,113
8012a5c: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
8012a60: 0005883a mov r2,zero
8012a64: 00009806 br 8012cc8 <OSFlagPost+0x358>
}
sched = OS_FALSE; /* Indicate that we don't need rescheduling */
8012a68: e03ffec5 stb zero,-5(fp)
pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
8012a6c: e0bff417 ldw r2,-48(fp)
8012a70: 10800117 ldw r2,4(r2)
8012a74: e0bfff15 stw r2,-4(fp)
while (pnode != (OS_FLAG_NODE *)0) { /* Go through all tasks waiting on event flag(s) */
8012a78: 00007706 br 8012c58 <OSFlagPost+0x2e8>
switch (pnode->OSFlagNodeWaitType) {
8012a7c: e0bfff17 ldw r2,-4(fp)
8012a80: 10800483 ldbu r2,18(r2)
8012a84: 10803fcc andi r2,r2,255
8012a88: 10c00060 cmpeqi r3,r2,1
8012a8c: 18004a1e bne r3,zero,8012bb8 <OSFlagPost+0x248>
8012a90: 10c00088 cmpgei r3,r2,2
8012a94: 1800021e bne r3,zero,8012aa0 <OSFlagPost+0x130>
8012a98: 10002f26 beq r2,zero,8012b58 <OSFlagPost+0x1e8>
8012a9c: 00005b06 br 8012c0c <OSFlagPost+0x29c>
8012aa0: 10c000a0 cmpeqi r3,r2,2
8012aa4: 1800031e bne r3,zero,8012ab4 <OSFlagPost+0x144>
8012aa8: 108000e0 cmpeqi r2,r2,3
8012aac: 1000171e bne r2,zero,8012b0c <OSFlagPost+0x19c>
8012ab0: 00005606 br 8012c0c <OSFlagPost+0x29c>
case OS_FLAG_WAIT_SET_ALL: /* See if all req. flags are set for current node */
flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & pnode->OSFlagNodeFlags);
8012ab4: e0bff417 ldw r2,-48(fp)
8012ab8: 10c0020b ldhu r3,8(r2)
8012abc: e0bfff17 ldw r2,-4(fp)
8012ac0: 1080040b ldhu r2,16(r2)
8012ac4: 1884703a and r2,r3,r2
8012ac8: e0bffc8d sth r2,-14(fp)
if (flags_rdy == pnode->OSFlagNodeFlags) {
8012acc: e0bfff17 ldw r2,-4(fp)
8012ad0: 1080040b ldhu r2,16(r2)
8012ad4: e0fffc8b ldhu r3,-14(fp)
8012ad8: 10bfffcc andi r2,r2,65535
8012adc: 1880541e bne r3,r2,8012c30 <OSFlagPost+0x2c0>
rdy = OS_FlagTaskRdy(pnode, flags_rdy); /* Make task RTR, event(s) Rx'd */
8012ae0: e0bffc8b ldhu r2,-14(fp)
8012ae4: 100b883a mov r5,r2
8012ae8: e13fff17 ldw r4,-4(fp)
8012aec: 8012fb80 call 8012fb8 <OS_FlagTaskRdy>
8012af0: e0bffc45 stb r2,-15(fp)
if (rdy == OS_TRUE) {
8012af4: e0bffc43 ldbu r2,-15(fp)
8012af8: 10800058 cmpnei r2,r2,1
8012afc: 10004c1e bne r2,zero,8012c30 <OSFlagPost+0x2c0>
sched = OS_TRUE; /* When done we will reschedule */
8012b00: 00800044 movi r2,1
8012b04: e0bffec5 stb r2,-5(fp)
}
}
break;
8012b08: 00004906 br 8012c30 <OSFlagPost+0x2c0>
case OS_FLAG_WAIT_SET_ANY: /* See if any flag set */
flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & pnode->OSFlagNodeFlags);
8012b0c: e0bff417 ldw r2,-48(fp)
8012b10: 10c0020b ldhu r3,8(r2)
8012b14: e0bfff17 ldw r2,-4(fp)
8012b18: 1080040b ldhu r2,16(r2)
8012b1c: 1884703a and r2,r3,r2
8012b20: e0bffc8d sth r2,-14(fp)
if (flags_rdy != (OS_FLAGS)0) {
8012b24: e0bffc8b ldhu r2,-14(fp)
8012b28: 10004326 beq r2,zero,8012c38 <OSFlagPost+0x2c8>
rdy = OS_FlagTaskRdy(pnode, flags_rdy); /* Make task RTR, event(s) Rx'd */
8012b2c: e0bffc8b ldhu r2,-14(fp)
8012b30: 100b883a mov r5,r2
8012b34: e13fff17 ldw r4,-4(fp)
8012b38: 8012fb80 call 8012fb8 <OS_FlagTaskRdy>
8012b3c: e0bffc45 stb r2,-15(fp)
if (rdy == OS_TRUE) {
8012b40: e0bffc43 ldbu r2,-15(fp)
8012b44: 10800058 cmpnei r2,r2,1
8012b48: 10003b1e bne r2,zero,8012c38 <OSFlagPost+0x2c8>
sched = OS_TRUE; /* When done we will reschedule */
8012b4c: 00800044 movi r2,1
8012b50: e0bffec5 stb r2,-5(fp)
}
}
break;
8012b54: 00003806 br 8012c38 <OSFlagPost+0x2c8>
#if OS_FLAG_WAIT_CLR_EN > 0
case OS_FLAG_WAIT_CLR_ALL: /* See if all req. flags are set for current node */
flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & pnode->OSFlagNodeFlags);
8012b58: e0bff417 ldw r2,-48(fp)
8012b5c: 1080020b ldhu r2,8(r2)
8012b60: 0084303a nor r2,zero,r2
8012b64: 1007883a mov r3,r2
8012b68: e0bfff17 ldw r2,-4(fp)
8012b6c: 1080040b ldhu r2,16(r2)
8012b70: 1884703a and r2,r3,r2
8012b74: e0bffc8d sth r2,-14(fp)
if (flags_rdy == pnode->OSFlagNodeFlags) {
8012b78: e0bfff17 ldw r2,-4(fp)
8012b7c: 1080040b ldhu r2,16(r2)
8012b80: e0fffc8b ldhu r3,-14(fp)
8012b84: 10bfffcc andi r2,r2,65535
8012b88: 18802d1e bne r3,r2,8012c40 <OSFlagPost+0x2d0>
rdy = OS_FlagTaskRdy(pnode, flags_rdy); /* Make task RTR, event(s) Rx'd */
8012b8c: e0bffc8b ldhu r2,-14(fp)
8012b90: 100b883a mov r5,r2
8012b94: e13fff17 ldw r4,-4(fp)
8012b98: 8012fb80 call 8012fb8 <OS_FlagTaskRdy>
8012b9c: e0bffc45 stb r2,-15(fp)
if (rdy == OS_TRUE) {
8012ba0: e0bffc43 ldbu r2,-15(fp)
8012ba4: 10800058 cmpnei r2,r2,1
8012ba8: 1000251e bne r2,zero,8012c40 <OSFlagPost+0x2d0>
sched = OS_TRUE; /* When done we will reschedule */
8012bac: 00800044 movi r2,1
8012bb0: e0bffec5 stb r2,-5(fp)
}
}
break;
8012bb4: 00002206 br 8012c40 <OSFlagPost+0x2d0>
case OS_FLAG_WAIT_CLR_ANY: /* See if any flag set */
flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & pnode->OSFlagNodeFlags);
8012bb8: e0bff417 ldw r2,-48(fp)
8012bbc: 1080020b ldhu r2,8(r2)
8012bc0: 0084303a nor r2,zero,r2
8012bc4: 1007883a mov r3,r2
8012bc8: e0bfff17 ldw r2,-4(fp)
8012bcc: 1080040b ldhu r2,16(r2)
8012bd0: 1884703a and r2,r3,r2
8012bd4: e0bffc8d sth r2,-14(fp)
if (flags_rdy != (OS_FLAGS)0) {
8012bd8: e0bffc8b ldhu r2,-14(fp)
8012bdc: 10001a26 beq r2,zero,8012c48 <OSFlagPost+0x2d8>
rdy = OS_FlagTaskRdy(pnode, flags_rdy); /* Make task RTR, event(s) Rx'd */
8012be0: e0bffc8b ldhu r2,-14(fp)
8012be4: 100b883a mov r5,r2
8012be8: e13fff17 ldw r4,-4(fp)
8012bec: 8012fb80 call 8012fb8 <OS_FlagTaskRdy>
8012bf0: e0bffc45 stb r2,-15(fp)
if (rdy == OS_TRUE) {
8012bf4: e0bffc43 ldbu r2,-15(fp)
8012bf8: 10800058 cmpnei r2,r2,1
8012bfc: 1000121e bne r2,zero,8012c48 <OSFlagPost+0x2d8>
sched = OS_TRUE; /* When done we will reschedule */
8012c00: 00800044 movi r2,1
8012c04: e0bffec5 stb r2,-5(fp)
}
}
break;
8012c08: 00000f06 br 8012c48 <OSFlagPost+0x2d8>
8012c0c: e0bffd17 ldw r2,-12(fp)
8012c10: e0bff815 stw r2,-32(fp)
8012c14: e0bff817 ldw r2,-32(fp)
8012c18: 1001703a wrctl status,r2
#endif
default:
OS_EXIT_CRITICAL();
*perr = OS_ERR_FLAG_WAIT_TYPE;
8012c1c: e0bff117 ldw r2,-60(fp)
8012c20: 00c01bc4 movi r3,111
8012c24: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
8012c28: 0005883a mov r2,zero
8012c2c: 00002606 br 8012cc8 <OSFlagPost+0x358>
break;
8012c30: 0001883a nop
8012c34: 00000506 br 8012c4c <OSFlagPost+0x2dc>
break;
8012c38: 0001883a nop
8012c3c: 00000306 br 8012c4c <OSFlagPost+0x2dc>
break;
8012c40: 0001883a nop
8012c44: 00000106 br 8012c4c <OSFlagPost+0x2dc>
break;
8012c48: 0001883a nop
}
pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext; /* Point to next task waiting for event flag(s) */
8012c4c: e0bfff17 ldw r2,-4(fp)
8012c50: 10800017 ldw r2,0(r2)
8012c54: e0bfff15 stw r2,-4(fp)
while (pnode != (OS_FLAG_NODE *)0) { /* Go through all tasks waiting on event flag(s) */
8012c58: e0bfff17 ldw r2,-4(fp)
8012c5c: 103f871e bne r2,zero,8012a7c <OSFlagPost+0x10c>
8012c60: e0bffd17 ldw r2,-12(fp)
8012c64: e0bff715 stw r2,-36(fp)
8012c68: e0bff717 ldw r2,-36(fp)
8012c6c: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
if (sched == OS_TRUE) {
8012c70: e0bffec3 ldbu r2,-5(fp)
8012c74: 10800058 cmpnei r2,r2,1
8012c78: 1000011e bne r2,zero,8012c80 <OSFlagPost+0x310>
OS_Sched();
8012c7c: 801166c0 call 801166c <OS_Sched>
NIOS2_READ_STATUS (context);
8012c80: 0005303a rdctl r2,status
8012c84: e0bff515 stw r2,-44(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8012c88: e0fff517 ldw r3,-44(fp)
8012c8c: 00bfff84 movi r2,-2
8012c90: 1884703a and r2,r3,r2
8012c94: 1001703a wrctl status,r2
return context;
8012c98: e0bff517 ldw r2,-44(fp)
}
OS_ENTER_CRITICAL();
8012c9c: e0bffd15 stw r2,-12(fp)
flags_cur = pgrp->OSFlagFlags;
8012ca0: e0bff417 ldw r2,-48(fp)
8012ca4: 1080020b ldhu r2,8(r2)
8012ca8: e0bffb8d sth r2,-18(fp)
8012cac: e0bffd17 ldw r2,-12(fp)
8012cb0: e0bff615 stw r2,-40(fp)
NIOS2_WRITE_STATUS (context);
8012cb4: e0bff617 ldw r2,-40(fp)
8012cb8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8012cbc: e0bff117 ldw r2,-60(fp)
8012cc0: 10000005 stb zero,0(r2)
return (flags_cur);
8012cc4: e0bffb8b ldhu r2,-18(fp)
}
8012cc8: e037883a mov sp,fp
8012ccc: dfc00117 ldw ra,4(sp)
8012cd0: df000017 ldw fp,0(sp)
8012cd4: dec00204 addi sp,sp,8
8012cd8: f800283a ret
08012cdc <OSFlagQuery>:
*********************************************************************************************************
*/
#if OS_FLAG_QUERY_EN > 0
OS_FLAGS OSFlagQuery (OS_FLAG_GRP *pgrp, INT8U *perr)
{
8012cdc: defff904 addi sp,sp,-28
8012ce0: df000615 stw fp,24(sp)
8012ce4: df000604 addi fp,sp,24
8012ce8: e13ffb15 stw r4,-20(fp)
8012cec: e17ffa15 stw r5,-24(fp)
OS_FLAGS flags;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8012cf0: e03fff15 stw zero,-4(fp)
if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
*perr = OS_ERR_FLAG_INVALID_PGRP;
return ((OS_FLAGS)0);
}
#endif
if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */
8012cf4: e0bffb17 ldw r2,-20(fp)
8012cf8: 10800003 ldbu r2,0(r2)
8012cfc: 10803fcc andi r2,r2,255
8012d00: 10800160 cmpeqi r2,r2,5
8012d04: 1000051e bne r2,zero,8012d1c <OSFlagQuery+0x40>
*perr = OS_ERR_EVENT_TYPE;
8012d08: e0bffa17 ldw r2,-24(fp)
8012d0c: 00c00044 movi r3,1
8012d10: 10c00005 stb r3,0(r2)
return ((OS_FLAGS)0);
8012d14: 0005883a mov r2,zero
8012d18: 00001206 br 8012d64 <OSFlagQuery+0x88>
NIOS2_READ_STATUS (context);
8012d1c: 0005303a rdctl r2,status
8012d20: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8012d24: e0fffc17 ldw r3,-16(fp)
8012d28: 00bfff84 movi r2,-2
8012d2c: 1884703a and r2,r3,r2
8012d30: 1001703a wrctl status,r2
return context;
8012d34: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
8012d38: e0bfff15 stw r2,-4(fp)
flags = pgrp->OSFlagFlags;
8012d3c: e0bffb17 ldw r2,-20(fp)
8012d40: 1080020b ldhu r2,8(r2)
8012d44: e0bffe8d sth r2,-6(fp)
8012d48: e0bfff17 ldw r2,-4(fp)
8012d4c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8012d50: e0bffd17 ldw r2,-12(fp)
8012d54: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8012d58: e0bffa17 ldw r2,-24(fp)
8012d5c: 10000005 stb zero,0(r2)
return (flags); /* Return the current value of the event flags */
8012d60: e0bffe8b ldhu r2,-6(fp)
}
8012d64: e037883a mov sp,fp
8012d68: df000017 ldw fp,0(sp)
8012d6c: dec00104 addi sp,sp,4
8012d70: f800283a ret
08012d74 <OS_FlagBlock>:
* Note(s) : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
static void OS_FlagBlock (OS_FLAG_GRP *pgrp, OS_FLAG_NODE *pnode, OS_FLAGS flags, INT8U wait_type, INT16U timeout)
{
8012d74: defff804 addi sp,sp,-32
8012d78: df000715 stw fp,28(sp)
8012d7c: df000704 addi fp,sp,28
8012d80: e13ffd15 stw r4,-12(fp)
8012d84: e17ffc15 stw r5,-16(fp)
8012d88: 3007883a mov r3,r6
8012d8c: 3809883a mov r4,r7
8012d90: e0800117 ldw r2,4(fp)
8012d94: e0fffb0d sth r3,-20(fp)
8012d98: 2007883a mov r3,r4
8012d9c: e0fffa05 stb r3,-24(fp)
8012da0: e0bff90d sth r2,-28(fp)
OS_FLAG_NODE *pnode_next;
INT8U y;
OSTCBCur->OSTCBStat |= OS_STAT_FLAG;
8012da4: d0a05817 ldw r2,-32416(gp)
8012da8: 10c00c03 ldbu r3,48(r2)
8012dac: d0a05817 ldw r2,-32416(gp)
8012db0: 18c00814 ori r3,r3,32
8012db4: 10c00c05 stb r3,48(r2)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
8012db8: d0a05817 ldw r2,-32416(gp)
8012dbc: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBDly = timeout; /* Store timeout in task's TCB */
8012dc0: d0a05817 ldw r2,-32416(gp)
8012dc4: e0fff90b ldhu r3,-28(fp)
8012dc8: 10c00b8d sth r3,46(r2)
#if OS_TASK_DEL_EN > 0
OSTCBCur->OSTCBFlagNode = pnode; /* TCB to link to node */
8012dcc: d0a05817 ldw r2,-32416(gp)
8012dd0: e0fffc17 ldw r3,-16(fp)
8012dd4: 10c00a15 stw r3,40(r2)
#endif
pnode->OSFlagNodeFlags = flags; /* Save the flags that we need to wait for */
8012dd8: e0bffc17 ldw r2,-16(fp)
8012ddc: e0fffb0b ldhu r3,-20(fp)
8012de0: 10c0040d sth r3,16(r2)
pnode->OSFlagNodeWaitType = wait_type; /* Save the type of wait we are doing */
8012de4: e0bffc17 ldw r2,-16(fp)
8012de8: e0fffa03 ldbu r3,-24(fp)
8012dec: 10c00485 stb r3,18(r2)
pnode->OSFlagNodeTCB = (void *)OSTCBCur; /* Link to task's TCB */
8012df0: d0e05817 ldw r3,-32416(gp)
8012df4: e0bffc17 ldw r2,-16(fp)
8012df8: 10c00215 stw r3,8(r2)
pnode->OSFlagNodeNext = pgrp->OSFlagWaitList; /* Add node at beginning of event flag wait list */
8012dfc: e0bffd17 ldw r2,-12(fp)
8012e00: 10c00117 ldw r3,4(r2)
8012e04: e0bffc17 ldw r2,-16(fp)
8012e08: 10c00015 stw r3,0(r2)
pnode->OSFlagNodePrev = (void *)0;
8012e0c: e0bffc17 ldw r2,-16(fp)
8012e10: 10000115 stw zero,4(r2)
pnode->OSFlagNodeFlagGrp = (void *)pgrp; /* Link to Event Flag Group */
8012e14: e0bffc17 ldw r2,-16(fp)
8012e18: e0fffd17 ldw r3,-12(fp)
8012e1c: 10c00315 stw r3,12(r2)
pnode_next = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
8012e20: e0bffd17 ldw r2,-12(fp)
8012e24: 10800117 ldw r2,4(r2)
8012e28: e0bfff15 stw r2,-4(fp)
if (pnode_next != (void *)0) { /* Is this the first NODE to insert? */
8012e2c: e0bfff17 ldw r2,-4(fp)
8012e30: 10000326 beq r2,zero,8012e40 <OS_FlagBlock+0xcc>
pnode_next->OSFlagNodePrev = pnode; /* No, link in doubly linked list */
8012e34: e0bfff17 ldw r2,-4(fp)
8012e38: e0fffc17 ldw r3,-16(fp)
8012e3c: 10c00115 stw r3,4(r2)
}
pgrp->OSFlagWaitList = (void *)pnode;
8012e40: e0bffd17 ldw r2,-12(fp)
8012e44: e0fffc17 ldw r3,-16(fp)
8012e48: 10c00115 stw r3,4(r2)
y = OSTCBCur->OSTCBY; /* Suspend current task until flag(s) received */
8012e4c: d0a05817 ldw r2,-32416(gp)
8012e50: 10800d03 ldbu r2,52(r2)
8012e54: e0bffec5 stb r2,-5(fp)
OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
8012e58: e0fffec3 ldbu r3,-5(fp)
8012e5c: d0a05544 addi r2,gp,-32427
8012e60: 1885883a add r2,r3,r2
8012e64: 10800003 ldbu r2,0(r2)
8012e68: 1007883a mov r3,r2
8012e6c: d0a05817 ldw r2,-32416(gp)
8012e70: 10800d43 ldbu r2,53(r2)
8012e74: 0084303a nor r2,zero,r2
8012e78: 1884703a and r2,r3,r2
8012e7c: e0fffec3 ldbu r3,-5(fp)
8012e80: 1009883a mov r4,r2
8012e84: d0a05544 addi r2,gp,-32427
8012e88: 1885883a add r2,r3,r2
8012e8c: 11000005 stb r4,0(r2)
if (OSRdyTbl[y] == 0x00) {
8012e90: e0fffec3 ldbu r3,-5(fp)
8012e94: d0a05544 addi r2,gp,-32427
8012e98: 1885883a add r2,r3,r2
8012e9c: 10800003 ldbu r2,0(r2)
8012ea0: 10803fcc andi r2,r2,255
8012ea4: 1000071e bne r2,zero,8012ec4 <OS_FlagBlock+0x150>
OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
8012ea8: d0a05817 ldw r2,-32416(gp)
8012eac: 10800d83 ldbu r2,54(r2)
8012eb0: 0084303a nor r2,zero,r2
8012eb4: 1007883a mov r3,r2
8012eb8: d0a05503 ldbu r2,-32428(gp)
8012ebc: 1884703a and r2,r3,r2
8012ec0: d0a05505 stb r2,-32428(gp)
}
}
8012ec4: 0001883a nop
8012ec8: e037883a mov sp,fp
8012ecc: df000017 ldw fp,0(sp)
8012ed0: dec00104 addi sp,sp,4
8012ed4: f800283a ret
08012ed8 <OS_FlagInit>:
* WARNING : You MUST NOT call this function from your code. This is an INTERNAL function to uC/OS-II.
*********************************************************************************************************
*/
void OS_FlagInit (void)
{
8012ed8: defffb04 addi sp,sp,-20
8012edc: dfc00415 stw ra,16(sp)
8012ee0: df000315 stw fp,12(sp)
8012ee4: df000304 addi fp,sp,12
INT16U i;
OS_FLAG_GRP *pgrp1;
OS_FLAG_GRP *pgrp2;
OS_MemClr((INT8U *)&OSFlagTbl[0], sizeof(OSFlagTbl)); /* Clear the flag group table */
8012ee8: 0140dc04 movi r5,880
8012eec: 010201b4 movhi r4,2054
8012ef0: 212b8b04 addi r4,r4,-20948
8012ef4: 80115b00 call 80115b0 <OS_MemClr>
pgrp1 = &OSFlagTbl[0];
8012ef8: 008201b4 movhi r2,2054
8012efc: 10ab8b04 addi r2,r2,-20948
8012f00: e0bffe15 stw r2,-8(fp)
pgrp2 = &OSFlagTbl[1];
8012f04: 008201b4 movhi r2,2054
8012f08: 10ab9604 addi r2,r2,-20904
8012f0c: e0bffd15 stw r2,-12(fp)
for (i = 0; i < (OS_MAX_FLAGS - 1); i++) { /* Init. list of free EVENT FLAGS */
8012f10: e03fff8d sth zero,-2(fp)
8012f14: 00001306 br 8012f64 <OS_FlagInit+0x8c>
pgrp1->OSFlagType = OS_EVENT_TYPE_UNUSED;
8012f18: e0bffe17 ldw r2,-8(fp)
8012f1c: 10000005 stb zero,0(r2)
pgrp1->OSFlagWaitList = (void *)pgrp2;
8012f20: e0bffe17 ldw r2,-8(fp)
8012f24: e0fffd17 ldw r3,-12(fp)
8012f28: 10c00115 stw r3,4(r2)
#if OS_FLAG_NAME_SIZE > 1
pgrp1->OSFlagName[0] = '?'; /* Unknown name */
8012f2c: e0bffe17 ldw r2,-8(fp)
8012f30: 00c00fc4 movi r3,63
8012f34: 10c00285 stb r3,10(r2)
pgrp1->OSFlagName[1] = OS_ASCII_NUL;
8012f38: e0bffe17 ldw r2,-8(fp)
8012f3c: 100002c5 stb zero,11(r2)
#endif
pgrp1++;
8012f40: e0bffe17 ldw r2,-8(fp)
8012f44: 10800b04 addi r2,r2,44
8012f48: e0bffe15 stw r2,-8(fp)
pgrp2++;
8012f4c: e0bffd17 ldw r2,-12(fp)
8012f50: 10800b04 addi r2,r2,44
8012f54: e0bffd15 stw r2,-12(fp)
for (i = 0; i < (OS_MAX_FLAGS - 1); i++) { /* Init. list of free EVENT FLAGS */
8012f58: e0bfff8b ldhu r2,-2(fp)
8012f5c: 10800044 addi r2,r2,1
8012f60: e0bfff8d sth r2,-2(fp)
8012f64: e0bfff8b ldhu r2,-2(fp)
8012f68: 108004f0 cmpltui r2,r2,19
8012f6c: 103fea1e bne r2,zero,8012f18 <OS_FlagInit+0x40>
}
pgrp1->OSFlagType = OS_EVENT_TYPE_UNUSED;
8012f70: e0bffe17 ldw r2,-8(fp)
8012f74: 10000005 stb zero,0(r2)
pgrp1->OSFlagWaitList = (void *)0;
8012f78: e0bffe17 ldw r2,-8(fp)
8012f7c: 10000115 stw zero,4(r2)
#if OS_FLAG_NAME_SIZE > 1
pgrp1->OSFlagName[0] = '?'; /* Unknown name */
8012f80: e0bffe17 ldw r2,-8(fp)
8012f84: 00c00fc4 movi r3,63
8012f88: 10c00285 stb r3,10(r2)
pgrp1->OSFlagName[1] = OS_ASCII_NUL;
8012f8c: e0bffe17 ldw r2,-8(fp)
8012f90: 100002c5 stb zero,11(r2)
#endif
OSFlagFreeList = &OSFlagTbl[0];
8012f94: 008201b4 movhi r2,2054
8012f98: 10ab8b04 addi r2,r2,-20948
8012f9c: d0a05a15 stw r2,-32408(gp)
#endif
}
8012fa0: 0001883a nop
8012fa4: e037883a mov sp,fp
8012fa8: dfc00117 ldw ra,4(sp)
8012fac: df000017 ldw fp,0(sp)
8012fb0: dec00204 addi sp,sp,8
8012fb4: f800283a ret
08012fb8 <OS_FlagTaskRdy>:
* 2) This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
static BOOLEAN OS_FlagTaskRdy (OS_FLAG_NODE *pnode, OS_FLAGS flags_rdy)
{
8012fb8: defffa04 addi sp,sp,-24
8012fbc: dfc00515 stw ra,20(sp)
8012fc0: df000415 stw fp,16(sp)
8012fc4: df000404 addi fp,sp,16
8012fc8: e13ffd15 stw r4,-12(fp)
8012fcc: 2805883a mov r2,r5
8012fd0: e0bffc0d sth r2,-16(fp)
OS_TCB *ptcb;
BOOLEAN sched;
ptcb = (OS_TCB *)pnode->OSFlagNodeTCB; /* Point to TCB of waiting task */
8012fd4: e0bffd17 ldw r2,-12(fp)
8012fd8: 10800217 ldw r2,8(r2)
8012fdc: e0bffe15 stw r2,-8(fp)
ptcb->OSTCBDly = 0;
8012fe0: e0bffe17 ldw r2,-8(fp)
8012fe4: 10000b8d sth zero,46(r2)
ptcb->OSTCBFlagsRdy = flags_rdy;
8012fe8: e0bffe17 ldw r2,-8(fp)
8012fec: e0fffc0b ldhu r3,-16(fp)
8012ff0: 10c00b0d sth r3,44(r2)
ptcb->OSTCBStat &= ~(INT8U)OS_STAT_FLAG;
8012ff4: e0bffe17 ldw r2,-8(fp)
8012ff8: 10c00c03 ldbu r3,48(r2)
8012ffc: 00bff7c4 movi r2,-33
8013000: 1884703a and r2,r3,r2
8013004: 1007883a mov r3,r2
8013008: e0bffe17 ldw r2,-8(fp)
801300c: 10c00c05 stb r3,48(r2)
ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
8013010: e0bffe17 ldw r2,-8(fp)
8013014: 10000c45 stb zero,49(r2)
if (ptcb->OSTCBStat == OS_STAT_RDY) { /* Task now ready? */
8013018: e0bffe17 ldw r2,-8(fp)
801301c: 10800c03 ldbu r2,48(r2)
8013020: 10803fcc andi r2,r2,255
8013024: 1000181e bne r2,zero,8013088 <OS_FlagTaskRdy+0xd0>
OSRdyGrp |= ptcb->OSTCBBitY; /* Put task into ready list */
8013028: e0bffe17 ldw r2,-8(fp)
801302c: 10c00d83 ldbu r3,54(r2)
8013030: d0a05503 ldbu r2,-32428(gp)
8013034: 1884b03a or r2,r3,r2
8013038: d0a05505 stb r2,-32428(gp)
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
801303c: e0bffe17 ldw r2,-8(fp)
8013040: 10800d03 ldbu r2,52(r2)
8013044: 10c03fcc andi r3,r2,255
8013048: d0a05544 addi r2,gp,-32427
801304c: 1885883a add r2,r3,r2
8013050: 11000003 ldbu r4,0(r2)
8013054: e0bffe17 ldw r2,-8(fp)
8013058: 10800d43 ldbu r2,53(r2)
801305c: e0fffe17 ldw r3,-8(fp)
8013060: 18c00d03 ldbu r3,52(r3)
8013064: 18c03fcc andi r3,r3,255
8013068: 2084b03a or r2,r4,r2
801306c: 1009883a mov r4,r2
8013070: d0a05544 addi r2,gp,-32427
8013074: 1885883a add r2,r3,r2
8013078: 11000005 stb r4,0(r2)
sched = OS_TRUE;
801307c: 00800044 movi r2,1
8013080: e0bfffc5 stb r2,-1(fp)
8013084: 00000106 br 801308c <OS_FlagTaskRdy+0xd4>
} else {
sched = OS_FALSE;
8013088: e03fffc5 stb zero,-1(fp)
}
OS_FlagUnlink(pnode);
801308c: e13ffd17 ldw r4,-12(fp)
8013090: 80130ac0 call 80130ac <OS_FlagUnlink>
return (sched);
8013094: e0bfffc3 ldbu r2,-1(fp)
}
8013098: e037883a mov sp,fp
801309c: dfc00117 ldw ra,4(sp)
80130a0: df000017 ldw fp,0(sp)
80130a4: dec00204 addi sp,sp,8
80130a8: f800283a ret
080130ac <OS_FlagUnlink>:
* 2) This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
void OS_FlagUnlink (OS_FLAG_NODE *pnode)
{
80130ac: defffa04 addi sp,sp,-24
80130b0: df000515 stw fp,20(sp)
80130b4: df000504 addi fp,sp,20
80130b8: e13ffb15 stw r4,-20(fp)
OS_FLAG_GRP *pgrp;
OS_FLAG_NODE *pnode_prev;
OS_FLAG_NODE *pnode_next;
pnode_prev = (OS_FLAG_NODE *)pnode->OSFlagNodePrev;
80130bc: e0bffb17 ldw r2,-20(fp)
80130c0: 10800117 ldw r2,4(r2)
80130c4: e0bfff15 stw r2,-4(fp)
pnode_next = (OS_FLAG_NODE *)pnode->OSFlagNodeNext;
80130c8: e0bffb17 ldw r2,-20(fp)
80130cc: 10800017 ldw r2,0(r2)
80130d0: e0bffe15 stw r2,-8(fp)
if (pnode_prev == (OS_FLAG_NODE *)0) { /* Is it first node in wait list? */
80130d4: e0bfff17 ldw r2,-4(fp)
80130d8: 10000b1e bne r2,zero,8013108 <OS_FlagUnlink+0x5c>
pgrp = (OS_FLAG_GRP *)pnode->OSFlagNodeFlagGrp;
80130dc: e0bffb17 ldw r2,-20(fp)
80130e0: 10800317 ldw r2,12(r2)
80130e4: e0bffd15 stw r2,-12(fp)
pgrp->OSFlagWaitList = (void *)pnode_next; /* Update list for new 1st node */
80130e8: e0bffd17 ldw r2,-12(fp)
80130ec: e0fffe17 ldw r3,-8(fp)
80130f0: 10c00115 stw r3,4(r2)
if (pnode_next != (OS_FLAG_NODE *)0) {
80130f4: e0bffe17 ldw r2,-8(fp)
80130f8: 10000b26 beq r2,zero,8013128 <OS_FlagUnlink+0x7c>
pnode_next->OSFlagNodePrev = (OS_FLAG_NODE *)0; /* Link new 1st node PREV to NULL */
80130fc: e0bffe17 ldw r2,-8(fp)
8013100: 10000115 stw zero,4(r2)
8013104: 00000806 br 8013128 <OS_FlagUnlink+0x7c>
}
} else { /* No, A node somewhere in the list */
pnode_prev->OSFlagNodeNext = pnode_next; /* Link around the node to unlink */
8013108: e0bfff17 ldw r2,-4(fp)
801310c: e0fffe17 ldw r3,-8(fp)
8013110: 10c00015 stw r3,0(r2)
if (pnode_next != (OS_FLAG_NODE *)0) { /* Was this the LAST node? */
8013114: e0bffe17 ldw r2,-8(fp)
8013118: 10000326 beq r2,zero,8013128 <OS_FlagUnlink+0x7c>
pnode_next->OSFlagNodePrev = pnode_prev; /* No, Link around current node */
801311c: e0bffe17 ldw r2,-8(fp)
8013120: e0ffff17 ldw r3,-4(fp)
8013124: 10c00115 stw r3,4(r2)
}
}
#if OS_TASK_DEL_EN > 0
ptcb = (OS_TCB *)pnode->OSFlagNodeTCB;
8013128: e0bffb17 ldw r2,-20(fp)
801312c: 10800217 ldw r2,8(r2)
8013130: e0bffc15 stw r2,-16(fp)
ptcb->OSTCBFlagNode = (OS_FLAG_NODE *)0;
8013134: e0bffc17 ldw r2,-16(fp)
8013138: 10000a15 stw zero,40(r2)
#endif
}
801313c: 0001883a nop
8013140: e037883a mov sp,fp
8013144: df000017 ldw fp,0(sp)
8013148: dec00104 addi sp,sp,4
801314c: f800283a ret
08013150 <OSMemCreate>:
* free partition is available.
*********************************************************************************************************
*/
OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *perr)
{
8013150: defff404 addi sp,sp,-48
8013154: df000b15 stw fp,44(sp)
8013158: df000b04 addi fp,sp,44
801315c: e13ff815 stw r4,-32(fp)
8013160: e17ff715 stw r5,-36(fp)
8013164: e1bff615 stw r6,-40(fp)
8013168: e1fff515 stw r7,-44(fp)
OS_MEM *pmem;
INT8U *pblk;
void **plink;
INT32U i;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801316c: e03ffc15 stw zero,-16(fp)
NIOS2_READ_STATUS (context);
8013170: 0005303a rdctl r2,status
8013174: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8013178: e0fffa17 ldw r3,-24(fp)
801317c: 00bfff84 movi r2,-2
8013180: 1884703a and r2,r3,r2
8013184: 1001703a wrctl status,r2
return context;
8013188: e0bffa17 ldw r2,-24(fp)
if (blksize < sizeof(void *)) { /* Must contain space for at least a pointer */
*perr = OS_ERR_MEM_INVALID_SIZE;
return ((OS_MEM *)0);
}
#endif
OS_ENTER_CRITICAL();
801318c: e0bffc15 stw r2,-16(fp)
pmem = OSMemFreeList; /* Get next free memory partition */
8013190: d0a05217 ldw r2,-32440(gp)
8013194: e0bffb15 stw r2,-20(fp)
if (OSMemFreeList != (OS_MEM *)0) { /* See if pool of free partitions was empty */
8013198: d0a05217 ldw r2,-32440(gp)
801319c: 10000326 beq r2,zero,80131ac <OSMemCreate+0x5c>
OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList;
80131a0: d0a05217 ldw r2,-32440(gp)
80131a4: 10800117 ldw r2,4(r2)
80131a8: d0a05215 stw r2,-32440(gp)
80131ac: e0bffc17 ldw r2,-16(fp)
80131b0: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
80131b4: e0bff917 ldw r2,-28(fp)
80131b8: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
if (pmem == (OS_MEM *)0) { /* See if we have a memory partition */
80131bc: e0bffb17 ldw r2,-20(fp)
80131c0: 1000051e bne r2,zero,80131d8 <OSMemCreate+0x88>
*perr = OS_ERR_MEM_INVALID_PART;
80131c4: e0bff517 ldw r2,-44(fp)
80131c8: 00c01684 movi r3,90
80131cc: 10c00005 stb r3,0(r2)
return ((OS_MEM *)0);
80131d0: 0005883a mov r2,zero
80131d4: 00002c06 br 8013288 <OSMemCreate+0x138>
}
plink = (void **)addr; /* Create linked list of free memory blocks */
80131d8: e0bff817 ldw r2,-32(fp)
80131dc: e0bffe15 stw r2,-8(fp)
pblk = (INT8U *)((INT32U)addr + blksize);
80131e0: e0fff817 ldw r3,-32(fp)
80131e4: e0bff617 ldw r2,-40(fp)
80131e8: 1885883a add r2,r3,r2
80131ec: e0bfff15 stw r2,-4(fp)
for (i = 0; i < (nblks - 1); i++) {
80131f0: e03ffd15 stw zero,-12(fp)
80131f4: 00000c06 br 8013228 <OSMemCreate+0xd8>
*plink = (void *)pblk; /* Save pointer to NEXT block in CURRENT block */
80131f8: e0bffe17 ldw r2,-8(fp)
80131fc: e0ffff17 ldw r3,-4(fp)
8013200: 10c00015 stw r3,0(r2)
plink = (void **)pblk; /* Position to NEXT block */
8013204: e0bfff17 ldw r2,-4(fp)
8013208: e0bffe15 stw r2,-8(fp)
pblk = (INT8U *)((INT32U)pblk + blksize); /* Point to the FOLLOWING block */
801320c: e0ffff17 ldw r3,-4(fp)
8013210: e0bff617 ldw r2,-40(fp)
8013214: 1885883a add r2,r3,r2
8013218: e0bfff15 stw r2,-4(fp)
for (i = 0; i < (nblks - 1); i++) {
801321c: e0bffd17 ldw r2,-12(fp)
8013220: 10800044 addi r2,r2,1
8013224: e0bffd15 stw r2,-12(fp)
8013228: e0bff717 ldw r2,-36(fp)
801322c: 10bfffc4 addi r2,r2,-1
8013230: e0fffd17 ldw r3,-12(fp)
8013234: 18bff036 bltu r3,r2,80131f8 <OSMemCreate+0xa8>
}
*plink = (void *)0; /* Last memory block points to NULL */
8013238: e0bffe17 ldw r2,-8(fp)
801323c: 10000015 stw zero,0(r2)
pmem->OSMemAddr = addr; /* Store start address of memory partition */
8013240: e0bffb17 ldw r2,-20(fp)
8013244: e0fff817 ldw r3,-32(fp)
8013248: 10c00015 stw r3,0(r2)
pmem->OSMemFreeList = addr; /* Initialize pointer to pool of free blocks */
801324c: e0bffb17 ldw r2,-20(fp)
8013250: e0fff817 ldw r3,-32(fp)
8013254: 10c00115 stw r3,4(r2)
pmem->OSMemNFree = nblks; /* Store number of free blocks in MCB */
8013258: e0bffb17 ldw r2,-20(fp)
801325c: e0fff717 ldw r3,-36(fp)
8013260: 10c00415 stw r3,16(r2)
pmem->OSMemNBlks = nblks;
8013264: e0bffb17 ldw r2,-20(fp)
8013268: e0fff717 ldw r3,-36(fp)
801326c: 10c00315 stw r3,12(r2)
pmem->OSMemBlkSize = blksize; /* Store block size of each memory blocks */
8013270: e0bffb17 ldw r2,-20(fp)
8013274: e0fff617 ldw r3,-40(fp)
8013278: 10c00215 stw r3,8(r2)
*perr = OS_ERR_NONE;
801327c: e0bff517 ldw r2,-44(fp)
8013280: 10000005 stb zero,0(r2)
return (pmem);
8013284: e0bffb17 ldw r2,-20(fp)
}
8013288: e037883a mov sp,fp
801328c: df000017 ldw fp,0(sp)
8013290: dec00104 addi sp,sp,4
8013294: f800283a ret
08013298 <OSMemGet>:
* A pointer to NULL if an error is detected
*********************************************************************************************************
*/
void *OSMemGet (OS_MEM *pmem, INT8U *perr)
{
8013298: defff804 addi sp,sp,-32
801329c: df000715 stw fp,28(sp)
80132a0: df000704 addi fp,sp,28
80132a4: e13ffa15 stw r4,-24(fp)
80132a8: e17ff915 stw r5,-28(fp)
void *pblk;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80132ac: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
80132b0: 0005303a rdctl r2,status
80132b4: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80132b8: e0fffd17 ldw r3,-12(fp)
80132bc: 00bfff84 movi r2,-2
80132c0: 1884703a and r2,r3,r2
80132c4: 1001703a wrctl status,r2
return context;
80132c8: e0bffd17 ldw r2,-12(fp)
if (pmem == (OS_MEM *)0) { /* Must point to a valid memory partition */
*perr = OS_ERR_MEM_INVALID_PMEM;
return ((void *)0);
}
#endif
OS_ENTER_CRITICAL();
80132cc: e0bfff15 stw r2,-4(fp)
if (pmem->OSMemNFree > 0) { /* See if there are any free memory blocks */
80132d0: e0bffa17 ldw r2,-24(fp)
80132d4: 10800417 ldw r2,16(r2)
80132d8: 10001426 beq r2,zero,801332c <OSMemGet+0x94>
pblk = pmem->OSMemFreeList; /* Yes, point to next free memory block */
80132dc: e0bffa17 ldw r2,-24(fp)
80132e0: 10800117 ldw r2,4(r2)
80132e4: e0bffe15 stw r2,-8(fp)
pmem->OSMemFreeList = *(void **)pblk; /* Adjust pointer to new free list */
80132e8: e0bffe17 ldw r2,-8(fp)
80132ec: 10c00017 ldw r3,0(r2)
80132f0: e0bffa17 ldw r2,-24(fp)
80132f4: 10c00115 stw r3,4(r2)
pmem->OSMemNFree--; /* One less memory block in this partition */
80132f8: e0bffa17 ldw r2,-24(fp)
80132fc: 10800417 ldw r2,16(r2)
8013300: 10ffffc4 addi r3,r2,-1
8013304: e0bffa17 ldw r2,-24(fp)
8013308: 10c00415 stw r3,16(r2)
801330c: e0bfff17 ldw r2,-4(fp)
8013310: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8013314: e0bffc17 ldw r2,-16(fp)
8013318: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE; /* No error */
801331c: e0bff917 ldw r2,-28(fp)
8013320: 10000005 stb zero,0(r2)
return (pblk); /* Return memory block to caller */
8013324: e0bffe17 ldw r2,-8(fp)
8013328: 00000806 br 801334c <OSMemGet+0xb4>
801332c: e0bfff17 ldw r2,-4(fp)
8013330: e0bffb15 stw r2,-20(fp)
8013334: e0bffb17 ldw r2,-20(fp)
8013338: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
*perr = OS_ERR_MEM_NO_FREE_BLKS; /* No, Notify caller of empty memory partition */
801333c: e0bff917 ldw r2,-28(fp)
8013340: 00c01744 movi r3,93
8013344: 10c00005 stb r3,0(r2)
return ((void *)0); /* Return NULL pointer to caller */
8013348: 0005883a mov r2,zero
}
801334c: e037883a mov sp,fp
8013350: df000017 ldw fp,0(sp)
8013354: dec00104 addi sp,sp,4
8013358: f800283a ret
0801335c <OSMemNameGet>:
*********************************************************************************************************
*/
#if OS_MEM_NAME_SIZE > 1
INT8U OSMemNameGet (OS_MEM *pmem, INT8U *pname, INT8U *perr)
{
801335c: defff704 addi sp,sp,-36
8013360: dfc00815 stw ra,32(sp)
8013364: df000715 stw fp,28(sp)
8013368: df000704 addi fp,sp,28
801336c: e13ffb15 stw r4,-20(fp)
8013370: e17ffa15 stw r5,-24(fp)
8013374: e1bff915 stw r6,-28(fp)
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8013378: e03fff15 stw zero,-4(fp)
if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
*perr = OS_ERR_PNAME_NULL;
return (0);
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
801337c: d0a05703 ldbu r2,-32420(gp)
8013380: 10803fcc andi r2,r2,255
8013384: 10000526 beq r2,zero,801339c <OSMemNameGet+0x40>
*perr = OS_ERR_NAME_GET_ISR;
8013388: e0bff917 ldw r2,-28(fp)
801338c: 00c00444 movi r3,17
8013390: 10c00005 stb r3,0(r2)
return (0);
8013394: 0005883a mov r2,zero
8013398: 00001506 br 80133f0 <OSMemNameGet+0x94>
NIOS2_READ_STATUS (context);
801339c: 0005303a rdctl r2,status
80133a0: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80133a4: e0fffc17 ldw r3,-16(fp)
80133a8: 00bfff84 movi r2,-2
80133ac: 1884703a and r2,r3,r2
80133b0: 1001703a wrctl status,r2
return context;
80133b4: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
80133b8: e0bfff15 stw r2,-4(fp)
len = OS_StrCopy(pname, pmem->OSMemName); /* Copy name from OS_MEM */
80133bc: e0bffb17 ldw r2,-20(fp)
80133c0: 10800504 addi r2,r2,20
80133c4: 100b883a mov r5,r2
80133c8: e13ffa17 ldw r4,-24(fp)
80133cc: 80117a00 call 80117a0 <OS_StrCopy>
80133d0: e0bffec5 stb r2,-5(fp)
80133d4: e0bfff17 ldw r2,-4(fp)
80133d8: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
80133dc: e0bffd17 ldw r2,-12(fp)
80133e0: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
80133e4: e0bff917 ldw r2,-28(fp)
80133e8: 10000005 stb zero,0(r2)
return (len);
80133ec: e0bffec3 ldbu r2,-5(fp)
}
80133f0: e037883a mov sp,fp
80133f4: dfc00117 ldw ra,4(sp)
80133f8: df000017 ldw fp,0(sp)
80133fc: dec00204 addi sp,sp,8
8013400: f800283a ret
08013404 <OSMemNameSet>:
*********************************************************************************************************
*/
#if OS_MEM_NAME_SIZE > 1
void OSMemNameSet (OS_MEM *pmem, INT8U *pname, INT8U *perr)
{
8013404: defff604 addi sp,sp,-40
8013408: dfc00915 stw ra,36(sp)
801340c: df000815 stw fp,32(sp)
8013410: df000804 addi fp,sp,32
8013414: e13ffa15 stw r4,-24(fp)
8013418: e17ff915 stw r5,-28(fp)
801341c: e1bff815 stw r6,-32(fp)
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8013420: e03fff15 stw zero,-4(fp)
if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
*perr = OS_ERR_PNAME_NULL;
return;
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
8013424: d0a05703 ldbu r2,-32420(gp)
8013428: 10803fcc andi r2,r2,255
801342c: 10000426 beq r2,zero,8013440 <OSMemNameSet+0x3c>
*perr = OS_ERR_NAME_SET_ISR;
8013430: e0bff817 ldw r2,-32(fp)
8013434: 00c00484 movi r3,18
8013438: 10c00005 stb r3,0(r2)
return;
801343c: 00002106 br 80134c4 <OSMemNameSet+0xc0>
NIOS2_READ_STATUS (context);
8013440: 0005303a rdctl r2,status
8013444: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8013448: e0fffd17 ldw r3,-12(fp)
801344c: 00bfff84 movi r2,-2
8013450: 1884703a and r2,r3,r2
8013454: 1001703a wrctl status,r2
return context;
8013458: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
801345c: e0bfff15 stw r2,-4(fp)
len = OS_StrLen(pname); /* Can we fit the string in the storage area? */
8013460: e13ff917 ldw r4,-28(fp)
8013464: 80118140 call 8011814 <OS_StrLen>
8013468: e0bffec5 stb r2,-5(fp)
if (len > (OS_MEM_NAME_SIZE - 1)) { /* No */
801346c: e0bffec3 ldbu r2,-5(fp)
8013470: 10800830 cmpltui r2,r2,32
8013474: 1000081e bne r2,zero,8013498 <OSMemNameSet+0x94>
8013478: e0bfff17 ldw r2,-4(fp)
801347c: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8013480: e0bffc17 ldw r2,-16(fp)
8013484: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_MEM_NAME_TOO_LONG;
8013488: e0bff817 ldw r2,-32(fp)
801348c: 00c018c4 movi r3,99
8013490: 10c00005 stb r3,0(r2)
return;
8013494: 00000b06 br 80134c4 <OSMemNameSet+0xc0>
}
(void)OS_StrCopy(pmem->OSMemName, pname); /* Yes, copy name to the memory partition header */
8013498: e0bffa17 ldw r2,-24(fp)
801349c: 10800504 addi r2,r2,20
80134a0: e17ff917 ldw r5,-28(fp)
80134a4: 1009883a mov r4,r2
80134a8: 80117a00 call 80117a0 <OS_StrCopy>
80134ac: e0bfff17 ldw r2,-4(fp)
80134b0: e0bffb15 stw r2,-20(fp)
80134b4: e0bffb17 ldw r2,-20(fp)
80134b8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
80134bc: e0bff817 ldw r2,-32(fp)
80134c0: 10000005 stb zero,0(r2)
}
80134c4: e037883a mov sp,fp
80134c8: dfc00117 ldw ra,4(sp)
80134cc: df000017 ldw fp,0(sp)
80134d0: dec00204 addi sp,sp,8
80134d4: f800283a ret
080134d8 <OSMemPut>:
* OS_ERR_MEM_INVALID_PBLK if you passed a NULL pointer for the block to release.
*********************************************************************************************************
*/
INT8U OSMemPut (OS_MEM *pmem, void *pblk)
{
80134d8: defff904 addi sp,sp,-28
80134dc: df000615 stw fp,24(sp)
80134e0: df000604 addi fp,sp,24
80134e4: e13ffb15 stw r4,-20(fp)
80134e8: e17ffa15 stw r5,-24(fp)
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80134ec: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
80134f0: 0005303a rdctl r2,status
80134f4: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80134f8: e0fffe17 ldw r3,-8(fp)
80134fc: 00bfff84 movi r2,-2
8013500: 1884703a and r2,r3,r2
8013504: 1001703a wrctl status,r2
return context;
8013508: e0bffe17 ldw r2,-8(fp)
}
if (pblk == (void *)0) { /* Must release a valid block */
return (OS_ERR_MEM_INVALID_PBLK);
}
#endif
OS_ENTER_CRITICAL();
801350c: e0bfff15 stw r2,-4(fp)
if (pmem->OSMemNFree >= pmem->OSMemNBlks) { /* Make sure all blocks not already returned */
8013510: e0bffb17 ldw r2,-20(fp)
8013514: 10c00417 ldw r3,16(r2)
8013518: e0bffb17 ldw r2,-20(fp)
801351c: 10800317 ldw r2,12(r2)
8013520: 18800636 bltu r3,r2,801353c <OSMemPut+0x64>
8013524: e0bfff17 ldw r2,-4(fp)
8013528: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
801352c: e0bffd17 ldw r2,-12(fp)
8013530: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_MEM_FULL);
8013534: 00801784 movi r2,94
8013538: 00001106 br 8013580 <OSMemPut+0xa8>
}
*(void **)pblk = pmem->OSMemFreeList; /* Insert released block into free block list */
801353c: e0bffb17 ldw r2,-20(fp)
8013540: 10c00117 ldw r3,4(r2)
8013544: e0bffa17 ldw r2,-24(fp)
8013548: 10c00015 stw r3,0(r2)
pmem->OSMemFreeList = pblk;
801354c: e0bffb17 ldw r2,-20(fp)
8013550: e0fffa17 ldw r3,-24(fp)
8013554: 10c00115 stw r3,4(r2)
pmem->OSMemNFree++; /* One more memory block in this partition */
8013558: e0bffb17 ldw r2,-20(fp)
801355c: 10800417 ldw r2,16(r2)
8013560: 10c00044 addi r3,r2,1
8013564: e0bffb17 ldw r2,-20(fp)
8013568: 10c00415 stw r3,16(r2)
801356c: e0bfff17 ldw r2,-4(fp)
8013570: e0bffc15 stw r2,-16(fp)
8013574: e0bffc17 ldw r2,-16(fp)
8013578: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE); /* Notify caller that memory block was released */
801357c: 0005883a mov r2,zero
}
8013580: e037883a mov sp,fp
8013584: df000017 ldw fp,0(sp)
8013588: dec00104 addi sp,sp,4
801358c: f800283a ret
08013590 <OSMemQuery>:
*********************************************************************************************************
*/
#if OS_MEM_QUERY_EN > 0
INT8U OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *p_mem_data)
{
8013590: defffa04 addi sp,sp,-24
8013594: df000515 stw fp,20(sp)
8013598: df000504 addi fp,sp,20
801359c: e13ffc15 stw r4,-16(fp)
80135a0: e17ffb15 stw r5,-20(fp)
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80135a4: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
80135a8: 0005303a rdctl r2,status
80135ac: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80135b0: e0fffd17 ldw r3,-12(fp)
80135b4: 00bfff84 movi r2,-2
80135b8: 1884703a and r2,r3,r2
80135bc: 1001703a wrctl status,r2
return context;
80135c0: e0bffd17 ldw r2,-12(fp)
}
if (p_mem_data == (OS_MEM_DATA *)0) { /* Must release a valid storage area for the data */
return (OS_ERR_MEM_INVALID_PDATA);
}
#endif
OS_ENTER_CRITICAL();
80135c4: e0bfff15 stw r2,-4(fp)
p_mem_data->OSAddr = pmem->OSMemAddr;
80135c8: e0bffc17 ldw r2,-16(fp)
80135cc: 10c00017 ldw r3,0(r2)
80135d0: e0bffb17 ldw r2,-20(fp)
80135d4: 10c00015 stw r3,0(r2)
p_mem_data->OSFreeList = pmem->OSMemFreeList;
80135d8: e0bffc17 ldw r2,-16(fp)
80135dc: 10c00117 ldw r3,4(r2)
80135e0: e0bffb17 ldw r2,-20(fp)
80135e4: 10c00115 stw r3,4(r2)
p_mem_data->OSBlkSize = pmem->OSMemBlkSize;
80135e8: e0bffc17 ldw r2,-16(fp)
80135ec: 10c00217 ldw r3,8(r2)
80135f0: e0bffb17 ldw r2,-20(fp)
80135f4: 10c00215 stw r3,8(r2)
p_mem_data->OSNBlks = pmem->OSMemNBlks;
80135f8: e0bffc17 ldw r2,-16(fp)
80135fc: 10c00317 ldw r3,12(r2)
8013600: e0bffb17 ldw r2,-20(fp)
8013604: 10c00315 stw r3,12(r2)
p_mem_data->OSNFree = pmem->OSMemNFree;
8013608: e0bffc17 ldw r2,-16(fp)
801360c: 10c00417 ldw r3,16(r2)
8013610: e0bffb17 ldw r2,-20(fp)
8013614: 10c00415 stw r3,16(r2)
8013618: e0bfff17 ldw r2,-4(fp)
801361c: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context);
8013620: e0bffe17 ldw r2,-8(fp)
8013624: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
p_mem_data->OSNUsed = p_mem_data->OSNBlks - p_mem_data->OSNFree;
8013628: e0bffb17 ldw r2,-20(fp)
801362c: 10c00317 ldw r3,12(r2)
8013630: e0bffb17 ldw r2,-20(fp)
8013634: 10800417 ldw r2,16(r2)
8013638: 1887c83a sub r3,r3,r2
801363c: e0bffb17 ldw r2,-20(fp)
8013640: 10c00515 stw r3,20(r2)
return (OS_ERR_NONE);
8013644: 0005883a mov r2,zero
}
8013648: e037883a mov sp,fp
801364c: df000017 ldw fp,0(sp)
8013650: dec00104 addi sp,sp,4
8013654: f800283a ret
08013658 <OS_MemInit>:
* Note(s) : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
void OS_MemInit (void)
{
8013658: defffc04 addi sp,sp,-16
801365c: dfc00315 stw ra,12(sp)
8013660: df000215 stw fp,8(sp)
8013664: df000204 addi fp,sp,8
#if OS_MAX_MEM_PART >= 2
OS_MEM *pmem;
INT16U i;
OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table */
8013668: 01430c04 movi r5,3120
801366c: 010201b4 movhi r4,2054
8013670: 212c6704 addi r4,r4,-20068
8013674: 80115b00 call 80115b0 <OS_MemClr>
pmem = &OSMemTbl[0]; /* Point to memory control block (MCB) */
8013678: 008201b4 movhi r2,2054
801367c: 10ac6704 addi r2,r2,-20068
8013680: e0bfff15 stw r2,-4(fp)
for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) { /* Init. list of free memory partitions */
8013684: e03ffe8d sth zero,-6(fp)
8013688: 00001306 br 80136d8 <OS_MemInit+0x80>
pmem->OSMemFreeList = (void *)&OSMemTbl[i+1]; /* Chain list of free partitions */
801368c: e0bffe8b ldhu r2,-6(fp)
8013690: 10800044 addi r2,r2,1
8013694: 10c00d24 muli r3,r2,52
8013698: 008201b4 movhi r2,2054
801369c: 10ac6704 addi r2,r2,-20068
80136a0: 1887883a add r3,r3,r2
80136a4: e0bfff17 ldw r2,-4(fp)
80136a8: 10c00115 stw r3,4(r2)
#if OS_MEM_NAME_SIZE > 1
pmem->OSMemName[0] = '?'; /* Unknown name */
80136ac: e0bfff17 ldw r2,-4(fp)
80136b0: 00c00fc4 movi r3,63
80136b4: 10c00505 stb r3,20(r2)
pmem->OSMemName[1] = OS_ASCII_NUL;
80136b8: e0bfff17 ldw r2,-4(fp)
80136bc: 10000545 stb zero,21(r2)
#endif
pmem++;
80136c0: e0bfff17 ldw r2,-4(fp)
80136c4: 10800d04 addi r2,r2,52
80136c8: e0bfff15 stw r2,-4(fp)
for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) { /* Init. list of free memory partitions */
80136cc: e0bffe8b ldhu r2,-6(fp)
80136d0: 10800044 addi r2,r2,1
80136d4: e0bffe8d sth r2,-6(fp)
80136d8: e0bffe8b ldhu r2,-6(fp)
80136dc: 10800ef0 cmpltui r2,r2,59
80136e0: 103fea1e bne r2,zero,801368c <OS_MemInit+0x34>
}
pmem->OSMemFreeList = (void *)0; /* Initialize last node */
80136e4: e0bfff17 ldw r2,-4(fp)
80136e8: 10000115 stw zero,4(r2)
#if OS_MEM_NAME_SIZE > 1
pmem->OSMemName[0] = '?'; /* Unknown name */
80136ec: e0bfff17 ldw r2,-4(fp)
80136f0: 00c00fc4 movi r3,63
80136f4: 10c00505 stb r3,20(r2)
pmem->OSMemName[1] = OS_ASCII_NUL;
80136f8: e0bfff17 ldw r2,-4(fp)
80136fc: 10000545 stb zero,21(r2)
#endif
OSMemFreeList = &OSMemTbl[0]; /* Point to beginning of free list */
8013700: 008201b4 movhi r2,2054
8013704: 10ac6704 addi r2,r2,-20068
8013708: d0a05215 stw r2,-32440(gp)
#endif
}
801370c: 0001883a nop
8013710: e037883a mov sp,fp
8013714: dfc00117 ldw ra,4(sp)
8013718: df000017 ldw fp,0(sp)
801371c: dec00204 addi sp,sp,8
8013720: f800283a ret
08013724 <OSMutexAccept>:
*********************************************************************************************************
*/
#if OS_MUTEX_ACCEPT_EN > 0
BOOLEAN OSMutexAccept (OS_EVENT *pevent, INT8U *perr)
{
8013724: defff704 addi sp,sp,-36
8013728: df000815 stw fp,32(sp)
801372c: df000804 addi fp,sp,32
8013730: e13ff915 stw r4,-28(fp)
8013734: e17ff815 stw r5,-32(fp)
INT8U pip; /* Priority Inheritance Priority (PIP) */
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8013738: e03fff15 stw zero,-4(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return (OS_FALSE);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type */
801373c: e0bff917 ldw r2,-28(fp)
8013740: 10800003 ldbu r2,0(r2)
8013744: 10803fcc andi r2,r2,255
8013748: 10800120 cmpeqi r2,r2,4
801374c: 1000051e bne r2,zero,8013764 <OSMutexAccept+0x40>
*perr = OS_ERR_EVENT_TYPE;
8013750: e0bff817 ldw r2,-32(fp)
8013754: 00c00044 movi r3,1
8013758: 10c00005 stb r3,0(r2)
return (OS_FALSE);
801375c: 0005883a mov r2,zero
8013760: 00004a06 br 801388c <OSMutexAccept+0x168>
}
if (OSIntNesting > 0) { /* Make sure it's not called from an ISR */
8013764: d0a05703 ldbu r2,-32420(gp)
8013768: 10803fcc andi r2,r2,255
801376c: 10000526 beq r2,zero,8013784 <OSMutexAccept+0x60>
*perr = OS_ERR_PEND_ISR;
8013770: e0bff817 ldw r2,-32(fp)
8013774: 00c00084 movi r3,2
8013778: 10c00005 stb r3,0(r2)
return (OS_FALSE);
801377c: 0005883a mov r2,zero
8013780: 00004206 br 801388c <OSMutexAccept+0x168>
NIOS2_READ_STATUS (context);
8013784: 0005303a rdctl r2,status
8013788: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801378c: e0fffd17 ldw r3,-12(fp)
8013790: 00bfff84 movi r2,-2
8013794: 1884703a and r2,r3,r2
8013798: 1001703a wrctl status,r2
return context;
801379c: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL(); /* Get value (0 or 1) of Mutex */
80137a0: e0bfff15 stw r2,-4(fp)
pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get PIP from mutex */
80137a4: e0bff917 ldw r2,-28(fp)
80137a8: 1080020b ldhu r2,8(r2)
80137ac: 10bfffcc andi r2,r2,65535
80137b0: 1004d23a srli r2,r2,8
80137b4: e0bffec5 stb r2,-5(fp)
if ((pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8) == OS_MUTEX_AVAILABLE) {
80137b8: e0bff917 ldw r2,-28(fp)
80137bc: 1080020b ldhu r2,8(r2)
80137c0: 10bfffcc andi r2,r2,65535
80137c4: 10803fcc andi r2,r2,255
80137c8: 10803fd8 cmpnei r2,r2,255
80137cc: 1000281e bne r2,zero,8013870 <OSMutexAccept+0x14c>
pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Mask off LSByte (Acquire Mutex) */
80137d0: e0bff917 ldw r2,-28(fp)
80137d4: 10c0020b ldhu r3,8(r2)
80137d8: 00bfc004 movi r2,-256
80137dc: 1884703a and r2,r3,r2
80137e0: 1007883a mov r3,r2
80137e4: e0bff917 ldw r2,-28(fp)
80137e8: 10c0020d sth r3,8(r2)
pevent->OSEventCnt |= OSTCBCur->OSTCBPrio; /* Save current task priority in LSByte */
80137ec: e0bff917 ldw r2,-28(fp)
80137f0: 10c0020b ldhu r3,8(r2)
80137f4: d0a05817 ldw r2,-32416(gp)
80137f8: 10800c83 ldbu r2,50(r2)
80137fc: 10803fcc andi r2,r2,255
8013800: 1884b03a or r2,r3,r2
8013804: 1007883a mov r3,r2
8013808: e0bff917 ldw r2,-28(fp)
801380c: 10c0020d sth r3,8(r2)
pevent->OSEventPtr = (void *)OSTCBCur; /* Link TCB of task owning Mutex */
8013810: d0e05817 ldw r3,-32416(gp)
8013814: e0bff917 ldw r2,-28(fp)
8013818: 10c00115 stw r3,4(r2)
if (OSTCBCur->OSTCBPrio <= pip) { /* PIP 'must' have a SMALLER prio ... */
801381c: d0a05817 ldw r2,-32416(gp)
8013820: 10800c83 ldbu r2,50(r2)
8013824: e0fffec3 ldbu r3,-5(fp)
8013828: 10803fcc andi r2,r2,255
801382c: 18800836 bltu r3,r2,8013850 <OSMutexAccept+0x12c>
8013830: e0bfff17 ldw r2,-4(fp)
8013834: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8013838: e0bffc17 ldw r2,-16(fp)
801383c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* ... than current task! */
*perr = OS_ERR_PIP_LOWER;
8013840: e0bff817 ldw r2,-32(fp)
8013844: 00c01e04 movi r3,120
8013848: 10c00005 stb r3,0(r2)
801384c: 00000606 br 8013868 <OSMutexAccept+0x144>
8013850: e0bfff17 ldw r2,-4(fp)
8013854: e0bffb15 stw r2,-20(fp)
8013858: e0bffb17 ldw r2,-20(fp)
801385c: 1001703a wrctl status,r2
} else {
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8013860: e0bff817 ldw r2,-32(fp)
8013864: 10000005 stb zero,0(r2)
}
return (OS_TRUE);
8013868: 00800044 movi r2,1
801386c: 00000706 br 801388c <OSMutexAccept+0x168>
8013870: e0bfff17 ldw r2,-4(fp)
8013874: e0bffa15 stw r2,-24(fp)
8013878: e0bffa17 ldw r2,-24(fp)
801387c: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8013880: e0bff817 ldw r2,-32(fp)
8013884: 10000005 stb zero,0(r2)
return (OS_FALSE);
8013888: 0005883a mov r2,zero
}
801388c: e037883a mov sp,fp
8013890: df000017 ldw fp,0(sp)
8013894: dec00104 addi sp,sp,4
8013898: f800283a ret
0801389c <OSMutexCreate>:
* to use to reduce priority inversion.
*********************************************************************************************************
*/
OS_EVENT *OSMutexCreate (INT8U prio, INT8U *perr)
{
801389c: defff604 addi sp,sp,-40
80138a0: dfc00915 stw ra,36(sp)
80138a4: df000815 stw fp,32(sp)
80138a8: df000804 addi fp,sp,32
80138ac: 2005883a mov r2,r4
80138b0: e17ff815 stw r5,-32(fp)
80138b4: e0bff905 stb r2,-28(fp)
OS_EVENT *pevent;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80138b8: e03fff15 stw zero,-4(fp)
if (prio >= OS_LOWEST_PRIO) { /* Validate PIP */
*perr = OS_ERR_PRIO_INVALID;
return ((OS_EVENT *)0);
}
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
80138bc: d0a05703 ldbu r2,-32420(gp)
80138c0: 10803fcc andi r2,r2,255
80138c4: 10000526 beq r2,zero,80138dc <OSMutexCreate+0x40>
*perr = OS_ERR_CREATE_ISR; /* ... can't CREATE mutex from an ISR */
80138c8: e0bff817 ldw r2,-32(fp)
80138cc: 00c00404 movi r3,16
80138d0: 10c00005 stb r3,0(r2)
return ((OS_EVENT *)0);
80138d4: 0005883a mov r2,zero
80138d8: 00004b06 br 8013a08 <OSMutexCreate+0x16c>
NIOS2_READ_STATUS (context);
80138dc: 0005303a rdctl r2,status
80138e0: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80138e4: e0fffd17 ldw r3,-12(fp)
80138e8: 00bfff84 movi r2,-2
80138ec: 1884703a and r2,r3,r2
80138f0: 1001703a wrctl status,r2
return context;
80138f4: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
80138f8: e0bfff15 stw r2,-4(fp)
if (OSTCBPrioTbl[prio] != (OS_TCB *)0) { /* Mutex priority must not already exist */
80138fc: e0bff903 ldbu r2,-28(fp)
8013900: 100690ba slli r3,r2,2
8013904: 008201b4 movhi r2,2054
8013908: 1885883a add r2,r3,r2
801390c: 10b55d17 ldw r2,-10892(r2)
8013910: 10000926 beq r2,zero,8013938 <OSMutexCreate+0x9c>
8013914: e0bfff17 ldw r2,-4(fp)
8013918: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
801391c: e0bffc17 ldw r2,-16(fp)
8013920: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* Task already exist at priority ... */
*perr = OS_ERR_PRIO_EXIST; /* ... inheritance priority */
8013924: e0bff817 ldw r2,-32(fp)
8013928: 00c00a04 movi r3,40
801392c: 10c00005 stb r3,0(r2)
return ((OS_EVENT *)0);
8013930: 0005883a mov r2,zero
8013934: 00003406 br 8013a08 <OSMutexCreate+0x16c>
}
OSTCBPrioTbl[prio] = OS_TCB_RESERVED; /* Reserve the table entry */
8013938: e0bff903 ldbu r2,-28(fp)
801393c: 100890ba slli r4,r2,2
8013940: 00c00044 movi r3,1
8013944: 008201b4 movhi r2,2054
8013948: 2085883a add r2,r4,r2
801394c: 10f55d15 stw r3,-10892(r2)
pevent = OSEventFreeList; /* Get next free event control block */
8013950: d0a05617 ldw r2,-32424(gp)
8013954: e0bffe15 stw r2,-8(fp)
if (pevent == (OS_EVENT *)0) { /* See if an ECB was available */
8013958: e0bffe17 ldw r2,-8(fp)
801395c: 10000e1e bne r2,zero,8013998 <OSMutexCreate+0xfc>
OSTCBPrioTbl[prio] = (OS_TCB *)0; /* No, Release the table entry */
8013960: e0bff903 ldbu r2,-28(fp)
8013964: 100690ba slli r3,r2,2
8013968: 008201b4 movhi r2,2054
801396c: 1885883a add r2,r3,r2
8013970: 10355d15 stw zero,-10892(r2)
8013974: e0bfff17 ldw r2,-4(fp)
8013978: e0bffb15 stw r2,-20(fp)
801397c: e0bffb17 ldw r2,-20(fp)
8013980: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_PEVENT_NULL; /* No more event control blocks */
8013984: e0bff817 ldw r2,-32(fp)
8013988: 00c00104 movi r3,4
801398c: 10c00005 stb r3,0(r2)
return (pevent);
8013990: e0bffe17 ldw r2,-8(fp)
8013994: 00001c06 br 8013a08 <OSMutexCreate+0x16c>
}
OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr; /* Adjust the free list */
8013998: d0a05617 ldw r2,-32424(gp)
801399c: 10800117 ldw r2,4(r2)
80139a0: d0a05615 stw r2,-32424(gp)
80139a4: e0bfff17 ldw r2,-4(fp)
80139a8: e0bffa15 stw r2,-24(fp)
80139ac: e0bffa17 ldw r2,-24(fp)
80139b0: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
pevent->OSEventType = OS_EVENT_TYPE_MUTEX;
80139b4: e0bffe17 ldw r2,-8(fp)
80139b8: 00c00104 movi r3,4
80139bc: 10c00005 stb r3,0(r2)
pevent->OSEventCnt = (INT16U)((INT16U)prio << 8) | OS_MUTEX_AVAILABLE; /* Resource is avail. */
80139c0: e0bff903 ldbu r2,-28(fp)
80139c4: 1004923a slli r2,r2,8
80139c8: 10803fd4 ori r2,r2,255
80139cc: 1007883a mov r3,r2
80139d0: e0bffe17 ldw r2,-8(fp)
80139d4: 10c0020d sth r3,8(r2)
pevent->OSEventPtr = (void *)0; /* No task owning the mutex */
80139d8: e0bffe17 ldw r2,-8(fp)
80139dc: 10000115 stw zero,4(r2)
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?';
80139e0: e0bffe17 ldw r2,-8(fp)
80139e4: 00c00fc4 movi r3,63
80139e8: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
80139ec: e0bffe17 ldw r2,-8(fp)
80139f0: 100003c5 stb zero,15(r2)
#endif
OS_EventWaitListInit(pevent);
80139f4: e13ffe17 ldw r4,-8(fp)
80139f8: 80112580 call 8011258 <OS_EventWaitListInit>
*perr = OS_ERR_NONE;
80139fc: e0bff817 ldw r2,-32(fp)
8013a00: 10000005 stb zero,0(r2)
return (pevent);
8013a04: e0bffe17 ldw r2,-8(fp)
}
8013a08: e037883a mov sp,fp
8013a0c: dfc00117 ldw ra,4(sp)
8013a10: df000017 ldw fp,0(sp)
8013a14: dec00204 addi sp,sp,8
8013a18: f800283a ret
08013a1c <OSMutexDel>:
*********************************************************************************************************
*/
#if OS_MUTEX_DEL_EN
OS_EVENT *OSMutexDel (OS_EVENT *pevent, INT8U opt, INT8U *perr)
{
8013a1c: defff104 addi sp,sp,-60
8013a20: dfc00e15 stw ra,56(sp)
8013a24: df000d15 stw fp,52(sp)
8013a28: df000d04 addi fp,sp,52
8013a2c: e13ff515 stw r4,-44(fp)
8013a30: 2805883a mov r2,r5
8013a34: e1bff315 stw r6,-52(fp)
8013a38: e0bff405 stb r2,-48(fp)
OS_EVENT *pevent_return;
INT8U pip; /* Priority inheritance priority */
INT8U prio;
OS_TCB *ptcb;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8013a3c: e03ffd15 stw zero,-12(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return (pevent);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type */
8013a40: e0bff517 ldw r2,-44(fp)
8013a44: 10800003 ldbu r2,0(r2)
8013a48: 10803fcc andi r2,r2,255
8013a4c: 10800120 cmpeqi r2,r2,4
8013a50: 1000051e bne r2,zero,8013a68 <OSMutexDel+0x4c>
*perr = OS_ERR_EVENT_TYPE;
8013a54: e0bff317 ldw r2,-52(fp)
8013a58: 00c00044 movi r3,1
8013a5c: 10c00005 stb r3,0(r2)
return (pevent);
8013a60: e0bff517 ldw r2,-44(fp)
8013a64: 00009806 br 8013cc8 <OSMutexDel+0x2ac>
}
if (OSIntNesting > 0) { /* See if called from ISR ... */
8013a68: d0a05703 ldbu r2,-32420(gp)
8013a6c: 10803fcc andi r2,r2,255
8013a70: 10000526 beq r2,zero,8013a88 <OSMutexDel+0x6c>
*perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
8013a74: e0bff317 ldw r2,-52(fp)
8013a78: 00c003c4 movi r3,15
8013a7c: 10c00005 stb r3,0(r2)
return (pevent);
8013a80: e0bff517 ldw r2,-44(fp)
8013a84: 00009006 br 8013cc8 <OSMutexDel+0x2ac>
NIOS2_READ_STATUS (context);
8013a88: 0005303a rdctl r2,status
8013a8c: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8013a90: e0fffa17 ldw r3,-24(fp)
8013a94: 00bfff84 movi r2,-2
8013a98: 1884703a and r2,r3,r2
8013a9c: 1001703a wrctl status,r2
return context;
8013aa0: e0bffa17 ldw r2,-24(fp)
}
OS_ENTER_CRITICAL();
8013aa4: e0bffd15 stw r2,-12(fp)
if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on mutex */
8013aa8: e0bff517 ldw r2,-44(fp)
8013aac: 10800283 ldbu r2,10(r2)
8013ab0: 10803fcc andi r2,r2,255
8013ab4: 10000326 beq r2,zero,8013ac4 <OSMutexDel+0xa8>
tasks_waiting = OS_TRUE; /* Yes */
8013ab8: 00800044 movi r2,1
8013abc: e0bfffc5 stb r2,-1(fp)
8013ac0: 00000106 br 8013ac8 <OSMutexDel+0xac>
} else {
tasks_waiting = OS_FALSE; /* No */
8013ac4: e03fffc5 stb zero,-1(fp)
}
switch (opt) {
8013ac8: e0bff403 ldbu r2,-48(fp)
8013acc: 10000326 beq r2,zero,8013adc <OSMutexDel+0xc0>
8013ad0: 10800060 cmpeqi r2,r2,1
8013ad4: 10002d1e bne r2,zero,8013b8c <OSMutexDel+0x170>
8013ad8: 00007006 br 8013c9c <OSMutexDel+0x280>
case OS_DEL_NO_PEND: /* DELETE MUTEX ONLY IF NO TASK WAITING --- */
if (tasks_waiting == OS_FALSE) {
8013adc: e0bfffc3 ldbu r2,-1(fp)
8013ae0: 1000201e bne r2,zero,8013b64 <OSMutexDel+0x148>
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
8013ae4: e0bff517 ldw r2,-44(fp)
8013ae8: 00c00fc4 movi r3,63
8013aec: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
8013af0: e0bff517 ldw r2,-44(fp)
8013af4: 100003c5 stb zero,15(r2)
#endif
pip = (INT8U)(pevent->OSEventCnt >> 8);
8013af8: e0bff517 ldw r2,-44(fp)
8013afc: 1080020b ldhu r2,8(r2)
8013b00: 10bfffcc andi r2,r2,65535
8013b04: 1004d23a srli r2,r2,8
8013b08: e0bffcc5 stb r2,-13(fp)
OSTCBPrioTbl[pip] = (OS_TCB *)0; /* Free up the PIP */
8013b0c: e0bffcc3 ldbu r2,-13(fp)
8013b10: 100690ba slli r3,r2,2
8013b14: 008201b4 movhi r2,2054
8013b18: 1885883a add r2,r3,r2
8013b1c: 10355d15 stw zero,-10892(r2)
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
8013b20: e0bff517 ldw r2,-44(fp)
8013b24: 10000005 stb zero,0(r2)
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
8013b28: d0e05617 ldw r3,-32424(gp)
8013b2c: e0bff517 ldw r2,-44(fp)
8013b30: 10c00115 stw r3,4(r2)
pevent->OSEventCnt = 0;
8013b34: e0bff517 ldw r2,-44(fp)
8013b38: 1000020d sth zero,8(r2)
OSEventFreeList = pevent;
8013b3c: e0bff517 ldw r2,-44(fp)
8013b40: d0a05615 stw r2,-32424(gp)
8013b44: e0bffd17 ldw r2,-12(fp)
8013b48: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
8013b4c: e0bff917 ldw r2,-28(fp)
8013b50: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8013b54: e0bff317 ldw r2,-52(fp)
8013b58: 10000005 stb zero,0(r2)
pevent_return = (OS_EVENT *)0; /* Mutex has been deleted */
8013b5c: e03ffe15 stw zero,-8(fp)
} else {
OS_EXIT_CRITICAL();
*perr = OS_ERR_TASK_WAITING;
pevent_return = pevent;
}
break;
8013b60: 00005806 br 8013cc4 <OSMutexDel+0x2a8>
8013b64: e0bffd17 ldw r2,-12(fp)
8013b68: e0bff815 stw r2,-32(fp)
8013b6c: e0bff817 ldw r2,-32(fp)
8013b70: 1001703a wrctl status,r2
*perr = OS_ERR_TASK_WAITING;
8013b74: e0bff317 ldw r2,-52(fp)
8013b78: 00c01244 movi r3,73
8013b7c: 10c00005 stb r3,0(r2)
pevent_return = pevent;
8013b80: e0bff517 ldw r2,-44(fp)
8013b84: e0bffe15 stw r2,-8(fp)
break;
8013b88: 00004e06 br 8013cc4 <OSMutexDel+0x2a8>
case OS_DEL_ALWAYS: /* ALWAYS DELETE THE MUTEX ---------------- */
pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get PIP of mutex */
8013b8c: e0bff517 ldw r2,-44(fp)
8013b90: 1080020b ldhu r2,8(r2)
8013b94: 10bfffcc andi r2,r2,65535
8013b98: 1004d23a srli r2,r2,8
8013b9c: e0bffcc5 stb r2,-13(fp)
prio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8); /* Get owner's original prio */
8013ba0: e0bff517 ldw r2,-44(fp)
8013ba4: 1080020b ldhu r2,8(r2)
8013ba8: e0bffc85 stb r2,-14(fp)
ptcb = (OS_TCB *)pevent->OSEventPtr;
8013bac: e0bff517 ldw r2,-44(fp)
8013bb0: 10800117 ldw r2,4(r2)
8013bb4: e0bffb15 stw r2,-20(fp)
if (ptcb != (OS_TCB *)0) { /* See if any task owns the mutex */
8013bb8: e0bffb17 ldw r2,-20(fp)
8013bbc: 10000f26 beq r2,zero,8013bfc <OSMutexDel+0x1e0>
if (ptcb->OSTCBPrio == pip) { /* See if original prio was changed */
8013bc0: e0bffb17 ldw r2,-20(fp)
8013bc4: 10800c83 ldbu r2,50(r2)
8013bc8: e0fffcc3 ldbu r3,-13(fp)
8013bcc: 10803fcc andi r2,r2,255
8013bd0: 18800a1e bne r3,r2,8013bfc <OSMutexDel+0x1e0>
OSMutex_RdyAtPrio(ptcb, prio); /* Yes, Restore the task's original prio */
8013bd4: e0bffc83 ldbu r2,-14(fp)
8013bd8: 100b883a mov r5,r2
8013bdc: e13ffb17 ldw r4,-20(fp)
8013be0: 801457c0 call 801457c <OSMutex_RdyAtPrio>
}
}
while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for mutex */
8013be4: 00000506 br 8013bfc <OSMutexDel+0x1e0>
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MUTEX, OS_STAT_PEND_OK);
8013be8: 000f883a mov r7,zero
8013bec: 01800404 movi r6,16
8013bf0: 000b883a mov r5,zero
8013bf4: e13ff517 ldw r4,-44(fp)
8013bf8: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for mutex */
8013bfc: e0bff517 ldw r2,-44(fp)
8013c00: 10800283 ldbu r2,10(r2)
8013c04: 10803fcc andi r2,r2,255
8013c08: 103ff71e bne r2,zero,8013be8 <OSMutexDel+0x1cc>
}
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
8013c0c: e0bff517 ldw r2,-44(fp)
8013c10: 00c00fc4 movi r3,63
8013c14: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
8013c18: e0bff517 ldw r2,-44(fp)
8013c1c: 100003c5 stb zero,15(r2)
#endif
pip = (INT8U)(pevent->OSEventCnt >> 8);
8013c20: e0bff517 ldw r2,-44(fp)
8013c24: 1080020b ldhu r2,8(r2)
8013c28: 10bfffcc andi r2,r2,65535
8013c2c: 1004d23a srli r2,r2,8
8013c30: e0bffcc5 stb r2,-13(fp)
OSTCBPrioTbl[pip] = (OS_TCB *)0; /* Free up the PIP */
8013c34: e0bffcc3 ldbu r2,-13(fp)
8013c38: 100690ba slli r3,r2,2
8013c3c: 008201b4 movhi r2,2054
8013c40: 1885883a add r2,r3,r2
8013c44: 10355d15 stw zero,-10892(r2)
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
8013c48: e0bff517 ldw r2,-44(fp)
8013c4c: 10000005 stb zero,0(r2)
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
8013c50: d0e05617 ldw r3,-32424(gp)
8013c54: e0bff517 ldw r2,-44(fp)
8013c58: 10c00115 stw r3,4(r2)
pevent->OSEventCnt = 0;
8013c5c: e0bff517 ldw r2,-44(fp)
8013c60: 1000020d sth zero,8(r2)
OSEventFreeList = pevent; /* Get next free event control block */
8013c64: e0bff517 ldw r2,-44(fp)
8013c68: d0a05615 stw r2,-32424(gp)
8013c6c: e0bffd17 ldw r2,-12(fp)
8013c70: e0bff715 stw r2,-36(fp)
8013c74: e0bff717 ldw r2,-36(fp)
8013c78: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
8013c7c: e0bfffc3 ldbu r2,-1(fp)
8013c80: 10800058 cmpnei r2,r2,1
8013c84: 1000011e bne r2,zero,8013c8c <OSMutexDel+0x270>
OS_Sched(); /* Find highest priority task ready to run */
8013c88: 801166c0 call 801166c <OS_Sched>
}
*perr = OS_ERR_NONE;
8013c8c: e0bff317 ldw r2,-52(fp)
8013c90: 10000005 stb zero,0(r2)
pevent_return = (OS_EVENT *)0; /* Mutex has been deleted */
8013c94: e03ffe15 stw zero,-8(fp)
break;
8013c98: 00000a06 br 8013cc4 <OSMutexDel+0x2a8>
8013c9c: e0bffd17 ldw r2,-12(fp)
8013ca0: e0bff615 stw r2,-40(fp)
8013ca4: e0bff617 ldw r2,-40(fp)
8013ca8: 1001703a wrctl status,r2
default:
OS_EXIT_CRITICAL();
*perr = OS_ERR_INVALID_OPT;
8013cac: e0bff317 ldw r2,-52(fp)
8013cb0: 00c001c4 movi r3,7
8013cb4: 10c00005 stb r3,0(r2)
pevent_return = pevent;
8013cb8: e0bff517 ldw r2,-44(fp)
8013cbc: e0bffe15 stw r2,-8(fp)
break;
8013cc0: 0001883a nop
}
return (pevent_return);
8013cc4: e0bffe17 ldw r2,-8(fp)
}
8013cc8: e037883a mov sp,fp
8013ccc: dfc00117 ldw ra,4(sp)
8013cd0: df000017 ldw fp,0(sp)
8013cd4: dec00204 addi sp,sp,8
8013cd8: f800283a ret
08013cdc <OSMutexPend>:
* 2) You MUST NOT change the priority of the task that owns the mutex
*********************************************************************************************************
*/
void OSMutexPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)
{
8013cdc: deffef04 addi sp,sp,-68
8013ce0: dfc01015 stw ra,64(sp)
8013ce4: df000f15 stw fp,60(sp)
8013ce8: df000f04 addi fp,sp,60
8013cec: e13ff315 stw r4,-52(fp)
8013cf0: 2805883a mov r2,r5
8013cf4: e1bff115 stw r6,-60(fp)
8013cf8: e0bff20d sth r2,-56(fp)
BOOLEAN rdy; /* Flag indicating task was ready */
OS_TCB *ptcb;
OS_EVENT *pevent2;
INT8U y;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8013cfc: e03ffe15 stw zero,-8(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return;
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type */
8013d00: e0bff317 ldw r2,-52(fp)
8013d04: 10800003 ldbu r2,0(r2)
8013d08: 10803fcc andi r2,r2,255
8013d0c: 10800120 cmpeqi r2,r2,4
8013d10: 1000041e bne r2,zero,8013d24 <OSMutexPend+0x48>
*perr = OS_ERR_EVENT_TYPE;
8013d14: e0bff117 ldw r2,-60(fp)
8013d18: 00c00044 movi r3,1
8013d1c: 10c00005 stb r3,0(r2)
return;
8013d20: 00014006 br 8014224 <OSMutexPend+0x548>
}
if (OSIntNesting > 0) { /* See if called from ISR ... */
8013d24: d0a05703 ldbu r2,-32420(gp)
8013d28: 10803fcc andi r2,r2,255
8013d2c: 10000426 beq r2,zero,8013d40 <OSMutexPend+0x64>
*perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
8013d30: e0bff117 ldw r2,-60(fp)
8013d34: 00c00084 movi r3,2
8013d38: 10c00005 stb r3,0(r2)
return;
8013d3c: 00013906 br 8014224 <OSMutexPend+0x548>
}
if (OSLockNesting > 0) { /* See if called with scheduler locked ... */
8013d40: d0a04b03 ldbu r2,-32468(gp)
8013d44: 10803fcc andi r2,r2,255
8013d48: 10000426 beq r2,zero,8013d5c <OSMutexPend+0x80>
*perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
8013d4c: e0bff117 ldw r2,-60(fp)
8013d50: 00c00344 movi r3,13
8013d54: 10c00005 stb r3,0(r2)
return;
8013d58: 00013206 br 8014224 <OSMutexPend+0x548>
NIOS2_READ_STATUS (context);
8013d5c: 0005303a rdctl r2,status
8013d60: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8013d64: e0fff917 ldw r3,-28(fp)
8013d68: 00bfff84 movi r2,-2
8013d6c: 1884703a and r2,r3,r2
8013d70: 1001703a wrctl status,r2
return context;
8013d74: e0bff917 ldw r2,-28(fp)
}
/*$PAGE*/
OS_ENTER_CRITICAL();
8013d78: e0bffe15 stw r2,-8(fp)
pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get PIP from mutex */
8013d7c: e0bff317 ldw r2,-52(fp)
8013d80: 1080020b ldhu r2,8(r2)
8013d84: 10bfffcc andi r2,r2,65535
8013d88: 1004d23a srli r2,r2,8
8013d8c: e0bffdc5 stb r2,-9(fp)
/* Is Mutex available? */
if ((INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8) == OS_MUTEX_AVAILABLE) {
8013d90: e0bff317 ldw r2,-52(fp)
8013d94: 1080020b ldhu r2,8(r2)
8013d98: 10803fcc andi r2,r2,255
8013d9c: 10803fd8 cmpnei r2,r2,255
8013da0: 1000271e bne r2,zero,8013e40 <OSMutexPend+0x164>
pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Yes, Acquire the resource */
8013da4: e0bff317 ldw r2,-52(fp)
8013da8: 10c0020b ldhu r3,8(r2)
8013dac: 00bfc004 movi r2,-256
8013db0: 1884703a and r2,r3,r2
8013db4: 1007883a mov r3,r2
8013db8: e0bff317 ldw r2,-52(fp)
8013dbc: 10c0020d sth r3,8(r2)
pevent->OSEventCnt |= OSTCBCur->OSTCBPrio; /* Save priority of owning task */
8013dc0: e0bff317 ldw r2,-52(fp)
8013dc4: 10c0020b ldhu r3,8(r2)
8013dc8: d0a05817 ldw r2,-32416(gp)
8013dcc: 10800c83 ldbu r2,50(r2)
8013dd0: 10803fcc andi r2,r2,255
8013dd4: 1884b03a or r2,r3,r2
8013dd8: 1007883a mov r3,r2
8013ddc: e0bff317 ldw r2,-52(fp)
8013de0: 10c0020d sth r3,8(r2)
pevent->OSEventPtr = (void *)OSTCBCur; /* Point to owning task's OS_TCB */
8013de4: d0e05817 ldw r3,-32416(gp)
8013de8: e0bff317 ldw r2,-52(fp)
8013dec: 10c00115 stw r3,4(r2)
if (OSTCBCur->OSTCBPrio <= pip) { /* PIP 'must' have a SMALLER prio ... */
8013df0: d0a05817 ldw r2,-32416(gp)
8013df4: 10800c83 ldbu r2,50(r2)
8013df8: e0fffdc3 ldbu r3,-9(fp)
8013dfc: 10803fcc andi r2,r2,255
8013e00: 18800836 bltu r3,r2,8013e24 <OSMutexPend+0x148>
8013e04: e0bffe17 ldw r2,-8(fp)
8013e08: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context);
8013e0c: e0bff817 ldw r2,-32(fp)
8013e10: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* ... than current task! */
*perr = OS_ERR_PIP_LOWER;
8013e14: e0bff117 ldw r2,-60(fp)
8013e18: 00c01e04 movi r3,120
8013e1c: 10c00005 stb r3,0(r2)
} else {
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
}
return;
8013e20: 00010006 br 8014224 <OSMutexPend+0x548>
8013e24: e0bffe17 ldw r2,-8(fp)
8013e28: e0bff715 stw r2,-36(fp)
8013e2c: e0bff717 ldw r2,-36(fp)
8013e30: 1001703a wrctl status,r2
*perr = OS_ERR_NONE;
8013e34: e0bff117 ldw r2,-60(fp)
8013e38: 10000005 stb zero,0(r2)
return;
8013e3c: 0000f906 br 8014224 <OSMutexPend+0x548>
}
mprio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8); /* No, Get priority of mutex owner */
8013e40: e0bff317 ldw r2,-52(fp)
8013e44: 1080020b ldhu r2,8(r2)
8013e48: e0bffd85 stb r2,-10(fp)
ptcb = (OS_TCB *)(pevent->OSEventPtr); /* Point to TCB of mutex owner */
8013e4c: e0bff317 ldw r2,-52(fp)
8013e50: 10800117 ldw r2,4(r2)
8013e54: e0bffc15 stw r2,-16(fp)
if (ptcb->OSTCBPrio > pip) { /* Need to promote prio of owner?*/
8013e58: e0bffc17 ldw r2,-16(fp)
8013e5c: 10800c83 ldbu r2,50(r2)
8013e60: e0fffdc3 ldbu r3,-9(fp)
8013e64: 10803fcc andi r2,r2,255
8013e68: 1880b32e bgeu r3,r2,8014138 <OSMutexPend+0x45c>
if (mprio > OSTCBCur->OSTCBPrio) {
8013e6c: d0a05817 ldw r2,-32416(gp)
8013e70: 10c00c83 ldbu r3,50(r2)
8013e74: e0bffd83 ldbu r2,-10(fp)
8013e78: 18c03fcc andi r3,r3,255
8013e7c: 1880ae2e bgeu r3,r2,8014138 <OSMutexPend+0x45c>
y = ptcb->OSTCBY;
8013e80: e0bffc17 ldw r2,-16(fp)
8013e84: 10800d03 ldbu r2,52(r2)
8013e88: e0bffbc5 stb r2,-17(fp)
if ((OSRdyTbl[y] & ptcb->OSTCBBitX) != 0) { /* See if mutex owner is ready */
8013e8c: e0fffbc3 ldbu r3,-17(fp)
8013e90: d0a05544 addi r2,gp,-32427
8013e94: 1885883a add r2,r3,r2
8013e98: 10c00003 ldbu r3,0(r2)
8013e9c: e0bffc17 ldw r2,-16(fp)
8013ea0: 10800d43 ldbu r2,53(r2)
8013ea4: 1884703a and r2,r3,r2
8013ea8: 10803fcc andi r2,r2,255
8013eac: 10001e26 beq r2,zero,8013f28 <OSMutexPend+0x24c>
OSRdyTbl[y] &= ~ptcb->OSTCBBitX; /* Yes, Remove owner from Rdy ...*/
8013eb0: e0fffbc3 ldbu r3,-17(fp)
8013eb4: d0a05544 addi r2,gp,-32427
8013eb8: 1885883a add r2,r3,r2
8013ebc: 10800003 ldbu r2,0(r2)
8013ec0: 1007883a mov r3,r2
8013ec4: e0bffc17 ldw r2,-16(fp)
8013ec8: 10800d43 ldbu r2,53(r2)
8013ecc: 0084303a nor r2,zero,r2
8013ed0: 1884703a and r2,r3,r2
8013ed4: e0fffbc3 ldbu r3,-17(fp)
8013ed8: 1009883a mov r4,r2
8013edc: d0a05544 addi r2,gp,-32427
8013ee0: 1885883a add r2,r3,r2
8013ee4: 11000005 stb r4,0(r2)
if (OSRdyTbl[y] == 0) { /* ... list at current prio */
8013ee8: e0fffbc3 ldbu r3,-17(fp)
8013eec: d0a05544 addi r2,gp,-32427
8013ef0: 1885883a add r2,r3,r2
8013ef4: 10800003 ldbu r2,0(r2)
8013ef8: 10803fcc andi r2,r2,255
8013efc: 1000071e bne r2,zero,8013f1c <OSMutexPend+0x240>
OSRdyGrp &= ~ptcb->OSTCBBitY;
8013f00: e0bffc17 ldw r2,-16(fp)
8013f04: 10800d83 ldbu r2,54(r2)
8013f08: 0084303a nor r2,zero,r2
8013f0c: 1007883a mov r3,r2
8013f10: d0a05503 ldbu r2,-32428(gp)
8013f14: 1884703a and r2,r3,r2
8013f18: d0a05505 stb r2,-32428(gp)
}
rdy = OS_TRUE;
8013f1c: 00800044 movi r2,1
8013f20: e0bfffc5 stb r2,-1(fp)
8013f24: 00002806 br 8013fc8 <OSMutexPend+0x2ec>
} else {
pevent2 = ptcb->OSTCBEventPtr;
8013f28: e0bffc17 ldw r2,-16(fp)
8013f2c: 10800717 ldw r2,28(r2)
8013f30: e0bffa15 stw r2,-24(fp)
if (pevent2 != (OS_EVENT *)0) { /* Remove from event wait list */
8013f34: e0bffa17 ldw r2,-24(fp)
8013f38: 10002226 beq r2,zero,8013fc4 <OSMutexPend+0x2e8>
if ((pevent2->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
8013f3c: e0bffc17 ldw r2,-16(fp)
8013f40: 10800d03 ldbu r2,52(r2)
8013f44: 10803fcc andi r2,r2,255
8013f48: e0fffa17 ldw r3,-24(fp)
8013f4c: 1885883a add r2,r3,r2
8013f50: 108002c3 ldbu r2,11(r2)
8013f54: 1007883a mov r3,r2
8013f58: e0bffc17 ldw r2,-16(fp)
8013f5c: 10800d43 ldbu r2,53(r2)
8013f60: 0084303a nor r2,zero,r2
8013f64: 1884703a and r2,r3,r2
8013f68: 1007883a mov r3,r2
8013f6c: e0bffc17 ldw r2,-16(fp)
8013f70: 10800d03 ldbu r2,52(r2)
8013f74: 10803fcc andi r2,r2,255
8013f78: 1809883a mov r4,r3
8013f7c: e0fffa17 ldw r3,-24(fp)
8013f80: 1887883a add r3,r3,r2
8013f84: 190002c5 stb r4,11(r3)
8013f88: e0fffa17 ldw r3,-24(fp)
8013f8c: 1885883a add r2,r3,r2
8013f90: 108002c3 ldbu r2,11(r2)
8013f94: 10803fcc andi r2,r2,255
8013f98: 10000a1e bne r2,zero,8013fc4 <OSMutexPend+0x2e8>
pevent2->OSEventGrp &= ~ptcb->OSTCBBitY;
8013f9c: e0bffa17 ldw r2,-24(fp)
8013fa0: 10800283 ldbu r2,10(r2)
8013fa4: 1007883a mov r3,r2
8013fa8: e0bffc17 ldw r2,-16(fp)
8013fac: 10800d83 ldbu r2,54(r2)
8013fb0: 0084303a nor r2,zero,r2
8013fb4: 1884703a and r2,r3,r2
8013fb8: 1007883a mov r3,r2
8013fbc: e0bffa17 ldw r2,-24(fp)
8013fc0: 10c00285 stb r3,10(r2)
}
}
rdy = OS_FALSE; /* No */
8013fc4: e03fffc5 stb zero,-1(fp)
}
ptcb->OSTCBPrio = pip; /* Change owner task prio to PIP */
8013fc8: e0bffc17 ldw r2,-16(fp)
8013fcc: e0fffdc3 ldbu r3,-9(fp)
8013fd0: 10c00c85 stb r3,50(r2)
#if OS_LOWEST_PRIO <= 63
ptcb->OSTCBY = (INT8U)( ptcb->OSTCBPrio >> 3);
8013fd4: e0bffc17 ldw r2,-16(fp)
8013fd8: 10800c83 ldbu r2,50(r2)
8013fdc: 10803fcc andi r2,r2,255
8013fe0: 1004d0fa srli r2,r2,3
8013fe4: 1007883a mov r3,r2
8013fe8: e0bffc17 ldw r2,-16(fp)
8013fec: 10c00d05 stb r3,52(r2)
ptcb->OSTCBX = (INT8U)( ptcb->OSTCBPrio & 0x07);
8013ff0: e0bffc17 ldw r2,-16(fp)
8013ff4: 10800c83 ldbu r2,50(r2)
8013ff8: 108001cc andi r2,r2,7
8013ffc: 1007883a mov r3,r2
8014000: e0bffc17 ldw r2,-16(fp)
8014004: 10c00cc5 stb r3,51(r2)
ptcb->OSTCBBitY = (INT8U)(1 << ptcb->OSTCBY);
8014008: e0bffc17 ldw r2,-16(fp)
801400c: 10800d03 ldbu r2,52(r2)
8014010: 10803fcc andi r2,r2,255
8014014: 00c00044 movi r3,1
8014018: 1884983a sll r2,r3,r2
801401c: 1007883a mov r3,r2
8014020: e0bffc17 ldw r2,-16(fp)
8014024: 10c00d85 stb r3,54(r2)
ptcb->OSTCBBitX = (INT8U)(1 << ptcb->OSTCBX);
8014028: e0bffc17 ldw r2,-16(fp)
801402c: 10800cc3 ldbu r2,51(r2)
8014030: 10803fcc andi r2,r2,255
8014034: 00c00044 movi r3,1
8014038: 1884983a sll r2,r3,r2
801403c: 1007883a mov r3,r2
8014040: e0bffc17 ldw r2,-16(fp)
8014044: 10c00d45 stb r3,53(r2)
ptcb->OSTCBY = (INT8U)((ptcb->OSTCBPrio >> 4) & 0xFF);
ptcb->OSTCBX = (INT8U)( ptcb->OSTCBPrio & 0x0F);
ptcb->OSTCBBitY = (INT16U)(1 << ptcb->OSTCBY);
ptcb->OSTCBBitX = (INT16U)(1 << ptcb->OSTCBX);
#endif
if (rdy == OS_TRUE) { /* If task was ready at owner's priority ...*/
8014048: e0bfffc3 ldbu r2,-1(fp)
801404c: 10800058 cmpnei r2,r2,1
8014050: 1000161e bne r2,zero,80140ac <OSMutexPend+0x3d0>
OSRdyGrp |= ptcb->OSTCBBitY; /* ... make it ready at new priority. */
8014054: e0bffc17 ldw r2,-16(fp)
8014058: 10c00d83 ldbu r3,54(r2)
801405c: d0a05503 ldbu r2,-32428(gp)
8014060: 1884b03a or r2,r3,r2
8014064: d0a05505 stb r2,-32428(gp)
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
8014068: e0bffc17 ldw r2,-16(fp)
801406c: 10800d03 ldbu r2,52(r2)
8014070: 10c03fcc andi r3,r2,255
8014074: d0a05544 addi r2,gp,-32427
8014078: 1885883a add r2,r3,r2
801407c: 11000003 ldbu r4,0(r2)
8014080: e0bffc17 ldw r2,-16(fp)
8014084: 10800d43 ldbu r2,53(r2)
8014088: e0fffc17 ldw r3,-16(fp)
801408c: 18c00d03 ldbu r3,52(r3)
8014090: 18c03fcc andi r3,r3,255
8014094: 2084b03a or r2,r4,r2
8014098: 1009883a mov r4,r2
801409c: d0a05544 addi r2,gp,-32427
80140a0: 1885883a add r2,r3,r2
80140a4: 11000005 stb r4,0(r2)
80140a8: 00001d06 br 8014120 <OSMutexPend+0x444>
} else {
pevent2 = ptcb->OSTCBEventPtr;
80140ac: e0bffc17 ldw r2,-16(fp)
80140b0: 10800717 ldw r2,28(r2)
80140b4: e0bffa15 stw r2,-24(fp)
if (pevent2 != (OS_EVENT *)0) { /* Add to event wait list */
80140b8: e0bffa17 ldw r2,-24(fp)
80140bc: 10001826 beq r2,zero,8014120 <OSMutexPend+0x444>
pevent2->OSEventGrp |= ptcb->OSTCBBitY;
80140c0: e0bffa17 ldw r2,-24(fp)
80140c4: 10c00283 ldbu r3,10(r2)
80140c8: e0bffc17 ldw r2,-16(fp)
80140cc: 10800d83 ldbu r2,54(r2)
80140d0: 1884b03a or r2,r3,r2
80140d4: 1007883a mov r3,r2
80140d8: e0bffa17 ldw r2,-24(fp)
80140dc: 10c00285 stb r3,10(r2)
pevent2->OSEventTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
80140e0: e0bffc17 ldw r2,-16(fp)
80140e4: 10800d03 ldbu r2,52(r2)
80140e8: 10803fcc andi r2,r2,255
80140ec: e0fffa17 ldw r3,-24(fp)
80140f0: 1885883a add r2,r3,r2
80140f4: 110002c3 ldbu r4,11(r2)
80140f8: e0bffc17 ldw r2,-16(fp)
80140fc: 10c00d43 ldbu r3,53(r2)
8014100: e0bffc17 ldw r2,-16(fp)
8014104: 10800d03 ldbu r2,52(r2)
8014108: 10803fcc andi r2,r2,255
801410c: 20c6b03a or r3,r4,r3
8014110: 1809883a mov r4,r3
8014114: e0fffa17 ldw r3,-24(fp)
8014118: 1885883a add r2,r3,r2
801411c: 110002c5 stb r4,11(r2)
}
}
OSTCBPrioTbl[pip] = ptcb;
8014120: e0bffdc3 ldbu r2,-9(fp)
8014124: 100890ba slli r4,r2,2
8014128: e0fffc17 ldw r3,-16(fp)
801412c: 008201b4 movhi r2,2054
8014130: 2085883a add r2,r4,r2
8014134: 10f55d15 stw r3,-10892(r2)
}
}
OSTCBCur->OSTCBStat |= OS_STAT_MUTEX; /* Mutex not available, pend current task */
8014138: d0a05817 ldw r2,-32416(gp)
801413c: 10c00c03 ldbu r3,48(r2)
8014140: d0a05817 ldw r2,-32416(gp)
8014144: 18c00414 ori r3,r3,16
8014148: 10c00c05 stb r3,48(r2)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
801414c: d0a05817 ldw r2,-32416(gp)
8014150: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBDly = timeout; /* Store timeout in current task's TCB */
8014154: d0a05817 ldw r2,-32416(gp)
8014158: e0fff20b ldhu r3,-56(fp)
801415c: 10c00b8d sth r3,46(r2)
OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */
8014160: e13ff317 ldw r4,-52(fp)
8014164: 8010e600 call 8010e60 <OS_EventTaskWait>
8014168: e0bffe17 ldw r2,-8(fp)
801416c: e0bff515 stw r2,-44(fp)
8014170: e0bff517 ldw r2,-44(fp)
8014174: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* Find next highest priority task ready */
8014178: 801166c0 call 801166c <OS_Sched>
NIOS2_READ_STATUS (context);
801417c: 0005303a rdctl r2,status
8014180: e0bff615 stw r2,-40(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014184: e0fff617 ldw r3,-40(fp)
8014188: 00bfff84 movi r2,-2
801418c: 1884703a and r2,r3,r2
8014190: 1001703a wrctl status,r2
return context;
8014194: e0bff617 ldw r2,-40(fp)
OS_ENTER_CRITICAL();
8014198: e0bffe15 stw r2,-8(fp)
switch (OSTCBCur->OSTCBStatPend) { /* See if we timed-out or aborted */
801419c: d0a05817 ldw r2,-32416(gp)
80141a0: 10800c43 ldbu r2,49(r2)
80141a4: 10803fcc andi r2,r2,255
80141a8: 10000326 beq r2,zero,80141b8 <OSMutexPend+0x4dc>
80141ac: 108000a0 cmpeqi r2,r2,2
80141b0: 1000041e bne r2,zero,80141c4 <OSMutexPend+0x4e8>
80141b4: 00000706 br 80141d4 <OSMutexPend+0x4f8>
case OS_STAT_PEND_OK:
*perr = OS_ERR_NONE;
80141b8: e0bff117 ldw r2,-60(fp)
80141bc: 10000005 stb zero,0(r2)
break;
80141c0: 00000c06 br 80141f4 <OSMutexPend+0x518>
case OS_STAT_PEND_ABORT:
*perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted getting mutex */
80141c4: e0bff117 ldw r2,-60(fp)
80141c8: 00c00384 movi r3,14
80141cc: 10c00005 stb r3,0(r2)
break;
80141d0: 00000806 br 80141f4 <OSMutexPend+0x518>
case OS_STAT_PEND_TO:
default:
OS_EventTaskRemove(OSTCBCur, pevent);
80141d4: d0a05817 ldw r2,-32416(gp)
80141d8: e17ff317 ldw r5,-52(fp)
80141dc: 1009883a mov r4,r2
80141e0: 80110b00 call 80110b0 <OS_EventTaskRemove>
*perr = OS_ERR_TIMEOUT; /* Indicate that we didn't get mutex within TO */
80141e4: e0bff117 ldw r2,-60(fp)
80141e8: 00c00284 movi r3,10
80141ec: 10c00005 stb r3,0(r2)
break;
80141f0: 0001883a nop
}
OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */
80141f4: d0a05817 ldw r2,-32416(gp)
80141f8: 10000c05 stb zero,48(r2)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */
80141fc: d0a05817 ldw r2,-32416(gp)
8014200: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */
8014204: d0a05817 ldw r2,-32416(gp)
8014208: 10000715 stw zero,28(r2)
#if (OS_EVENT_MULTI_EN > 0)
OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;
801420c: d0a05817 ldw r2,-32416(gp)
8014210: 10000815 stw zero,32(r2)
8014214: e0bffe17 ldw r2,-8(fp)
8014218: e0bff415 stw r2,-48(fp)
NIOS2_WRITE_STATUS (context);
801421c: e0bff417 ldw r2,-48(fp)
8014220: 1001703a wrctl status,r2
#endif
OS_EXIT_CRITICAL();
}
8014224: e037883a mov sp,fp
8014228: dfc00117 ldw ra,4(sp)
801422c: df000017 ldw fp,0(sp)
8014230: dec00204 addi sp,sp,8
8014234: f800283a ret
08014238 <OSMutexPost>:
* what tasks will be using the Mutex.
*********************************************************************************************************
*/
INT8U OSMutexPost (OS_EVENT *pevent)
{
8014238: defff604 addi sp,sp,-40
801423c: dfc00915 stw ra,36(sp)
8014240: df000815 stw fp,32(sp)
8014244: df000804 addi fp,sp,32
8014248: e13ff815 stw r4,-32(fp)
INT8U pip; /* Priority inheritance priority */
INT8U prio;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801424c: e03fff15 stw zero,-4(fp)
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
8014250: d0a05703 ldbu r2,-32420(gp)
8014254: 10803fcc andi r2,r2,255
8014258: 10000226 beq r2,zero,8014264 <OSMutexPost+0x2c>
return (OS_ERR_POST_ISR); /* ... can't POST mutex from an ISR */
801425c: 00800144 movi r2,5
8014260: 00006e06 br 801441c <OSMutexPost+0x1e4>
#if OS_ARG_CHK_EN > 0
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
return (OS_ERR_PEVENT_NULL);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type */
8014264: e0bff817 ldw r2,-32(fp)
8014268: 10800003 ldbu r2,0(r2)
801426c: 10803fcc andi r2,r2,255
8014270: 10800120 cmpeqi r2,r2,4
8014274: 1000021e bne r2,zero,8014280 <OSMutexPost+0x48>
return (OS_ERR_EVENT_TYPE);
8014278: 00800044 movi r2,1
801427c: 00006706 br 801441c <OSMutexPost+0x1e4>
NIOS2_READ_STATUS (context);
8014280: 0005303a rdctl r2,status
8014284: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014288: e0fffd17 ldw r3,-12(fp)
801428c: 00bfff84 movi r2,-2
8014290: 1884703a and r2,r3,r2
8014294: 1001703a wrctl status,r2
return context;
8014298: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
801429c: e0bfff15 stw r2,-4(fp)
pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get priority inheritance priority of mutex */
80142a0: e0bff817 ldw r2,-32(fp)
80142a4: 1080020b ldhu r2,8(r2)
80142a8: 10bfffcc andi r2,r2,65535
80142ac: 1004d23a srli r2,r2,8
80142b0: e0bffec5 stb r2,-5(fp)
prio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8); /* Get owner's original priority */
80142b4: e0bff817 ldw r2,-32(fp)
80142b8: 1080020b ldhu r2,8(r2)
80142bc: e0bffe85 stb r2,-6(fp)
if (OSTCBCur != (OS_TCB *)pevent->OSEventPtr) { /* See if posting task owns the MUTEX */
80142c0: e0bff817 ldw r2,-32(fp)
80142c4: 10c00117 ldw r3,4(r2)
80142c8: d0a05817 ldw r2,-32416(gp)
80142cc: 18800626 beq r3,r2,80142e8 <OSMutexPost+0xb0>
80142d0: e0bfff17 ldw r2,-4(fp)
80142d4: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
80142d8: e0bffc17 ldw r2,-16(fp)
80142dc: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NOT_MUTEX_OWNER);
80142e0: 00801904 movi r2,100
80142e4: 00004d06 br 801441c <OSMutexPost+0x1e4>
}
if (OSTCBCur->OSTCBPrio == pip) { /* Did we have to raise current task's priority? */
80142e8: d0a05817 ldw r2,-32416(gp)
80142ec: 10800c83 ldbu r2,50(r2)
80142f0: e0fffec3 ldbu r3,-5(fp)
80142f4: 10803fcc andi r2,r2,255
80142f8: 1880051e bne r3,r2,8014310 <OSMutexPost+0xd8>
OSMutex_RdyAtPrio(OSTCBCur, prio); /* Restore the task's original priority */
80142fc: d0a05817 ldw r2,-32416(gp)
8014300: e0fffe83 ldbu r3,-6(fp)
8014304: 180b883a mov r5,r3
8014308: 1009883a mov r4,r2
801430c: 801457c0 call 801457c <OSMutex_RdyAtPrio>
}
OSTCBPrioTbl[pip] = OS_TCB_RESERVED; /* Reserve table entry */
8014310: e0bffec3 ldbu r2,-5(fp)
8014314: 100890ba slli r4,r2,2
8014318: 00c00044 movi r3,1
801431c: 008201b4 movhi r2,2054
8014320: 2085883a add r2,r4,r2
8014324: 10f55d15 stw r3,-10892(r2)
if (pevent->OSEventGrp != 0) { /* Any task waiting for the mutex? */
8014328: e0bff817 ldw r2,-32(fp)
801432c: 10800283 ldbu r2,10(r2)
8014330: 10803fcc andi r2,r2,255
8014334: 10002c26 beq r2,zero,80143e8 <OSMutexPost+0x1b0>
/* Yes, Make HPT waiting for mutex ready */
prio = OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MUTEX, OS_STAT_PEND_OK);
8014338: 000f883a mov r7,zero
801433c: 01800404 movi r6,16
8014340: 000b883a mov r5,zero
8014344: e13ff817 ldw r4,-32(fp)
8014348: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
801434c: e0bffe85 stb r2,-6(fp)
pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Save priority of mutex's new owner */
8014350: e0bff817 ldw r2,-32(fp)
8014354: 10c0020b ldhu r3,8(r2)
8014358: 00bfc004 movi r2,-256
801435c: 1884703a and r2,r3,r2
8014360: 1007883a mov r3,r2
8014364: e0bff817 ldw r2,-32(fp)
8014368: 10c0020d sth r3,8(r2)
pevent->OSEventCnt |= prio;
801436c: e0bff817 ldw r2,-32(fp)
8014370: 10c0020b ldhu r3,8(r2)
8014374: e0bffe83 ldbu r2,-6(fp)
8014378: 1884b03a or r2,r3,r2
801437c: 1007883a mov r3,r2
8014380: e0bff817 ldw r2,-32(fp)
8014384: 10c0020d sth r3,8(r2)
pevent->OSEventPtr = OSTCBPrioTbl[prio]; /* Link to new mutex owner's OS_TCB */
8014388: e0bffe83 ldbu r2,-6(fp)
801438c: 100690ba slli r3,r2,2
8014390: 008201b4 movhi r2,2054
8014394: 1885883a add r2,r3,r2
8014398: 10f55d17 ldw r3,-10892(r2)
801439c: e0bff817 ldw r2,-32(fp)
80143a0: 10c00115 stw r3,4(r2)
if (prio <= pip) { /* PIP 'must' have a SMALLER prio ... */
80143a4: e0bffe83 ldbu r2,-6(fp)
80143a8: e0fffec3 ldbu r3,-5(fp)
80143ac: 18800736 bltu r3,r2,80143cc <OSMutexPost+0x194>
80143b0: e0bfff17 ldw r2,-4(fp)
80143b4: e0bffb15 stw r2,-20(fp)
80143b8: e0bffb17 ldw r2,-20(fp)
80143bc: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* ... than current task! */
OS_Sched(); /* Find highest priority task ready to run */
80143c0: 801166c0 call 801166c <OS_Sched>
return (OS_ERR_PIP_LOWER);
80143c4: 00801e04 movi r2,120
80143c8: 00001406 br 801441c <OSMutexPost+0x1e4>
80143cc: e0bfff17 ldw r2,-4(fp)
80143d0: e0bffa15 stw r2,-24(fp)
80143d4: e0bffa17 ldw r2,-24(fp)
80143d8: 1001703a wrctl status,r2
} else {
OS_EXIT_CRITICAL();
OS_Sched(); /* Find highest priority task ready to run */
80143dc: 801166c0 call 801166c <OS_Sched>
return (OS_ERR_NONE);
80143e0: 0005883a mov r2,zero
80143e4: 00000d06 br 801441c <OSMutexPost+0x1e4>
}
}
pevent->OSEventCnt |= OS_MUTEX_AVAILABLE; /* No, Mutex is now available */
80143e8: e0bff817 ldw r2,-32(fp)
80143ec: 1080020b ldhu r2,8(r2)
80143f0: 10803fd4 ori r2,r2,255
80143f4: 1007883a mov r3,r2
80143f8: e0bff817 ldw r2,-32(fp)
80143fc: 10c0020d sth r3,8(r2)
pevent->OSEventPtr = (void *)0;
8014400: e0bff817 ldw r2,-32(fp)
8014404: 10000115 stw zero,4(r2)
8014408: e0bfff17 ldw r2,-4(fp)
801440c: e0bff915 stw r2,-28(fp)
8014410: e0bff917 ldw r2,-28(fp)
8014414: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
8014418: 0005883a mov r2,zero
}
801441c: e037883a mov sp,fp
8014420: dfc00117 ldw ra,4(sp)
8014424: df000017 ldw fp,0(sp)
8014428: dec00204 addi sp,sp,8
801442c: f800283a ret
08014430 <OSMutexQuery>:
*********************************************************************************************************
*/
#if OS_MUTEX_QUERY_EN > 0
INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *p_mutex_data)
{
8014430: defff704 addi sp,sp,-36
8014434: df000815 stw fp,32(sp)
8014438: df000804 addi fp,sp,32
801443c: e13ff915 stw r4,-28(fp)
8014440: e17ff815 stw r5,-32(fp)
#else
INT16U *psrc;
INT16U *pdest;
#endif
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8014444: e03ffc15 stw zero,-16(fp)
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
8014448: d0a05703 ldbu r2,-32420(gp)
801444c: 10803fcc andi r2,r2,255
8014450: 10000226 beq r2,zero,801445c <OSMutexQuery+0x2c>
return (OS_ERR_QUERY_ISR); /* ... can't QUERY mutex from an ISR */
8014454: 00800184 movi r2,6
8014458: 00004406 br 801456c <OSMutexQuery+0x13c>
}
if (p_mutex_data == (OS_MUTEX_DATA *)0) { /* Validate 'p_mutex_data' */
return (OS_ERR_PDATA_NULL);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type */
801445c: e0bff917 ldw r2,-28(fp)
8014460: 10800003 ldbu r2,0(r2)
8014464: 10803fcc andi r2,r2,255
8014468: 10800120 cmpeqi r2,r2,4
801446c: 1000021e bne r2,zero,8014478 <OSMutexQuery+0x48>
return (OS_ERR_EVENT_TYPE);
8014470: 00800044 movi r2,1
8014474: 00003d06 br 801456c <OSMutexQuery+0x13c>
NIOS2_READ_STATUS (context);
8014478: 0005303a rdctl r2,status
801447c: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014480: e0fffb17 ldw r3,-20(fp)
8014484: 00bfff84 movi r2,-2
8014488: 1884703a and r2,r3,r2
801448c: 1001703a wrctl status,r2
return context;
8014490: e0bffb17 ldw r2,-20(fp)
}
OS_ENTER_CRITICAL();
8014494: e0bffc15 stw r2,-16(fp)
p_mutex_data->OSMutexPIP = (INT8U)(pevent->OSEventCnt >> 8);
8014498: e0bff917 ldw r2,-28(fp)
801449c: 1080020b ldhu r2,8(r2)
80144a0: 10bfffcc andi r2,r2,65535
80144a4: 1004d23a srli r2,r2,8
80144a8: 1007883a mov r3,r2
80144ac: e0bff817 ldw r2,-32(fp)
80144b0: 10c00185 stb r3,6(r2)
p_mutex_data->OSOwnerPrio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8);
80144b4: e0bff917 ldw r2,-28(fp)
80144b8: 1080020b ldhu r2,8(r2)
80144bc: 1007883a mov r3,r2
80144c0: e0bff817 ldw r2,-32(fp)
80144c4: 10c00145 stb r3,5(r2)
if (p_mutex_data->OSOwnerPrio == 0xFF) {
80144c8: e0bff817 ldw r2,-32(fp)
80144cc: 10800143 ldbu r2,5(r2)
80144d0: 10803fcc andi r2,r2,255
80144d4: 10803fd8 cmpnei r2,r2,255
80144d8: 1000041e bne r2,zero,80144ec <OSMutexQuery+0xbc>
p_mutex_data->OSValue = OS_TRUE;
80144dc: e0bff817 ldw r2,-32(fp)
80144e0: 00c00044 movi r3,1
80144e4: 10c00105 stb r3,4(r2)
80144e8: 00000206 br 80144f4 <OSMutexQuery+0xc4>
} else {
p_mutex_data->OSValue = OS_FALSE;
80144ec: e0bff817 ldw r2,-32(fp)
80144f0: 10000105 stb zero,4(r2)
}
p_mutex_data->OSEventGrp = pevent->OSEventGrp; /* Copy wait list */
80144f4: e0bff917 ldw r2,-28(fp)
80144f8: 10c00283 ldbu r3,10(r2)
80144fc: e0bff817 ldw r2,-32(fp)
8014500: 10c000c5 stb r3,3(r2)
psrc = &pevent->OSEventTbl[0];
8014504: e0bff917 ldw r2,-28(fp)
8014508: 108002c4 addi r2,r2,11
801450c: e0bffe15 stw r2,-8(fp)
pdest = &p_mutex_data->OSEventTbl[0];
8014510: e0bff817 ldw r2,-32(fp)
8014514: e0bffd15 stw r2,-12(fp)
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
8014518: e03fffc5 stb zero,-1(fp)
801451c: 00000b06 br 801454c <OSMutexQuery+0x11c>
*pdest++ = *psrc++;
8014520: e0fffe17 ldw r3,-8(fp)
8014524: 18800044 addi r2,r3,1
8014528: e0bffe15 stw r2,-8(fp)
801452c: e0bffd17 ldw r2,-12(fp)
8014530: 11000044 addi r4,r2,1
8014534: e13ffd15 stw r4,-12(fp)
8014538: 18c00003 ldbu r3,0(r3)
801453c: 10c00005 stb r3,0(r2)
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
8014540: e0bfffc3 ldbu r2,-1(fp)
8014544: 10800044 addi r2,r2,1
8014548: e0bfffc5 stb r2,-1(fp)
801454c: e0bfffc3 ldbu r2,-1(fp)
8014550: 108000f0 cmpltui r2,r2,3
8014554: 103ff21e bne r2,zero,8014520 <OSMutexQuery+0xf0>
8014558: e0bffc17 ldw r2,-16(fp)
801455c: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8014560: e0bffa17 ldw r2,-24(fp)
8014564: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
8014568: 0005883a mov r2,zero
}
801456c: e037883a mov sp,fp
8014570: df000017 ldw fp,0(sp)
8014574: dec00104 addi sp,sp,4
8014578: f800283a ret
0801457c <OSMutex_RdyAtPrio>:
* Returns : none
*********************************************************************************************************
*/
static void OSMutex_RdyAtPrio (OS_TCB *ptcb, INT8U prio)
{
801457c: defffc04 addi sp,sp,-16
8014580: df000315 stw fp,12(sp)
8014584: df000304 addi fp,sp,12
8014588: e13ffe15 stw r4,-8(fp)
801458c: 2805883a mov r2,r5
8014590: e0bffd05 stb r2,-12(fp)
INT8U y;
y = ptcb->OSTCBY; /* Remove owner from ready list at 'pip' */
8014594: e0bffe17 ldw r2,-8(fp)
8014598: 10800d03 ldbu r2,52(r2)
801459c: e0bfffc5 stb r2,-1(fp)
OSRdyTbl[y] &= ~ptcb->OSTCBBitX;
80145a0: e0ffffc3 ldbu r3,-1(fp)
80145a4: d0a05544 addi r2,gp,-32427
80145a8: 1885883a add r2,r3,r2
80145ac: 10800003 ldbu r2,0(r2)
80145b0: 1007883a mov r3,r2
80145b4: e0bffe17 ldw r2,-8(fp)
80145b8: 10800d43 ldbu r2,53(r2)
80145bc: 0084303a nor r2,zero,r2
80145c0: 1884703a and r2,r3,r2
80145c4: e0ffffc3 ldbu r3,-1(fp)
80145c8: 1009883a mov r4,r2
80145cc: d0a05544 addi r2,gp,-32427
80145d0: 1885883a add r2,r3,r2
80145d4: 11000005 stb r4,0(r2)
if (OSRdyTbl[y] == 0) {
80145d8: e0ffffc3 ldbu r3,-1(fp)
80145dc: d0a05544 addi r2,gp,-32427
80145e0: 1885883a add r2,r3,r2
80145e4: 10800003 ldbu r2,0(r2)
80145e8: 10803fcc andi r2,r2,255
80145ec: 1000071e bne r2,zero,801460c <OSMutex_RdyAtPrio+0x90>
OSRdyGrp &= ~ptcb->OSTCBBitY;
80145f0: e0bffe17 ldw r2,-8(fp)
80145f4: 10800d83 ldbu r2,54(r2)
80145f8: 0084303a nor r2,zero,r2
80145fc: 1007883a mov r3,r2
8014600: d0a05503 ldbu r2,-32428(gp)
8014604: 1884703a and r2,r3,r2
8014608: d0a05505 stb r2,-32428(gp)
}
ptcb->OSTCBPrio = prio;
801460c: e0bffe17 ldw r2,-8(fp)
8014610: e0fffd03 ldbu r3,-12(fp)
8014614: 10c00c85 stb r3,50(r2)
#if OS_LOWEST_PRIO <= 63
ptcb->OSTCBY = (INT8U)((prio >> (INT8U)3) & (INT8U)0x07);
8014618: e0bffd03 ldbu r2,-12(fp)
801461c: 1004d0fa srli r2,r2,3
8014620: 108001cc andi r2,r2,7
8014624: 1007883a mov r3,r2
8014628: e0bffe17 ldw r2,-8(fp)
801462c: 10c00d05 stb r3,52(r2)
ptcb->OSTCBX = (INT8U) (prio & (INT8U)0x07);
8014630: e0bffd03 ldbu r2,-12(fp)
8014634: 108001cc andi r2,r2,7
8014638: 1007883a mov r3,r2
801463c: e0bffe17 ldw r2,-8(fp)
8014640: 10c00cc5 stb r3,51(r2)
ptcb->OSTCBBitY = (INT8U)(1 << ptcb->OSTCBY);
8014644: e0bffe17 ldw r2,-8(fp)
8014648: 10800d03 ldbu r2,52(r2)
801464c: 10803fcc andi r2,r2,255
8014650: 00c00044 movi r3,1
8014654: 1884983a sll r2,r3,r2
8014658: 1007883a mov r3,r2
801465c: e0bffe17 ldw r2,-8(fp)
8014660: 10c00d85 stb r3,54(r2)
ptcb->OSTCBBitX = (INT8U)(1 << ptcb->OSTCBX);
8014664: e0bffe17 ldw r2,-8(fp)
8014668: 10800cc3 ldbu r2,51(r2)
801466c: 10803fcc andi r2,r2,255
8014670: 00c00044 movi r3,1
8014674: 1884983a sll r2,r3,r2
8014678: 1007883a mov r3,r2
801467c: e0bffe17 ldw r2,-8(fp)
8014680: 10c00d45 stb r3,53(r2)
ptcb->OSTCBY = (INT8U)((prio >> (INT8U)4) & (INT8U)0x0F);
ptcb->OSTCBX = (INT8U) (prio & (INT8U)0x0F);
ptcb->OSTCBBitY = (INT16U)(1 << ptcb->OSTCBY);
ptcb->OSTCBBitX = (INT16U)(1 << ptcb->OSTCBX);
#endif
OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready at original priority */
8014684: e0bffe17 ldw r2,-8(fp)
8014688: 10c00d83 ldbu r3,54(r2)
801468c: d0a05503 ldbu r2,-32428(gp)
8014690: 1884b03a or r2,r3,r2
8014694: d0a05505 stb r2,-32428(gp)
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
8014698: e0bffe17 ldw r2,-8(fp)
801469c: 10800d03 ldbu r2,52(r2)
80146a0: 10c03fcc andi r3,r2,255
80146a4: d0a05544 addi r2,gp,-32427
80146a8: 1885883a add r2,r3,r2
80146ac: 11000003 ldbu r4,0(r2)
80146b0: e0bffe17 ldw r2,-8(fp)
80146b4: 10800d43 ldbu r2,53(r2)
80146b8: e0fffe17 ldw r3,-8(fp)
80146bc: 18c00d03 ldbu r3,52(r3)
80146c0: 18c03fcc andi r3,r3,255
80146c4: 2084b03a or r2,r4,r2
80146c8: 1009883a mov r4,r2
80146cc: d0a05544 addi r2,gp,-32427
80146d0: 1885883a add r2,r3,r2
80146d4: 11000005 stb r4,0(r2)
OSTCBPrioTbl[prio] = ptcb;
80146d8: e0bffd03 ldbu r2,-12(fp)
80146dc: 100890ba slli r4,r2,2
80146e0: e0fffe17 ldw r3,-8(fp)
80146e4: 008201b4 movhi r2,2054
80146e8: 2085883a add r2,r4,r2
80146ec: 10f55d15 stw r3,-10892(r2)
}
80146f0: 0001883a nop
80146f4: e037883a mov sp,fp
80146f8: df000017 ldw fp,0(sp)
80146fc: dec00104 addi sp,sp,4
8014700: f800283a ret
08014704 <OSQAccept>:
*********************************************************************************************************
*/
#if OS_Q_ACCEPT_EN > 0
void *OSQAccept (OS_EVENT *pevent, INT8U *perr)
{
8014704: defff804 addi sp,sp,-32
8014708: df000715 stw fp,28(sp)
801470c: df000704 addi fp,sp,28
8014710: e13ffa15 stw r4,-24(fp)
8014714: e17ff915 stw r5,-28(fp)
void *pmsg;
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8014718: e03ffe15 stw zero,-8(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return ((void *)0);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_Q) {/* Validate event block type */
801471c: e0bffa17 ldw r2,-24(fp)
8014720: 10800003 ldbu r2,0(r2)
8014724: 10803fcc andi r2,r2,255
8014728: 108000a0 cmpeqi r2,r2,2
801472c: 1000051e bne r2,zero,8014744 <OSQAccept+0x40>
*perr = OS_ERR_EVENT_TYPE;
8014730: e0bff917 ldw r2,-28(fp)
8014734: 00c00044 movi r3,1
8014738: 10c00005 stb r3,0(r2)
return ((void *)0);
801473c: 0005883a mov r2,zero
8014740: 00003106 br 8014808 <OSQAccept+0x104>
NIOS2_READ_STATUS (context);
8014744: 0005303a rdctl r2,status
8014748: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801474c: e0fffc17 ldw r3,-16(fp)
8014750: 00bfff84 movi r2,-2
8014754: 1884703a and r2,r3,r2
8014758: 1001703a wrctl status,r2
return context;
801475c: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
8014760: e0bffe15 stw r2,-8(fp)
pq = (OS_Q *)pevent->OSEventPtr; /* Point at queue control block */
8014764: e0bffa17 ldw r2,-24(fp)
8014768: 10800117 ldw r2,4(r2)
801476c: e0bffd15 stw r2,-12(fp)
if (pq->OSQEntries > 0) { /* See if any messages in the queue */
8014770: e0bffd17 ldw r2,-12(fp)
8014774: 1080058b ldhu r2,22(r2)
8014778: 10bfffcc andi r2,r2,65535
801477c: 10001926 beq r2,zero,80147e4 <OSQAccept+0xe0>
pmsg = *pq->OSQOut++; /* Yes, extract oldest message from the queue */
8014780: e0bffd17 ldw r2,-12(fp)
8014784: 10800417 ldw r2,16(r2)
8014788: 11000104 addi r4,r2,4
801478c: e0fffd17 ldw r3,-12(fp)
8014790: 19000415 stw r4,16(r3)
8014794: 10800017 ldw r2,0(r2)
8014798: e0bfff15 stw r2,-4(fp)
pq->OSQEntries--; /* Update the number of entries in the queue */
801479c: e0bffd17 ldw r2,-12(fp)
80147a0: 1080058b ldhu r2,22(r2)
80147a4: 10bfffc4 addi r2,r2,-1
80147a8: 1007883a mov r3,r2
80147ac: e0bffd17 ldw r2,-12(fp)
80147b0: 10c0058d sth r3,22(r2)
if (pq->OSQOut == pq->OSQEnd) { /* Wrap OUT pointer if we are at the end of the queue */
80147b4: e0bffd17 ldw r2,-12(fp)
80147b8: 10c00417 ldw r3,16(r2)
80147bc: e0bffd17 ldw r2,-12(fp)
80147c0: 10800217 ldw r2,8(r2)
80147c4: 1880041e bne r3,r2,80147d8 <OSQAccept+0xd4>
pq->OSQOut = pq->OSQStart;
80147c8: e0bffd17 ldw r2,-12(fp)
80147cc: 10c00117 ldw r3,4(r2)
80147d0: e0bffd17 ldw r2,-12(fp)
80147d4: 10c00415 stw r3,16(r2)
}
*perr = OS_ERR_NONE;
80147d8: e0bff917 ldw r2,-28(fp)
80147dc: 10000005 stb zero,0(r2)
80147e0: 00000406 br 80147f4 <OSQAccept+0xf0>
} else {
*perr = OS_ERR_Q_EMPTY;
80147e4: e0bff917 ldw r2,-28(fp)
80147e8: 00c007c4 movi r3,31
80147ec: 10c00005 stb r3,0(r2)
pmsg = (void *)0; /* Queue is empty */
80147f0: e03fff15 stw zero,-4(fp)
80147f4: e0bffe17 ldw r2,-8(fp)
80147f8: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
80147fc: e0bffb17 ldw r2,-20(fp)
8014800: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
return (pmsg); /* Return message received (or NULL) */
8014804: e0bfff17 ldw r2,-4(fp)
}
8014808: e037883a mov sp,fp
801480c: df000017 ldw fp,0(sp)
8014810: dec00104 addi sp,sp,4
8014814: f800283a ret
08014818 <OSQCreate>:
* == (OS_EVENT *)0 if no event control blocks were available or an error was detected
*********************************************************************************************************
*/
OS_EVENT *OSQCreate (void **start, INT16U size)
{
8014818: defff404 addi sp,sp,-48
801481c: dfc00b15 stw ra,44(sp)
8014820: df000a15 stw fp,40(sp)
8014824: df000a04 addi fp,sp,40
8014828: e13ff715 stw r4,-36(fp)
801482c: 2805883a mov r2,r5
8014830: e0bff60d sth r2,-40(fp)
OS_EVENT *pevent;
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8014834: e03ffe15 stw zero,-8(fp)
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
8014838: d0a05703 ldbu r2,-32420(gp)
801483c: 10803fcc andi r2,r2,255
8014840: 10000226 beq r2,zero,801484c <OSQCreate+0x34>
return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
8014844: 0005883a mov r2,zero
8014848: 00005706 br 80149a8 <OSQCreate+0x190>
NIOS2_READ_STATUS (context);
801484c: 0005303a rdctl r2,status
8014850: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014854: e0fffc17 ldw r3,-16(fp)
8014858: 00bfff84 movi r2,-2
801485c: 1884703a and r2,r3,r2
8014860: 1001703a wrctl status,r2
return context;
8014864: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
8014868: e0bffe15 stw r2,-8(fp)
pevent = OSEventFreeList; /* Get next free event control block */
801486c: d0a05617 ldw r2,-32424(gp)
8014870: e0bfff15 stw r2,-4(fp)
if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */
8014874: d0a05617 ldw r2,-32424(gp)
8014878: 10000326 beq r2,zero,8014888 <OSQCreate+0x70>
OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
801487c: d0a05617 ldw r2,-32424(gp)
8014880: 10800117 ldw r2,4(r2)
8014884: d0a05615 stw r2,-32424(gp)
8014888: e0bffe17 ldw r2,-8(fp)
801488c: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8014890: e0bffb17 ldw r2,-20(fp)
8014894: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
if (pevent != (OS_EVENT *)0) { /* See if we have an event control block */
8014898: e0bfff17 ldw r2,-4(fp)
801489c: 10004126 beq r2,zero,80149a4 <OSQCreate+0x18c>
NIOS2_READ_STATUS (context);
80148a0: 0005303a rdctl r2,status
80148a4: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80148a8: e0fffa17 ldw r3,-24(fp)
80148ac: 00bfff84 movi r2,-2
80148b0: 1884703a and r2,r3,r2
80148b4: 1001703a wrctl status,r2
return context;
80148b8: e0bffa17 ldw r2,-24(fp)
OS_ENTER_CRITICAL();
80148bc: e0bffe15 stw r2,-8(fp)
pq = OSQFreeList; /* Get a free queue control block */
80148c0: d0a05417 ldw r2,-32432(gp)
80148c4: e0bffd15 stw r2,-12(fp)
if (pq != (OS_Q *)0) { /* Were we able to get a queue control block ? */
80148c8: e0bffd17 ldw r2,-12(fp)
80148cc: 10002b26 beq r2,zero,801497c <OSQCreate+0x164>
OSQFreeList = OSQFreeList->OSQPtr; /* Yes, Adjust free list pointer to next free*/
80148d0: d0a05417 ldw r2,-32432(gp)
80148d4: 10800017 ldw r2,0(r2)
80148d8: d0a05415 stw r2,-32432(gp)
80148dc: e0bffe17 ldw r2,-8(fp)
80148e0: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
80148e4: e0bff917 ldw r2,-28(fp)
80148e8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
pq->OSQStart = start; /* Initialize the queue */
80148ec: e0bffd17 ldw r2,-12(fp)
80148f0: e0fff717 ldw r3,-36(fp)
80148f4: 10c00115 stw r3,4(r2)
pq->OSQEnd = &start[size];
80148f8: e0bff60b ldhu r2,-40(fp)
80148fc: 100490ba slli r2,r2,2
8014900: e0fff717 ldw r3,-36(fp)
8014904: 1887883a add r3,r3,r2
8014908: e0bffd17 ldw r2,-12(fp)
801490c: 10c00215 stw r3,8(r2)
pq->OSQIn = start;
8014910: e0bffd17 ldw r2,-12(fp)
8014914: e0fff717 ldw r3,-36(fp)
8014918: 10c00315 stw r3,12(r2)
pq->OSQOut = start;
801491c: e0bffd17 ldw r2,-12(fp)
8014920: e0fff717 ldw r3,-36(fp)
8014924: 10c00415 stw r3,16(r2)
pq->OSQSize = size;
8014928: e0bffd17 ldw r2,-12(fp)
801492c: e0fff60b ldhu r3,-40(fp)
8014930: 10c0050d sth r3,20(r2)
pq->OSQEntries = 0;
8014934: e0bffd17 ldw r2,-12(fp)
8014938: 1000058d sth zero,22(r2)
pevent->OSEventType = OS_EVENT_TYPE_Q;
801493c: e0bfff17 ldw r2,-4(fp)
8014940: 00c00084 movi r3,2
8014944: 10c00005 stb r3,0(r2)
pevent->OSEventCnt = 0;
8014948: e0bfff17 ldw r2,-4(fp)
801494c: 1000020d sth zero,8(r2)
pevent->OSEventPtr = pq;
8014950: e0bfff17 ldw r2,-4(fp)
8014954: e0fffd17 ldw r3,-12(fp)
8014958: 10c00115 stw r3,4(r2)
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
801495c: e0bfff17 ldw r2,-4(fp)
8014960: 00c00fc4 movi r3,63
8014964: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
8014968: e0bfff17 ldw r2,-4(fp)
801496c: 100003c5 stb zero,15(r2)
#endif
OS_EventWaitListInit(pevent); /* Initalize the wait list */
8014970: e13fff17 ldw r4,-4(fp)
8014974: 80112580 call 8011258 <OS_EventWaitListInit>
8014978: 00000a06 br 80149a4 <OSQCreate+0x18c>
} else {
pevent->OSEventPtr = (void *)OSEventFreeList; /* No, Return event control block on error */
801497c: d0e05617 ldw r3,-32424(gp)
8014980: e0bfff17 ldw r2,-4(fp)
8014984: 10c00115 stw r3,4(r2)
OSEventFreeList = pevent;
8014988: e0bfff17 ldw r2,-4(fp)
801498c: d0a05615 stw r2,-32424(gp)
8014990: e0bffe17 ldw r2,-8(fp)
8014994: e0bff815 stw r2,-32(fp)
8014998: e0bff817 ldw r2,-32(fp)
801499c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
pevent = (OS_EVENT *)0;
80149a0: e03fff15 stw zero,-4(fp)
}
}
return (pevent);
80149a4: e0bfff17 ldw r2,-4(fp)
}
80149a8: e037883a mov sp,fp
80149ac: dfc00117 ldw ra,4(sp)
80149b0: df000017 ldw fp,0(sp)
80149b4: dec00204 addi sp,sp,8
80149b8: f800283a ret
080149bc <OSQDel>:
*********************************************************************************************************
*/
#if OS_Q_DEL_EN > 0
OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *perr)
{
80149bc: defff204 addi sp,sp,-56
80149c0: dfc00d15 stw ra,52(sp)
80149c4: df000c15 stw fp,48(sp)
80149c8: df000c04 addi fp,sp,48
80149cc: e13ff615 stw r4,-40(fp)
80149d0: 2805883a mov r2,r5
80149d4: e1bff415 stw r6,-48(fp)
80149d8: e0bff505 stb r2,-44(fp)
BOOLEAN tasks_waiting;
OS_EVENT *pevent_return;
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80149dc: e03ffd15 stw zero,-12(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return (pevent);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
80149e0: e0bff617 ldw r2,-40(fp)
80149e4: 10800003 ldbu r2,0(r2)
80149e8: 10803fcc andi r2,r2,255
80149ec: 108000a0 cmpeqi r2,r2,2
80149f0: 1000051e bne r2,zero,8014a08 <OSQDel+0x4c>
*perr = OS_ERR_EVENT_TYPE;
80149f4: e0bff417 ldw r2,-48(fp)
80149f8: 00c00044 movi r3,1
80149fc: 10c00005 stb r3,0(r2)
return (pevent);
8014a00: e0bff617 ldw r2,-40(fp)
8014a04: 00007d06 br 8014bfc <OSQDel+0x240>
}
if (OSIntNesting > 0) { /* See if called from ISR ... */
8014a08: d0a05703 ldbu r2,-32420(gp)
8014a0c: 10803fcc andi r2,r2,255
8014a10: 10000526 beq r2,zero,8014a28 <OSQDel+0x6c>
*perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
8014a14: e0bff417 ldw r2,-48(fp)
8014a18: 00c003c4 movi r3,15
8014a1c: 10c00005 stb r3,0(r2)
return (pevent);
8014a20: e0bff617 ldw r2,-40(fp)
8014a24: 00007506 br 8014bfc <OSQDel+0x240>
NIOS2_READ_STATUS (context);
8014a28: 0005303a rdctl r2,status
8014a2c: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014a30: e0fffb17 ldw r3,-20(fp)
8014a34: 00bfff84 movi r2,-2
8014a38: 1884703a and r2,r3,r2
8014a3c: 1001703a wrctl status,r2
return context;
8014a40: e0bffb17 ldw r2,-20(fp)
}
OS_ENTER_CRITICAL();
8014a44: e0bffd15 stw r2,-12(fp)
if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on queue */
8014a48: e0bff617 ldw r2,-40(fp)
8014a4c: 10800283 ldbu r2,10(r2)
8014a50: 10803fcc andi r2,r2,255
8014a54: 10000326 beq r2,zero,8014a64 <OSQDel+0xa8>
tasks_waiting = OS_TRUE; /* Yes */
8014a58: 00800044 movi r2,1
8014a5c: e0bfffc5 stb r2,-1(fp)
8014a60: 00000106 br 8014a68 <OSQDel+0xac>
} else {
tasks_waiting = OS_FALSE; /* No */
8014a64: e03fffc5 stb zero,-1(fp)
}
switch (opt) {
8014a68: e0bff503 ldbu r2,-44(fp)
8014a6c: 10000326 beq r2,zero,8014a7c <OSQDel+0xc0>
8014a70: 10800060 cmpeqi r2,r2,1
8014a74: 1000301e bne r2,zero,8014b38 <OSQDel+0x17c>
8014a78: 00005506 br 8014bd0 <OSQDel+0x214>
case OS_DEL_NO_PEND: /* Delete queue only if no task waiting */
if (tasks_waiting == OS_FALSE) {
8014a7c: e0bfffc3 ldbu r2,-1(fp)
8014a80: 10001e1e bne r2,zero,8014afc <OSQDel+0x140>
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
8014a84: e0bff617 ldw r2,-40(fp)
8014a88: 00c00fc4 movi r3,63
8014a8c: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
8014a90: e0bff617 ldw r2,-40(fp)
8014a94: 100003c5 stb zero,15(r2)
#endif
pq = (OS_Q *)pevent->OSEventPtr; /* Return OS_Q to free list */
8014a98: e0bff617 ldw r2,-40(fp)
8014a9c: 10800117 ldw r2,4(r2)
8014aa0: e0bffc15 stw r2,-16(fp)
pq->OSQPtr = OSQFreeList;
8014aa4: d0e05417 ldw r3,-32432(gp)
8014aa8: e0bffc17 ldw r2,-16(fp)
8014aac: 10c00015 stw r3,0(r2)
OSQFreeList = pq;
8014ab0: e0bffc17 ldw r2,-16(fp)
8014ab4: d0a05415 stw r2,-32432(gp)
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
8014ab8: e0bff617 ldw r2,-40(fp)
8014abc: 10000005 stb zero,0(r2)
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
8014ac0: d0e05617 ldw r3,-32424(gp)
8014ac4: e0bff617 ldw r2,-40(fp)
8014ac8: 10c00115 stw r3,4(r2)
pevent->OSEventCnt = 0;
8014acc: e0bff617 ldw r2,-40(fp)
8014ad0: 1000020d sth zero,8(r2)
OSEventFreeList = pevent; /* Get next free event control block */
8014ad4: e0bff617 ldw r2,-40(fp)
8014ad8: d0a05615 stw r2,-32424(gp)
8014adc: e0bffd17 ldw r2,-12(fp)
8014ae0: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8014ae4: e0bffa17 ldw r2,-24(fp)
8014ae8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8014aec: e0bff417 ldw r2,-48(fp)
8014af0: 10000005 stb zero,0(r2)
pevent_return = (OS_EVENT *)0; /* Queue has been deleted */
8014af4: e03ffe15 stw zero,-8(fp)
} else {
OS_EXIT_CRITICAL();
*perr = OS_ERR_TASK_WAITING;
pevent_return = pevent;
}
break;
8014af8: 00003f06 br 8014bf8 <OSQDel+0x23c>
8014afc: e0bffd17 ldw r2,-12(fp)
8014b00: e0bff915 stw r2,-28(fp)
8014b04: e0bff917 ldw r2,-28(fp)
8014b08: 1001703a wrctl status,r2
*perr = OS_ERR_TASK_WAITING;
8014b0c: e0bff417 ldw r2,-48(fp)
8014b10: 00c01244 movi r3,73
8014b14: 10c00005 stb r3,0(r2)
pevent_return = pevent;
8014b18: e0bff617 ldw r2,-40(fp)
8014b1c: e0bffe15 stw r2,-8(fp)
break;
8014b20: 00003506 br 8014bf8 <OSQDel+0x23c>
case OS_DEL_ALWAYS: /* Always delete the queue */
while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for queue */
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_OK);
8014b24: 000f883a mov r7,zero
8014b28: 01800104 movi r6,4
8014b2c: 000b883a mov r5,zero
8014b30: e13ff617 ldw r4,-40(fp)
8014b34: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for queue */
8014b38: e0bff617 ldw r2,-40(fp)
8014b3c: 10800283 ldbu r2,10(r2)
8014b40: 10803fcc andi r2,r2,255
8014b44: 103ff71e bne r2,zero,8014b24 <OSQDel+0x168>
}
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
8014b48: e0bff617 ldw r2,-40(fp)
8014b4c: 00c00fc4 movi r3,63
8014b50: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
8014b54: e0bff617 ldw r2,-40(fp)
8014b58: 100003c5 stb zero,15(r2)
#endif
pq = (OS_Q *)pevent->OSEventPtr; /* Return OS_Q to free list */
8014b5c: e0bff617 ldw r2,-40(fp)
8014b60: 10800117 ldw r2,4(r2)
8014b64: e0bffc15 stw r2,-16(fp)
pq->OSQPtr = OSQFreeList;
8014b68: d0e05417 ldw r3,-32432(gp)
8014b6c: e0bffc17 ldw r2,-16(fp)
8014b70: 10c00015 stw r3,0(r2)
OSQFreeList = pq;
8014b74: e0bffc17 ldw r2,-16(fp)
8014b78: d0a05415 stw r2,-32432(gp)
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
8014b7c: e0bff617 ldw r2,-40(fp)
8014b80: 10000005 stb zero,0(r2)
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
8014b84: d0e05617 ldw r3,-32424(gp)
8014b88: e0bff617 ldw r2,-40(fp)
8014b8c: 10c00115 stw r3,4(r2)
pevent->OSEventCnt = 0;
8014b90: e0bff617 ldw r2,-40(fp)
8014b94: 1000020d sth zero,8(r2)
OSEventFreeList = pevent; /* Get next free event control block */
8014b98: e0bff617 ldw r2,-40(fp)
8014b9c: d0a05615 stw r2,-32424(gp)
8014ba0: e0bffd17 ldw r2,-12(fp)
8014ba4: e0bff815 stw r2,-32(fp)
8014ba8: e0bff817 ldw r2,-32(fp)
8014bac: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
8014bb0: e0bfffc3 ldbu r2,-1(fp)
8014bb4: 10800058 cmpnei r2,r2,1
8014bb8: 1000011e bne r2,zero,8014bc0 <OSQDel+0x204>
OS_Sched(); /* Find highest priority task ready to run */
8014bbc: 801166c0 call 801166c <OS_Sched>
}
*perr = OS_ERR_NONE;
8014bc0: e0bff417 ldw r2,-48(fp)
8014bc4: 10000005 stb zero,0(r2)
pevent_return = (OS_EVENT *)0; /* Queue has been deleted */
8014bc8: e03ffe15 stw zero,-8(fp)
break;
8014bcc: 00000a06 br 8014bf8 <OSQDel+0x23c>
8014bd0: e0bffd17 ldw r2,-12(fp)
8014bd4: e0bff715 stw r2,-36(fp)
8014bd8: e0bff717 ldw r2,-36(fp)
8014bdc: 1001703a wrctl status,r2
default:
OS_EXIT_CRITICAL();
*perr = OS_ERR_INVALID_OPT;
8014be0: e0bff417 ldw r2,-48(fp)
8014be4: 00c001c4 movi r3,7
8014be8: 10c00005 stb r3,0(r2)
pevent_return = pevent;
8014bec: e0bff617 ldw r2,-40(fp)
8014bf0: e0bffe15 stw r2,-8(fp)
break;
8014bf4: 0001883a nop
}
return (pevent_return);
8014bf8: e0bffe17 ldw r2,-8(fp)
}
8014bfc: e037883a mov sp,fp
8014c00: dfc00117 ldw ra,4(sp)
8014c04: df000017 ldw fp,0(sp)
8014c08: dec00204 addi sp,sp,8
8014c0c: f800283a ret
08014c10 <OSQFlush>:
*********************************************************************************************************
*/
#if OS_Q_FLUSH_EN > 0
INT8U OSQFlush (OS_EVENT *pevent)
{
8014c10: defffa04 addi sp,sp,-24
8014c14: df000515 stw fp,20(sp)
8014c18: df000504 addi fp,sp,20
8014c1c: e13ffb15 stw r4,-20(fp)
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8014c20: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
8014c24: 0005303a rdctl r2,status
8014c28: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014c2c: e0fffc17 ldw r3,-16(fp)
8014c30: 00bfff84 movi r2,-2
8014c34: 1884703a and r2,r3,r2
8014c38: 1001703a wrctl status,r2
return context;
8014c3c: e0bffc17 ldw r2,-16(fp)
}
if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
return (OS_ERR_EVENT_TYPE);
}
#endif
OS_ENTER_CRITICAL();
8014c40: e0bfff15 stw r2,-4(fp)
pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue storage structure */
8014c44: e0bffb17 ldw r2,-20(fp)
8014c48: 10800117 ldw r2,4(r2)
8014c4c: e0bffe15 stw r2,-8(fp)
pq->OSQIn = pq->OSQStart;
8014c50: e0bffe17 ldw r2,-8(fp)
8014c54: 10c00117 ldw r3,4(r2)
8014c58: e0bffe17 ldw r2,-8(fp)
8014c5c: 10c00315 stw r3,12(r2)
pq->OSQOut = pq->OSQStart;
8014c60: e0bffe17 ldw r2,-8(fp)
8014c64: 10c00117 ldw r3,4(r2)
8014c68: e0bffe17 ldw r2,-8(fp)
8014c6c: 10c00415 stw r3,16(r2)
pq->OSQEntries = 0;
8014c70: e0bffe17 ldw r2,-8(fp)
8014c74: 1000058d sth zero,22(r2)
8014c78: e0bfff17 ldw r2,-4(fp)
8014c7c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8014c80: e0bffd17 ldw r2,-12(fp)
8014c84: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
8014c88: 0005883a mov r2,zero
}
8014c8c: e037883a mov sp,fp
8014c90: df000017 ldw fp,0(sp)
8014c94: dec00104 addi sp,sp,4
8014c98: f800283a ret
08014c9c <OSQPend>:
* Note(s) : As of V2.60, this function allows you to receive NULL pointer messages.
*********************************************************************************************************
*/
void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)
{
8014c9c: defff304 addi sp,sp,-52
8014ca0: dfc00c15 stw ra,48(sp)
8014ca4: df000b15 stw fp,44(sp)
8014ca8: df000b04 addi fp,sp,44
8014cac: e13ff715 stw r4,-36(fp)
8014cb0: 2805883a mov r2,r5
8014cb4: e1bff515 stw r6,-44(fp)
8014cb8: e0bff60d sth r2,-40(fp)
void *pmsg;
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8014cbc: e03ffe15 stw zero,-8(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return ((void *)0);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_Q) {/* Validate event block type */
8014cc0: e0bff717 ldw r2,-36(fp)
8014cc4: 10800003 ldbu r2,0(r2)
8014cc8: 10803fcc andi r2,r2,255
8014ccc: 108000a0 cmpeqi r2,r2,2
8014cd0: 1000051e bne r2,zero,8014ce8 <OSQPend+0x4c>
*perr = OS_ERR_EVENT_TYPE;
8014cd4: e0bff517 ldw r2,-44(fp)
8014cd8: 00c00044 movi r3,1
8014cdc: 10c00005 stb r3,0(r2)
return ((void *)0);
8014ce0: 0005883a mov r2,zero
8014ce4: 00008006 br 8014ee8 <OSQPend+0x24c>
}
if (OSIntNesting > 0) { /* See if called from ISR ... */
8014ce8: d0a05703 ldbu r2,-32420(gp)
8014cec: 10803fcc andi r2,r2,255
8014cf0: 10000526 beq r2,zero,8014d08 <OSQPend+0x6c>
*perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
8014cf4: e0bff517 ldw r2,-44(fp)
8014cf8: 00c00084 movi r3,2
8014cfc: 10c00005 stb r3,0(r2)
return ((void *)0);
8014d00: 0005883a mov r2,zero
8014d04: 00007806 br 8014ee8 <OSQPend+0x24c>
}
if (OSLockNesting > 0) { /* See if called with scheduler locked ... */
8014d08: d0a04b03 ldbu r2,-32468(gp)
8014d0c: 10803fcc andi r2,r2,255
8014d10: 10000526 beq r2,zero,8014d28 <OSQPend+0x8c>
*perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
8014d14: e0bff517 ldw r2,-44(fp)
8014d18: 00c00344 movi r3,13
8014d1c: 10c00005 stb r3,0(r2)
return ((void *)0);
8014d20: 0005883a mov r2,zero
8014d24: 00007006 br 8014ee8 <OSQPend+0x24c>
NIOS2_READ_STATUS (context);
8014d28: 0005303a rdctl r2,status
8014d2c: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014d30: e0fffc17 ldw r3,-16(fp)
8014d34: 00bfff84 movi r2,-2
8014d38: 1884703a and r2,r3,r2
8014d3c: 1001703a wrctl status,r2
return context;
8014d40: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
8014d44: e0bffe15 stw r2,-8(fp)
pq = (OS_Q *)pevent->OSEventPtr; /* Point at queue control block */
8014d48: e0bff717 ldw r2,-36(fp)
8014d4c: 10800117 ldw r2,4(r2)
8014d50: e0bffd15 stw r2,-12(fp)
if (pq->OSQEntries > 0) { /* See if any messages in the queue */
8014d54: e0bffd17 ldw r2,-12(fp)
8014d58: 1080058b ldhu r2,22(r2)
8014d5c: 10bfffcc andi r2,r2,65535
8014d60: 10001e26 beq r2,zero,8014ddc <OSQPend+0x140>
pmsg = *pq->OSQOut++; /* Yes, extract oldest message from the queue */
8014d64: e0bffd17 ldw r2,-12(fp)
8014d68: 10800417 ldw r2,16(r2)
8014d6c: 11000104 addi r4,r2,4
8014d70: e0fffd17 ldw r3,-12(fp)
8014d74: 19000415 stw r4,16(r3)
8014d78: 10800017 ldw r2,0(r2)
8014d7c: e0bfff15 stw r2,-4(fp)
pq->OSQEntries--; /* Update the number of entries in the queue */
8014d80: e0bffd17 ldw r2,-12(fp)
8014d84: 1080058b ldhu r2,22(r2)
8014d88: 10bfffc4 addi r2,r2,-1
8014d8c: 1007883a mov r3,r2
8014d90: e0bffd17 ldw r2,-12(fp)
8014d94: 10c0058d sth r3,22(r2)
if (pq->OSQOut == pq->OSQEnd) { /* Wrap OUT pointer if we are at the end of the queue */
8014d98: e0bffd17 ldw r2,-12(fp)
8014d9c: 10c00417 ldw r3,16(r2)
8014da0: e0bffd17 ldw r2,-12(fp)
8014da4: 10800217 ldw r2,8(r2)
8014da8: 1880041e bne r3,r2,8014dbc <OSQPend+0x120>
pq->OSQOut = pq->OSQStart;
8014dac: e0bffd17 ldw r2,-12(fp)
8014db0: 10c00117 ldw r3,4(r2)
8014db4: e0bffd17 ldw r2,-12(fp)
8014db8: 10c00415 stw r3,16(r2)
8014dbc: e0bffe17 ldw r2,-8(fp)
8014dc0: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8014dc4: e0bffb17 ldw r2,-20(fp)
8014dc8: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8014dcc: e0bff517 ldw r2,-44(fp)
8014dd0: 10000005 stb zero,0(r2)
return (pmsg); /* Return message received */
8014dd4: e0bfff17 ldw r2,-4(fp)
8014dd8: 00004306 br 8014ee8 <OSQPend+0x24c>
}
OSTCBCur->OSTCBStat |= OS_STAT_Q; /* Task will have to pend for a message to be posted */
8014ddc: d0a05817 ldw r2,-32416(gp)
8014de0: 10c00c03 ldbu r3,48(r2)
8014de4: d0a05817 ldw r2,-32416(gp)
8014de8: 18c00114 ori r3,r3,4
8014dec: 10c00c05 stb r3,48(r2)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
8014df0: d0a05817 ldw r2,-32416(gp)
8014df4: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBDly = timeout; /* Load timeout into TCB */
8014df8: d0a05817 ldw r2,-32416(gp)
8014dfc: e0fff60b ldhu r3,-40(fp)
8014e00: 10c00b8d sth r3,46(r2)
OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */
8014e04: e13ff717 ldw r4,-36(fp)
8014e08: 8010e600 call 8010e60 <OS_EventTaskWait>
8014e0c: e0bffe17 ldw r2,-8(fp)
8014e10: e0bff915 stw r2,-28(fp)
8014e14: e0bff917 ldw r2,-28(fp)
8014e18: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* Find next highest priority task ready to run */
8014e1c: 801166c0 call 801166c <OS_Sched>
NIOS2_READ_STATUS (context);
8014e20: 0005303a rdctl r2,status
8014e24: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014e28: e0fffa17 ldw r3,-24(fp)
8014e2c: 00bfff84 movi r2,-2
8014e30: 1884703a and r2,r3,r2
8014e34: 1001703a wrctl status,r2
return context;
8014e38: e0bffa17 ldw r2,-24(fp)
OS_ENTER_CRITICAL();
8014e3c: e0bffe15 stw r2,-8(fp)
switch (OSTCBCur->OSTCBStatPend) { /* See if we timed-out or aborted */
8014e40: d0a05817 ldw r2,-32416(gp)
8014e44: 10800c43 ldbu r2,49(r2)
8014e48: 10803fcc andi r2,r2,255
8014e4c: 10000326 beq r2,zero,8014e5c <OSQPend+0x1c0>
8014e50: 108000a0 cmpeqi r2,r2,2
8014e54: 1000071e bne r2,zero,8014e74 <OSQPend+0x1d8>
8014e58: 00000b06 br 8014e88 <OSQPend+0x1ec>
case OS_STAT_PEND_OK: /* Extract message from TCB (Put there by QPost) */
pmsg = OSTCBCur->OSTCBMsg;
8014e5c: d0a05817 ldw r2,-32416(gp)
8014e60: 10800917 ldw r2,36(r2)
8014e64: e0bfff15 stw r2,-4(fp)
*perr = OS_ERR_NONE;
8014e68: e0bff517 ldw r2,-44(fp)
8014e6c: 10000005 stb zero,0(r2)
break;
8014e70: 00000e06 br 8014eac <OSQPend+0x210>
case OS_STAT_PEND_ABORT:
pmsg = (void *)0;
8014e74: e03fff15 stw zero,-4(fp)
*perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted */
8014e78: e0bff517 ldw r2,-44(fp)
8014e7c: 00c00384 movi r3,14
8014e80: 10c00005 stb r3,0(r2)
break;
8014e84: 00000906 br 8014eac <OSQPend+0x210>
case OS_STAT_PEND_TO:
default:
OS_EventTaskRemove(OSTCBCur, pevent);
8014e88: d0a05817 ldw r2,-32416(gp)
8014e8c: e17ff717 ldw r5,-36(fp)
8014e90: 1009883a mov r4,r2
8014e94: 80110b00 call 80110b0 <OS_EventTaskRemove>
pmsg = (void *)0;
8014e98: e03fff15 stw zero,-4(fp)
*perr = OS_ERR_TIMEOUT; /* Indicate that we didn't get event within TO */
8014e9c: e0bff517 ldw r2,-44(fp)
8014ea0: 00c00284 movi r3,10
8014ea4: 10c00005 stb r3,0(r2)
break;
8014ea8: 0001883a nop
}
OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */
8014eac: d0a05817 ldw r2,-32416(gp)
8014eb0: 10000c05 stb zero,48(r2)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */
8014eb4: d0a05817 ldw r2,-32416(gp)
8014eb8: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */
8014ebc: d0a05817 ldw r2,-32416(gp)
8014ec0: 10000715 stw zero,28(r2)
#if (OS_EVENT_MULTI_EN > 0)
OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;
8014ec4: d0a05817 ldw r2,-32416(gp)
8014ec8: 10000815 stw zero,32(r2)
#endif
OSTCBCur->OSTCBMsg = (void *)0; /* Clear received message */
8014ecc: d0a05817 ldw r2,-32416(gp)
8014ed0: 10000915 stw zero,36(r2)
8014ed4: e0bffe17 ldw r2,-8(fp)
8014ed8: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context);
8014edc: e0bff817 ldw r2,-32(fp)
8014ee0: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (pmsg); /* Return received message */
8014ee4: e0bfff17 ldw r2,-4(fp)
}
8014ee8: e037883a mov sp,fp
8014eec: dfc00117 ldw ra,4(sp)
8014ef0: df000017 ldw fp,0(sp)
8014ef4: dec00204 addi sp,sp,8
8014ef8: f800283a ret
08014efc <OSQPendAbort>:
*********************************************************************************************************
*/
#if OS_Q_PEND_ABORT_EN > 0
INT8U OSQPendAbort (OS_EVENT *pevent, INT8U opt, INT8U *perr)
{
8014efc: defff604 addi sp,sp,-40
8014f00: dfc00915 stw ra,36(sp)
8014f04: df000815 stw fp,32(sp)
8014f08: df000804 addi fp,sp,32
8014f0c: e13ffa15 stw r4,-24(fp)
8014f10: 2805883a mov r2,r5
8014f14: e1bff815 stw r6,-32(fp)
8014f18: e0bff905 stb r2,-28(fp)
INT8U nbr_tasks;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8014f1c: e03ffe15 stw zero,-8(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return (0);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
8014f20: e0bffa17 ldw r2,-24(fp)
8014f24: 10800003 ldbu r2,0(r2)
8014f28: 10803fcc andi r2,r2,255
8014f2c: 108000a0 cmpeqi r2,r2,2
8014f30: 1000051e bne r2,zero,8014f48 <OSQPendAbort+0x4c>
*perr = OS_ERR_EVENT_TYPE;
8014f34: e0bff817 ldw r2,-32(fp)
8014f38: 00c00044 movi r3,1
8014f3c: 10c00005 stb r3,0(r2)
return (0);
8014f40: 0005883a mov r2,zero
8014f44: 00003806 br 8015028 <OSQPendAbort+0x12c>
NIOS2_READ_STATUS (context);
8014f48: 0005303a rdctl r2,status
8014f4c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8014f50: e0fffd17 ldw r3,-12(fp)
8014f54: 00bfff84 movi r2,-2
8014f58: 1884703a and r2,r3,r2
8014f5c: 1001703a wrctl status,r2
return context;
8014f60: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
8014f64: e0bffe15 stw r2,-8(fp)
if (pevent->OSEventGrp != 0) { /* See if any task waiting on queue? */
8014f68: e0bffa17 ldw r2,-24(fp)
8014f6c: 10800283 ldbu r2,10(r2)
8014f70: 10803fcc andi r2,r2,255
8014f74: 10002526 beq r2,zero,801500c <OSQPendAbort+0x110>
nbr_tasks = 0;
8014f78: e03fffc5 stb zero,-1(fp)
switch (opt) {
8014f7c: e0bff903 ldbu r2,-28(fp)
8014f80: 10800058 cmpnei r2,r2,1
8014f84: 10000e1e bne r2,zero,8014fc0 <OSQPendAbort+0xc4>
case OS_PEND_OPT_BROADCAST: /* Do we need to abort ALL waiting tasks? */
while (pevent->OSEventGrp != 0) { /* Yes, ready ALL tasks waiting on queue */
8014f88: 00000806 br 8014fac <OSQPendAbort+0xb0>
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_ABORT);
8014f8c: 01c00084 movi r7,2
8014f90: 01800104 movi r6,4
8014f94: 000b883a mov r5,zero
8014f98: e13ffa17 ldw r4,-24(fp)
8014f9c: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
nbr_tasks++;
8014fa0: e0bfffc3 ldbu r2,-1(fp)
8014fa4: 10800044 addi r2,r2,1
8014fa8: e0bfffc5 stb r2,-1(fp)
while (pevent->OSEventGrp != 0) { /* Yes, ready ALL tasks waiting on queue */
8014fac: e0bffa17 ldw r2,-24(fp)
8014fb0: 10800283 ldbu r2,10(r2)
8014fb4: 10803fcc andi r2,r2,255
8014fb8: 103ff41e bne r2,zero,8014f8c <OSQPendAbort+0x90>
}
break;
8014fbc: 00000906 br 8014fe4 <OSQPendAbort+0xe8>
case OS_PEND_OPT_NONE:
default: /* No, ready HPT waiting on queue */
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_ABORT);
8014fc0: 01c00084 movi r7,2
8014fc4: 01800104 movi r6,4
8014fc8: 000b883a mov r5,zero
8014fcc: e13ffa17 ldw r4,-24(fp)
8014fd0: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
nbr_tasks++;
8014fd4: e0bfffc3 ldbu r2,-1(fp)
8014fd8: 10800044 addi r2,r2,1
8014fdc: e0bfffc5 stb r2,-1(fp)
break;
8014fe0: 0001883a nop
8014fe4: e0bffe17 ldw r2,-8(fp)
8014fe8: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8014fec: e0bffc17 ldw r2,-16(fp)
8014ff0: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
OS_Sched(); /* Find HPT ready to run */
8014ff4: 801166c0 call 801166c <OS_Sched>
*perr = OS_ERR_PEND_ABORT;
8014ff8: e0bff817 ldw r2,-32(fp)
8014ffc: 00c00384 movi r3,14
8015000: 10c00005 stb r3,0(r2)
return (nbr_tasks);
8015004: e0bfffc3 ldbu r2,-1(fp)
8015008: 00000706 br 8015028 <OSQPendAbort+0x12c>
801500c: e0bffe17 ldw r2,-8(fp)
8015010: e0bffb15 stw r2,-20(fp)
8015014: e0bffb17 ldw r2,-20(fp)
8015018: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
801501c: e0bff817 ldw r2,-32(fp)
8015020: 10000005 stb zero,0(r2)
return (0); /* No tasks waiting on queue */
8015024: 0005883a mov r2,zero
}
8015028: e037883a mov sp,fp
801502c: dfc00117 ldw ra,4(sp)
8015030: df000017 ldw fp,0(sp)
8015034: dec00204 addi sp,sp,8
8015038: f800283a ret
0801503c <OSQPost>:
*********************************************************************************************************
*/
#if OS_Q_POST_EN > 0
INT8U OSQPost (OS_EVENT *pevent, void *pmsg)
{
801503c: defff604 addi sp,sp,-40
8015040: dfc00915 stw ra,36(sp)
8015044: df000815 stw fp,32(sp)
8015048: df000804 addi fp,sp,32
801504c: e13ff915 stw r4,-28(fp)
8015050: e17ff815 stw r5,-32(fp)
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8015054: e03fff15 stw zero,-4(fp)
#if OS_ARG_CHK_EN > 0
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
return (OS_ERR_PEVENT_NULL);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
8015058: e0bff917 ldw r2,-28(fp)
801505c: 10800003 ldbu r2,0(r2)
8015060: 10803fcc andi r2,r2,255
8015064: 108000a0 cmpeqi r2,r2,2
8015068: 1000021e bne r2,zero,8015074 <OSQPost+0x38>
return (OS_ERR_EVENT_TYPE);
801506c: 00800044 movi r2,1
8015070: 00004306 br 8015180 <OSQPost+0x144>
NIOS2_READ_STATUS (context);
8015074: 0005303a rdctl r2,status
8015078: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801507c: e0fffd17 ldw r3,-12(fp)
8015080: 00bfff84 movi r2,-2
8015084: 1884703a and r2,r3,r2
8015088: 1001703a wrctl status,r2
return context;
801508c: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
8015090: e0bfff15 stw r2,-4(fp)
if (pevent->OSEventGrp != 0) { /* See if any task pending on queue */
8015094: e0bff917 ldw r2,-28(fp)
8015098: 10800283 ldbu r2,10(r2)
801509c: 10803fcc andi r2,r2,255
80150a0: 10000c26 beq r2,zero,80150d4 <OSQPost+0x98>
/* Ready highest priority task waiting on event */
(void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK);
80150a4: 000f883a mov r7,zero
80150a8: 01800104 movi r6,4
80150ac: e17ff817 ldw r5,-32(fp)
80150b0: e13ff917 ldw r4,-28(fp)
80150b4: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
80150b8: e0bfff17 ldw r2,-4(fp)
80150bc: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
80150c0: e0bffc17 ldw r2,-16(fp)
80150c4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* Find highest priority task ready to run */
80150c8: 801166c0 call 801166c <OS_Sched>
return (OS_ERR_NONE);
80150cc: 0005883a mov r2,zero
80150d0: 00002b06 br 8015180 <OSQPost+0x144>
}
pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue control block */
80150d4: e0bff917 ldw r2,-28(fp)
80150d8: 10800117 ldw r2,4(r2)
80150dc: e0bffe15 stw r2,-8(fp)
if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full */
80150e0: e0bffe17 ldw r2,-8(fp)
80150e4: 10c0058b ldhu r3,22(r2)
80150e8: e0bffe17 ldw r2,-8(fp)
80150ec: 1080050b ldhu r2,20(r2)
80150f0: 18ffffcc andi r3,r3,65535
80150f4: 10bfffcc andi r2,r2,65535
80150f8: 18800636 bltu r3,r2,8015114 <OSQPost+0xd8>
80150fc: e0bfff17 ldw r2,-4(fp)
8015100: e0bffb15 stw r2,-20(fp)
8015104: e0bffb17 ldw r2,-20(fp)
8015108: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_Q_FULL);
801510c: 00800784 movi r2,30
8015110: 00001b06 br 8015180 <OSQPost+0x144>
}
*pq->OSQIn++ = pmsg; /* Insert message into queue */
8015114: e0bffe17 ldw r2,-8(fp)
8015118: 10800317 ldw r2,12(r2)
801511c: 11000104 addi r4,r2,4
8015120: e0fffe17 ldw r3,-8(fp)
8015124: 19000315 stw r4,12(r3)
8015128: e0fff817 ldw r3,-32(fp)
801512c: 10c00015 stw r3,0(r2)
pq->OSQEntries++; /* Update the nbr of entries in the queue */
8015130: e0bffe17 ldw r2,-8(fp)
8015134: 1080058b ldhu r2,22(r2)
8015138: 10800044 addi r2,r2,1
801513c: 1007883a mov r3,r2
8015140: e0bffe17 ldw r2,-8(fp)
8015144: 10c0058d sth r3,22(r2)
if (pq->OSQIn == pq->OSQEnd) { /* Wrap IN ptr if we are at end of queue */
8015148: e0bffe17 ldw r2,-8(fp)
801514c: 10c00317 ldw r3,12(r2)
8015150: e0bffe17 ldw r2,-8(fp)
8015154: 10800217 ldw r2,8(r2)
8015158: 1880041e bne r3,r2,801516c <OSQPost+0x130>
pq->OSQIn = pq->OSQStart;
801515c: e0bffe17 ldw r2,-8(fp)
8015160: 10c00117 ldw r3,4(r2)
8015164: e0bffe17 ldw r2,-8(fp)
8015168: 10c00315 stw r3,12(r2)
801516c: e0bfff17 ldw r2,-4(fp)
8015170: e0bffa15 stw r2,-24(fp)
8015174: e0bffa17 ldw r2,-24(fp)
8015178: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
801517c: 0005883a mov r2,zero
}
8015180: e037883a mov sp,fp
8015184: dfc00117 ldw ra,4(sp)
8015188: df000017 ldw fp,0(sp)
801518c: dec00204 addi sp,sp,8
8015190: f800283a ret
08015194 <OSQPostFront>:
*********************************************************************************************************
*/
#if OS_Q_POST_FRONT_EN > 0
INT8U OSQPostFront (OS_EVENT *pevent, void *pmsg)
{
8015194: defff604 addi sp,sp,-40
8015198: dfc00915 stw ra,36(sp)
801519c: df000815 stw fp,32(sp)
80151a0: df000804 addi fp,sp,32
80151a4: e13ff915 stw r4,-28(fp)
80151a8: e17ff815 stw r5,-32(fp)
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80151ac: e03fff15 stw zero,-4(fp)
#if OS_ARG_CHK_EN > 0
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
return (OS_ERR_PEVENT_NULL);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
80151b0: e0bff917 ldw r2,-28(fp)
80151b4: 10800003 ldbu r2,0(r2)
80151b8: 10803fcc andi r2,r2,255
80151bc: 108000a0 cmpeqi r2,r2,2
80151c0: 1000021e bne r2,zero,80151cc <OSQPostFront+0x38>
return (OS_ERR_EVENT_TYPE);
80151c4: 00800044 movi r2,1
80151c8: 00004506 br 80152e0 <OSQPostFront+0x14c>
NIOS2_READ_STATUS (context);
80151cc: 0005303a rdctl r2,status
80151d0: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80151d4: e0fffd17 ldw r3,-12(fp)
80151d8: 00bfff84 movi r2,-2
80151dc: 1884703a and r2,r3,r2
80151e0: 1001703a wrctl status,r2
return context;
80151e4: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
80151e8: e0bfff15 stw r2,-4(fp)
if (pevent->OSEventGrp != 0) { /* See if any task pending on queue */
80151ec: e0bff917 ldw r2,-28(fp)
80151f0: 10800283 ldbu r2,10(r2)
80151f4: 10803fcc andi r2,r2,255
80151f8: 10000c26 beq r2,zero,801522c <OSQPostFront+0x98>
/* Ready highest priority task waiting on event */
(void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK);
80151fc: 000f883a mov r7,zero
8015200: 01800104 movi r6,4
8015204: e17ff817 ldw r5,-32(fp)
8015208: e13ff917 ldw r4,-28(fp)
801520c: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
8015210: e0bfff17 ldw r2,-4(fp)
8015214: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8015218: e0bffc17 ldw r2,-16(fp)
801521c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* Find highest priority task ready to run */
8015220: 801166c0 call 801166c <OS_Sched>
return (OS_ERR_NONE);
8015224: 0005883a mov r2,zero
8015228: 00002d06 br 80152e0 <OSQPostFront+0x14c>
}
pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue control block */
801522c: e0bff917 ldw r2,-28(fp)
8015230: 10800117 ldw r2,4(r2)
8015234: e0bffe15 stw r2,-8(fp)
if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full */
8015238: e0bffe17 ldw r2,-8(fp)
801523c: 10c0058b ldhu r3,22(r2)
8015240: e0bffe17 ldw r2,-8(fp)
8015244: 1080050b ldhu r2,20(r2)
8015248: 18ffffcc andi r3,r3,65535
801524c: 10bfffcc andi r2,r2,65535
8015250: 18800636 bltu r3,r2,801526c <OSQPostFront+0xd8>
8015254: e0bfff17 ldw r2,-4(fp)
8015258: e0bffb15 stw r2,-20(fp)
801525c: e0bffb17 ldw r2,-20(fp)
8015260: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_Q_FULL);
8015264: 00800784 movi r2,30
8015268: 00001d06 br 80152e0 <OSQPostFront+0x14c>
}
if (pq->OSQOut == pq->OSQStart) { /* Wrap OUT ptr if we are at the 1st queue entry */
801526c: e0bffe17 ldw r2,-8(fp)
8015270: 10c00417 ldw r3,16(r2)
8015274: e0bffe17 ldw r2,-8(fp)
8015278: 10800117 ldw r2,4(r2)
801527c: 1880041e bne r3,r2,8015290 <OSQPostFront+0xfc>
pq->OSQOut = pq->OSQEnd;
8015280: e0bffe17 ldw r2,-8(fp)
8015284: 10c00217 ldw r3,8(r2)
8015288: e0bffe17 ldw r2,-8(fp)
801528c: 10c00415 stw r3,16(r2)
}
pq->OSQOut--;
8015290: e0bffe17 ldw r2,-8(fp)
8015294: 10800417 ldw r2,16(r2)
8015298: 10ffff04 addi r3,r2,-4
801529c: e0bffe17 ldw r2,-8(fp)
80152a0: 10c00415 stw r3,16(r2)
*pq->OSQOut = pmsg; /* Insert message into queue */
80152a4: e0bffe17 ldw r2,-8(fp)
80152a8: 10800417 ldw r2,16(r2)
80152ac: e0fff817 ldw r3,-32(fp)
80152b0: 10c00015 stw r3,0(r2)
pq->OSQEntries++; /* Update the nbr of entries in the queue */
80152b4: e0bffe17 ldw r2,-8(fp)
80152b8: 1080058b ldhu r2,22(r2)
80152bc: 10800044 addi r2,r2,1
80152c0: 1007883a mov r3,r2
80152c4: e0bffe17 ldw r2,-8(fp)
80152c8: 10c0058d sth r3,22(r2)
80152cc: e0bfff17 ldw r2,-4(fp)
80152d0: e0bffa15 stw r2,-24(fp)
80152d4: e0bffa17 ldw r2,-24(fp)
80152d8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
80152dc: 0005883a mov r2,zero
}
80152e0: e037883a mov sp,fp
80152e4: dfc00117 ldw ra,4(sp)
80152e8: df000017 ldw fp,0(sp)
80152ec: dec00204 addi sp,sp,8
80152f0: f800283a ret
080152f4 <OSQPostOpt>:
*********************************************************************************************************
*/
#if OS_Q_POST_OPT_EN > 0
INT8U OSQPostOpt (OS_EVENT *pevent, void *pmsg, INT8U opt)
{
80152f4: defff504 addi sp,sp,-44
80152f8: dfc00a15 stw ra,40(sp)
80152fc: df000915 stw fp,36(sp)
8015300: df000904 addi fp,sp,36
8015304: e13ff915 stw r4,-28(fp)
8015308: e17ff815 stw r5,-32(fp)
801530c: 3005883a mov r2,r6
8015310: e0bff705 stb r2,-36(fp)
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8015314: e03fff15 stw zero,-4(fp)
#if OS_ARG_CHK_EN > 0
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
return (OS_ERR_PEVENT_NULL);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
8015318: e0bff917 ldw r2,-28(fp)
801531c: 10800003 ldbu r2,0(r2)
8015320: 10803fcc andi r2,r2,255
8015324: 108000a0 cmpeqi r2,r2,2
8015328: 1000021e bne r2,zero,8015334 <OSQPostOpt+0x40>
return (OS_ERR_EVENT_TYPE);
801532c: 00800044 movi r2,1
8015330: 00006a06 br 80154dc <OSQPostOpt+0x1e8>
NIOS2_READ_STATUS (context);
8015334: 0005303a rdctl r2,status
8015338: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801533c: e0fffd17 ldw r3,-12(fp)
8015340: 00bfff84 movi r2,-2
8015344: 1884703a and r2,r3,r2
8015348: 1001703a wrctl status,r2
return context;
801534c: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
8015350: e0bfff15 stw r2,-4(fp)
if (pevent->OSEventGrp != 0x00) { /* See if any task pending on queue */
8015354: e0bff917 ldw r2,-28(fp)
8015358: 10800283 ldbu r2,10(r2)
801535c: 10803fcc andi r2,r2,255
8015360: 10001d26 beq r2,zero,80153d8 <OSQPostOpt+0xe4>
if ((opt & OS_POST_OPT_BROADCAST) != 0x00) { /* Do we need to post msg to ALL waiting tasks ? */
8015364: e0bff703 ldbu r2,-36(fp)
8015368: 1080004c andi r2,r2,1
801536c: 10000b26 beq r2,zero,801539c <OSQPostOpt+0xa8>
while (pevent->OSEventGrp != 0) { /* Yes, Post to ALL tasks waiting on queue */
8015370: 00000506 br 8015388 <OSQPostOpt+0x94>
(void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK);
8015374: 000f883a mov r7,zero
8015378: 01800104 movi r6,4
801537c: e17ff817 ldw r5,-32(fp)
8015380: e13ff917 ldw r4,-28(fp)
8015384: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
while (pevent->OSEventGrp != 0) { /* Yes, Post to ALL tasks waiting on queue */
8015388: e0bff917 ldw r2,-28(fp)
801538c: 10800283 ldbu r2,10(r2)
8015390: 10803fcc andi r2,r2,255
8015394: 103ff71e bne r2,zero,8015374 <OSQPostOpt+0x80>
8015398: 00000506 br 80153b0 <OSQPostOpt+0xbc>
}
} else { /* No, Post to HPT waiting on queue */
(void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK);
801539c: 000f883a mov r7,zero
80153a0: 01800104 movi r6,4
80153a4: e17ff817 ldw r5,-32(fp)
80153a8: e13ff917 ldw r4,-28(fp)
80153ac: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
80153b0: e0bfff17 ldw r2,-4(fp)
80153b4: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
80153b8: e0bffc17 ldw r2,-16(fp)
80153bc: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
if ((opt & OS_POST_OPT_NO_SCHED) == 0) { /* See if scheduler needs to be invoked */
80153c0: e0bff703 ldbu r2,-36(fp)
80153c4: 1080010c andi r2,r2,4
80153c8: 1000011e bne r2,zero,80153d0 <OSQPostOpt+0xdc>
OS_Sched(); /* Find highest priority task ready to run */
80153cc: 801166c0 call 801166c <OS_Sched>
}
return (OS_ERR_NONE);
80153d0: 0005883a mov r2,zero
80153d4: 00004106 br 80154dc <OSQPostOpt+0x1e8>
}
pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue control block */
80153d8: e0bff917 ldw r2,-28(fp)
80153dc: 10800117 ldw r2,4(r2)
80153e0: e0bffe15 stw r2,-8(fp)
if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full */
80153e4: e0bffe17 ldw r2,-8(fp)
80153e8: 10c0058b ldhu r3,22(r2)
80153ec: e0bffe17 ldw r2,-8(fp)
80153f0: 1080050b ldhu r2,20(r2)
80153f4: 18ffffcc andi r3,r3,65535
80153f8: 10bfffcc andi r2,r2,65535
80153fc: 18800636 bltu r3,r2,8015418 <OSQPostOpt+0x124>
8015400: e0bfff17 ldw r2,-4(fp)
8015404: e0bffb15 stw r2,-20(fp)
8015408: e0bffb17 ldw r2,-20(fp)
801540c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_Q_FULL);
8015410: 00800784 movi r2,30
8015414: 00003106 br 80154dc <OSQPostOpt+0x1e8>
}
if ((opt & OS_POST_OPT_FRONT) != 0x00) { /* Do we post to the FRONT of the queue? */
8015418: e0bff703 ldbu r2,-36(fp)
801541c: 1080008c andi r2,r2,2
8015420: 10001326 beq r2,zero,8015470 <OSQPostOpt+0x17c>
if (pq->OSQOut == pq->OSQStart) { /* Yes, Post as LIFO, Wrap OUT pointer if we ... */
8015424: e0bffe17 ldw r2,-8(fp)
8015428: 10c00417 ldw r3,16(r2)
801542c: e0bffe17 ldw r2,-8(fp)
8015430: 10800117 ldw r2,4(r2)
8015434: 1880041e bne r3,r2,8015448 <OSQPostOpt+0x154>
pq->OSQOut = pq->OSQEnd; /* ... are at the 1st queue entry */
8015438: e0bffe17 ldw r2,-8(fp)
801543c: 10c00217 ldw r3,8(r2)
8015440: e0bffe17 ldw r2,-8(fp)
8015444: 10c00415 stw r3,16(r2)
}
pq->OSQOut--;
8015448: e0bffe17 ldw r2,-8(fp)
801544c: 10800417 ldw r2,16(r2)
8015450: 10ffff04 addi r3,r2,-4
8015454: e0bffe17 ldw r2,-8(fp)
8015458: 10c00415 stw r3,16(r2)
*pq->OSQOut = pmsg; /* Insert message into queue */
801545c: e0bffe17 ldw r2,-8(fp)
8015460: 10800417 ldw r2,16(r2)
8015464: e0fff817 ldw r3,-32(fp)
8015468: 10c00015 stw r3,0(r2)
801546c: 00001006 br 80154b0 <OSQPostOpt+0x1bc>
} else { /* No, Post as FIFO */
*pq->OSQIn++ = pmsg; /* Insert message into queue */
8015470: e0bffe17 ldw r2,-8(fp)
8015474: 10800317 ldw r2,12(r2)
8015478: 11000104 addi r4,r2,4
801547c: e0fffe17 ldw r3,-8(fp)
8015480: 19000315 stw r4,12(r3)
8015484: e0fff817 ldw r3,-32(fp)
8015488: 10c00015 stw r3,0(r2)
if (pq->OSQIn == pq->OSQEnd) { /* Wrap IN ptr if we are at end of queue */
801548c: e0bffe17 ldw r2,-8(fp)
8015490: 10c00317 ldw r3,12(r2)
8015494: e0bffe17 ldw r2,-8(fp)
8015498: 10800217 ldw r2,8(r2)
801549c: 1880041e bne r3,r2,80154b0 <OSQPostOpt+0x1bc>
pq->OSQIn = pq->OSQStart;
80154a0: e0bffe17 ldw r2,-8(fp)
80154a4: 10c00117 ldw r3,4(r2)
80154a8: e0bffe17 ldw r2,-8(fp)
80154ac: 10c00315 stw r3,12(r2)
}
}
pq->OSQEntries++; /* Update the nbr of entries in the queue */
80154b0: e0bffe17 ldw r2,-8(fp)
80154b4: 1080058b ldhu r2,22(r2)
80154b8: 10800044 addi r2,r2,1
80154bc: 1007883a mov r3,r2
80154c0: e0bffe17 ldw r2,-8(fp)
80154c4: 10c0058d sth r3,22(r2)
80154c8: e0bfff17 ldw r2,-4(fp)
80154cc: e0bffa15 stw r2,-24(fp)
80154d0: e0bffa17 ldw r2,-24(fp)
80154d4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
80154d8: 0005883a mov r2,zero
}
80154dc: e037883a mov sp,fp
80154e0: dfc00117 ldw ra,4(sp)
80154e4: df000017 ldw fp,0(sp)
80154e8: dec00204 addi sp,sp,8
80154ec: f800283a ret
080154f0 <OSQQuery>:
*********************************************************************************************************
*/
#if OS_Q_QUERY_EN > 0
INT8U OSQQuery (OS_EVENT *pevent, OS_Q_DATA *p_q_data)
{
80154f0: defff604 addi sp,sp,-40
80154f4: df000915 stw fp,36(sp)
80154f8: df000904 addi fp,sp,36
80154fc: e13ff815 stw r4,-32(fp)
8015500: e17ff715 stw r5,-36(fp)
#else
INT16U *psrc;
INT16U *pdest;
#endif
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8015504: e03ffc15 stw zero,-16(fp)
}
if (p_q_data == (OS_Q_DATA *)0) { /* Validate 'p_q_data' */
return (OS_ERR_PDATA_NULL);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
8015508: e0bff817 ldw r2,-32(fp)
801550c: 10800003 ldbu r2,0(r2)
8015510: 10803fcc andi r2,r2,255
8015514: 108000a0 cmpeqi r2,r2,2
8015518: 1000021e bne r2,zero,8015524 <OSQQuery+0x34>
return (OS_ERR_EVENT_TYPE);
801551c: 00800044 movi r2,1
8015520: 00003e06 br 801561c <OSQQuery+0x12c>
NIOS2_READ_STATUS (context);
8015524: 0005303a rdctl r2,status
8015528: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801552c: e0fffa17 ldw r3,-24(fp)
8015530: 00bfff84 movi r2,-2
8015534: 1884703a and r2,r3,r2
8015538: 1001703a wrctl status,r2
return context;
801553c: e0bffa17 ldw r2,-24(fp)
}
OS_ENTER_CRITICAL();
8015540: e0bffc15 stw r2,-16(fp)
p_q_data->OSEventGrp = pevent->OSEventGrp; /* Copy message queue wait list */
8015544: e0bff817 ldw r2,-32(fp)
8015548: 10c00283 ldbu r3,10(r2)
801554c: e0bff717 ldw r2,-36(fp)
8015550: 10c002c5 stb r3,11(r2)
psrc = &pevent->OSEventTbl[0];
8015554: e0bff817 ldw r2,-32(fp)
8015558: 108002c4 addi r2,r2,11
801555c: e0bffe15 stw r2,-8(fp)
pdest = &p_q_data->OSEventTbl[0];
8015560: e0bff717 ldw r2,-36(fp)
8015564: 10800204 addi r2,r2,8
8015568: e0bffd15 stw r2,-12(fp)
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
801556c: e03fffc5 stb zero,-1(fp)
8015570: 00000b06 br 80155a0 <OSQQuery+0xb0>
*pdest++ = *psrc++;
8015574: e0fffe17 ldw r3,-8(fp)
8015578: 18800044 addi r2,r3,1
801557c: e0bffe15 stw r2,-8(fp)
8015580: e0bffd17 ldw r2,-12(fp)
8015584: 11000044 addi r4,r2,1
8015588: e13ffd15 stw r4,-12(fp)
801558c: 18c00003 ldbu r3,0(r3)
8015590: 10c00005 stb r3,0(r2)
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
8015594: e0bfffc3 ldbu r2,-1(fp)
8015598: 10800044 addi r2,r2,1
801559c: e0bfffc5 stb r2,-1(fp)
80155a0: e0bfffc3 ldbu r2,-1(fp)
80155a4: 108000f0 cmpltui r2,r2,3
80155a8: 103ff21e bne r2,zero,8015574 <OSQQuery+0x84>
}
pq = (OS_Q *)pevent->OSEventPtr;
80155ac: e0bff817 ldw r2,-32(fp)
80155b0: 10800117 ldw r2,4(r2)
80155b4: e0bffb15 stw r2,-20(fp)
if (pq->OSQEntries > 0) {
80155b8: e0bffb17 ldw r2,-20(fp)
80155bc: 1080058b ldhu r2,22(r2)
80155c0: 10bfffcc andi r2,r2,65535
80155c4: 10000626 beq r2,zero,80155e0 <OSQQuery+0xf0>
p_q_data->OSMsg = *pq->OSQOut; /* Get next message to return if available */
80155c8: e0bffb17 ldw r2,-20(fp)
80155cc: 10800417 ldw r2,16(r2)
80155d0: 10c00017 ldw r3,0(r2)
80155d4: e0bff717 ldw r2,-36(fp)
80155d8: 10c00015 stw r3,0(r2)
80155dc: 00000206 br 80155e8 <OSQQuery+0xf8>
} else {
p_q_data->OSMsg = (void *)0;
80155e0: e0bff717 ldw r2,-36(fp)
80155e4: 10000015 stw zero,0(r2)
}
p_q_data->OSNMsgs = pq->OSQEntries;
80155e8: e0bffb17 ldw r2,-20(fp)
80155ec: 10c0058b ldhu r3,22(r2)
80155f0: e0bff717 ldw r2,-36(fp)
80155f4: 10c0010d sth r3,4(r2)
p_q_data->OSQSize = pq->OSQSize;
80155f8: e0bffb17 ldw r2,-20(fp)
80155fc: 10c0050b ldhu r3,20(r2)
8015600: e0bff717 ldw r2,-36(fp)
8015604: 10c0018d sth r3,6(r2)
8015608: e0bffc17 ldw r2,-16(fp)
801560c: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
8015610: e0bff917 ldw r2,-28(fp)
8015614: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
8015618: 0005883a mov r2,zero
}
801561c: e037883a mov sp,fp
8015620: df000017 ldw fp,0(sp)
8015624: dec00104 addi sp,sp,4
8015628: f800283a ret
0801562c <OS_QInit>:
* Note(s) : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
void OS_QInit (void)
{
801562c: defffb04 addi sp,sp,-20
8015630: dfc00415 stw ra,16(sp)
8015634: df000315 stw fp,12(sp)
8015638: df000304 addi fp,sp,12
OS_Q *pq1;
OS_Q *pq2;
OS_MemClr((INT8U *)&OSQTbl[0], sizeof(OSQTbl)); /* Clear the queue table */
801563c: 01407804 movi r5,480
8015640: 010201b4 movhi r4,2054
8015644: 212f7304 addi r4,r4,-16948
8015648: 80115b00 call 80115b0 <OS_MemClr>
pq1 = &OSQTbl[0];
801564c: 008201b4 movhi r2,2054
8015650: 10af7304 addi r2,r2,-16948
8015654: e0bffe15 stw r2,-8(fp)
pq2 = &OSQTbl[1];
8015658: 008201b4 movhi r2,2054
801565c: 10af7904 addi r2,r2,-16924
8015660: e0bffd15 stw r2,-12(fp)
for (i = 0; i < (OS_MAX_QS - 1); i++) { /* Init. list of free QUEUE control blocks */
8015664: e03fff8d sth zero,-2(fp)
8015668: 00000c06 br 801569c <OS_QInit+0x70>
pq1->OSQPtr = pq2;
801566c: e0bffe17 ldw r2,-8(fp)
8015670: e0fffd17 ldw r3,-12(fp)
8015674: 10c00015 stw r3,0(r2)
pq1++;
8015678: e0bffe17 ldw r2,-8(fp)
801567c: 10800604 addi r2,r2,24
8015680: e0bffe15 stw r2,-8(fp)
pq2++;
8015684: e0bffd17 ldw r2,-12(fp)
8015688: 10800604 addi r2,r2,24
801568c: e0bffd15 stw r2,-12(fp)
for (i = 0; i < (OS_MAX_QS - 1); i++) { /* Init. list of free QUEUE control blocks */
8015690: e0bfff8b ldhu r2,-2(fp)
8015694: 10800044 addi r2,r2,1
8015698: e0bfff8d sth r2,-2(fp)
801569c: e0bfff8b ldhu r2,-2(fp)
80156a0: 108004f0 cmpltui r2,r2,19
80156a4: 103ff11e bne r2,zero,801566c <OS_QInit+0x40>
}
pq1->OSQPtr = (OS_Q *)0;
80156a8: e0bffe17 ldw r2,-8(fp)
80156ac: 10000015 stw zero,0(r2)
OSQFreeList = &OSQTbl[0];
80156b0: 008201b4 movhi r2,2054
80156b4: 10af7304 addi r2,r2,-16948
80156b8: d0a05415 stw r2,-32432(gp)
#endif
}
80156bc: 0001883a nop
80156c0: e037883a mov sp,fp
80156c4: dfc00117 ldw ra,4(sp)
80156c8: df000017 ldw fp,0(sp)
80156cc: dec00204 addi sp,sp,8
80156d0: f800283a ret
080156d4 <OSSemAccept>:
*********************************************************************************************************
*/
#if OS_SEM_ACCEPT_EN > 0
INT16U OSSemAccept (OS_EVENT *pevent)
{
80156d4: defffa04 addi sp,sp,-24
80156d8: df000515 stw fp,20(sp)
80156dc: df000504 addi fp,sp,20
80156e0: e13ffb15 stw r4,-20(fp)
INT16U cnt;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80156e4: e03fff15 stw zero,-4(fp)
#if OS_ARG_CHK_EN > 0
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
return (0);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
80156e8: e0bffb17 ldw r2,-20(fp)
80156ec: 10800003 ldbu r2,0(r2)
80156f0: 10803fcc andi r2,r2,255
80156f4: 108000e0 cmpeqi r2,r2,3
80156f8: 1000021e bne r2,zero,8015704 <OSSemAccept+0x30>
return (0);
80156fc: 0005883a mov r2,zero
8015700: 00001806 br 8015764 <OSSemAccept+0x90>
NIOS2_READ_STATUS (context);
8015704: 0005303a rdctl r2,status
8015708: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801570c: e0fffd17 ldw r3,-12(fp)
8015710: 00bfff84 movi r2,-2
8015714: 1884703a and r2,r3,r2
8015718: 1001703a wrctl status,r2
return context;
801571c: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
8015720: e0bfff15 stw r2,-4(fp)
cnt = pevent->OSEventCnt;
8015724: e0bffb17 ldw r2,-20(fp)
8015728: 1080020b ldhu r2,8(r2)
801572c: e0bffe8d sth r2,-6(fp)
if (cnt > 0) { /* See if resource is available */
8015730: e0bffe8b ldhu r2,-6(fp)
8015734: 10000626 beq r2,zero,8015750 <OSSemAccept+0x7c>
pevent->OSEventCnt--; /* Yes, decrement semaphore and notify caller */
8015738: e0bffb17 ldw r2,-20(fp)
801573c: 1080020b ldhu r2,8(r2)
8015740: 10bfffc4 addi r2,r2,-1
8015744: 1007883a mov r3,r2
8015748: e0bffb17 ldw r2,-20(fp)
801574c: 10c0020d sth r3,8(r2)
8015750: e0bfff17 ldw r2,-4(fp)
8015754: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8015758: e0bffc17 ldw r2,-16(fp)
801575c: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
return (cnt); /* Return semaphore count */
8015760: e0bffe8b ldhu r2,-6(fp)
}
8015764: e037883a mov sp,fp
8015768: df000017 ldw fp,0(sp)
801576c: dec00104 addi sp,sp,4
8015770: f800283a ret
08015774 <OSSemCreate>:
* == (void *)0 if no event control blocks were available
*********************************************************************************************************
*/
OS_EVENT *OSSemCreate (INT16U cnt)
{
8015774: defff904 addi sp,sp,-28
8015778: dfc00615 stw ra,24(sp)
801577c: df000515 stw fp,20(sp)
8015780: df000504 addi fp,sp,20
8015784: 2005883a mov r2,r4
8015788: e0bffb0d sth r2,-20(fp)
OS_EVENT *pevent;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801578c: e03fff15 stw zero,-4(fp)
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
8015790: d0a05703 ldbu r2,-32420(gp)
8015794: 10803fcc andi r2,r2,255
8015798: 10000226 beq r2,zero,80157a4 <OSSemCreate+0x30>
return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
801579c: 0005883a mov r2,zero
80157a0: 00002506 br 8015838 <OSSemCreate+0xc4>
NIOS2_READ_STATUS (context);
80157a4: 0005303a rdctl r2,status
80157a8: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80157ac: e0fffd17 ldw r3,-12(fp)
80157b0: 00bfff84 movi r2,-2
80157b4: 1884703a and r2,r3,r2
80157b8: 1001703a wrctl status,r2
return context;
80157bc: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
80157c0: e0bfff15 stw r2,-4(fp)
pevent = OSEventFreeList; /* Get next free event control block */
80157c4: d0a05617 ldw r2,-32424(gp)
80157c8: e0bffe15 stw r2,-8(fp)
if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */
80157cc: d0a05617 ldw r2,-32424(gp)
80157d0: 10000326 beq r2,zero,80157e0 <OSSemCreate+0x6c>
OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
80157d4: d0a05617 ldw r2,-32424(gp)
80157d8: 10800117 ldw r2,4(r2)
80157dc: d0a05615 stw r2,-32424(gp)
80157e0: e0bfff17 ldw r2,-4(fp)
80157e4: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
80157e8: e0bffc17 ldw r2,-16(fp)
80157ec: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
if (pevent != (OS_EVENT *)0) { /* Get an event control block */
80157f0: e0bffe17 ldw r2,-8(fp)
80157f4: 10000f26 beq r2,zero,8015834 <OSSemCreate+0xc0>
pevent->OSEventType = OS_EVENT_TYPE_SEM;
80157f8: e0bffe17 ldw r2,-8(fp)
80157fc: 00c000c4 movi r3,3
8015800: 10c00005 stb r3,0(r2)
pevent->OSEventCnt = cnt; /* Set semaphore value */
8015804: e0bffe17 ldw r2,-8(fp)
8015808: e0fffb0b ldhu r3,-20(fp)
801580c: 10c0020d sth r3,8(r2)
pevent->OSEventPtr = (void *)0; /* Unlink from ECB free list */
8015810: e0bffe17 ldw r2,-8(fp)
8015814: 10000115 stw zero,4(r2)
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
8015818: e0bffe17 ldw r2,-8(fp)
801581c: 00c00fc4 movi r3,63
8015820: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
8015824: e0bffe17 ldw r2,-8(fp)
8015828: 100003c5 stb zero,15(r2)
#endif
OS_EventWaitListInit(pevent); /* Initialize to 'nobody waiting' on sem. */
801582c: e13ffe17 ldw r4,-8(fp)
8015830: 80112580 call 8011258 <OS_EventWaitListInit>
}
return (pevent);
8015834: e0bffe17 ldw r2,-8(fp)
}
8015838: e037883a mov sp,fp
801583c: dfc00117 ldw ra,4(sp)
8015840: df000017 ldw fp,0(sp)
8015844: dec00204 addi sp,sp,8
8015848: f800283a ret
0801584c <OSSemDel>:
*********************************************************************************************************
*/
#if OS_SEM_DEL_EN > 0
OS_EVENT *OSSemDel (OS_EVENT *pevent, INT8U opt, INT8U *perr)
{
801584c: defff304 addi sp,sp,-52
8015850: dfc00c15 stw ra,48(sp)
8015854: df000b15 stw fp,44(sp)
8015858: df000b04 addi fp,sp,44
801585c: e13ff715 stw r4,-36(fp)
8015860: 2805883a mov r2,r5
8015864: e1bff515 stw r6,-44(fp)
8015868: e0bff605 stb r2,-40(fp)
BOOLEAN tasks_waiting;
OS_EVENT *pevent_return;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801586c: e03ffd15 stw zero,-12(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return (pevent);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
8015870: e0bff717 ldw r2,-36(fp)
8015874: 10800003 ldbu r2,0(r2)
8015878: 10803fcc andi r2,r2,255
801587c: 108000e0 cmpeqi r2,r2,3
8015880: 1000051e bne r2,zero,8015898 <OSSemDel+0x4c>
*perr = OS_ERR_EVENT_TYPE;
8015884: e0bff517 ldw r2,-44(fp)
8015888: 00c00044 movi r3,1
801588c: 10c00005 stb r3,0(r2)
return (pevent);
8015890: e0bff717 ldw r2,-36(fp)
8015894: 00006d06 br 8015a4c <OSSemDel+0x200>
}
if (OSIntNesting > 0) { /* See if called from ISR ... */
8015898: d0a05703 ldbu r2,-32420(gp)
801589c: 10803fcc andi r2,r2,255
80158a0: 10000526 beq r2,zero,80158b8 <OSSemDel+0x6c>
*perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
80158a4: e0bff517 ldw r2,-44(fp)
80158a8: 00c003c4 movi r3,15
80158ac: 10c00005 stb r3,0(r2)
return (pevent);
80158b0: e0bff717 ldw r2,-36(fp)
80158b4: 00006506 br 8015a4c <OSSemDel+0x200>
NIOS2_READ_STATUS (context);
80158b8: 0005303a rdctl r2,status
80158bc: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80158c0: e0fffc17 ldw r3,-16(fp)
80158c4: 00bfff84 movi r2,-2
80158c8: 1884703a and r2,r3,r2
80158cc: 1001703a wrctl status,r2
return context;
80158d0: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
80158d4: e0bffd15 stw r2,-12(fp)
if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on semaphore */
80158d8: e0bff717 ldw r2,-36(fp)
80158dc: 10800283 ldbu r2,10(r2)
80158e0: 10803fcc andi r2,r2,255
80158e4: 10000326 beq r2,zero,80158f4 <OSSemDel+0xa8>
tasks_waiting = OS_TRUE; /* Yes */
80158e8: 00800044 movi r2,1
80158ec: e0bfffc5 stb r2,-1(fp)
80158f0: 00000106 br 80158f8 <OSSemDel+0xac>
} else {
tasks_waiting = OS_FALSE; /* No */
80158f4: e03fffc5 stb zero,-1(fp)
}
switch (opt) {
80158f8: e0bff603 ldbu r2,-40(fp)
80158fc: 10000326 beq r2,zero,801590c <OSSemDel+0xc0>
8015900: 10800060 cmpeqi r2,r2,1
8015904: 1000281e bne r2,zero,80159a8 <OSSemDel+0x15c>
8015908: 00004506 br 8015a20 <OSSemDel+0x1d4>
case OS_DEL_NO_PEND: /* Delete semaphore only if no task waiting */
if (tasks_waiting == OS_FALSE) {
801590c: e0bfffc3 ldbu r2,-1(fp)
8015910: 1000161e bne r2,zero,801596c <OSSemDel+0x120>
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
8015914: e0bff717 ldw r2,-36(fp)
8015918: 00c00fc4 movi r3,63
801591c: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
8015920: e0bff717 ldw r2,-36(fp)
8015924: 100003c5 stb zero,15(r2)
#endif
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
8015928: e0bff717 ldw r2,-36(fp)
801592c: 10000005 stb zero,0(r2)
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
8015930: d0e05617 ldw r3,-32424(gp)
8015934: e0bff717 ldw r2,-36(fp)
8015938: 10c00115 stw r3,4(r2)
pevent->OSEventCnt = 0;
801593c: e0bff717 ldw r2,-36(fp)
8015940: 1000020d sth zero,8(r2)
OSEventFreeList = pevent; /* Get next free event control block */
8015944: e0bff717 ldw r2,-36(fp)
8015948: d0a05615 stw r2,-32424(gp)
801594c: e0bffd17 ldw r2,-12(fp)
8015950: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8015954: e0bffb17 ldw r2,-20(fp)
8015958: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
801595c: e0bff517 ldw r2,-44(fp)
8015960: 10000005 stb zero,0(r2)
pevent_return = (OS_EVENT *)0; /* Semaphore has been deleted */
8015964: e03ffe15 stw zero,-8(fp)
} else {
OS_EXIT_CRITICAL();
*perr = OS_ERR_TASK_WAITING;
pevent_return = pevent;
}
break;
8015968: 00003706 br 8015a48 <OSSemDel+0x1fc>
801596c: e0bffd17 ldw r2,-12(fp)
8015970: e0bffa15 stw r2,-24(fp)
8015974: e0bffa17 ldw r2,-24(fp)
8015978: 1001703a wrctl status,r2
*perr = OS_ERR_TASK_WAITING;
801597c: e0bff517 ldw r2,-44(fp)
8015980: 00c01244 movi r3,73
8015984: 10c00005 stb r3,0(r2)
pevent_return = pevent;
8015988: e0bff717 ldw r2,-36(fp)
801598c: e0bffe15 stw r2,-8(fp)
break;
8015990: 00002d06 br 8015a48 <OSSemDel+0x1fc>
case OS_DEL_ALWAYS: /* Always delete the semaphore */
while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for semaphore */
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK);
8015994: 000f883a mov r7,zero
8015998: 01800044 movi r6,1
801599c: 000b883a mov r5,zero
80159a0: e13ff717 ldw r4,-36(fp)
80159a4: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for semaphore */
80159a8: e0bff717 ldw r2,-36(fp)
80159ac: 10800283 ldbu r2,10(r2)
80159b0: 10803fcc andi r2,r2,255
80159b4: 103ff71e bne r2,zero,8015994 <OSSemDel+0x148>
}
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
80159b8: e0bff717 ldw r2,-36(fp)
80159bc: 00c00fc4 movi r3,63
80159c0: 10c00385 stb r3,14(r2)
pevent->OSEventName[1] = OS_ASCII_NUL;
80159c4: e0bff717 ldw r2,-36(fp)
80159c8: 100003c5 stb zero,15(r2)
#endif
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
80159cc: e0bff717 ldw r2,-36(fp)
80159d0: 10000005 stb zero,0(r2)
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
80159d4: d0e05617 ldw r3,-32424(gp)
80159d8: e0bff717 ldw r2,-36(fp)
80159dc: 10c00115 stw r3,4(r2)
pevent->OSEventCnt = 0;
80159e0: e0bff717 ldw r2,-36(fp)
80159e4: 1000020d sth zero,8(r2)
OSEventFreeList = pevent; /* Get next free event control block */
80159e8: e0bff717 ldw r2,-36(fp)
80159ec: d0a05615 stw r2,-32424(gp)
80159f0: e0bffd17 ldw r2,-12(fp)
80159f4: e0bff915 stw r2,-28(fp)
80159f8: e0bff917 ldw r2,-28(fp)
80159fc: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
8015a00: e0bfffc3 ldbu r2,-1(fp)
8015a04: 10800058 cmpnei r2,r2,1
8015a08: 1000011e bne r2,zero,8015a10 <OSSemDel+0x1c4>
OS_Sched(); /* Find highest priority task ready to run */
8015a0c: 801166c0 call 801166c <OS_Sched>
}
*perr = OS_ERR_NONE;
8015a10: e0bff517 ldw r2,-44(fp)
8015a14: 10000005 stb zero,0(r2)
pevent_return = (OS_EVENT *)0; /* Semaphore has been deleted */
8015a18: e03ffe15 stw zero,-8(fp)
break;
8015a1c: 00000a06 br 8015a48 <OSSemDel+0x1fc>
8015a20: e0bffd17 ldw r2,-12(fp)
8015a24: e0bff815 stw r2,-32(fp)
8015a28: e0bff817 ldw r2,-32(fp)
8015a2c: 1001703a wrctl status,r2
default:
OS_EXIT_CRITICAL();
*perr = OS_ERR_INVALID_OPT;
8015a30: e0bff517 ldw r2,-44(fp)
8015a34: 00c001c4 movi r3,7
8015a38: 10c00005 stb r3,0(r2)
pevent_return = pevent;
8015a3c: e0bff717 ldw r2,-36(fp)
8015a40: e0bffe15 stw r2,-8(fp)
break;
8015a44: 0001883a nop
}
return (pevent_return);
8015a48: e0bffe17 ldw r2,-8(fp)
}
8015a4c: e037883a mov sp,fp
8015a50: dfc00117 ldw ra,4(sp)
8015a54: df000017 ldw fp,0(sp)
8015a58: dec00204 addi sp,sp,8
8015a5c: f800283a ret
08015a60 <OSSemPend>:
* Returns : none
*********************************************************************************************************
*/
/*$PAGE*/
void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)
{
8015a60: defff504 addi sp,sp,-44
8015a64: dfc00a15 stw ra,40(sp)
8015a68: df000915 stw fp,36(sp)
8015a6c: df000904 addi fp,sp,36
8015a70: e13ff915 stw r4,-28(fp)
8015a74: 2805883a mov r2,r5
8015a78: e1bff715 stw r6,-36(fp)
8015a7c: e0bff80d sth r2,-32(fp)
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8015a80: e03fff15 stw zero,-4(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return;
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
8015a84: e0bff917 ldw r2,-28(fp)
8015a88: 10800003 ldbu r2,0(r2)
8015a8c: 10803fcc andi r2,r2,255
8015a90: 108000e0 cmpeqi r2,r2,3
8015a94: 1000041e bne r2,zero,8015aa8 <OSSemPend+0x48>
*perr = OS_ERR_EVENT_TYPE;
8015a98: e0bff717 ldw r2,-36(fp)
8015a9c: 00c00044 movi r3,1
8015aa0: 10c00005 stb r3,0(r2)
return;
8015aa4: 00006206 br 8015c30 <OSSemPend+0x1d0>
}
if (OSIntNesting > 0) { /* See if called from ISR ... */
8015aa8: d0a05703 ldbu r2,-32420(gp)
8015aac: 10803fcc andi r2,r2,255
8015ab0: 10000426 beq r2,zero,8015ac4 <OSSemPend+0x64>
*perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
8015ab4: e0bff717 ldw r2,-36(fp)
8015ab8: 00c00084 movi r3,2
8015abc: 10c00005 stb r3,0(r2)
return;
8015ac0: 00005b06 br 8015c30 <OSSemPend+0x1d0>
}
if (OSLockNesting > 0) { /* See if called with scheduler locked ... */
8015ac4: d0a04b03 ldbu r2,-32468(gp)
8015ac8: 10803fcc andi r2,r2,255
8015acc: 10000426 beq r2,zero,8015ae0 <OSSemPend+0x80>
*perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
8015ad0: e0bff717 ldw r2,-36(fp)
8015ad4: 00c00344 movi r3,13
8015ad8: 10c00005 stb r3,0(r2)
return;
8015adc: 00005406 br 8015c30 <OSSemPend+0x1d0>
NIOS2_READ_STATUS (context);
8015ae0: 0005303a rdctl r2,status
8015ae4: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8015ae8: e0fffe17 ldw r3,-8(fp)
8015aec: 00bfff84 movi r2,-2
8015af0: 1884703a and r2,r3,r2
8015af4: 1001703a wrctl status,r2
return context;
8015af8: e0bffe17 ldw r2,-8(fp)
}
OS_ENTER_CRITICAL();
8015afc: e0bfff15 stw r2,-4(fp)
if (pevent->OSEventCnt > 0) { /* If sem. is positive, resource available ... */
8015b00: e0bff917 ldw r2,-28(fp)
8015b04: 1080020b ldhu r2,8(r2)
8015b08: 10bfffcc andi r2,r2,65535
8015b0c: 10000d26 beq r2,zero,8015b44 <OSSemPend+0xe4>
pevent->OSEventCnt--; /* ... decrement semaphore only if positive. */
8015b10: e0bff917 ldw r2,-28(fp)
8015b14: 1080020b ldhu r2,8(r2)
8015b18: 10bfffc4 addi r2,r2,-1
8015b1c: 1007883a mov r3,r2
8015b20: e0bff917 ldw r2,-28(fp)
8015b24: 10c0020d sth r3,8(r2)
8015b28: e0bfff17 ldw r2,-4(fp)
8015b2c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8015b30: e0bffd17 ldw r2,-12(fp)
8015b34: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8015b38: e0bff717 ldw r2,-36(fp)
8015b3c: 10000005 stb zero,0(r2)
return;
8015b40: 00003b06 br 8015c30 <OSSemPend+0x1d0>
}
/* Otherwise, must wait until event occurs */
OSTCBCur->OSTCBStat |= OS_STAT_SEM; /* Resource not available, pend on semaphore */
8015b44: d0a05817 ldw r2,-32416(gp)
8015b48: 10c00c03 ldbu r3,48(r2)
8015b4c: d0a05817 ldw r2,-32416(gp)
8015b50: 18c00054 ori r3,r3,1
8015b54: 10c00c05 stb r3,48(r2)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
8015b58: d0a05817 ldw r2,-32416(gp)
8015b5c: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB */
8015b60: d0a05817 ldw r2,-32416(gp)
8015b64: e0fff80b ldhu r3,-32(fp)
8015b68: 10c00b8d sth r3,46(r2)
OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */
8015b6c: e13ff917 ldw r4,-28(fp)
8015b70: 8010e600 call 8010e60 <OS_EventTaskWait>
8015b74: e0bfff17 ldw r2,-4(fp)
8015b78: e0bffb15 stw r2,-20(fp)
8015b7c: e0bffb17 ldw r2,-20(fp)
8015b80: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* Find next highest priority task ready */
8015b84: 801166c0 call 801166c <OS_Sched>
NIOS2_READ_STATUS (context);
8015b88: 0005303a rdctl r2,status
8015b8c: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8015b90: e0fffc17 ldw r3,-16(fp)
8015b94: 00bfff84 movi r2,-2
8015b98: 1884703a and r2,r3,r2
8015b9c: 1001703a wrctl status,r2
return context;
8015ba0: e0bffc17 ldw r2,-16(fp)
OS_ENTER_CRITICAL();
8015ba4: e0bfff15 stw r2,-4(fp)
switch (OSTCBCur->OSTCBStatPend) { /* See if we timed-out or aborted */
8015ba8: d0a05817 ldw r2,-32416(gp)
8015bac: 10800c43 ldbu r2,49(r2)
8015bb0: 10803fcc andi r2,r2,255
8015bb4: 10000326 beq r2,zero,8015bc4 <OSSemPend+0x164>
8015bb8: 108000a0 cmpeqi r2,r2,2
8015bbc: 1000041e bne r2,zero,8015bd0 <OSSemPend+0x170>
8015bc0: 00000706 br 8015be0 <OSSemPend+0x180>
case OS_STAT_PEND_OK:
*perr = OS_ERR_NONE;
8015bc4: e0bff717 ldw r2,-36(fp)
8015bc8: 10000005 stb zero,0(r2)
break;
8015bcc: 00000c06 br 8015c00 <OSSemPend+0x1a0>
case OS_STAT_PEND_ABORT:
*perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted */
8015bd0: e0bff717 ldw r2,-36(fp)
8015bd4: 00c00384 movi r3,14
8015bd8: 10c00005 stb r3,0(r2)
break;
8015bdc: 00000806 br 8015c00 <OSSemPend+0x1a0>
case OS_STAT_PEND_TO:
default:
OS_EventTaskRemove(OSTCBCur, pevent);
8015be0: d0a05817 ldw r2,-32416(gp)
8015be4: e17ff917 ldw r5,-28(fp)
8015be8: 1009883a mov r4,r2
8015bec: 80110b00 call 80110b0 <OS_EventTaskRemove>
*perr = OS_ERR_TIMEOUT; /* Indicate that we didn't get event within TO */
8015bf0: e0bff717 ldw r2,-36(fp)
8015bf4: 00c00284 movi r3,10
8015bf8: 10c00005 stb r3,0(r2)
break;
8015bfc: 0001883a nop
}
OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */
8015c00: d0a05817 ldw r2,-32416(gp)
8015c04: 10000c05 stb zero,48(r2)
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */
8015c08: d0a05817 ldw r2,-32416(gp)
8015c0c: 10000c45 stb zero,49(r2)
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */
8015c10: d0a05817 ldw r2,-32416(gp)
8015c14: 10000715 stw zero,28(r2)
#if (OS_EVENT_MULTI_EN > 0)
OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;
8015c18: d0a05817 ldw r2,-32416(gp)
8015c1c: 10000815 stw zero,32(r2)
8015c20: e0bfff17 ldw r2,-4(fp)
8015c24: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8015c28: e0bffa17 ldw r2,-24(fp)
8015c2c: 1001703a wrctl status,r2
#endif
OS_EXIT_CRITICAL();
}
8015c30: e037883a mov sp,fp
8015c34: dfc00117 ldw ra,4(sp)
8015c38: df000017 ldw fp,0(sp)
8015c3c: dec00204 addi sp,sp,8
8015c40: f800283a ret
08015c44 <OSSemPendAbort>:
*********************************************************************************************************
*/
#if OS_SEM_PEND_ABORT_EN > 0
INT8U OSSemPendAbort (OS_EVENT *pevent, INT8U opt, INT8U *perr)
{
8015c44: defff604 addi sp,sp,-40
8015c48: dfc00915 stw ra,36(sp)
8015c4c: df000815 stw fp,32(sp)
8015c50: df000804 addi fp,sp,32
8015c54: e13ffa15 stw r4,-24(fp)
8015c58: 2805883a mov r2,r5
8015c5c: e1bff815 stw r6,-32(fp)
8015c60: e0bff905 stb r2,-28(fp)
INT8U nbr_tasks;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8015c64: e03ffe15 stw zero,-8(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return (0);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
8015c68: e0bffa17 ldw r2,-24(fp)
8015c6c: 10800003 ldbu r2,0(r2)
8015c70: 10803fcc andi r2,r2,255
8015c74: 108000e0 cmpeqi r2,r2,3
8015c78: 1000051e bne r2,zero,8015c90 <OSSemPendAbort+0x4c>
*perr = OS_ERR_EVENT_TYPE;
8015c7c: e0bff817 ldw r2,-32(fp)
8015c80: 00c00044 movi r3,1
8015c84: 10c00005 stb r3,0(r2)
return (0);
8015c88: 0005883a mov r2,zero
8015c8c: 00003806 br 8015d70 <OSSemPendAbort+0x12c>
NIOS2_READ_STATUS (context);
8015c90: 0005303a rdctl r2,status
8015c94: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8015c98: e0fffd17 ldw r3,-12(fp)
8015c9c: 00bfff84 movi r2,-2
8015ca0: 1884703a and r2,r3,r2
8015ca4: 1001703a wrctl status,r2
return context;
8015ca8: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
8015cac: e0bffe15 stw r2,-8(fp)
if (pevent->OSEventGrp != 0) { /* See if any task waiting on semaphore? */
8015cb0: e0bffa17 ldw r2,-24(fp)
8015cb4: 10800283 ldbu r2,10(r2)
8015cb8: 10803fcc andi r2,r2,255
8015cbc: 10002526 beq r2,zero,8015d54 <OSSemPendAbort+0x110>
nbr_tasks = 0;
8015cc0: e03fffc5 stb zero,-1(fp)
switch (opt) {
8015cc4: e0bff903 ldbu r2,-28(fp)
8015cc8: 10800058 cmpnei r2,r2,1
8015ccc: 10000e1e bne r2,zero,8015d08 <OSSemPendAbort+0xc4>
case OS_PEND_OPT_BROADCAST: /* Do we need to abort ALL waiting tasks? */
while (pevent->OSEventGrp != 0) { /* Yes, ready ALL tasks waiting on semaphore */
8015cd0: 00000806 br 8015cf4 <OSSemPendAbort+0xb0>
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_ABORT);
8015cd4: 01c00084 movi r7,2
8015cd8: 01800044 movi r6,1
8015cdc: 000b883a mov r5,zero
8015ce0: e13ffa17 ldw r4,-24(fp)
8015ce4: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
nbr_tasks++;
8015ce8: e0bfffc3 ldbu r2,-1(fp)
8015cec: 10800044 addi r2,r2,1
8015cf0: e0bfffc5 stb r2,-1(fp)
while (pevent->OSEventGrp != 0) { /* Yes, ready ALL tasks waiting on semaphore */
8015cf4: e0bffa17 ldw r2,-24(fp)
8015cf8: 10800283 ldbu r2,10(r2)
8015cfc: 10803fcc andi r2,r2,255
8015d00: 103ff41e bne r2,zero,8015cd4 <OSSemPendAbort+0x90>
}
break;
8015d04: 00000906 br 8015d2c <OSSemPendAbort+0xe8>
case OS_PEND_OPT_NONE:
default: /* No, ready HPT waiting on semaphore */
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_ABORT);
8015d08: 01c00084 movi r7,2
8015d0c: 01800044 movi r6,1
8015d10: 000b883a mov r5,zero
8015d14: e13ffa17 ldw r4,-24(fp)
8015d18: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
nbr_tasks++;
8015d1c: e0bfffc3 ldbu r2,-1(fp)
8015d20: 10800044 addi r2,r2,1
8015d24: e0bfffc5 stb r2,-1(fp)
break;
8015d28: 0001883a nop
8015d2c: e0bffe17 ldw r2,-8(fp)
8015d30: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8015d34: e0bffc17 ldw r2,-16(fp)
8015d38: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
OS_Sched(); /* Find HPT ready to run */
8015d3c: 801166c0 call 801166c <OS_Sched>
*perr = OS_ERR_PEND_ABORT;
8015d40: e0bff817 ldw r2,-32(fp)
8015d44: 00c00384 movi r3,14
8015d48: 10c00005 stb r3,0(r2)
return (nbr_tasks);
8015d4c: e0bfffc3 ldbu r2,-1(fp)
8015d50: 00000706 br 8015d70 <OSSemPendAbort+0x12c>
8015d54: e0bffe17 ldw r2,-8(fp)
8015d58: e0bffb15 stw r2,-20(fp)
8015d5c: e0bffb17 ldw r2,-20(fp)
8015d60: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8015d64: e0bff817 ldw r2,-32(fp)
8015d68: 10000005 stb zero,0(r2)
return (0); /* No tasks waiting on semaphore */
8015d6c: 0005883a mov r2,zero
}
8015d70: e037883a mov sp,fp
8015d74: dfc00117 ldw ra,4(sp)
8015d78: df000017 ldw fp,0(sp)
8015d7c: dec00204 addi sp,sp,8
8015d80: f800283a ret
08015d84 <OSSemPost>:
* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.
*********************************************************************************************************
*/
INT8U OSSemPost (OS_EVENT *pevent)
{
8015d84: defff804 addi sp,sp,-32
8015d88: dfc00715 stw ra,28(sp)
8015d8c: df000615 stw fp,24(sp)
8015d90: df000604 addi fp,sp,24
8015d94: e13ffa15 stw r4,-24(fp)
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8015d98: e03fff15 stw zero,-4(fp)
#if OS_ARG_CHK_EN > 0
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
return (OS_ERR_PEVENT_NULL);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
8015d9c: e0bffa17 ldw r2,-24(fp)
8015da0: 10800003 ldbu r2,0(r2)
8015da4: 10803fcc andi r2,r2,255
8015da8: 108000e0 cmpeqi r2,r2,3
8015dac: 1000021e bne r2,zero,8015db8 <OSSemPost+0x34>
return (OS_ERR_EVENT_TYPE);
8015db0: 00800044 movi r2,1
8015db4: 00002e06 br 8015e70 <OSSemPost+0xec>
NIOS2_READ_STATUS (context);
8015db8: 0005303a rdctl r2,status
8015dbc: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8015dc0: e0fffe17 ldw r3,-8(fp)
8015dc4: 00bfff84 movi r2,-2
8015dc8: 1884703a and r2,r3,r2
8015dcc: 1001703a wrctl status,r2
return context;
8015dd0: e0bffe17 ldw r2,-8(fp)
}
OS_ENTER_CRITICAL();
8015dd4: e0bfff15 stw r2,-4(fp)
if (pevent->OSEventGrp != 0) { /* See if any task waiting for semaphore */
8015dd8: e0bffa17 ldw r2,-24(fp)
8015ddc: 10800283 ldbu r2,10(r2)
8015de0: 10803fcc andi r2,r2,255
8015de4: 10000c26 beq r2,zero,8015e18 <OSSemPost+0x94>
/* Ready HPT waiting on event */
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK);
8015de8: 000f883a mov r7,zero
8015dec: 01800044 movi r6,1
8015df0: 000b883a mov r5,zero
8015df4: e13ffa17 ldw r4,-24(fp)
8015df8: 8010cd80 call 8010cd8 <OS_EventTaskRdy>
8015dfc: e0bfff17 ldw r2,-4(fp)
8015e00: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8015e04: e0bffd17 ldw r2,-12(fp)
8015e08: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* Find HPT ready to run */
8015e0c: 801166c0 call 801166c <OS_Sched>
return (OS_ERR_NONE);
8015e10: 0005883a mov r2,zero
8015e14: 00001606 br 8015e70 <OSSemPost+0xec>
}
if (pevent->OSEventCnt < 65535u) { /* Make sure semaphore will not overflow */
8015e18: e0bffa17 ldw r2,-24(fp)
8015e1c: 1080020b ldhu r2,8(r2)
8015e20: 10ffffcc andi r3,r2,65535
8015e24: 00bfffd4 movui r2,65535
8015e28: 18800c26 beq r3,r2,8015e5c <OSSemPost+0xd8>
pevent->OSEventCnt++; /* Increment semaphore count to register event */
8015e2c: e0bffa17 ldw r2,-24(fp)
8015e30: 1080020b ldhu r2,8(r2)
8015e34: 10800044 addi r2,r2,1
8015e38: 1007883a mov r3,r2
8015e3c: e0bffa17 ldw r2,-24(fp)
8015e40: 10c0020d sth r3,8(r2)
8015e44: e0bfff17 ldw r2,-4(fp)
8015e48: e0bffc15 stw r2,-16(fp)
8015e4c: e0bffc17 ldw r2,-16(fp)
8015e50: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
8015e54: 0005883a mov r2,zero
8015e58: 00000506 br 8015e70 <OSSemPost+0xec>
8015e5c: e0bfff17 ldw r2,-4(fp)
8015e60: e0bffb15 stw r2,-20(fp)
8015e64: e0bffb17 ldw r2,-20(fp)
8015e68: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL(); /* Semaphore value has reached its maximum */
return (OS_ERR_SEM_OVF);
8015e6c: 00800c84 movi r2,50
}
8015e70: e037883a mov sp,fp
8015e74: dfc00117 ldw ra,4(sp)
8015e78: df000017 ldw fp,0(sp)
8015e7c: dec00204 addi sp,sp,8
8015e80: f800283a ret
08015e84 <OSSemQuery>:
*********************************************************************************************************
*/
#if OS_SEM_QUERY_EN > 0
INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data)
{
8015e84: defff704 addi sp,sp,-36
8015e88: df000815 stw fp,32(sp)
8015e8c: df000804 addi fp,sp,32
8015e90: e13ff915 stw r4,-28(fp)
8015e94: e17ff815 stw r5,-32(fp)
INT16U *psrc;
INT16U *pdest;
#endif
INT8U i;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8015e98: e03ffc15 stw zero,-16(fp)
}
if (p_sem_data == (OS_SEM_DATA *)0) { /* Validate 'p_sem_data' */
return (OS_ERR_PDATA_NULL);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
8015e9c: e0bff917 ldw r2,-28(fp)
8015ea0: 10800003 ldbu r2,0(r2)
8015ea4: 10803fcc andi r2,r2,255
8015ea8: 108000e0 cmpeqi r2,r2,3
8015eac: 1000021e bne r2,zero,8015eb8 <OSSemQuery+0x34>
return (OS_ERR_EVENT_TYPE);
8015eb0: 00800044 movi r2,1
8015eb4: 00002b06 br 8015f64 <OSSemQuery+0xe0>
NIOS2_READ_STATUS (context);
8015eb8: 0005303a rdctl r2,status
8015ebc: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8015ec0: e0fffb17 ldw r3,-20(fp)
8015ec4: 00bfff84 movi r2,-2
8015ec8: 1884703a and r2,r3,r2
8015ecc: 1001703a wrctl status,r2
return context;
8015ed0: e0bffb17 ldw r2,-20(fp)
}
OS_ENTER_CRITICAL();
8015ed4: e0bffc15 stw r2,-16(fp)
p_sem_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */
8015ed8: e0bff917 ldw r2,-28(fp)
8015edc: 10c00283 ldbu r3,10(r2)
8015ee0: e0bff817 ldw r2,-32(fp)
8015ee4: 10c00145 stb r3,5(r2)
psrc = &pevent->OSEventTbl[0];
8015ee8: e0bff917 ldw r2,-28(fp)
8015eec: 108002c4 addi r2,r2,11
8015ef0: e0bfff15 stw r2,-4(fp)
pdest = &p_sem_data->OSEventTbl[0];
8015ef4: e0bff817 ldw r2,-32(fp)
8015ef8: 10800084 addi r2,r2,2
8015efc: e0bffe15 stw r2,-8(fp)
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
8015f00: e03ffdc5 stb zero,-9(fp)
8015f04: 00000b06 br 8015f34 <OSSemQuery+0xb0>
*pdest++ = *psrc++;
8015f08: e0ffff17 ldw r3,-4(fp)
8015f0c: 18800044 addi r2,r3,1
8015f10: e0bfff15 stw r2,-4(fp)
8015f14: e0bffe17 ldw r2,-8(fp)
8015f18: 11000044 addi r4,r2,1
8015f1c: e13ffe15 stw r4,-8(fp)
8015f20: 18c00003 ldbu r3,0(r3)
8015f24: 10c00005 stb r3,0(r2)
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
8015f28: e0bffdc3 ldbu r2,-9(fp)
8015f2c: 10800044 addi r2,r2,1
8015f30: e0bffdc5 stb r2,-9(fp)
8015f34: e0bffdc3 ldbu r2,-9(fp)
8015f38: 108000f0 cmpltui r2,r2,3
8015f3c: 103ff21e bne r2,zero,8015f08 <OSSemQuery+0x84>
}
p_sem_data->OSCnt = pevent->OSEventCnt; /* Get semaphore count */
8015f40: e0bff917 ldw r2,-28(fp)
8015f44: 10c0020b ldhu r3,8(r2)
8015f48: e0bff817 ldw r2,-32(fp)
8015f4c: 10c0000d sth r3,0(r2)
8015f50: e0bffc17 ldw r2,-16(fp)
8015f54: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8015f58: e0bffa17 ldw r2,-24(fp)
8015f5c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
8015f60: 0005883a mov r2,zero
}
8015f64: e037883a mov sp,fp
8015f68: df000017 ldw fp,0(sp)
8015f6c: dec00104 addi sp,sp,4
8015f70: f800283a ret
08015f74 <OSSemSet>:
*********************************************************************************************************
*/
#if OS_SEM_SET_EN > 0
void OSSemSet (OS_EVENT *pevent, INT16U cnt, INT8U *perr)
{
8015f74: defff904 addi sp,sp,-28
8015f78: df000615 stw fp,24(sp)
8015f7c: df000604 addi fp,sp,24
8015f80: e13ffc15 stw r4,-16(fp)
8015f84: 2805883a mov r2,r5
8015f88: e1bffa15 stw r6,-24(fp)
8015f8c: e0bffb0d sth r2,-20(fp)
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8015f90: e03fff15 stw zero,-4(fp)
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return;
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
8015f94: e0bffc17 ldw r2,-16(fp)
8015f98: 10800003 ldbu r2,0(r2)
8015f9c: 10803fcc andi r2,r2,255
8015fa0: 108000e0 cmpeqi r2,r2,3
8015fa4: 1000041e bne r2,zero,8015fb8 <OSSemSet+0x44>
*perr = OS_ERR_EVENT_TYPE;
8015fa8: e0bffa17 ldw r2,-24(fp)
8015fac: 00c00044 movi r3,1
8015fb0: 10c00005 stb r3,0(r2)
return;
8015fb4: 00002106 br 801603c <OSSemSet+0xc8>
NIOS2_READ_STATUS (context);
8015fb8: 0005303a rdctl r2,status
8015fbc: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8015fc0: e0fffe17 ldw r3,-8(fp)
8015fc4: 00bfff84 movi r2,-2
8015fc8: 1884703a and r2,r3,r2
8015fcc: 1001703a wrctl status,r2
return context;
8015fd0: e0bffe17 ldw r2,-8(fp)
}
OS_ENTER_CRITICAL();
8015fd4: e0bfff15 stw r2,-4(fp)
*perr = OS_ERR_NONE;
8015fd8: e0bffa17 ldw r2,-24(fp)
8015fdc: 10000005 stb zero,0(r2)
if (pevent->OSEventCnt > 0) { /* See if semaphore already has a count */
8015fe0: e0bffc17 ldw r2,-16(fp)
8015fe4: 1080020b ldhu r2,8(r2)
8015fe8: 10bfffcc andi r2,r2,65535
8015fec: 10000426 beq r2,zero,8016000 <OSSemSet+0x8c>
pevent->OSEventCnt = cnt; /* Yes, set it to the new value specified. */
8015ff0: e0bffc17 ldw r2,-16(fp)
8015ff4: e0fffb0b ldhu r3,-20(fp)
8015ff8: 10c0020d sth r3,8(r2)
8015ffc: 00000b06 br 801602c <OSSemSet+0xb8>
} else { /* No */
if (pevent->OSEventGrp == 0) { /* See if task(s) waiting? */
8016000: e0bffc17 ldw r2,-16(fp)
8016004: 10800283 ldbu r2,10(r2)
8016008: 10803fcc andi r2,r2,255
801600c: 1000041e bne r2,zero,8016020 <OSSemSet+0xac>
pevent->OSEventCnt = cnt; /* No, OK to set the value */
8016010: e0bffc17 ldw r2,-16(fp)
8016014: e0fffb0b ldhu r3,-20(fp)
8016018: 10c0020d sth r3,8(r2)
801601c: 00000306 br 801602c <OSSemSet+0xb8>
} else {
*perr = OS_ERR_TASK_WAITING;
8016020: e0bffa17 ldw r2,-24(fp)
8016024: 00c01244 movi r3,73
8016028: 10c00005 stb r3,0(r2)
801602c: e0bfff17 ldw r2,-4(fp)
8016030: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8016034: e0bffd17 ldw r2,-12(fp)
8016038: 1001703a wrctl status,r2
}
}
OS_EXIT_CRITICAL();
}
801603c: e037883a mov sp,fp
8016040: df000017 ldw fp,0(sp)
8016044: dec00104 addi sp,sp,4
8016048: f800283a ret
0801604c <OSTaskChangePrio>:
*********************************************************************************************************
*/
#if OS_TASK_CHANGE_PRIO_EN > 0
INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)
{
801604c: defff104 addi sp,sp,-60
8016050: dfc00e15 stw ra,56(sp)
8016054: df000d15 stw fp,52(sp)
8016058: df000d04 addi fp,sp,52
801605c: 2005883a mov r2,r4
8016060: 2807883a mov r3,r5
8016064: e0bff405 stb r2,-48(fp)
8016068: 1805883a mov r2,r3
801606c: e0bff305 stb r2,-52(fp)
INT16U bitx_new;
INT16U bity_old;
INT16U bitx_old;
#endif
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0; /* Storage for CPU status register */
8016070: e03ffd15 stw zero,-12(fp)
NIOS2_READ_STATUS (context);
8016074: 0005303a rdctl r2,status
8016078: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801607c: e0fff917 ldw r3,-28(fp)
8016080: 00bfff84 movi r2,-2
8016084: 1884703a and r2,r3,r2
8016088: 1001703a wrctl status,r2
return context;
801608c: e0bff917 ldw r2,-28(fp)
}
if (newprio >= OS_LOWEST_PRIO) {
return (OS_ERR_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
8016090: e0bffd15 stw r2,-12(fp)
if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) { /* New priority must not already exist */
8016094: e0bff303 ldbu r2,-52(fp)
8016098: 100690ba slli r3,r2,2
801609c: 008201b4 movhi r2,2054
80160a0: 1885883a add r2,r3,r2
80160a4: 10b55d17 ldw r2,-10892(r2)
80160a8: 10000626 beq r2,zero,80160c4 <OSTaskChangePrio+0x78>
80160ac: e0bffd17 ldw r2,-12(fp)
80160b0: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context);
80160b4: e0bff817 ldw r2,-32(fp)
80160b8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_PRIO_EXIST);
80160bc: 00800a04 movi r2,40
80160c0: 0000fd06 br 80164b8 <OSTaskChangePrio+0x46c>
}
if (oldprio == OS_PRIO_SELF) { /* See if changing self */
80160c4: e0bff403 ldbu r2,-48(fp)
80160c8: 10803fd8 cmpnei r2,r2,255
80160cc: 1000031e bne r2,zero,80160dc <OSTaskChangePrio+0x90>
oldprio = OSTCBCur->OSTCBPrio; /* Yes, get priority */
80160d0: d0a05817 ldw r2,-32416(gp)
80160d4: 10800c83 ldbu r2,50(r2)
80160d8: e0bff405 stb r2,-48(fp)
}
ptcb = OSTCBPrioTbl[oldprio];
80160dc: e0bff403 ldbu r2,-48(fp)
80160e0: 100690ba slli r3,r2,2
80160e4: 008201b4 movhi r2,2054
80160e8: 1885883a add r2,r3,r2
80160ec: 10b55d17 ldw r2,-10892(r2)
80160f0: e0bffc15 stw r2,-16(fp)
if (ptcb == (OS_TCB *)0) { /* Does task to change exist? */
80160f4: e0bffc17 ldw r2,-16(fp)
80160f8: 1000061e bne r2,zero,8016114 <OSTaskChangePrio+0xc8>
80160fc: e0bffd17 ldw r2,-12(fp)
8016100: e0bff715 stw r2,-36(fp)
8016104: e0bff717 ldw r2,-36(fp)
8016108: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* No, can't change its priority! */
return (OS_ERR_PRIO);
801610c: 00800a44 movi r2,41
8016110: 0000e906 br 80164b8 <OSTaskChangePrio+0x46c>
}
if (ptcb == OS_TCB_RESERVED) { /* Is task assigned to Mutex */
8016114: e0bffc17 ldw r2,-16(fp)
8016118: 10800058 cmpnei r2,r2,1
801611c: 1000061e bne r2,zero,8016138 <OSTaskChangePrio+0xec>
8016120: e0bffd17 ldw r2,-12(fp)
8016124: e0bff615 stw r2,-40(fp)
8016128: e0bff617 ldw r2,-40(fp)
801612c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* No, can't change its priority! */
return (OS_ERR_TASK_NOT_EXIST);
8016130: 008010c4 movi r2,67
8016134: 0000e006 br 80164b8 <OSTaskChangePrio+0x46c>
}
#if OS_LOWEST_PRIO <= 63
y_new = (INT8U)(newprio >> 3); /* Yes, compute new TCB fields */
8016138: e0bff303 ldbu r2,-52(fp)
801613c: 1004d0fa srli r2,r2,3
8016140: e0bffbc5 stb r2,-17(fp)
x_new = (INT8U)(newprio & 0x07);
8016144: e0bff303 ldbu r2,-52(fp)
8016148: 108001cc andi r2,r2,7
801614c: e0bffb85 stb r2,-18(fp)
bity_new = (INT8U)(1 << y_new);
8016150: e0bffbc3 ldbu r2,-17(fp)
8016154: 00c00044 movi r3,1
8016158: 1884983a sll r2,r3,r2
801615c: e0bffb45 stb r2,-19(fp)
bitx_new = (INT8U)(1 << x_new);
8016160: e0bffb83 ldbu r2,-18(fp)
8016164: 00c00044 movi r3,1
8016168: 1884983a sll r2,r3,r2
801616c: e0bffb05 stb r2,-20(fp)
x_new = (INT8U)( newprio & 0x0F);
bity_new = (INT16U)(1 << y_new);
bitx_new = (INT16U)(1 << x_new);
#endif
OSTCBPrioTbl[oldprio] = (OS_TCB *)0; /* Remove TCB from old priority */
8016170: e0bff403 ldbu r2,-48(fp)
8016174: 100690ba slli r3,r2,2
8016178: 008201b4 movhi r2,2054
801617c: 1885883a add r2,r3,r2
8016180: 10355d15 stw zero,-10892(r2)
OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new priority */
8016184: e0bff303 ldbu r2,-52(fp)
8016188: 100890ba slli r4,r2,2
801618c: e0fffc17 ldw r3,-16(fp)
8016190: 008201b4 movhi r2,2054
8016194: 2085883a add r2,r4,r2
8016198: 10f55d15 stw r3,-10892(r2)
y_old = ptcb->OSTCBY;
801619c: e0bffc17 ldw r2,-16(fp)
80161a0: 10800d03 ldbu r2,52(r2)
80161a4: e0bffac5 stb r2,-21(fp)
bity_old = ptcb->OSTCBBitY;
80161a8: e0bffc17 ldw r2,-16(fp)
80161ac: 10800d83 ldbu r2,54(r2)
80161b0: e0bffa85 stb r2,-22(fp)
bitx_old = ptcb->OSTCBBitX;
80161b4: e0bffc17 ldw r2,-16(fp)
80161b8: 10800d43 ldbu r2,53(r2)
80161bc: e0bffa45 stb r2,-23(fp)
if ((OSRdyTbl[y_old] & bitx_old) != 0) { /* If task is ready make it not */
80161c0: e0fffac3 ldbu r3,-21(fp)
80161c4: d0a05544 addi r2,gp,-32427
80161c8: 1885883a add r2,r3,r2
80161cc: 10800003 ldbu r2,0(r2)
80161d0: e0fffa43 ldbu r3,-23(fp)
80161d4: 1884703a and r2,r3,r2
80161d8: 10803fcc andi r2,r2,255
80161dc: 10002826 beq r2,zero,8016280 <OSTaskChangePrio+0x234>
OSRdyTbl[y_old] &= ~bitx_old;
80161e0: e0fffac3 ldbu r3,-21(fp)
80161e4: d0a05544 addi r2,gp,-32427
80161e8: 1885883a add r2,r3,r2
80161ec: 10800003 ldbu r2,0(r2)
80161f0: 1007883a mov r3,r2
80161f4: e0bffa43 ldbu r2,-23(fp)
80161f8: 0084303a nor r2,zero,r2
80161fc: 1884703a and r2,r3,r2
8016200: e0fffac3 ldbu r3,-21(fp)
8016204: 1009883a mov r4,r2
8016208: d0a05544 addi r2,gp,-32427
801620c: 1885883a add r2,r3,r2
8016210: 11000005 stb r4,0(r2)
if (OSRdyTbl[y_old] == 0) {
8016214: e0fffac3 ldbu r3,-21(fp)
8016218: d0a05544 addi r2,gp,-32427
801621c: 1885883a add r2,r3,r2
8016220: 10800003 ldbu r2,0(r2)
8016224: 10803fcc andi r2,r2,255
8016228: 1000061e bne r2,zero,8016244 <OSTaskChangePrio+0x1f8>
OSRdyGrp &= ~bity_old;
801622c: e0bffa83 ldbu r2,-22(fp)
8016230: 0084303a nor r2,zero,r2
8016234: 1007883a mov r3,r2
8016238: d0a05503 ldbu r2,-32428(gp)
801623c: 1884703a and r2,r3,r2
8016240: d0a05505 stb r2,-32428(gp)
}
OSRdyGrp |= bity_new; /* Make new priority ready to run */
8016244: d0a05503 ldbu r2,-32428(gp)
8016248: e0fffb43 ldbu r3,-19(fp)
801624c: 1884b03a or r2,r3,r2
8016250: d0a05505 stb r2,-32428(gp)
OSRdyTbl[y_new] |= bitx_new;
8016254: e0fffbc3 ldbu r3,-17(fp)
8016258: d0a05544 addi r2,gp,-32427
801625c: 1885883a add r2,r3,r2
8016260: 10800003 ldbu r2,0(r2)
8016264: e0fffbc3 ldbu r3,-17(fp)
8016268: e13ffb03 ldbu r4,-20(fp)
801626c: 2084b03a or r2,r4,r2
8016270: 1009883a mov r4,r2
8016274: d0a05544 addi r2,gp,-32427
8016278: 1885883a add r2,r3,r2
801627c: 11000005 stb r4,0(r2)
}
#if (OS_EVENT_EN)
pevent = ptcb->OSTCBEventPtr;
8016280: e0bffc17 ldw r2,-16(fp)
8016284: 10800717 ldw r2,28(r2)
8016288: e0bfff15 stw r2,-4(fp)
if (pevent != (OS_EVENT *)0) {
801628c: e0bfff17 ldw r2,-4(fp)
8016290: 10002f26 beq r2,zero,8016350 <OSTaskChangePrio+0x304>
pevent->OSEventTbl[y_old] &= ~bitx_old; /* Remove old task prio from wait list */
8016294: e0bffac3 ldbu r2,-21(fp)
8016298: e0ffff17 ldw r3,-4(fp)
801629c: 1885883a add r2,r3,r2
80162a0: 108002c3 ldbu r2,11(r2)
80162a4: 1007883a mov r3,r2
80162a8: e0bffa43 ldbu r2,-23(fp)
80162ac: 0084303a nor r2,zero,r2
80162b0: 1884703a and r2,r3,r2
80162b4: 1007883a mov r3,r2
80162b8: e0bffac3 ldbu r2,-21(fp)
80162bc: 1809883a mov r4,r3
80162c0: e0ffff17 ldw r3,-4(fp)
80162c4: 1885883a add r2,r3,r2
80162c8: 110002c5 stb r4,11(r2)
if (pevent->OSEventTbl[y_old] == 0) {
80162cc: e0bffac3 ldbu r2,-21(fp)
80162d0: e0ffff17 ldw r3,-4(fp)
80162d4: 1885883a add r2,r3,r2
80162d8: 108002c3 ldbu r2,11(r2)
80162dc: 10803fcc andi r2,r2,255
80162e0: 1000091e bne r2,zero,8016308 <OSTaskChangePrio+0x2bc>
pevent->OSEventGrp &= ~bity_old;
80162e4: e0bfff17 ldw r2,-4(fp)
80162e8: 10800283 ldbu r2,10(r2)
80162ec: 1007883a mov r3,r2
80162f0: e0bffa83 ldbu r2,-22(fp)
80162f4: 0084303a nor r2,zero,r2
80162f8: 1884703a and r2,r3,r2
80162fc: 1007883a mov r3,r2
8016300: e0bfff17 ldw r2,-4(fp)
8016304: 10c00285 stb r3,10(r2)
}
pevent->OSEventGrp |= bity_new; /* Add new task prio to wait list */
8016308: e0bfff17 ldw r2,-4(fp)
801630c: 10800283 ldbu r2,10(r2)
8016310: e0fffb43 ldbu r3,-19(fp)
8016314: 1884b03a or r2,r3,r2
8016318: 1007883a mov r3,r2
801631c: e0bfff17 ldw r2,-4(fp)
8016320: 10c00285 stb r3,10(r2)
pevent->OSEventTbl[y_new] |= bitx_new;
8016324: e0bffbc3 ldbu r2,-17(fp)
8016328: e0ffff17 ldw r3,-4(fp)
801632c: 1885883a add r2,r3,r2
8016330: 10c002c3 ldbu r3,11(r2)
8016334: e0bffbc3 ldbu r2,-17(fp)
8016338: e13ffb03 ldbu r4,-20(fp)
801633c: 20c6b03a or r3,r4,r3
8016340: 1809883a mov r4,r3
8016344: e0ffff17 ldw r3,-4(fp)
8016348: 1885883a add r2,r3,r2
801634c: 110002c5 stb r4,11(r2)
}
#if (OS_EVENT_MULTI_EN > 0)
if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) {
8016350: e0bffc17 ldw r2,-16(fp)
8016354: 10800817 ldw r2,32(r2)
8016358: 10003e26 beq r2,zero,8016454 <OSTaskChangePrio+0x408>
pevents = ptcb->OSTCBEventMultiPtr;
801635c: e0bffc17 ldw r2,-16(fp)
8016360: 10800817 ldw r2,32(r2)
8016364: e0bffe15 stw r2,-8(fp)
pevent = *pevents;
8016368: e0bffe17 ldw r2,-8(fp)
801636c: 10800017 ldw r2,0(r2)
8016370: e0bfff15 stw r2,-4(fp)
while (pevent != (OS_EVENT *)0) {
8016374: 00003506 br 801644c <OSTaskChangePrio+0x400>
pevent->OSEventTbl[y_old] &= ~bitx_old; /* Remove old task prio from wait lists */
8016378: e0bffac3 ldbu r2,-21(fp)
801637c: e0ffff17 ldw r3,-4(fp)
8016380: 1885883a add r2,r3,r2
8016384: 108002c3 ldbu r2,11(r2)
8016388: 1007883a mov r3,r2
801638c: e0bffa43 ldbu r2,-23(fp)
8016390: 0084303a nor r2,zero,r2
8016394: 1884703a and r2,r3,r2
8016398: 1007883a mov r3,r2
801639c: e0bffac3 ldbu r2,-21(fp)
80163a0: 1809883a mov r4,r3
80163a4: e0ffff17 ldw r3,-4(fp)
80163a8: 1885883a add r2,r3,r2
80163ac: 110002c5 stb r4,11(r2)
if (pevent->OSEventTbl[y_old] == 0) {
80163b0: e0bffac3 ldbu r2,-21(fp)
80163b4: e0ffff17 ldw r3,-4(fp)
80163b8: 1885883a add r2,r3,r2
80163bc: 108002c3 ldbu r2,11(r2)
80163c0: 10803fcc andi r2,r2,255
80163c4: 1000091e bne r2,zero,80163ec <OSTaskChangePrio+0x3a0>
pevent->OSEventGrp &= ~bity_old;
80163c8: e0bfff17 ldw r2,-4(fp)
80163cc: 10800283 ldbu r2,10(r2)
80163d0: 1007883a mov r3,r2
80163d4: e0bffa83 ldbu r2,-22(fp)
80163d8: 0084303a nor r2,zero,r2
80163dc: 1884703a and r2,r3,r2
80163e0: 1007883a mov r3,r2
80163e4: e0bfff17 ldw r2,-4(fp)
80163e8: 10c00285 stb r3,10(r2)
}
pevent->OSEventGrp |= bity_new; /* Add new task prio to wait lists */
80163ec: e0bfff17 ldw r2,-4(fp)
80163f0: 10800283 ldbu r2,10(r2)
80163f4: e0fffb43 ldbu r3,-19(fp)
80163f8: 1884b03a or r2,r3,r2
80163fc: 1007883a mov r3,r2
8016400: e0bfff17 ldw r2,-4(fp)
8016404: 10c00285 stb r3,10(r2)
pevent->OSEventTbl[y_new] |= bitx_new;
8016408: e0bffbc3 ldbu r2,-17(fp)
801640c: e0ffff17 ldw r3,-4(fp)
8016410: 1885883a add r2,r3,r2
8016414: 10c002c3 ldbu r3,11(r2)
8016418: e0bffbc3 ldbu r2,-17(fp)
801641c: e13ffb03 ldbu r4,-20(fp)
8016420: 20c6b03a or r3,r4,r3
8016424: 1809883a mov r4,r3
8016428: e0ffff17 ldw r3,-4(fp)
801642c: 1885883a add r2,r3,r2
8016430: 110002c5 stb r4,11(r2)
pevents++;
8016434: e0bffe17 ldw r2,-8(fp)
8016438: 10800104 addi r2,r2,4
801643c: e0bffe15 stw r2,-8(fp)
pevent = *pevents;
8016440: e0bffe17 ldw r2,-8(fp)
8016444: 10800017 ldw r2,0(r2)
8016448: e0bfff15 stw r2,-4(fp)
while (pevent != (OS_EVENT *)0) {
801644c: e0bfff17 ldw r2,-4(fp)
8016450: 103fc91e bne r2,zero,8016378 <OSTaskChangePrio+0x32c>
}
}
#endif
#endif
ptcb->OSTCBPrio = newprio; /* Set new task priority */
8016454: e0bffc17 ldw r2,-16(fp)
8016458: e0fff303 ldbu r3,-52(fp)
801645c: 10c00c85 stb r3,50(r2)
ptcb->OSTCBY = y_new;
8016460: e0bffc17 ldw r2,-16(fp)
8016464: e0fffbc3 ldbu r3,-17(fp)
8016468: 10c00d05 stb r3,52(r2)
ptcb->OSTCBX = x_new;
801646c: e0bffc17 ldw r2,-16(fp)
8016470: e0fffb83 ldbu r3,-18(fp)
8016474: 10c00cc5 stb r3,51(r2)
ptcb->OSTCBBitY = bity_new;
8016478: e0bffc17 ldw r2,-16(fp)
801647c: e0fffb43 ldbu r3,-19(fp)
8016480: 10c00d85 stb r3,54(r2)
ptcb->OSTCBBitX = bitx_new;
8016484: e0bffc17 ldw r2,-16(fp)
8016488: e0fffb03 ldbu r3,-20(fp)
801648c: 10c00d45 stb r3,53(r2)
8016490: e0bffd17 ldw r2,-12(fp)
8016494: e0bff515 stw r2,-44(fp)
8016498: e0bff517 ldw r2,-44(fp)
801649c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
if (OSRunning == OS_TRUE) {
80164a0: d0a04b43 ldbu r2,-32467(gp)
80164a4: 10803fcc andi r2,r2,255
80164a8: 10800058 cmpnei r2,r2,1
80164ac: 1000011e bne r2,zero,80164b4 <OSTaskChangePrio+0x468>
OS_Sched(); /* Find new highest priority task */
80164b0: 801166c0 call 801166c <OS_Sched>
}
return (OS_ERR_NONE);
80164b4: 0005883a mov r2,zero
}
80164b8: e037883a mov sp,fp
80164bc: dfc00117 ldw ra,4(sp)
80164c0: df000017 ldw fp,0(sp)
80164c4: dec00204 addi sp,sp,8
80164c8: f800283a ret
080164cc <OSTaskCreate>:
*********************************************************************************************************
*/
#if OS_TASK_CREATE_EN > 0
INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)
{
80164cc: deffee04 addi sp,sp,-72
80164d0: dfc01115 stw ra,68(sp)
80164d4: df001015 stw fp,64(sp)
80164d8: df001004 addi fp,sp,64
80164dc: e13ff615 stw r4,-40(fp)
80164e0: e17ff515 stw r5,-44(fp)
80164e4: e1bff415 stw r6,-48(fp)
80164e8: 3805883a mov r2,r7
80164ec: e0bff305 stb r2,-52(fp)
OS_STK *psp;
INT8U err;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80164f0: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
80164f4: 0005303a rdctl r2,status
80164f8: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80164fc: e0fffc17 ldw r3,-16(fp)
8016500: 00bfff84 movi r2,-2
8016504: 1884703a and r2,r3,r2
8016508: 1001703a wrctl status,r2
return context;
801650c: e0bffc17 ldw r2,-16(fp)
#if OS_ARG_CHK_EN > 0
if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable range */
return (OS_ERR_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
8016510: e0bfff15 stw r2,-4(fp)
if (OSIntNesting > 0) { /* Make sure we don't create the task from within an ISR */
8016514: d0a05703 ldbu r2,-32420(gp)
8016518: 10803fcc andi r2,r2,255
801651c: 10000626 beq r2,zero,8016538 <OSTaskCreate+0x6c>
8016520: e0bfff17 ldw r2,-4(fp)
8016524: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8016528: e0bffb17 ldw r2,-20(fp)
801652c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_CREATE_ISR);
8016530: 00800f04 movi r2,60
8016534: 00004006 br 8016638 <OSTaskCreate+0x16c>
}
if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */
8016538: e0bff303 ldbu r2,-52(fp)
801653c: 100690ba slli r3,r2,2
8016540: 008201b4 movhi r2,2054
8016544: 1885883a add r2,r3,r2
8016548: 10b55d17 ldw r2,-10892(r2)
801654c: 1000351e bne r2,zero,8016624 <OSTaskCreate+0x158>
OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ... */
8016550: e0bff303 ldbu r2,-52(fp)
8016554: 100890ba slli r4,r2,2
8016558: 00c00044 movi r3,1
801655c: 008201b4 movhi r2,2054
8016560: 2085883a add r2,r4,r2
8016564: 10f55d15 stw r3,-10892(r2)
8016568: e0bfff17 ldw r2,-4(fp)
801656c: e0bffa15 stw r2,-24(fp)
8016570: e0bffa17 ldw r2,-24(fp)
8016574: 1001703a wrctl status,r2
/* ... the same thing until task is created. */
OS_EXIT_CRITICAL();
psp = OSTaskStkInit(task, p_arg, ptos, 0); /* Initialize the task's stack */
8016578: 000f883a mov r7,zero
801657c: e1bff417 ldw r6,-48(fp)
8016580: e17ff517 ldw r5,-44(fp)
8016584: e13ff617 ldw r4,-40(fp)
8016588: 80384580 call 8038458 <OSTaskStkInit>
801658c: e0bffe15 stw r2,-8(fp)
err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
8016590: e0bff303 ldbu r2,-52(fp)
8016594: d8000215 stw zero,8(sp)
8016598: d8000115 stw zero,4(sp)
801659c: d8000015 stw zero,0(sp)
80165a0: 000f883a mov r7,zero
80165a4: 000d883a mov r6,zero
80165a8: e17ffe17 ldw r5,-8(fp)
80165ac: 1009883a mov r4,r2
80165b0: 80118c40 call 80118c4 <OS_TCBInit>
80165b4: e0bffdc5 stb r2,-9(fp)
if (err == OS_ERR_NONE) {
80165b8: e0bffdc3 ldbu r2,-9(fp)
80165bc: 1000061e bne r2,zero,80165d8 <OSTaskCreate+0x10c>
if (OSRunning == OS_TRUE) { /* Find highest priority task if multitasking has started */
80165c0: d0a04b43 ldbu r2,-32467(gp)
80165c4: 10803fcc andi r2,r2,255
80165c8: 10800058 cmpnei r2,r2,1
80165cc: 1000131e bne r2,zero,801661c <OSTaskCreate+0x150>
OS_Sched();
80165d0: 801166c0 call 801166c <OS_Sched>
80165d4: 00001106 br 801661c <OSTaskCreate+0x150>
NIOS2_READ_STATUS (context);
80165d8: 0005303a rdctl r2,status
80165dc: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80165e0: e0fff817 ldw r3,-32(fp)
80165e4: 00bfff84 movi r2,-2
80165e8: 1884703a and r2,r3,r2
80165ec: 1001703a wrctl status,r2
return context;
80165f0: e0bff817 ldw r2,-32(fp)
}
} else {
OS_ENTER_CRITICAL();
80165f4: e0bfff15 stw r2,-4(fp)
OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others */
80165f8: e0bff303 ldbu r2,-52(fp)
80165fc: 100690ba slli r3,r2,2
8016600: 008201b4 movhi r2,2054
8016604: 1885883a add r2,r3,r2
8016608: 10355d15 stw zero,-10892(r2)
801660c: e0bfff17 ldw r2,-4(fp)
8016610: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
8016614: e0bff917 ldw r2,-28(fp)
8016618: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
}
return (err);
801661c: e0bffdc3 ldbu r2,-9(fp)
8016620: 00000506 br 8016638 <OSTaskCreate+0x16c>
8016624: e0bfff17 ldw r2,-4(fp)
8016628: e0bff715 stw r2,-36(fp)
801662c: e0bff717 ldw r2,-36(fp)
8016630: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
return (OS_ERR_PRIO_EXIST);
8016634: 00800a04 movi r2,40
}
8016638: e037883a mov sp,fp
801663c: dfc00117 ldw ra,4(sp)
8016640: df000017 ldw fp,0(sp)
8016644: dec00204 addi sp,sp,8
8016648: f800283a ret
0801664c <OSTaskCreateExt>:
INT16U id,
OS_STK *pbos,
INT32U stk_size,
void *pext,
INT16U opt)
{
801664c: deffec04 addi sp,sp,-80
8016650: dfc01315 stw ra,76(sp)
8016654: df001215 stw fp,72(sp)
8016658: df001204 addi fp,sp,72
801665c: e13ff615 stw r4,-40(fp)
8016660: e17ff515 stw r5,-44(fp)
8016664: e1bff415 stw r6,-48(fp)
8016668: 3809883a mov r4,r7
801666c: e0c00217 ldw r3,8(fp)
8016670: e0800617 ldw r2,24(fp)
8016674: e13ff305 stb r4,-52(fp)
8016678: e0fff20d sth r3,-56(fp)
801667c: e0bff10d sth r2,-60(fp)
OS_STK *psp;
INT8U err;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8016680: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
8016684: 0005303a rdctl r2,status
8016688: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801668c: e0fffc17 ldw r3,-16(fp)
8016690: 00bfff84 movi r2,-2
8016694: 1884703a and r2,r3,r2
8016698: 1001703a wrctl status,r2
return context;
801669c: e0bffc17 ldw r2,-16(fp)
#if OS_ARG_CHK_EN > 0
if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable range */
return (OS_ERR_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
80166a0: e0bfff15 stw r2,-4(fp)
if (OSIntNesting > 0) { /* Make sure we don't create the task from within an ISR */
80166a4: d0a05703 ldbu r2,-32420(gp)
80166a8: 10803fcc andi r2,r2,255
80166ac: 10000626 beq r2,zero,80166c8 <OSTaskCreateExt+0x7c>
80166b0: e0bfff17 ldw r2,-4(fp)
80166b4: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
80166b8: e0bffb17 ldw r2,-20(fp)
80166bc: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_CREATE_ISR);
80166c0: 00800f04 movi r2,60
80166c4: 00004506 br 80167dc <OSTaskCreateExt+0x190>
}
if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */
80166c8: e0bff303 ldbu r2,-52(fp)
80166cc: 100690ba slli r3,r2,2
80166d0: 008201b4 movhi r2,2054
80166d4: 1885883a add r2,r3,r2
80166d8: 10b55d17 ldw r2,-10892(r2)
80166dc: 10003a1e bne r2,zero,80167c8 <OSTaskCreateExt+0x17c>
OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ... */
80166e0: e0bff303 ldbu r2,-52(fp)
80166e4: 100890ba slli r4,r2,2
80166e8: 00c00044 movi r3,1
80166ec: 008201b4 movhi r2,2054
80166f0: 2085883a add r2,r4,r2
80166f4: 10f55d15 stw r3,-10892(r2)
80166f8: e0bfff17 ldw r2,-4(fp)
80166fc: e0bffa15 stw r2,-24(fp)
8016700: e0bffa17 ldw r2,-24(fp)
8016704: 1001703a wrctl status,r2
#if (OS_TASK_STAT_STK_CHK_EN > 0)
OS_TaskStkClr(pbos, stk_size, opt); /* Clear the task stack (if needed) */
#endif
psp = OSTaskStkInit(task, p_arg, ptos, opt); /* Initialize the task's stack */
8016708: e0bff10b ldhu r2,-60(fp)
801670c: 100f883a mov r7,r2
8016710: e1bff417 ldw r6,-48(fp)
8016714: e17ff517 ldw r5,-44(fp)
8016718: e13ff617 ldw r4,-40(fp)
801671c: 80384580 call 8038458 <OSTaskStkInit>
8016720: e0bffe15 stw r2,-8(fp)
err = OS_TCBInit(prio, psp, pbos, id, stk_size, pext, opt);
8016724: e0fff303 ldbu r3,-52(fp)
8016728: e13ff20b ldhu r4,-56(fp)
801672c: e0bff10b ldhu r2,-60(fp)
8016730: d8800215 stw r2,8(sp)
8016734: e0800517 ldw r2,20(fp)
8016738: d8800115 stw r2,4(sp)
801673c: e0800417 ldw r2,16(fp)
8016740: d8800015 stw r2,0(sp)
8016744: 200f883a mov r7,r4
8016748: e1800317 ldw r6,12(fp)
801674c: e17ffe17 ldw r5,-8(fp)
8016750: 1809883a mov r4,r3
8016754: 80118c40 call 80118c4 <OS_TCBInit>
8016758: e0bffdc5 stb r2,-9(fp)
if (err == OS_ERR_NONE) {
801675c: e0bffdc3 ldbu r2,-9(fp)
8016760: 1000061e bne r2,zero,801677c <OSTaskCreateExt+0x130>
if (OSRunning == OS_TRUE) { /* Find HPT if multitasking has started */
8016764: d0a04b43 ldbu r2,-32467(gp)
8016768: 10803fcc andi r2,r2,255
801676c: 10800058 cmpnei r2,r2,1
8016770: 1000131e bne r2,zero,80167c0 <OSTaskCreateExt+0x174>
OS_Sched();
8016774: 801166c0 call 801166c <OS_Sched>
8016778: 00001106 br 80167c0 <OSTaskCreateExt+0x174>
NIOS2_READ_STATUS (context);
801677c: 0005303a rdctl r2,status
8016780: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8016784: e0fff817 ldw r3,-32(fp)
8016788: 00bfff84 movi r2,-2
801678c: 1884703a and r2,r3,r2
8016790: 1001703a wrctl status,r2
return context;
8016794: e0bff817 ldw r2,-32(fp)
}
} else {
OS_ENTER_CRITICAL();
8016798: e0bfff15 stw r2,-4(fp)
OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Make this priority avail. to others */
801679c: e0bff303 ldbu r2,-52(fp)
80167a0: 100690ba slli r3,r2,2
80167a4: 008201b4 movhi r2,2054
80167a8: 1885883a add r2,r3,r2
80167ac: 10355d15 stw zero,-10892(r2)
80167b0: e0bfff17 ldw r2,-4(fp)
80167b4: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
80167b8: e0bff917 ldw r2,-28(fp)
80167bc: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
}
return (err);
80167c0: e0bffdc3 ldbu r2,-9(fp)
80167c4: 00000506 br 80167dc <OSTaskCreateExt+0x190>
80167c8: e0bfff17 ldw r2,-4(fp)
80167cc: e0bff715 stw r2,-36(fp)
80167d0: e0bff717 ldw r2,-36(fp)
80167d4: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
return (OS_ERR_PRIO_EXIST);
80167d8: 00800a04 movi r2,40
}
80167dc: e037883a mov sp,fp
80167e0: dfc00117 ldw ra,4(sp)
80167e4: df000017 ldw fp,0(sp)
80167e8: dec00204 addi sp,sp,8
80167ec: f800283a ret
080167f0 <OSTaskDel>:
*********************************************************************************************************
*/
#if OS_TASK_DEL_EN > 0
INT8U OSTaskDel (INT8U prio)
{
80167f0: defff404 addi sp,sp,-48
80167f4: dfc00b15 stw ra,44(sp)
80167f8: df000a15 stw fp,40(sp)
80167fc: df000a04 addi fp,sp,40
8016800: 2005883a mov r2,r4
8016804: e0bff605 stb r2,-40(fp)
#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
OS_FLAG_NODE *pnode;
#endif
OS_TCB *ptcb;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8016808: e03fff15 stw zero,-4(fp)
#endif
if (OSIntNesting > 0) { /* See if trying to delete from ISR */
801680c: d0a05703 ldbu r2,-32420(gp)
8016810: 10803fcc andi r2,r2,255
8016814: 10000226 beq r2,zero,8016820 <OSTaskDel+0x30>
return (OS_ERR_TASK_DEL_ISR);
8016818: 00801004 movi r2,64
801681c: 0000b406 br 8016af0 <OSTaskDel+0x300>
}
if (prio == OS_TASK_IDLE_PRIO) { /* Not allowed to delete idle task */
8016820: e0bff603 ldbu r2,-40(fp)
8016824: 10800518 cmpnei r2,r2,20
8016828: 1000021e bne r2,zero,8016834 <OSTaskDel+0x44>
return (OS_ERR_TASK_DEL_IDLE);
801682c: 00800f84 movi r2,62
8016830: 0000af06 br 8016af0 <OSTaskDel+0x300>
NIOS2_READ_STATUS (context);
8016834: 0005303a rdctl r2,status
8016838: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801683c: e0fffc17 ldw r3,-16(fp)
8016840: 00bfff84 movi r2,-2
8016844: 1884703a and r2,r3,r2
8016848: 1001703a wrctl status,r2
return context;
801684c: e0bffc17 ldw r2,-16(fp)
}
}
#endif
/*$PAGE*/
OS_ENTER_CRITICAL();
8016850: e0bfff15 stw r2,-4(fp)
if (prio == OS_PRIO_SELF) { /* See if requesting to delete self */
8016854: e0bff603 ldbu r2,-40(fp)
8016858: 10803fd8 cmpnei r2,r2,255
801685c: 1000031e bne r2,zero,801686c <OSTaskDel+0x7c>
prio = OSTCBCur->OSTCBPrio; /* Set priority to delete to current */
8016860: d0a05817 ldw r2,-32416(gp)
8016864: 10800c83 ldbu r2,50(r2)
8016868: e0bff605 stb r2,-40(fp)
}
ptcb = OSTCBPrioTbl[prio];
801686c: e0bff603 ldbu r2,-40(fp)
8016870: 100690ba slli r3,r2,2
8016874: 008201b4 movhi r2,2054
8016878: 1885883a add r2,r3,r2
801687c: 10b55d17 ldw r2,-10892(r2)
8016880: e0bffe15 stw r2,-8(fp)
if (ptcb == (OS_TCB *)0) { /* Task to delete must exist */
8016884: e0bffe17 ldw r2,-8(fp)
8016888: 1000061e bne r2,zero,80168a4 <OSTaskDel+0xb4>
801688c: e0bfff17 ldw r2,-4(fp)
8016890: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8016894: e0bffb17 ldw r2,-20(fp)
8016898: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NOT_EXIST);
801689c: 008010c4 movi r2,67
80168a0: 00009306 br 8016af0 <OSTaskDel+0x300>
}
if (ptcb == OS_TCB_RESERVED) { /* Must not be assigned to Mutex */
80168a4: e0bffe17 ldw r2,-8(fp)
80168a8: 10800058 cmpnei r2,r2,1
80168ac: 1000061e bne r2,zero,80168c8 <OSTaskDel+0xd8>
80168b0: e0bfff17 ldw r2,-4(fp)
80168b4: e0bffa15 stw r2,-24(fp)
80168b8: e0bffa17 ldw r2,-24(fp)
80168bc: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_DEL);
80168c0: 00800f44 movi r2,61
80168c4: 00008a06 br 8016af0 <OSTaskDel+0x300>
}
OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX;
80168c8: e0bffe17 ldw r2,-8(fp)
80168cc: 10800d03 ldbu r2,52(r2)
80168d0: 10c03fcc andi r3,r2,255
80168d4: d0a05544 addi r2,gp,-32427
80168d8: 1885883a add r2,r3,r2
80168dc: 10800003 ldbu r2,0(r2)
80168e0: 1007883a mov r3,r2
80168e4: e0bffe17 ldw r2,-8(fp)
80168e8: 10800d43 ldbu r2,53(r2)
80168ec: 0084303a nor r2,zero,r2
80168f0: 1884703a and r2,r3,r2
80168f4: 1009883a mov r4,r2
80168f8: e0bffe17 ldw r2,-8(fp)
80168fc: 10800d03 ldbu r2,52(r2)
8016900: 10c03fcc andi r3,r2,255
8016904: d0a05544 addi r2,gp,-32427
8016908: 1885883a add r2,r3,r2
801690c: 11000005 stb r4,0(r2)
if (OSRdyTbl[ptcb->OSTCBY] == 0) { /* Make task not ready */
8016910: e0bffe17 ldw r2,-8(fp)
8016914: 10800d03 ldbu r2,52(r2)
8016918: 10c03fcc andi r3,r2,255
801691c: d0a05544 addi r2,gp,-32427
8016920: 1885883a add r2,r3,r2
8016924: 10800003 ldbu r2,0(r2)
8016928: 10803fcc andi r2,r2,255
801692c: 1000071e bne r2,zero,801694c <OSTaskDel+0x15c>
OSRdyGrp &= ~ptcb->OSTCBBitY;
8016930: e0bffe17 ldw r2,-8(fp)
8016934: 10800d83 ldbu r2,54(r2)
8016938: 0084303a nor r2,zero,r2
801693c: 1007883a mov r3,r2
8016940: d0a05503 ldbu r2,-32428(gp)
8016944: 1884703a and r2,r3,r2
8016948: d0a05505 stb r2,-32428(gp)
}
#if (OS_EVENT_EN)
if (ptcb->OSTCBEventPtr != (OS_EVENT *)0) {
801694c: e0bffe17 ldw r2,-8(fp)
8016950: 10800717 ldw r2,28(r2)
8016954: 10000526 beq r2,zero,801696c <OSTaskDel+0x17c>
OS_EventTaskRemove(ptcb, ptcb->OSTCBEventPtr); /* Remove this task from any event wait list */
8016958: e0bffe17 ldw r2,-8(fp)
801695c: 10800717 ldw r2,28(r2)
8016960: 100b883a mov r5,r2
8016964: e13ffe17 ldw r4,-8(fp)
8016968: 80110b00 call 80110b0 <OS_EventTaskRemove>
}
#if (OS_EVENT_MULTI_EN > 0)
if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) { /* Remove this task from any events' wait lists*/
801696c: e0bffe17 ldw r2,-8(fp)
8016970: 10800817 ldw r2,32(r2)
8016974: 10000526 beq r2,zero,801698c <OSTaskDel+0x19c>
OS_EventTaskRemoveMulti(ptcb, ptcb->OSTCBEventMultiPtr);
8016978: e0bffe17 ldw r2,-8(fp)
801697c: 10800817 ldw r2,32(r2)
8016980: 100b883a mov r5,r2
8016984: e13ffe17 ldw r4,-8(fp)
8016988: 80111600 call 8011160 <OS_EventTaskRemoveMulti>
}
#endif
#endif
#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
pnode = ptcb->OSTCBFlagNode;
801698c: e0bffe17 ldw r2,-8(fp)
8016990: 10800a17 ldw r2,40(r2)
8016994: e0bffd15 stw r2,-12(fp)
if (pnode != (OS_FLAG_NODE *)0) { /* If task is waiting on event flag */
8016998: e0bffd17 ldw r2,-12(fp)
801699c: 10000226 beq r2,zero,80169a8 <OSTaskDel+0x1b8>
OS_FlagUnlink(pnode); /* Remove from wait list */
80169a0: e13ffd17 ldw r4,-12(fp)
80169a4: 80130ac0 call 80130ac <OS_FlagUnlink>
}
#endif
ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from updating */
80169a8: e0bffe17 ldw r2,-8(fp)
80169ac: 10000b8d sth zero,46(r2)
ptcb->OSTCBStat = OS_STAT_RDY; /* Prevent task from being resumed */
80169b0: e0bffe17 ldw r2,-8(fp)
80169b4: 10000c05 stb zero,48(r2)
ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
80169b8: e0bffe17 ldw r2,-8(fp)
80169bc: 10000c45 stb zero,49(r2)
if (OSLockNesting < 255u) { /* Make sure we don't context switch */
80169c0: d0a04b03 ldbu r2,-32468(gp)
80169c4: 10803fcc andi r2,r2,255
80169c8: 10803fe0 cmpeqi r2,r2,255
80169cc: 1000031e bne r2,zero,80169dc <OSTaskDel+0x1ec>
OSLockNesting++;
80169d0: d0a04b03 ldbu r2,-32468(gp)
80169d4: 10800044 addi r2,r2,1
80169d8: d0a04b05 stb r2,-32468(gp)
80169dc: e0bfff17 ldw r2,-4(fp)
80169e0: e0bff815 stw r2,-32(fp)
80169e4: e0bff817 ldw r2,-32(fp)
80169e8: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL(); /* Enabling INT. ignores next instruc. */
OS_Dummy(); /* ... Dummy ensures that INTs will be */
80169ec: 8010cb80 call 8010cb8 <OS_Dummy>
NIOS2_READ_STATUS (context);
80169f0: 0005303a rdctl r2,status
80169f4: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80169f8: e0fff917 ldw r3,-28(fp)
80169fc: 00bfff84 movi r2,-2
8016a00: 1884703a and r2,r3,r2
8016a04: 1001703a wrctl status,r2
return context;
8016a08: e0bff917 ldw r2,-28(fp)
OS_ENTER_CRITICAL(); /* ... disabled HERE! */
8016a0c: e0bfff15 stw r2,-4(fp)
if (OSLockNesting > 0) { /* Remove context switch lock */
8016a10: d0a04b03 ldbu r2,-32468(gp)
8016a14: 10803fcc andi r2,r2,255
8016a18: 10000326 beq r2,zero,8016a28 <OSTaskDel+0x238>
OSLockNesting--;
8016a1c: d0a04b03 ldbu r2,-32468(gp)
8016a20: 10bfffc4 addi r2,r2,-1
8016a24: d0a04b05 stb r2,-32468(gp)
}
OSTaskDelHook(ptcb); /* Call user defined hook */
8016a28: e13ffe17 ldw r4,-8(fp)
8016a2c: 80385c80 call 80385c8 <OSTaskDelHook>
OSTaskCtr--; /* One less task being managed */
8016a30: d0a05103 ldbu r2,-32444(gp)
8016a34: 10bfffc4 addi r2,r2,-1
8016a38: d0a05105 stb r2,-32444(gp)
OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Clear old priority entry */
8016a3c: e0bff603 ldbu r2,-40(fp)
8016a40: 100690ba slli r3,r2,2
8016a44: 008201b4 movhi r2,2054
8016a48: 1885883a add r2,r3,r2
8016a4c: 10355d15 stw zero,-10892(r2)
if (ptcb->OSTCBPrev == (OS_TCB *)0) { /* Remove from TCB chain */
8016a50: e0bffe17 ldw r2,-8(fp)
8016a54: 10800617 ldw r2,24(r2)
8016a58: 1000071e bne r2,zero,8016a78 <OSTaskDel+0x288>
ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
8016a5c: e0bffe17 ldw r2,-8(fp)
8016a60: 10800517 ldw r2,20(r2)
8016a64: 10000615 stw zero,24(r2)
OSTCBList = ptcb->OSTCBNext;
8016a68: e0bffe17 ldw r2,-8(fp)
8016a6c: 10800517 ldw r2,20(r2)
8016a70: d0a04e15 stw r2,-32456(gp)
8016a74: 00000a06 br 8016aa0 <OSTaskDel+0x2b0>
} else {
ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
8016a78: e0bffe17 ldw r2,-8(fp)
8016a7c: 10800617 ldw r2,24(r2)
8016a80: e0fffe17 ldw r3,-8(fp)
8016a84: 18c00517 ldw r3,20(r3)
8016a88: 10c00515 stw r3,20(r2)
ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
8016a8c: e0bffe17 ldw r2,-8(fp)
8016a90: 10800517 ldw r2,20(r2)
8016a94: e0fffe17 ldw r3,-8(fp)
8016a98: 18c00617 ldw r3,24(r3)
8016a9c: 10c00615 stw r3,24(r2)
}
ptcb->OSTCBNext = OSTCBFreeList; /* Return TCB to free TCB list */
8016aa0: d0e05017 ldw r3,-32448(gp)
8016aa4: e0bffe17 ldw r2,-8(fp)
8016aa8: 10c00515 stw r3,20(r2)
OSTCBFreeList = ptcb;
8016aac: e0bffe17 ldw r2,-8(fp)
8016ab0: d0a05015 stw r2,-32448(gp)
#if OS_TASK_NAME_SIZE > 1
ptcb->OSTCBTaskName[0] = '?'; /* Unknown name */
8016ab4: e0bffe17 ldw r2,-8(fp)
8016ab8: 00c00fc4 movi r3,63
8016abc: 10c01305 stb r3,76(r2)
ptcb->OSTCBTaskName[1] = OS_ASCII_NUL;
8016ac0: e0bffe17 ldw r2,-8(fp)
8016ac4: 10001345 stb zero,77(r2)
8016ac8: e0bfff17 ldw r2,-4(fp)
8016acc: e0bff715 stw r2,-36(fp)
NIOS2_WRITE_STATUS (context);
8016ad0: e0bff717 ldw r2,-36(fp)
8016ad4: 1001703a wrctl status,r2
#endif
OS_EXIT_CRITICAL();
if (OSRunning == OS_TRUE) {
8016ad8: d0a04b43 ldbu r2,-32467(gp)
8016adc: 10803fcc andi r2,r2,255
8016ae0: 10800058 cmpnei r2,r2,1
8016ae4: 1000011e bne r2,zero,8016aec <OSTaskDel+0x2fc>
OS_Sched(); /* Find new highest priority task */
8016ae8: 801166c0 call 801166c <OS_Sched>
}
return (OS_ERR_NONE);
8016aec: 0005883a mov r2,zero
}
8016af0: e037883a mov sp,fp
8016af4: dfc00117 ldw ra,4(sp)
8016af8: df000017 ldw fp,0(sp)
8016afc: dec00204 addi sp,sp,8
8016b00: f800283a ret
08016b04 <OSTaskDelReq>:
*********************************************************************************************************
*/
/*$PAGE*/
#if OS_TASK_DEL_EN > 0
INT8U OSTaskDelReq (INT8U prio)
{
8016b04: defff504 addi sp,sp,-44
8016b08: df000a15 stw fp,40(sp)
8016b0c: df000a04 addi fp,sp,40
8016b10: 2005883a mov r2,r4
8016b14: e0bff605 stb r2,-40(fp)
INT8U stat;
OS_TCB *ptcb;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8016b18: e03fff15 stw zero,-4(fp)
#endif
if (prio == OS_TASK_IDLE_PRIO) { /* Not allowed to delete idle task */
8016b1c: e0bff603 ldbu r2,-40(fp)
8016b20: 10800518 cmpnei r2,r2,20
8016b24: 1000021e bne r2,zero,8016b30 <OSTaskDelReq+0x2c>
return (OS_ERR_TASK_DEL_IDLE);
8016b28: 00800f84 movi r2,62
8016b2c: 00003b06 br 8016c1c <OSTaskDelReq+0x118>
if (prio != OS_PRIO_SELF) {
return (OS_ERR_PRIO_INVALID);
}
}
#endif
if (prio == OS_PRIO_SELF) { /* See if a task is requesting to ... */
8016b30: e0bff603 ldbu r2,-40(fp)
8016b34: 10803fd8 cmpnei r2,r2,255
8016b38: 1000111e bne r2,zero,8016b80 <OSTaskDelReq+0x7c>
NIOS2_READ_STATUS (context);
8016b3c: 0005303a rdctl r2,status
8016b40: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8016b44: e0fffb17 ldw r3,-20(fp)
8016b48: 00bfff84 movi r2,-2
8016b4c: 1884703a and r2,r3,r2
8016b50: 1001703a wrctl status,r2
return context;
8016b54: e0bffb17 ldw r2,-20(fp)
OS_ENTER_CRITICAL(); /* ... this task to delete itself */
8016b58: e0bfff15 stw r2,-4(fp)
stat = OSTCBCur->OSTCBDelReq; /* Return request status to caller */
8016b5c: d0a05817 ldw r2,-32416(gp)
8016b60: 10800dc3 ldbu r2,55(r2)
8016b64: e0bffec5 stb r2,-5(fp)
8016b68: e0bfff17 ldw r2,-4(fp)
8016b6c: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8016b70: e0bffc17 ldw r2,-16(fp)
8016b74: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (stat);
8016b78: e0bffec3 ldbu r2,-5(fp)
8016b7c: 00002706 br 8016c1c <OSTaskDelReq+0x118>
NIOS2_READ_STATUS (context);
8016b80: 0005303a rdctl r2,status
8016b84: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8016b88: e0fffa17 ldw r3,-24(fp)
8016b8c: 00bfff84 movi r2,-2
8016b90: 1884703a and r2,r3,r2
8016b94: 1001703a wrctl status,r2
return context;
8016b98: e0bffa17 ldw r2,-24(fp)
}
OS_ENTER_CRITICAL();
8016b9c: e0bfff15 stw r2,-4(fp)
ptcb = OSTCBPrioTbl[prio];
8016ba0: e0bff603 ldbu r2,-40(fp)
8016ba4: 100690ba slli r3,r2,2
8016ba8: 008201b4 movhi r2,2054
8016bac: 1885883a add r2,r3,r2
8016bb0: 10b55d17 ldw r2,-10892(r2)
8016bb4: e0bffd15 stw r2,-12(fp)
if (ptcb == (OS_TCB *)0) { /* Task to delete must exist */
8016bb8: e0bffd17 ldw r2,-12(fp)
8016bbc: 1000061e bne r2,zero,8016bd8 <OSTaskDelReq+0xd4>
8016bc0: e0bfff17 ldw r2,-4(fp)
8016bc4: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
8016bc8: e0bff917 ldw r2,-28(fp)
8016bcc: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NOT_EXIST); /* Task must already be deleted */
8016bd0: 008010c4 movi r2,67
8016bd4: 00001106 br 8016c1c <OSTaskDelReq+0x118>
}
if (ptcb == OS_TCB_RESERVED) { /* Must NOT be assigned to a Mutex */
8016bd8: e0bffd17 ldw r2,-12(fp)
8016bdc: 10800058 cmpnei r2,r2,1
8016be0: 1000061e bne r2,zero,8016bfc <OSTaskDelReq+0xf8>
8016be4: e0bfff17 ldw r2,-4(fp)
8016be8: e0bff815 stw r2,-32(fp)
8016bec: e0bff817 ldw r2,-32(fp)
8016bf0: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_DEL);
8016bf4: 00800f44 movi r2,61
8016bf8: 00000806 br 8016c1c <OSTaskDelReq+0x118>
}
ptcb->OSTCBDelReq = OS_ERR_TASK_DEL_REQ; /* Set flag indicating task to be DEL. */
8016bfc: e0bffd17 ldw r2,-12(fp)
8016c00: 00c00fc4 movi r3,63
8016c04: 10c00dc5 stb r3,55(r2)
8016c08: e0bfff17 ldw r2,-4(fp)
8016c0c: e0bff715 stw r2,-36(fp)
8016c10: e0bff717 ldw r2,-36(fp)
8016c14: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
8016c18: 0005883a mov r2,zero
}
8016c1c: e037883a mov sp,fp
8016c20: df000017 ldw fp,0(sp)
8016c24: dec00104 addi sp,sp,4
8016c28: f800283a ret
08016c2c <OSTaskNameGet>:
*********************************************************************************************************
*/
#if OS_TASK_NAME_SIZE > 1
INT8U OSTaskNameGet (INT8U prio, INT8U *pname, INT8U *perr)
{
8016c2c: defff404 addi sp,sp,-48
8016c30: dfc00b15 stw ra,44(sp)
8016c34: df000a15 stw fp,40(sp)
8016c38: df000a04 addi fp,sp,40
8016c3c: 2005883a mov r2,r4
8016c40: e17ff715 stw r5,-36(fp)
8016c44: e1bff615 stw r6,-40(fp)
8016c48: e0bff805 stb r2,-32(fp)
OS_TCB *ptcb;
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8016c4c: e03fff15 stw zero,-4(fp)
if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
*perr = OS_ERR_PNAME_NULL; /* Yes */
return (0);
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
8016c50: d0a05703 ldbu r2,-32420(gp)
8016c54: 10803fcc andi r2,r2,255
8016c58: 10000526 beq r2,zero,8016c70 <OSTaskNameGet+0x44>
*perr = OS_ERR_NAME_GET_ISR;
8016c5c: e0bff617 ldw r2,-40(fp)
8016c60: 00c00444 movi r3,17
8016c64: 10c00005 stb r3,0(r2)
return (0);
8016c68: 0005883a mov r2,zero
8016c6c: 00003806 br 8016d50 <OSTaskNameGet+0x124>
NIOS2_READ_STATUS (context);
8016c70: 0005303a rdctl r2,status
8016c74: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8016c78: e0fffc17 ldw r3,-16(fp)
8016c7c: 00bfff84 movi r2,-2
8016c80: 1884703a and r2,r3,r2
8016c84: 1001703a wrctl status,r2
return context;
8016c88: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
8016c8c: e0bfff15 stw r2,-4(fp)
if (prio == OS_PRIO_SELF) { /* See if caller desires it's own name */
8016c90: e0bff803 ldbu r2,-32(fp)
8016c94: 10803fd8 cmpnei r2,r2,255
8016c98: 1000031e bne r2,zero,8016ca8 <OSTaskNameGet+0x7c>
prio = OSTCBCur->OSTCBPrio;
8016c9c: d0a05817 ldw r2,-32416(gp)
8016ca0: 10800c83 ldbu r2,50(r2)
8016ca4: e0bff805 stb r2,-32(fp)
}
ptcb = OSTCBPrioTbl[prio];
8016ca8: e0bff803 ldbu r2,-32(fp)
8016cac: 100690ba slli r3,r2,2
8016cb0: 008201b4 movhi r2,2054
8016cb4: 1885883a add r2,r3,r2
8016cb8: 10b55d17 ldw r2,-10892(r2)
8016cbc: e0bffe15 stw r2,-8(fp)
if (ptcb == (OS_TCB *)0) { /* Does task exist? */
8016cc0: e0bffe17 ldw r2,-8(fp)
8016cc4: 1000091e bne r2,zero,8016cec <OSTaskNameGet+0xc0>
8016cc8: e0bfff17 ldw r2,-4(fp)
8016ccc: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8016cd0: e0bffb17 ldw r2,-20(fp)
8016cd4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* No */
*perr = OS_ERR_TASK_NOT_EXIST;
8016cd8: e0bff617 ldw r2,-40(fp)
8016cdc: 00c010c4 movi r3,67
8016ce0: 10c00005 stb r3,0(r2)
return (0);
8016ce4: 0005883a mov r2,zero
8016ce8: 00001906 br 8016d50 <OSTaskNameGet+0x124>
}
if (ptcb == OS_TCB_RESERVED) { /* Task assigned to a Mutex? */
8016cec: e0bffe17 ldw r2,-8(fp)
8016cf0: 10800058 cmpnei r2,r2,1
8016cf4: 1000091e bne r2,zero,8016d1c <OSTaskNameGet+0xf0>
8016cf8: e0bfff17 ldw r2,-4(fp)
8016cfc: e0bffa15 stw r2,-24(fp)
8016d00: e0bffa17 ldw r2,-24(fp)
8016d04: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* Yes */
*perr = OS_ERR_TASK_NOT_EXIST;
8016d08: e0bff617 ldw r2,-40(fp)
8016d0c: 00c010c4 movi r3,67
8016d10: 10c00005 stb r3,0(r2)
return (0);
8016d14: 0005883a mov r2,zero
8016d18: 00000d06 br 8016d50 <OSTaskNameGet+0x124>
}
len = OS_StrCopy(pname, ptcb->OSTCBTaskName); /* Yes, copy name from TCB */
8016d1c: e0bffe17 ldw r2,-8(fp)
8016d20: 10801304 addi r2,r2,76
8016d24: 100b883a mov r5,r2
8016d28: e13ff717 ldw r4,-36(fp)
8016d2c: 80117a00 call 80117a0 <OS_StrCopy>
8016d30: e0bffdc5 stb r2,-9(fp)
8016d34: e0bfff17 ldw r2,-4(fp)
8016d38: e0bff915 stw r2,-28(fp)
8016d3c: e0bff917 ldw r2,-28(fp)
8016d40: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8016d44: e0bff617 ldw r2,-40(fp)
8016d48: 10000005 stb zero,0(r2)
return (len);
8016d4c: e0bffdc3 ldbu r2,-9(fp)
}
8016d50: e037883a mov sp,fp
8016d54: dfc00117 ldw ra,4(sp)
8016d58: df000017 ldw fp,0(sp)
8016d5c: dec00204 addi sp,sp,8
8016d60: f800283a ret
08016d64 <OSTaskNameSet>:
* Returns : None
*********************************************************************************************************
*/
#if OS_TASK_NAME_SIZE > 1
void OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *perr)
{
8016d64: defff304 addi sp,sp,-52
8016d68: dfc00c15 stw ra,48(sp)
8016d6c: df000b15 stw fp,44(sp)
8016d70: df000b04 addi fp,sp,44
8016d74: 2005883a mov r2,r4
8016d78: e17ff615 stw r5,-40(fp)
8016d7c: e1bff515 stw r6,-44(fp)
8016d80: e0bff705 stb r2,-36(fp)
INT8U len;
OS_TCB *ptcb;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8016d84: e03fff15 stw zero,-4(fp)
if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
*perr = OS_ERR_PNAME_NULL; /* Yes */
return;
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
8016d88: d0a05703 ldbu r2,-32420(gp)
8016d8c: 10803fcc andi r2,r2,255
8016d90: 10000426 beq r2,zero,8016da4 <OSTaskNameSet+0x40>
*perr = OS_ERR_NAME_SET_ISR;
8016d94: e0bff517 ldw r2,-44(fp)
8016d98: 00c00484 movi r3,18
8016d9c: 10c00005 stb r3,0(r2)
return;
8016da0: 00004206 br 8016eac <OSTaskNameSet+0x148>
NIOS2_READ_STATUS (context);
8016da4: 0005303a rdctl r2,status
8016da8: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8016dac: e0fffc17 ldw r3,-16(fp)
8016db0: 00bfff84 movi r2,-2
8016db4: 1884703a and r2,r3,r2
8016db8: 1001703a wrctl status,r2
return context;
8016dbc: e0bffc17 ldw r2,-16(fp)
}
OS_ENTER_CRITICAL();
8016dc0: e0bfff15 stw r2,-4(fp)
if (prio == OS_PRIO_SELF) { /* See if caller desires to set it's own name */
8016dc4: e0bff703 ldbu r2,-36(fp)
8016dc8: 10803fd8 cmpnei r2,r2,255
8016dcc: 1000031e bne r2,zero,8016ddc <OSTaskNameSet+0x78>
prio = OSTCBCur->OSTCBPrio;
8016dd0: d0a05817 ldw r2,-32416(gp)
8016dd4: 10800c83 ldbu r2,50(r2)
8016dd8: e0bff705 stb r2,-36(fp)
}
ptcb = OSTCBPrioTbl[prio];
8016ddc: e0bff703 ldbu r2,-36(fp)
8016de0: 100690ba slli r3,r2,2
8016de4: 008201b4 movhi r2,2054
8016de8: 1885883a add r2,r3,r2
8016dec: 10b55d17 ldw r2,-10892(r2)
8016df0: e0bffe15 stw r2,-8(fp)
if (ptcb == (OS_TCB *)0) { /* Does task exist? */
8016df4: e0bffe17 ldw r2,-8(fp)
8016df8: 1000081e bne r2,zero,8016e1c <OSTaskNameSet+0xb8>
8016dfc: e0bfff17 ldw r2,-4(fp)
8016e00: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8016e04: e0bffb17 ldw r2,-20(fp)
8016e08: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* No */
*perr = OS_ERR_TASK_NOT_EXIST;
8016e0c: e0bff517 ldw r2,-44(fp)
8016e10: 00c010c4 movi r3,67
8016e14: 10c00005 stb r3,0(r2)
return;
8016e18: 00002406 br 8016eac <OSTaskNameSet+0x148>
}
if (ptcb == OS_TCB_RESERVED) { /* Task assigned to a Mutex? */
8016e1c: e0bffe17 ldw r2,-8(fp)
8016e20: 10800058 cmpnei r2,r2,1
8016e24: 1000081e bne r2,zero,8016e48 <OSTaskNameSet+0xe4>
8016e28: e0bfff17 ldw r2,-4(fp)
8016e2c: e0bffa15 stw r2,-24(fp)
8016e30: e0bffa17 ldw r2,-24(fp)
8016e34: 1001703a wrctl status,r2
OS_EXIT_CRITICAL(); /* Yes */
*perr = OS_ERR_TASK_NOT_EXIST;
8016e38: e0bff517 ldw r2,-44(fp)
8016e3c: 00c010c4 movi r3,67
8016e40: 10c00005 stb r3,0(r2)
return;
8016e44: 00001906 br 8016eac <OSTaskNameSet+0x148>
}
len = OS_StrLen(pname); /* Yes, Can we fit the string in the TCB? */
8016e48: e13ff617 ldw r4,-40(fp)
8016e4c: 80118140 call 8011814 <OS_StrLen>
8016e50: e0bffdc5 stb r2,-9(fp)
if (len > (OS_TASK_NAME_SIZE - 1)) { /* No */
8016e54: e0bffdc3 ldbu r2,-9(fp)
8016e58: 10800830 cmpltui r2,r2,32
8016e5c: 1000081e bne r2,zero,8016e80 <OSTaskNameSet+0x11c>
8016e60: e0bfff17 ldw r2,-4(fp)
8016e64: e0bff915 stw r2,-28(fp)
8016e68: e0bff917 ldw r2,-28(fp)
8016e6c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_TASK_NAME_TOO_LONG;
8016e70: e0bff517 ldw r2,-44(fp)
8016e74: 00c01044 movi r3,65
8016e78: 10c00005 stb r3,0(r2)
return;
8016e7c: 00000b06 br 8016eac <OSTaskNameSet+0x148>
}
(void)OS_StrCopy(ptcb->OSTCBTaskName, pname); /* Yes, copy to TCB */
8016e80: e0bffe17 ldw r2,-8(fp)
8016e84: 10801304 addi r2,r2,76
8016e88: e17ff617 ldw r5,-40(fp)
8016e8c: 1009883a mov r4,r2
8016e90: 80117a00 call 80117a0 <OS_StrCopy>
8016e94: e0bfff17 ldw r2,-4(fp)
8016e98: e0bff815 stw r2,-32(fp)
8016e9c: e0bff817 ldw r2,-32(fp)
8016ea0: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
8016ea4: e0bff517 ldw r2,-44(fp)
8016ea8: 10000005 stb zero,0(r2)
}
8016eac: e037883a mov sp,fp
8016eb0: dfc00117 ldw ra,4(sp)
8016eb4: df000017 ldw fp,0(sp)
8016eb8: dec00204 addi sp,sp,8
8016ebc: f800283a ret
08016ec0 <OSTaskResume>:
*********************************************************************************************************
*/
#if OS_TASK_SUSPEND_EN > 0
INT8U OSTaskResume (INT8U prio)
{
8016ec0: defff404 addi sp,sp,-48
8016ec4: dfc00b15 stw ra,44(sp)
8016ec8: df000a15 stw fp,40(sp)
8016ecc: df000a04 addi fp,sp,40
8016ed0: 2005883a mov r2,r4
8016ed4: e0bff605 stb r2,-40(fp)
OS_TCB *ptcb;
#if OS_CRITICAL_METHOD == 3 /* Storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8016ed8: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
8016edc: 0005303a rdctl r2,status
8016ee0: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8016ee4: e0fffd17 ldw r3,-12(fp)
8016ee8: 00bfff84 movi r2,-2
8016eec: 1884703a and r2,r3,r2
8016ef0: 1001703a wrctl status,r2
return context;
8016ef4: e0bffd17 ldw r2,-12(fp)
#if OS_ARG_CHK_EN > 0
if (prio >= OS_LOWEST_PRIO) { /* Make sure task priority is valid */
return (OS_ERR_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
8016ef8: e0bfff15 stw r2,-4(fp)
ptcb = OSTCBPrioTbl[prio];
8016efc: e0bff603 ldbu r2,-40(fp)
8016f00: 100690ba slli r3,r2,2
8016f04: 008201b4 movhi r2,2054
8016f08: 1885883a add r2,r3,r2
8016f0c: 10b55d17 ldw r2,-10892(r2)
8016f10: e0bffe15 stw r2,-8(fp)
if (ptcb == (OS_TCB *)0) { /* Task to suspend must exist */
8016f14: e0bffe17 ldw r2,-8(fp)
8016f18: 1000061e bne r2,zero,8016f34 <OSTaskResume+0x74>
8016f1c: e0bfff17 ldw r2,-4(fp)
8016f20: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8016f24: e0bffc17 ldw r2,-16(fp)
8016f28: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_RESUME_PRIO);
8016f2c: 00801184 movi r2,70
8016f30: 00004c06 br 8017064 <OSTaskResume+0x1a4>
}
if (ptcb == OS_TCB_RESERVED) { /* See if assigned to Mutex */
8016f34: e0bffe17 ldw r2,-8(fp)
8016f38: 10800058 cmpnei r2,r2,1
8016f3c: 1000061e bne r2,zero,8016f58 <OSTaskResume+0x98>
8016f40: e0bfff17 ldw r2,-4(fp)
8016f44: e0bffb15 stw r2,-20(fp)
8016f48: e0bffb17 ldw r2,-20(fp)
8016f4c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NOT_EXIST);
8016f50: 008010c4 movi r2,67
8016f54: 00004306 br 8017064 <OSTaskResume+0x1a4>
}
if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended */
8016f58: e0bffe17 ldw r2,-8(fp)
8016f5c: 10800c03 ldbu r2,48(r2)
8016f60: 10803fcc andi r2,r2,255
8016f64: 1080020c andi r2,r2,8
8016f68: 10003926 beq r2,zero,8017050 <OSTaskResume+0x190>
ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND; /* Remove suspension */
8016f6c: e0bffe17 ldw r2,-8(fp)
8016f70: 10c00c03 ldbu r3,48(r2)
8016f74: 00bffdc4 movi r2,-9
8016f78: 1884703a and r2,r3,r2
8016f7c: 1007883a mov r3,r2
8016f80: e0bffe17 ldw r2,-8(fp)
8016f84: 10c00c05 stb r3,48(r2)
if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is now ready */
8016f88: e0bffe17 ldw r2,-8(fp)
8016f8c: 10800c03 ldbu r2,48(r2)
8016f90: 10803fcc andi r2,r2,255
8016f94: 1000281e bne r2,zero,8017038 <OSTaskResume+0x178>
if (ptcb->OSTCBDly == 0) {
8016f98: e0bffe17 ldw r2,-8(fp)
8016f9c: 10800b8b ldhu r2,46(r2)
8016fa0: 10bfffcc andi r2,r2,65535
8016fa4: 10001f1e bne r2,zero,8017024 <OSTaskResume+0x164>
OSRdyGrp |= ptcb->OSTCBBitY; /* Yes, Make task ready to run */
8016fa8: e0bffe17 ldw r2,-8(fp)
8016fac: 10c00d83 ldbu r3,54(r2)
8016fb0: d0a05503 ldbu r2,-32428(gp)
8016fb4: 1884b03a or r2,r3,r2
8016fb8: d0a05505 stb r2,-32428(gp)
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
8016fbc: e0bffe17 ldw r2,-8(fp)
8016fc0: 10800d03 ldbu r2,52(r2)
8016fc4: 10c03fcc andi r3,r2,255
8016fc8: d0a05544 addi r2,gp,-32427
8016fcc: 1885883a add r2,r3,r2
8016fd0: 11000003 ldbu r4,0(r2)
8016fd4: e0bffe17 ldw r2,-8(fp)
8016fd8: 10800d43 ldbu r2,53(r2)
8016fdc: e0fffe17 ldw r3,-8(fp)
8016fe0: 18c00d03 ldbu r3,52(r3)
8016fe4: 18c03fcc andi r3,r3,255
8016fe8: 2084b03a or r2,r4,r2
8016fec: 1009883a mov r4,r2
8016ff0: d0a05544 addi r2,gp,-32427
8016ff4: 1885883a add r2,r3,r2
8016ff8: 11000005 stb r4,0(r2)
8016ffc: e0bfff17 ldw r2,-4(fp)
8017000: e0bffa15 stw r2,-24(fp)
8017004: e0bffa17 ldw r2,-24(fp)
8017008: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
if (OSRunning == OS_TRUE) {
801700c: d0a04b43 ldbu r2,-32467(gp)
8017010: 10803fcc andi r2,r2,255
8017014: 10800058 cmpnei r2,r2,1
8017018: 10000b1e bne r2,zero,8017048 <OSTaskResume+0x188>
OS_Sched(); /* Find new highest priority task */
801701c: 801166c0 call 801166c <OS_Sched>
8017020: 00000906 br 8017048 <OSTaskResume+0x188>
8017024: e0bfff17 ldw r2,-4(fp)
8017028: e0bff915 stw r2,-28(fp)
801702c: e0bff917 ldw r2,-28(fp)
8017030: 1001703a wrctl status,r2
8017034: 00000406 br 8017048 <OSTaskResume+0x188>
8017038: e0bfff17 ldw r2,-4(fp)
801703c: e0bff815 stw r2,-32(fp)
8017040: e0bff817 ldw r2,-32(fp)
8017044: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
}
} else { /* Must be pending on event */
OS_EXIT_CRITICAL();
}
return (OS_ERR_NONE);
8017048: 0005883a mov r2,zero
801704c: 00000506 br 8017064 <OSTaskResume+0x1a4>
8017050: e0bfff17 ldw r2,-4(fp)
8017054: e0bff715 stw r2,-36(fp)
8017058: e0bff717 ldw r2,-36(fp)
801705c: 1001703a wrctl status,r2
}
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NOT_SUSPENDED);
8017060: 00801104 movi r2,68
}
8017064: e037883a mov sp,fp
8017068: dfc00117 ldw ra,4(sp)
801706c: df000017 ldw fp,0(sp)
8017070: dec00204 addi sp,sp,8
8017074: f800283a ret
08017078 <OSTaskSuspend>:
*********************************************************************************************************
*/
#if OS_TASK_SUSPEND_EN > 0
INT8U OSTaskSuspend (INT8U prio)
{
8017078: defff504 addi sp,sp,-44
801707c: dfc00a15 stw ra,40(sp)
8017080: df000915 stw fp,36(sp)
8017084: df000904 addi fp,sp,36
8017088: 2005883a mov r2,r4
801708c: e0bff705 stb r2,-36(fp)
BOOLEAN self;
OS_TCB *ptcb;
INT8U y;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8017090: e03ffe15 stw zero,-8(fp)
NIOS2_READ_STATUS (context);
8017094: 0005303a rdctl r2,status
8017098: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801709c: e0fffb17 ldw r3,-20(fp)
80170a0: 00bfff84 movi r2,-2
80170a4: 1884703a and r2,r3,r2
80170a8: 1001703a wrctl status,r2
return context;
80170ac: e0bffb17 ldw r2,-20(fp)
if (prio != OS_PRIO_SELF) {
return (OS_ERR_PRIO_INVALID);
}
}
#endif
OS_ENTER_CRITICAL();
80170b0: e0bffe15 stw r2,-8(fp)
if (prio == OS_PRIO_SELF) { /* See if suspend SELF */
80170b4: e0bff703 ldbu r2,-36(fp)
80170b8: 10803fd8 cmpnei r2,r2,255
80170bc: 1000061e bne r2,zero,80170d8 <OSTaskSuspend+0x60>
prio = OSTCBCur->OSTCBPrio;
80170c0: d0a05817 ldw r2,-32416(gp)
80170c4: 10800c83 ldbu r2,50(r2)
80170c8: e0bff705 stb r2,-36(fp)
self = OS_TRUE;
80170cc: 00800044 movi r2,1
80170d0: e0bfffc5 stb r2,-1(fp)
80170d4: 00000906 br 80170fc <OSTaskSuspend+0x84>
} else if (prio == OSTCBCur->OSTCBPrio) { /* See if suspending self */
80170d8: d0a05817 ldw r2,-32416(gp)
80170dc: 10800c83 ldbu r2,50(r2)
80170e0: e0fff703 ldbu r3,-36(fp)
80170e4: 10803fcc andi r2,r2,255
80170e8: 1880031e bne r3,r2,80170f8 <OSTaskSuspend+0x80>
self = OS_TRUE;
80170ec: 00800044 movi r2,1
80170f0: e0bfffc5 stb r2,-1(fp)
80170f4: 00000106 br 80170fc <OSTaskSuspend+0x84>
} else {
self = OS_FALSE; /* No suspending another task */
80170f8: e03fffc5 stb zero,-1(fp)
}
ptcb = OSTCBPrioTbl[prio];
80170fc: e0bff703 ldbu r2,-36(fp)
8017100: 100690ba slli r3,r2,2
8017104: 008201b4 movhi r2,2054
8017108: 1885883a add r2,r3,r2
801710c: 10b55d17 ldw r2,-10892(r2)
8017110: e0bffd15 stw r2,-12(fp)
if (ptcb == (OS_TCB *)0) { /* Task to suspend must exist */
8017114: e0bffd17 ldw r2,-12(fp)
8017118: 1000061e bne r2,zero,8017134 <OSTaskSuspend+0xbc>
801711c: e0bffe17 ldw r2,-8(fp)
8017120: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
8017124: e0bffa17 ldw r2,-24(fp)
8017128: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_SUSPEND_PRIO);
801712c: 00801204 movi r2,72
8017130: 00003606 br 801720c <OSTaskSuspend+0x194>
}
if (ptcb == OS_TCB_RESERVED) { /* See if assigned to Mutex */
8017134: e0bffd17 ldw r2,-12(fp)
8017138: 10800058 cmpnei r2,r2,1
801713c: 1000061e bne r2,zero,8017158 <OSTaskSuspend+0xe0>
8017140: e0bffe17 ldw r2,-8(fp)
8017144: e0bff915 stw r2,-28(fp)
8017148: e0bff917 ldw r2,-28(fp)
801714c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NOT_EXIST);
8017150: 008010c4 movi r2,67
8017154: 00002d06 br 801720c <OSTaskSuspend+0x194>
}
y = ptcb->OSTCBY;
8017158: e0bffd17 ldw r2,-12(fp)
801715c: 10800d03 ldbu r2,52(r2)
8017160: e0bffcc5 stb r2,-13(fp)
OSRdyTbl[y] &= ~ptcb->OSTCBBitX; /* Make task not ready */
8017164: e0fffcc3 ldbu r3,-13(fp)
8017168: d0a05544 addi r2,gp,-32427
801716c: 1885883a add r2,r3,r2
8017170: 10800003 ldbu r2,0(r2)
8017174: 1007883a mov r3,r2
8017178: e0bffd17 ldw r2,-12(fp)
801717c: 10800d43 ldbu r2,53(r2)
8017180: 0084303a nor r2,zero,r2
8017184: 1884703a and r2,r3,r2
8017188: e0fffcc3 ldbu r3,-13(fp)
801718c: 1009883a mov r4,r2
8017190: d0a05544 addi r2,gp,-32427
8017194: 1885883a add r2,r3,r2
8017198: 11000005 stb r4,0(r2)
if (OSRdyTbl[y] == 0) {
801719c: e0fffcc3 ldbu r3,-13(fp)
80171a0: d0a05544 addi r2,gp,-32427
80171a4: 1885883a add r2,r3,r2
80171a8: 10800003 ldbu r2,0(r2)
80171ac: 10803fcc andi r2,r2,255
80171b0: 1000071e bne r2,zero,80171d0 <OSTaskSuspend+0x158>
OSRdyGrp &= ~ptcb->OSTCBBitY;
80171b4: e0bffd17 ldw r2,-12(fp)
80171b8: 10800d83 ldbu r2,54(r2)
80171bc: 0084303a nor r2,zero,r2
80171c0: 1007883a mov r3,r2
80171c4: d0a05503 ldbu r2,-32428(gp)
80171c8: 1884703a and r2,r3,r2
80171cc: d0a05505 stb r2,-32428(gp)
}
ptcb->OSTCBStat |= OS_STAT_SUSPEND; /* Status of task is 'SUSPENDED' */
80171d0: e0bffd17 ldw r2,-12(fp)
80171d4: 10800c03 ldbu r2,48(r2)
80171d8: 10800214 ori r2,r2,8
80171dc: 1007883a mov r3,r2
80171e0: e0bffd17 ldw r2,-12(fp)
80171e4: 10c00c05 stb r3,48(r2)
80171e8: e0bffe17 ldw r2,-8(fp)
80171ec: e0bff815 stw r2,-32(fp)
80171f0: e0bff817 ldw r2,-32(fp)
80171f4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
if (self == OS_TRUE) { /* Context switch only if SELF */
80171f8: e0bfffc3 ldbu r2,-1(fp)
80171fc: 10800058 cmpnei r2,r2,1
8017200: 1000011e bne r2,zero,8017208 <OSTaskSuspend+0x190>
OS_Sched(); /* Find new highest priority task */
8017204: 801166c0 call 801166c <OS_Sched>
}
return (OS_ERR_NONE);
8017208: 0005883a mov r2,zero
}
801720c: e037883a mov sp,fp
8017210: dfc00117 ldw ra,4(sp)
8017214: df000017 ldw fp,0(sp)
8017218: dec00204 addi sp,sp,8
801721c: f800283a ret
08017220 <OSTaskQuery>:
*********************************************************************************************************
*/
#if OS_TASK_QUERY_EN > 0
INT8U OSTaskQuery (INT8U prio, OS_TCB *p_task_data)
{
8017220: defff604 addi sp,sp,-40
8017224: dfc00915 stw ra,36(sp)
8017228: df000815 stw fp,32(sp)
801722c: df000804 addi fp,sp,32
8017230: 2005883a mov r2,r4
8017234: e17ff815 stw r5,-32(fp)
8017238: e0bff905 stb r2,-28(fp)
OS_TCB *ptcb;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
801723c: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
8017240: 0005303a rdctl r2,status
8017244: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8017248: e0fffd17 ldw r3,-12(fp)
801724c: 00bfff84 movi r2,-2
8017250: 1884703a and r2,r3,r2
8017254: 1001703a wrctl status,r2
return context;
8017258: e0bffd17 ldw r2,-12(fp)
}
if (p_task_data == (OS_TCB *)0) { /* Validate 'p_task_data' */
return (OS_ERR_PDATA_NULL);
}
#endif
OS_ENTER_CRITICAL();
801725c: e0bfff15 stw r2,-4(fp)
if (prio == OS_PRIO_SELF) { /* See if suspend SELF */
8017260: e0bff903 ldbu r2,-28(fp)
8017264: 10803fd8 cmpnei r2,r2,255
8017268: 1000031e bne r2,zero,8017278 <OSTaskQuery+0x58>
prio = OSTCBCur->OSTCBPrio;
801726c: d0a05817 ldw r2,-32416(gp)
8017270: 10800c83 ldbu r2,50(r2)
8017274: e0bff905 stb r2,-28(fp)
}
ptcb = OSTCBPrioTbl[prio];
8017278: e0bff903 ldbu r2,-28(fp)
801727c: 100690ba slli r3,r2,2
8017280: 008201b4 movhi r2,2054
8017284: 1885883a add r2,r3,r2
8017288: 10b55d17 ldw r2,-10892(r2)
801728c: e0bffe15 stw r2,-8(fp)
if (ptcb == (OS_TCB *)0) { /* Task to query must exist */
8017290: e0bffe17 ldw r2,-8(fp)
8017294: 1000061e bne r2,zero,80172b0 <OSTaskQuery+0x90>
8017298: e0bfff17 ldw r2,-4(fp)
801729c: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
80172a0: e0bffc17 ldw r2,-16(fp)
80172a4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_PRIO);
80172a8: 00800a44 movi r2,41
80172ac: 00001206 br 80172f8 <OSTaskQuery+0xd8>
}
if (ptcb == OS_TCB_RESERVED) { /* Task to query must not be assigned to a Mutex */
80172b0: e0bffe17 ldw r2,-8(fp)
80172b4: 10800058 cmpnei r2,r2,1
80172b8: 1000061e bne r2,zero,80172d4 <OSTaskQuery+0xb4>
80172bc: e0bfff17 ldw r2,-4(fp)
80172c0: e0bffb15 stw r2,-20(fp)
80172c4: e0bffb17 ldw r2,-20(fp)
80172c8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NOT_EXIST);
80172cc: 008010c4 movi r2,67
80172d0: 00000906 br 80172f8 <OSTaskQuery+0xd8>
}
/* Copy TCB into user storage area */
OS_MemCopy((INT8U *)p_task_data, (INT8U *)ptcb, sizeof(OS_TCB));
80172d4: 01801b04 movi r6,108
80172d8: e17ffe17 ldw r5,-8(fp)
80172dc: e13ff817 ldw r4,-32(fp)
80172e0: 80116040 call 8011604 <OS_MemCopy>
80172e4: e0bfff17 ldw r2,-4(fp)
80172e8: e0bffa15 stw r2,-24(fp)
80172ec: e0bffa17 ldw r2,-24(fp)
80172f0: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_NONE);
80172f4: 0005883a mov r2,zero
}
80172f8: e037883a mov sp,fp
80172fc: dfc00117 ldw ra,4(sp)
8017300: df000017 ldw fp,0(sp)
8017304: dec00204 addi sp,sp,8
8017308: f800283a ret
0801730c <OSTimeDly>:
* Returns : none
*********************************************************************************************************
*/
void OSTimeDly (INT16U ticks)
{
801730c: defff904 addi sp,sp,-28
8017310: dfc00615 stw ra,24(sp)
8017314: df000515 stw fp,20(sp)
8017318: df000504 addi fp,sp,20
801731c: 2005883a mov r2,r4
8017320: e0bffb0d sth r2,-20(fp)
INT8U y;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8017324: e03fff15 stw zero,-4(fp)
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
8017328: d0a05703 ldbu r2,-32420(gp)
801732c: 10803fcc andi r2,r2,255
8017330: 1000311e bne r2,zero,80173f8 <OSTimeDly+0xec>
return;
}
if (ticks > 0) { /* 0 means no delay! */
8017334: e0bffb0b ldhu r2,-20(fp)
8017338: 10003026 beq r2,zero,80173fc <OSTimeDly+0xf0>
NIOS2_READ_STATUS (context);
801733c: 0005303a rdctl r2,status
8017340: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8017344: e0fffd17 ldw r3,-12(fp)
8017348: 00bfff84 movi r2,-2
801734c: 1884703a and r2,r3,r2
8017350: 1001703a wrctl status,r2
return context;
8017354: e0bffd17 ldw r2,-12(fp)
OS_ENTER_CRITICAL();
8017358: e0bfff15 stw r2,-4(fp)
y = OSTCBCur->OSTCBY; /* Delay current task */
801735c: d0a05817 ldw r2,-32416(gp)
8017360: 10800d03 ldbu r2,52(r2)
8017364: e0bffec5 stb r2,-5(fp)
OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
8017368: e0fffec3 ldbu r3,-5(fp)
801736c: d0a05544 addi r2,gp,-32427
8017370: 1885883a add r2,r3,r2
8017374: 10800003 ldbu r2,0(r2)
8017378: 1007883a mov r3,r2
801737c: d0a05817 ldw r2,-32416(gp)
8017380: 10800d43 ldbu r2,53(r2)
8017384: 0084303a nor r2,zero,r2
8017388: 1884703a and r2,r3,r2
801738c: e0fffec3 ldbu r3,-5(fp)
8017390: 1009883a mov r4,r2
8017394: d0a05544 addi r2,gp,-32427
8017398: 1885883a add r2,r3,r2
801739c: 11000005 stb r4,0(r2)
if (OSRdyTbl[y] == 0) {
80173a0: e0fffec3 ldbu r3,-5(fp)
80173a4: d0a05544 addi r2,gp,-32427
80173a8: 1885883a add r2,r3,r2
80173ac: 10800003 ldbu r2,0(r2)
80173b0: 10803fcc andi r2,r2,255
80173b4: 1000071e bne r2,zero,80173d4 <OSTimeDly+0xc8>
OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
80173b8: d0a05817 ldw r2,-32416(gp)
80173bc: 10800d83 ldbu r2,54(r2)
80173c0: 0084303a nor r2,zero,r2
80173c4: 1007883a mov r3,r2
80173c8: d0a05503 ldbu r2,-32428(gp)
80173cc: 1884703a and r2,r3,r2
80173d0: d0a05505 stb r2,-32428(gp)
}
OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB */
80173d4: d0a05817 ldw r2,-32416(gp)
80173d8: e0fffb0b ldhu r3,-20(fp)
80173dc: 10c00b8d sth r3,46(r2)
80173e0: e0bfff17 ldw r2,-4(fp)
80173e4: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
80173e8: e0bffc17 ldw r2,-16(fp)
80173ec: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* Find next task to run! */
80173f0: 801166c0 call 801166c <OS_Sched>
80173f4: 00000106 br 80173fc <OSTimeDly+0xf0>
return;
80173f8: 0001883a nop
}
}
80173fc: e037883a mov sp,fp
8017400: dfc00117 ldw ra,4(sp)
8017404: df000017 ldw fp,0(sp)
8017408: dec00204 addi sp,sp,8
801740c: f800283a ret
08017410 <OSTimeDlyHMSM>:
*********************************************************************************************************
*/
#if OS_TIME_DLY_HMSM_EN > 0
INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U ms)
{
8017410: defff704 addi sp,sp,-36
8017414: dfc00815 stw ra,32(sp)
8017418: df000715 stw fp,28(sp)
801741c: dc000615 stw r16,24(sp)
8017420: df000704 addi fp,sp,28
8017424: 2005883a mov r2,r4
8017428: 3009883a mov r4,r6
801742c: 3807883a mov r3,r7
8017430: e0bffc05 stb r2,-16(fp)
8017434: 2805883a mov r2,r5
8017438: e0bffb05 stb r2,-20(fp)
801743c: 2005883a mov r2,r4
8017440: e0bffa05 stb r2,-24(fp)
8017444: 1805883a mov r2,r3
8017448: e0bff90d sth r2,-28(fp)
INT32U ticks;
INT16U loops;
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
801744c: d0a05703 ldbu r2,-32420(gp)
8017450: 10803fcc andi r2,r2,255
8017454: 10000226 beq r2,zero,8017460 <OSTimeDlyHMSM+0x50>
return (OS_ERR_TIME_DLY_ISR);
8017458: 00801544 movi r2,85
801745c: 00002506 br 80174f4 <OSTimeDlyHMSM+0xe4>
return (OS_ERR_TIME_INVALID_MS);
}
#endif
/* Compute the total number of clock ticks required.. */
/* .. (rounded to the nearest tick) */
ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
8017460: e0bffc03 ldbu r2,-16(fp)
8017464: 10c38424 muli r3,r2,3600
8017468: e0bffb03 ldbu r2,-20(fp)
801746c: 10800f24 muli r2,r2,60
8017470: 1887883a add r3,r3,r2
8017474: e0bffa03 ldbu r2,-24(fp)
8017478: 1885883a add r2,r3,r2
801747c: 14001924 muli r16,r2,100
+ OS_TICKS_PER_SEC * ((INT32U)ms + 500L / OS_TICKS_PER_SEC) / 1000L;
8017480: e0bff90b ldhu r2,-28(fp)
8017484: 10801924 muli r2,r2,100
8017488: 10807d04 addi r2,r2,500
801748c: 0140fa04 movi r5,1000
8017490: 1009883a mov r4,r2
8017494: 800cff80 call 800cff8 <__udivsi3>
ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
8017498: 8085883a add r2,r16,r2
801749c: e0bffd15 stw r2,-12(fp)
loops = (INT16U)(ticks >> 16); /* Compute the integral number of 65536 tick delays */
80174a0: e0bffd17 ldw r2,-12(fp)
80174a4: 1004d43a srli r2,r2,16
80174a8: e0bffe8d sth r2,-6(fp)
ticks = ticks & 0xFFFFL; /* Obtain the fractional number of ticks */
80174ac: e0bffd17 ldw r2,-12(fp)
80174b0: 10bfffcc andi r2,r2,65535
80174b4: e0bffd15 stw r2,-12(fp)
OSTimeDly((INT16U)ticks);
80174b8: e0bffd17 ldw r2,-12(fp)
80174bc: 10bfffcc andi r2,r2,65535
80174c0: 1009883a mov r4,r2
80174c4: 801730c0 call 801730c <OSTimeDly>
while (loops > 0) {
80174c8: 00000706 br 80174e8 <OSTimeDlyHMSM+0xd8>
OSTimeDly((INT16U)32768u);
80174cc: 01200014 movui r4,32768
80174d0: 801730c0 call 801730c <OSTimeDly>
OSTimeDly((INT16U)32768u);
80174d4: 01200014 movui r4,32768
80174d8: 801730c0 call 801730c <OSTimeDly>
loops--;
80174dc: e0bffe8b ldhu r2,-6(fp)
80174e0: 10bfffc4 addi r2,r2,-1
80174e4: e0bffe8d sth r2,-6(fp)
while (loops > 0) {
80174e8: e0bffe8b ldhu r2,-6(fp)
80174ec: 103ff71e bne r2,zero,80174cc <OSTimeDlyHMSM+0xbc>
}
return (OS_ERR_NONE);
80174f0: 0005883a mov r2,zero
}
80174f4: e6ffff04 addi sp,fp,-4
80174f8: dfc00217 ldw ra,8(sp)
80174fc: df000117 ldw fp,4(sp)
8017500: dc000017 ldw r16,0(sp)
8017504: dec00304 addi sp,sp,12
8017508: f800283a ret
0801750c <OSTimeDlyResume>:
*********************************************************************************************************
*/
#if OS_TIME_DLY_RESUME_EN > 0
INT8U OSTimeDlyResume (INT8U prio)
{
801750c: defff504 addi sp,sp,-44
8017510: dfc00a15 stw ra,40(sp)
8017514: df000915 stw fp,36(sp)
8017518: df000904 addi fp,sp,36
801751c: 2005883a mov r2,r4
8017520: e0bff705 stb r2,-36(fp)
OS_TCB *ptcb;
#if OS_CRITICAL_METHOD == 3 /* Storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8017524: e03fff15 stw zero,-4(fp)
#endif
if (prio >= OS_LOWEST_PRIO) {
8017528: e0bff703 ldbu r2,-36(fp)
801752c: 10800530 cmpltui r2,r2,20
8017530: 1000021e bne r2,zero,801753c <OSTimeDlyResume+0x30>
return (OS_ERR_PRIO_INVALID);
8017534: 00800a84 movi r2,42
8017538: 00006206 br 80176c4 <OSTimeDlyResume+0x1b8>
NIOS2_READ_STATUS (context);
801753c: 0005303a rdctl r2,status
8017540: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8017544: e0fffd17 ldw r3,-12(fp)
8017548: 00bfff84 movi r2,-2
801754c: 1884703a and r2,r3,r2
8017550: 1001703a wrctl status,r2
return context;
8017554: e0bffd17 ldw r2,-12(fp)
}
OS_ENTER_CRITICAL();
8017558: e0bfff15 stw r2,-4(fp)
ptcb = OSTCBPrioTbl[prio]; /* Make sure that task exist */
801755c: e0bff703 ldbu r2,-36(fp)
8017560: 100690ba slli r3,r2,2
8017564: 008201b4 movhi r2,2054
8017568: 1885883a add r2,r3,r2
801756c: 10b55d17 ldw r2,-10892(r2)
8017570: e0bffe15 stw r2,-8(fp)
if (ptcb == (OS_TCB *)0) {
8017574: e0bffe17 ldw r2,-8(fp)
8017578: 1000061e bne r2,zero,8017594 <OSTimeDlyResume+0x88>
801757c: e0bfff17 ldw r2,-4(fp)
8017580: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
8017584: e0bffc17 ldw r2,-16(fp)
8017588: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NOT_EXIST); /* The task does not exist */
801758c: 008010c4 movi r2,67
8017590: 00004c06 br 80176c4 <OSTimeDlyResume+0x1b8>
}
if (ptcb == OS_TCB_RESERVED) {
8017594: e0bffe17 ldw r2,-8(fp)
8017598: 10800058 cmpnei r2,r2,1
801759c: 1000061e bne r2,zero,80175b8 <OSTimeDlyResume+0xac>
80175a0: e0bfff17 ldw r2,-4(fp)
80175a4: e0bffb15 stw r2,-20(fp)
80175a8: e0bffb17 ldw r2,-20(fp)
80175ac: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_NOT_EXIST); /* The task does not exist */
80175b0: 008010c4 movi r2,67
80175b4: 00004306 br 80176c4 <OSTimeDlyResume+0x1b8>
}
if (ptcb->OSTCBDly == 0) { /* See if task is delayed */
80175b8: e0bffe17 ldw r2,-8(fp)
80175bc: 10800b8b ldhu r2,46(r2)
80175c0: 10bfffcc andi r2,r2,65535
80175c4: 1000061e bne r2,zero,80175e0 <OSTimeDlyResume+0xd4>
80175c8: e0bfff17 ldw r2,-4(fp)
80175cc: e0bffa15 stw r2,-24(fp)
80175d0: e0bffa17 ldw r2,-24(fp)
80175d4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (OS_ERR_TIME_NOT_DLY); /* Indicate that task was not delayed */
80175d8: 00801404 movi r2,80
80175dc: 00003906 br 80176c4 <OSTimeDlyResume+0x1b8>
}
ptcb->OSTCBDly = 0; /* Clear the time delay */
80175e0: e0bffe17 ldw r2,-8(fp)
80175e4: 10000b8d sth zero,46(r2)
if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
80175e8: e0bffe17 ldw r2,-8(fp)
80175ec: 10800c03 ldbu r2,48(r2)
80175f0: 10803fcc andi r2,r2,255
80175f4: 10800dcc andi r2,r2,55
80175f8: 10000b26 beq r2,zero,8017628 <OSTimeDlyResume+0x11c>
ptcb->OSTCBStat &= ~OS_STAT_PEND_ANY; /* Yes, Clear status flag */
80175fc: e0bffe17 ldw r2,-8(fp)
8017600: 10c00c03 ldbu r3,48(r2)
8017604: 00bff204 movi r2,-56
8017608: 1884703a and r2,r3,r2
801760c: 1007883a mov r3,r2
8017610: e0bffe17 ldw r2,-8(fp)
8017614: 10c00c05 stb r3,48(r2)
ptcb->OSTCBStatPend = OS_STAT_PEND_TO; /* Indicate PEND timeout */
8017618: e0bffe17 ldw r2,-8(fp)
801761c: 00c00044 movi r3,1
8017620: 10c00c45 stb r3,49(r2)
8017624: 00000206 br 8017630 <OSTimeDlyResume+0x124>
} else {
ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
8017628: e0bffe17 ldw r2,-8(fp)
801762c: 10000c45 stb zero,49(r2)
}
if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended? */
8017630: e0bffe17 ldw r2,-8(fp)
8017634: 10800c03 ldbu r2,48(r2)
8017638: 10803fcc andi r2,r2,255
801763c: 1080020c andi r2,r2,8
8017640: 10001b1e bne r2,zero,80176b0 <OSTimeDlyResume+0x1a4>
OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make ready */
8017644: e0bffe17 ldw r2,-8(fp)
8017648: 10c00d83 ldbu r3,54(r2)
801764c: d0a05503 ldbu r2,-32428(gp)
8017650: 1884b03a or r2,r3,r2
8017654: d0a05505 stb r2,-32428(gp)
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
8017658: e0bffe17 ldw r2,-8(fp)
801765c: 10800d03 ldbu r2,52(r2)
8017660: 10c03fcc andi r3,r2,255
8017664: d0a05544 addi r2,gp,-32427
8017668: 1885883a add r2,r3,r2
801766c: 11000003 ldbu r4,0(r2)
8017670: e0bffe17 ldw r2,-8(fp)
8017674: 10800d43 ldbu r2,53(r2)
8017678: e0fffe17 ldw r3,-8(fp)
801767c: 18c00d03 ldbu r3,52(r3)
8017680: 18c03fcc andi r3,r3,255
8017684: 2084b03a or r2,r4,r2
8017688: 1009883a mov r4,r2
801768c: d0a05544 addi r2,gp,-32427
8017690: 1885883a add r2,r3,r2
8017694: 11000005 stb r4,0(r2)
8017698: e0bfff17 ldw r2,-4(fp)
801769c: e0bff915 stw r2,-28(fp)
80176a0: e0bff917 ldw r2,-28(fp)
80176a4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
OS_Sched(); /* See if this is new highest priority */
80176a8: 801166c0 call 801166c <OS_Sched>
80176ac: 00000406 br 80176c0 <OSTimeDlyResume+0x1b4>
80176b0: e0bfff17 ldw r2,-4(fp)
80176b4: e0bff815 stw r2,-32(fp)
80176b8: e0bff817 ldw r2,-32(fp)
80176bc: 1001703a wrctl status,r2
} else {
OS_EXIT_CRITICAL(); /* Task may be suspended */
}
return (OS_ERR_NONE);
80176c0: 0005883a mov r2,zero
}
80176c4: e037883a mov sp,fp
80176c8: dfc00117 ldw ra,4(sp)
80176cc: df000017 ldw fp,0(sp)
80176d0: dec00204 addi sp,sp,8
80176d4: f800283a ret
080176d8 <OSTimeGet>:
*********************************************************************************************************
*/
#if OS_TIME_GET_SET_EN > 0
INT32U OSTimeGet (void)
{
80176d8: defffb04 addi sp,sp,-20
80176dc: df000415 stw fp,16(sp)
80176e0: df000404 addi fp,sp,16
INT32U ticks;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
80176e4: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
80176e8: 0005303a rdctl r2,status
80176ec: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
80176f0: e0fffc17 ldw r3,-16(fp)
80176f4: 00bfff84 movi r2,-2
80176f8: 1884703a and r2,r3,r2
80176fc: 1001703a wrctl status,r2
return context;
8017700: e0bffc17 ldw r2,-16(fp)
#endif
OS_ENTER_CRITICAL();
8017704: e0bfff15 stw r2,-4(fp)
ticks = OSTime;
8017708: d0a05917 ldw r2,-32412(gp)
801770c: e0bffe15 stw r2,-8(fp)
8017710: e0bfff17 ldw r2,-4(fp)
8017714: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context);
8017718: e0bffd17 ldw r2,-12(fp)
801771c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return (ticks);
8017720: e0bffe17 ldw r2,-8(fp)
}
8017724: e037883a mov sp,fp
8017728: df000017 ldw fp,0(sp)
801772c: dec00104 addi sp,sp,4
8017730: f800283a ret
08017734 <OSTimeSet>:
*********************************************************************************************************
*/
#if OS_TIME_GET_SET_EN > 0
void OSTimeSet (INT32U ticks)
{
8017734: defffb04 addi sp,sp,-20
8017738: df000415 stw fp,16(sp)
801773c: df000404 addi fp,sp,16
8017740: e13ffc15 stw r4,-16(fp)
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
8017744: e03fff15 stw zero,-4(fp)
NIOS2_READ_STATUS (context);
8017748: 0005303a rdctl r2,status
801774c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8017750: e0fffd17 ldw r3,-12(fp)
8017754: 00bfff84 movi r2,-2
8017758: 1884703a and r2,r3,r2
801775c: 1001703a wrctl status,r2
return context;
8017760: e0bffd17 ldw r2,-12(fp)
#endif
OS_ENTER_CRITICAL();
8017764: e0bfff15 stw r2,-4(fp)
OSTime = ticks;
8017768: e0bffc17 ldw r2,-16(fp)
801776c: d0a05915 stw r2,-32412(gp)
8017770: e0bfff17 ldw r2,-4(fp)
8017774: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context);
8017778: e0bffe17 ldw r2,-8(fp)
801777c: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
}
8017780: 0001883a nop
8017784: e037883a mov sp,fp
8017788: df000017 ldw fp,0(sp)
801778c: dec00104 addi sp,sp,4
8017790: f800283a ret
08017794 <alt_dev_reg>:
*/
extern int alt_fs_reg (alt_dev* dev);
static ALT_INLINE int alt_dev_reg (alt_dev* dev)
{
8017794: defffd04 addi sp,sp,-12
8017798: dfc00215 stw ra,8(sp)
801779c: df000115 stw fp,4(sp)
80177a0: df000104 addi fp,sp,4
80177a4: e13fff15 stw r4,-4(fp)
extern alt_llist alt_dev_list;
return alt_dev_llist_insert ((alt_dev_llist*) dev, &alt_dev_list);
80177a8: d1602404 addi r5,gp,-32624
80177ac: e13fff17 ldw r4,-4(fp)
80177b0: 80372a00 call 80372a0 <alt_dev_llist_insert>
}
80177b4: e037883a mov sp,fp
80177b8: dfc00117 ldw ra,4(sp)
80177bc: df000017 ldw fp,0(sp)
80177c0: dec00204 addi sp,sp,8
80177c4: f800283a ret
080177c8 <alt_irq_init>:
* The "base" parameter is ignored and only
* present for backwards-compatibility.
*/
void alt_irq_init ( const void* base )
{
80177c8: defffd04 addi sp,sp,-12
80177cc: dfc00215 stw ra,8(sp)
80177d0: df000115 stw fp,4(sp)
80177d4: df000104 addi fp,sp,4
80177d8: e13fff15 stw r4,-4(fp)
ALTERA_NIOS2_GEN2_IRQ_INIT ( CPU, cpu);
80177dc: 80383640 call 8038364 <altera_nios2_gen2_irq_init>
NIOS2_WRITE_STATUS(NIOS2_STATUS_PIE_MSK
80177e0: 00800044 movi r2,1
80177e4: 1001703a wrctl status,r2
alt_irq_cpu_enable_interrupts();
}
80177e8: 0001883a nop
80177ec: e037883a mov sp,fp
80177f0: dfc00117 ldw ra,4(sp)
80177f4: df000017 ldw fp,0(sp)
80177f8: dec00204 addi sp,sp,8
80177fc: f800283a ret
08017800 <alt_sys_init>:
* Initialize the non-interrupt controller devices.
* Called after alt_irq_init().
*/
void alt_sys_init( void )
{
8017800: defffa04 addi sp,sp,-24
8017804: dfc00515 stw ra,20(sp)
8017808: df000415 stw fp,16(sp)
801780c: df000404 addi fp,sp,16
ALTERA_AVALON_TIMER_INIT ( FRAME_TIMER, frame_timer);
ALTERA_AVALON_TIMER_INIT ( SYS_CLK_TIMER, sys_clk_timer);
8017810: 01c01904 movi r7,100
8017814: 000d883a mov r6,zero
8017818: 000b883a mov r5,zero
801781c: 01061034 movhi r4,6208
8017820: 210f1804 addi r4,r4,15456
8017824: 8017aa40 call 8017aa4 <alt_avalon_timer_sc_init>
ALTERA_AVALON_SYSID_QSYS_INIT ( SYSID, sysid);
8017828: 0001883a nop
ALTERA_AVALON_UART_INIT ( DEBUG_UART, debug_uart);
801782c: 01800104 movi r6,4
8017830: 000b883a mov r5,zero
8017834: 01020174 movhi r4,2053
8017838: 21311204 addi r4,r4,-15288
801783c: 801cb500 call 801cb50 <altera_avalon_uart_init>
8017840: 01020174 movhi r4,2053
8017844: 21310804 addi r4,r4,-15328
8017848: 80177940 call 8017794 <alt_dev_reg>
ALTERA_ETH_TSE_INIT ( ETH_TSE, eth_tse);
801784c: e03fff15 stw zero,-4(fp)
8017850: 00800044 movi r2,1
8017854: e0bffe15 stw r2,-8(fp)
8017858: e0bffe17 ldw r2,-8(fp)
801785c: 00800216 blt zero,r2,8017868 <alt_sys_init+0x68>
8017860: 00800044 movi r2,1
8017864: e0bffe15 stw r2,-8(fp)
8017868: e03fff15 stw zero,-4(fp)
801786c: 00004e06 br 80179a8 <alt_sys_init+0x1a8>
8017870: e0bfff17 ldw r2,-4(fp)
8017874: 10c00724 muli r3,r2,28
8017878: 008201b4 movhi r2,2054
801787c: 1885883a add r2,r3,r2
8017880: 10357215 stw zero,-10808(r2)
8017884: e0bfff17 ldw r2,-4(fp)
8017888: 10c00724 muli r3,r2,28
801788c: 008201b4 movhi r2,2054
8017890: 1885883a add r2,r3,r2
8017894: 10357315 stw zero,-10804(r2)
8017898: d0e00917 ldw r3,-32732(gp)
801789c: e0bfff17 ldw r2,-4(fp)
80178a0: 11000724 muli r4,r2,28
80178a4: 008201b4 movhi r2,2054
80178a8: 2085883a add r2,r4,r2
80178ac: 10f57415 stw r3,-10800(r2)
80178b0: e0bfff17 ldw r2,-4(fp)
80178b4: 11000724 muli r4,r2,28
80178b8: 00c200b4 movhi r3,2050
80178bc: 18c43604 addi r3,r3,4312
80178c0: 008201b4 movhi r2,2054
80178c4: 2085883a add r2,r4,r2
80178c8: 10f57515 stw r3,-10796(r2)
80178cc: e0bfff17 ldw r2,-4(fp)
80178d0: 10c00724 muli r3,r2,28
80178d4: 008201b4 movhi r2,2054
80178d8: 10b57204 addi r2,r2,-10808
80178dc: 1885883a add r2,r3,r2
80178e0: d0e00f04 addi r3,gp,-32708
80178e4: e0fffd15 stw r3,-12(fp)
80178e8: e0bffc15 stw r2,-16(fp)
*/
static ALT_INLINE void ALT_ALWAYS_INLINE alt_llist_insert(alt_llist* list,
alt_llist* entry)
{
entry->previous = list;
80178ec: e0bffc17 ldw r2,-16(fp)
80178f0: e0fffd17 ldw r3,-12(fp)
80178f4: 10c00115 stw r3,4(r2)
entry->next = list->next;
80178f8: e0bffd17 ldw r2,-12(fp)
80178fc: 10c00017 ldw r3,0(r2)
8017900: e0bffc17 ldw r2,-16(fp)
8017904: 10c00015 stw r3,0(r2)
list->next->previous = entry;
8017908: e0bffd17 ldw r2,-12(fp)
801790c: 10800017 ldw r2,0(r2)
8017910: e0fffc17 ldw r3,-16(fp)
8017914: 10c00115 stw r3,4(r2)
list->next = entry;
8017918: e0bffd17 ldw r2,-12(fp)
801791c: e0fffc17 ldw r3,-16(fp)
8017920: 10c00015 stw r3,0(r2)
8017924: d0a05c03 ldbu r2,-32400(gp)
8017928: 11003fcc andi r4,r2,255
801792c: e0bfff17 ldw r2,-4(fp)
8017930: 10c00724 muli r3,r2,28
8017934: 008201b4 movhi r2,2054
8017938: 10b57204 addi r2,r2,-10808
801793c: 1887883a add r3,r3,r2
8017940: 21000324 muli r4,r4,12
8017944: 008201b4 movhi r2,2054
8017948: 2085883a add r2,r4,r2
801794c: 10f5b615 stw r3,-10536(r2)
8017950: d0a05c03 ldbu r2,-32400(gp)
8017954: 10803fcc andi r2,r2,255
8017958: 11000324 muli r4,r2,12
801795c: 00c61034 movhi r3,6208
8017960: 18cc0004 addi r3,r3,12288
8017964: 008201b4 movhi r2,2054
8017968: 2085883a add r2,r4,r2
801796c: 10f5b715 stw r3,-10532(r2)
8017970: d0a05c03 ldbu r2,-32400(gp)
8017974: 10803fcc andi r2,r2,255
8017978: e0ffff17 ldw r3,-4(fp)
801797c: 1809883a mov r4,r3
8017980: 10c00324 muli r3,r2,12
8017984: 008201b4 movhi r2,2054
8017988: 1885883a add r2,r3,r2
801798c: 1135b805 stb r4,-10528(r2)
8017990: d0a05c03 ldbu r2,-32400(gp)
8017994: 10800044 addi r2,r2,1
8017998: d0a05c05 stb r2,-32400(gp)
801799c: e0bfff17 ldw r2,-4(fp)
80179a0: 10800044 addi r2,r2,1
80179a4: e0bfff15 stw r2,-4(fp)
80179a8: e0ffff17 ldw r3,-4(fp)
80179ac: e0bffe17 ldw r2,-8(fp)
80179b0: 18bfaf16 blt r3,r2,8017870 <alt_sys_init+0x70>
ALTERA_GENERIC_QUAD_SPI_CONTROLLER_INIT ( EXT_FLASH, ext_flash);
80179b4: 01020174 movhi r4,2053
80179b8: 21313c04 addi r4,r4,-15120
80179bc: 801dd200 call 801dd20 <altera_qspi_controller_init>
ALTERA_MSGDMA_INIT ( MSGDMA_RX, msgdma_rx);
80179c0: 00820174 movhi r2,2053
80179c4: 10f17b17 ldw r3,-14868(r2)
80179c8: 00820174 movhi r2,2053
80179cc: 10b17c17 ldw r2,-14864(r2)
80179d0: 100d883a mov r6,r2
80179d4: 180b883a mov r5,r3
80179d8: 01020174 movhi r4,2053
80179dc: 21317404 addi r4,r4,-14896
80179e0: 801feec0 call 801feec <alt_msgdma_init>
ALTERA_MSGDMA_INIT ( MSGDMA_TX, msgdma_tx);
80179e4: 00820174 movhi r2,2053
80179e8: 10f19717 ldw r3,-14756(r2)
80179ec: 00820174 movhi r2,2053
80179f0: 10b19817 ldw r2,-14752(r2)
80179f4: 100d883a mov r6,r2
80179f8: 180b883a mov r5,r3
80179fc: 01020174 movhi r4,2053
8017a00: 21319004 addi r4,r4,-14784
8017a04: 801feec0 call 801feec <alt_msgdma_init>
ALTERA_ONCHIP_FLASH_INIT ( ONCHIP_FLASH, onchip_flash);
8017a08: 01020174 movhi r4,2053
8017a0c: 2131ac04 addi r4,r4,-14672
8017a10: 8020a800 call 8020a80 <altera_onchip_flash_init>
}
8017a14: 0001883a nop
8017a18: e037883a mov sp,fp
8017a1c: dfc00117 ldw ra,4(sp)
8017a20: df000017 ldw fp,0(sp)
8017a24: dec00204 addi sp,sp,8
8017a28: f800283a ret
08017a2c <alt_avalon_timer_sc_irq>:
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
static void alt_avalon_timer_sc_irq (void* base)
#else
static void alt_avalon_timer_sc_irq (void* base, alt_u32 id)
#endif
{
8017a2c: defffa04 addi sp,sp,-24
8017a30: dfc00515 stw ra,20(sp)
8017a34: df000415 stw fp,16(sp)
8017a38: df000404 addi fp,sp,16
8017a3c: e13ffc15 stw r4,-16(fp)
alt_irq_context cpu_sr;
/* clear the interrupt */
IOWR_ALTERA_AVALON_TIMER_STATUS (base, 0);
8017a40: 0007883a mov r3,zero
8017a44: e0bffc17 ldw r2,-16(fp)
8017a48: 10c00035 stwio r3,0(r2)
/*
* Dummy read to ensure IRQ is negated before the ISR returns.
* The control register is read because reading the status
* register has side-effects per the register map documentation.
*/
IORD_ALTERA_AVALON_TIMER_CONTROL (base);
8017a4c: e0bffc17 ldw r2,-16(fp)
8017a50: 10800104 addi r2,r2,4
8017a54: 10800037 ldwio r2,0(r2)
NIOS2_READ_STATUS (context);
8017a58: 0005303a rdctl r2,status
8017a5c: e0bffd15 stw r2,-12(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8017a60: e0fffd17 ldw r3,-12(fp)
8017a64: 00bfff84 movi r2,-2
8017a68: 1884703a and r2,r3,r2
8017a6c: 1001703a wrctl status,r2
return context;
8017a70: e0bffd17 ldw r2,-12(fp)
/*
* Notify the system of a clock tick. disable interrupts
* during this time to safely support ISR preemption
*/
cpu_sr = alt_irq_disable_all();
8017a74: e0bfff15 stw r2,-4(fp)
alt_tick ();
8017a78: 8037f580 call 8037f58 <alt_tick>
8017a7c: e0bfff17 ldw r2,-4(fp)
8017a80: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context);
8017a84: e0bffe17 ldw r2,-8(fp)
8017a88: 1001703a wrctl status,r2
alt_irq_enable_all(cpu_sr);
}
8017a8c: 0001883a nop
8017a90: e037883a mov sp,fp
8017a94: dfc00117 ldw ra,4(sp)
8017a98: df000017 ldw fp,0(sp)
8017a9c: dec00204 addi sp,sp,8
8017aa0: f800283a ret
08017aa4 <alt_avalon_timer_sc_init>:
* auto-generated alt_sys_init() function.
*/
void alt_avalon_timer_sc_init (void* base, alt_u32 irq_controller_id,
alt_u32 irq, alt_u32 freq)
{
8017aa4: defff804 addi sp,sp,-32
8017aa8: dfc00715 stw ra,28(sp)
8017aac: df000615 stw fp,24(sp)
8017ab0: df000604 addi fp,sp,24
8017ab4: e13ffe15 stw r4,-8(fp)
8017ab8: e17ffd15 stw r5,-12(fp)
8017abc: e1bffc15 stw r6,-16(fp)
8017ac0: e1fffb15 stw r7,-20(fp)
8017ac4: e0bffb17 ldw r2,-20(fp)
8017ac8: e0bfff15 stw r2,-4(fp)
* in order to initialise the value of the clock frequency.
*/
static ALT_INLINE int ALT_ALWAYS_INLINE alt_sysclk_init (alt_u32 nticks)
{
if (! _alt_tick_rate)
8017acc: d0a08d17 ldw r2,-32204(gp)
8017ad0: 1000021e bne r2,zero,8017adc <alt_avalon_timer_sc_init+0x38>
{
_alt_tick_rate = nticks;
8017ad4: e0bfff17 ldw r2,-4(fp)
8017ad8: d0a08d15 stw r2,-32204(gp)
alt_sysclk_init (freq);
/* set to free running mode */
IOWR_ALTERA_AVALON_TIMER_CONTROL (base,
8017adc: e0bffe17 ldw r2,-8(fp)
8017ae0: 10800104 addi r2,r2,4
8017ae4: 00c001c4 movi r3,7
8017ae8: 10c00035 stwio r3,0(r2)
ALTERA_AVALON_TIMER_CONTROL_CONT_MSK |
ALTERA_AVALON_TIMER_CONTROL_START_MSK);
/* register the interrupt handler, and enable the interrupt */
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
alt_ic_isr_register(irq_controller_id, irq, alt_avalon_timer_sc_irq,
8017aec: d8000015 stw zero,0(sp)
8017af0: e1fffe17 ldw r7,-8(fp)
8017af4: 01820074 movhi r6,2049
8017af8: 319e8b04 addi r6,r6,31276
8017afc: e17ffc17 ldw r5,-16(fp)
8017b00: e13ffd17 ldw r4,-12(fp)
8017b04: 80374940 call 8037494 <alt_ic_isr_register>
base, NULL);
#else
alt_irq_register (irq, base, alt_avalon_timer_sc_irq);
#endif
}
8017b08: 0001883a nop
8017b0c: e037883a mov sp,fp
8017b10: dfc00117 ldw ra,4(sp)
8017b14: df000017 ldw fp,0(sp)
8017b18: dec00204 addi sp,sp,8
8017b1c: f800283a ret
08017b20 <no_printf>:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
void no_printf (char *fmt, ...) {}
8017b20: defffb04 addi sp,sp,-20
8017b24: df000115 stw fp,4(sp)
8017b28: df000104 addi fp,sp,4
8017b2c: e13fff15 stw r4,-4(fp)
8017b30: e1400115 stw r5,4(fp)
8017b34: e1800215 stw r6,8(fp)
8017b38: e1c00315 stw r7,12(fp)
8017b3c: 0001883a nop
8017b40: e037883a mov sp,fp
8017b44: df000017 ldw fp,0(sp)
8017b48: dec00404 addi sp,sp,16
8017b4c: f800283a ret
08017b50 <tse_mac_initTransInfo2>:
alt_32 tse_mac_initTransInfo2( tse_mac_trans_info *mi,
alt_u32 mac_base,
alt_32 tx_msgdma,
alt_32 rx_msgdma,
alt_32 cfgflags) {
8017b50: defffb04 addi sp,sp,-20
8017b54: df000415 stw fp,16(sp)
8017b58: df000404 addi fp,sp,16
8017b5c: e13fff15 stw r4,-4(fp)
8017b60: e17ffe15 stw r5,-8(fp)
8017b64: e1bffd15 stw r6,-12(fp)
8017b68: e1fffc15 stw r7,-16(fp)
mi->base = (np_tse_mac*)mac_base;
8017b6c: e0fffe17 ldw r3,-8(fp)
8017b70: e0bfff17 ldw r2,-4(fp)
8017b74: 10c00015 stw r3,0(r2)
mi->tx_msgdma = (alt_msgdma_dev *)tx_msgdma;
8017b78: e0fffd17 ldw r3,-12(fp)
8017b7c: e0bfff17 ldw r2,-4(fp)
8017b80: 10c00115 stw r3,4(r2)
mi->rx_msgdma = (alt_msgdma_dev *)rx_msgdma;
8017b84: e0fffc17 ldw r3,-16(fp)
8017b88: e0bfff17 ldw r2,-4(fp)
8017b8c: 10c00215 stw r3,8(r2)
mi->cfgflags = cfgflags;
8017b90: e0c00117 ldw r3,4(fp)
8017b94: e0bfff17 ldw r2,-4(fp)
8017b98: 10c00415 stw r3,16(r2)
return SUCCESS;
8017b9c: 0005883a mov r2,zero
}
8017ba0: e037883a mov sp,fp
8017ba4: df000017 ldw fp,0(sp)
8017ba8: dec00104 addi sp,sp,4
8017bac: f800283a ret
08017bb0 <tse_mac_sTxWrite>:
* @param txDesc Pointer to the transmit MSGDMA descriptor
* @return actual bytes transferred if ok, else error (-1)
*/
alt_32 tse_mac_sTxWrite( tse_mac_trans_info *mi,
alt_msgdma_standard_descriptor *txDesc)
{
8017bb0: defffa04 addi sp,sp,-24
8017bb4: dfc00515 stw ra,20(sp)
8017bb8: df000415 stw fp,16(sp)
8017bbc: df000404 addi fp,sp,16
8017bc0: e13ffd15 stw r4,-12(fp)
8017bc4: e17ffc15 stw r5,-16(fp)
alt_32 timeout;
alt_u8 result = 0;
8017bc8: e03ffec5 stb zero,-5(fp)
// Make sure DMA controller is not busy from a former command
// and TX is able to accept data
timeout = 0;
8017bcc: e03fff15 stw zero,-4(fp)
while ( (IORD_ALTERA_MSGDMA_CSR_STATUS(mi->tx_msgdma->csr_base) &
8017bd0: 00000b06 br 8017c00 <tse_mac_sTxWrite+0x50>
ALTERA_MSGDMA_CSR_BUSY_MASK) ) {
if(timeout++ == ALTERA_TSE_MSGDMA_BUSY_TIME_OUT_CNT) {
8017bd4: e0ffff17 ldw r3,-4(fp)
8017bd8: 18800044 addi r2,r3,1
8017bdc: e0bfff15 stw r2,-4(fp)
8017be0: 008003f4 movhi r2,15
8017be4: 10909004 addi r2,r2,16960
8017be8: 1880051e bne r3,r2,8017c00 <tse_mac_sTxWrite+0x50>
tse_dprintf(4, "WARNING : TX MSGDMA Timeout\n");
8017bec: 01020134 movhi r4,2052
8017bf0: 211e3404 addi r4,r4,30928
8017bf4: 8002d9c0 call 8002d9c <puts>
return ENP_RESOURCE; // avoid being stuck here
8017bf8: 00bffa84 movi r2,-22
8017bfc: 00001906 br 8017c64 <tse_mac_sTxWrite+0xb4>
while ( (IORD_ALTERA_MSGDMA_CSR_STATUS(mi->tx_msgdma->csr_base) &
8017c00: e0bffd17 ldw r2,-12(fp)
8017c04: 10800117 ldw r2,4(r2)
8017c08: 10800317 ldw r2,12(r2)
8017c0c: 10800037 ldwio r2,0(r2)
8017c10: 1080004c andi r2,r2,1
8017c14: 103fef1e bne r2,zero,8017bd4 <tse_mac_sTxWrite+0x24>
}
}
// Start MSGDMA (blocking call)
alt_dcache_flush(txDesc,sizeof(alt_msgdma_standard_descriptor));
8017c18: 01400404 movi r5,16
8017c1c: e13ffc17 ldw r4,-16(fp)
8017c20: 80371c00 call 80371c0 <alt_dcache_flush>
result = alt_msgdma_standard_descriptor_sync_transfer(
8017c24: e0bffd17 ldw r2,-12(fp)
8017c28: 10800117 ldw r2,4(r2)
8017c2c: e17ffc17 ldw r5,-16(fp)
8017c30: 1009883a mov r4,r2
8017c34: 80201600 call 8020160 <alt_msgdma_standard_descriptor_sync_transfer>
8017c38: e0bffec5 stb r2,-5(fp)
mi->tx_msgdma,
txDesc);
if (result != 0) {
8017c3c: e0bffec3 ldbu r2,-5(fp)
8017c40: 10000726 beq r2,zero,8017c60 <tse_mac_sTxWrite+0xb0>
tse_dprintf(4, "WARNING :alt_msgdma_standard_descriptor_sync_transfer Error code 0x%x\n",result);
8017c44: e0bffec3 ldbu r2,-5(fp)
8017c48: 100b883a mov r5,r2
8017c4c: 01020134 movhi r4,2052
8017c50: 211e3b04 addi r4,r4,30956
8017c54: 8002c780 call 8002c78 <printf>
return -1;
8017c58: 00bfffc4 movi r2,-1
8017c5c: 00000106 br 8017c64 <tse_mac_sTxWrite+0xb4>
}
return 0;
8017c60: 0005883a mov r2,zero
}
8017c64: e037883a mov sp,fp
8017c68: dfc00117 ldw ra,4(sp)
8017c6c: df000017 ldw fp,0(sp)
8017c70: dec00204 addi sp,sp,8
8017c74: f800283a ret
08017c78 <tse_mac_aRxRead>:
* the actual bytes transferred for current descriptor
*/
alt_32 tse_mac_aRxRead(
tse_mac_trans_info *mi,
alt_msgdma_prefetcher_standard_descriptor *rxDesc)
{
8017c78: defff904 addi sp,sp,-28
8017c7c: dfc00615 stw ra,24(sp)
8017c80: df000515 stw fp,20(sp)
8017c84: df000504 addi fp,sp,20
8017c88: e13ffe15 stw r4,-8(fp)
8017c8c: e17ffd15 stw r5,-12(fp)
alt_u8 result;
result = alt_msgdma_start_prefetcher_with_std_desc_list(
8017c90: e0bffe17 ldw r2,-8(fp)
8017c94: 10c00217 ldw r3,8(r2)
8017c98: 00800044 movi r2,1
8017c9c: d8800115 stw r2,4(sp)
8017ca0: 00800044 movi r2,1
8017ca4: d8800015 stw r2,0(sp)
8017ca8: 000f883a mov r7,zero
8017cac: 000d883a mov r6,zero
8017cb0: e17ffd17 ldw r5,-12(fp)
8017cb4: 1809883a mov r4,r3
8017cb8: 801fd340 call 801fd34 <alt_msgdma_start_prefetcher_with_std_desc_list>
8017cbc: e0bfffc5 stb r2,-1(fp)
mi->rx_msgdma,
rxDesc,0,0,1,1);
if (result != 0) { return -1; }
8017cc0: e0bfffc3 ldbu r2,-1(fp)
8017cc4: 10000226 beq r2,zero,8017cd0 <tse_mac_aRxRead+0x58>
8017cc8: 00bfffc4 movi r2,-1
8017ccc: 00000106 br 8017cd4 <tse_mac_aRxRead+0x5c>
return SUCCESS;
8017cd0: 0005883a mov r2,zero
}
8017cd4: e037883a mov sp,fp
8017cd8: dfc00117 ldw ra,4(sp)
8017cdc: df000017 ldw fp,0(sp)
8017ce0: dec00204 addi sp,sp,8
8017ce4: f800283a ret
08017ce8 <tse_mac_aTxWrite>:
*
*/
alt_32 tse_mac_aTxWrite(
tse_mac_trans_info *mi,
alt_msgdma_prefetcher_standard_descriptor *txDesc)
{
8017ce8: defff904 addi sp,sp,-28
8017cec: dfc00615 stw ra,24(sp)
8017cf0: df000515 stw fp,20(sp)
8017cf4: df000504 addi fp,sp,20
8017cf8: e13ffe15 stw r4,-8(fp)
8017cfc: e17ffd15 stw r5,-12(fp)
alt_u8 result;
result = alt_msgdma_start_prefetcher_with_std_desc_list(
8017d00: e0bffe17 ldw r2,-8(fp)
8017d04: 10c00117 ldw r3,4(r2)
8017d08: 00800044 movi r2,1
8017d0c: d8800115 stw r2,4(sp)
8017d10: 00800044 movi r2,1
8017d14: d8800015 stw r2,0(sp)
8017d18: 000f883a mov r7,zero
8017d1c: 000d883a mov r6,zero
8017d20: e17ffd17 ldw r5,-12(fp)
8017d24: 1809883a mov r4,r3
8017d28: 801fd340 call 801fd34 <alt_msgdma_start_prefetcher_with_std_desc_list>
8017d2c: e0bfffc5 stb r2,-1(fp)
mi->tx_msgdma,
txDesc,0,0,1,1);
if (result != 0) { return -1; }
8017d30: e0bfffc3 ldbu r2,-1(fp)
8017d34: 10000226 beq r2,zero,8017d40 <tse_mac_aTxWrite+0x58>
8017d38: 00bfffc4 movi r2,-1
8017d3c: 00000106 br 8017d44 <tse_mac_aTxWrite+0x5c>
return SUCCESS;
8017d40: 0005883a mov r2,zero
}
8017d44: e037883a mov sp,fp
8017d48: dfc00117 ldw ra,4(sp)
8017d4c: df000017 ldw fp,0(sp)
8017d50: dec00204 addi sp,sp,8
8017d54: f800283a ret
08017d58 <tse_mac_SwReset>:
* COMMAND_CONFIG register is restored after reset.
* @API Type: Public
* @param pmac Pointer to the TSE MAC Control Interface Base address
*/
alt_32 tse_mac_SwReset(np_tse_mac *pmac)
{
8017d58: defffc04 addi sp,sp,-16
8017d5c: df000315 stw fp,12(sp)
8017d60: df000304 addi fp,sp,12
8017d64: e13ffd15 stw r4,-12(fp)
alt_32 timeout;
alt_32 cc;
cc = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac);
8017d68: e0bffd17 ldw r2,-12(fp)
8017d6c: 10800204 addi r2,r2,8
8017d70: 10800037 ldwio r2,0(r2)
8017d74: e0bffe15 stw r2,-8(fp)
// set reset and Gig-Speed bits to make sure we have an incoming clock on
// tx side. If there is a 10/100 PHY, we will still have a valid clock on
// tx_clk no matter what setting we have here, but on a Gig phy the
// MII clock may be missing.
IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac,(ALTERA_TSEMAC_CMD_SW_RESET_MSK | ALTERA_TSEMAC_CMD_ETH_SPEED_MSK));
8017d78: e0bffd17 ldw r2,-12(fp)
8017d7c: 10800204 addi r2,r2,8
8017d80: 00c80204 movi r3,8200
8017d84: 10c00035 stwio r3,0(r2)
// wait for completion with fallback in case there is no PHY or it is
// not connected and hence might not provide any clocks at all.
timeout=0;
8017d88: e03fff15 stw zero,-4(fp)
while( (IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac) & ALTERA_TSEMAC_CMD_SW_RESET_MSK) != 0 && timeout < ALTERA_TSE_SW_RESET_TIME_OUT_CNT) timeout++;
8017d8c: 00000306 br 8017d9c <tse_mac_SwReset+0x44>
8017d90: e0bfff17 ldw r2,-4(fp)
8017d94: 10800044 addi r2,r2,1
8017d98: e0bfff15 stw r2,-4(fp)
8017d9c: e0bffd17 ldw r2,-12(fp)
8017da0: 10800204 addi r2,r2,8
8017da4: 10800037 ldwio r2,0(r2)
8017da8: 1088000c andi r2,r2,8192
8017dac: 10000326 beq r2,zero,8017dbc <tse_mac_SwReset+0x64>
8017db0: e0bfff17 ldw r2,-4(fp)
8017db4: 1089c410 cmplti r2,r2,10000
8017db8: 103ff51e bne r2,zero,8017d90 <tse_mac_SwReset+0x38>
IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac,cc); // Restore
8017dbc: e0bffd17 ldw r2,-12(fp)
8017dc0: 10800204 addi r2,r2,8
8017dc4: e0fffe17 ldw r3,-8(fp)
8017dc8: 10c00035 stwio r3,0(r2)
return SUCCESS;
8017dcc: 0005883a mov r2,zero
}
8017dd0: e037883a mov sp,fp
8017dd4: df000017 ldw fp,0(sp)
8017dd8: dec00104 addi sp,sp,4
8017ddc: f800283a ret
08017de0 <tse_mac_setMIImode>:
* COMMAND_CONFIG register is restored after reset.
* @API Type: Public
* @param pmac Pointer to the TSE MAC Control Interface Base address
*/
alt_32 tse_mac_setMIImode(np_tse_mac *pmac)
{
8017de0: defffd04 addi sp,sp,-12
8017de4: df000215 stw fp,8(sp)
8017de8: df000204 addi fp,sp,8
8017dec: e13ffe15 stw r4,-8(fp)
alt_32 helpvar;
helpvar = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac);
8017df0: e0bffe17 ldw r2,-8(fp)
8017df4: 10800204 addi r2,r2,8
8017df8: 10800037 ldwio r2,0(r2)
8017dfc: e0bfff15 stw r2,-4(fp)
helpvar &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8017e00: e0ffff17 ldw r3,-4(fp)
8017e04: 00bffdc4 movi r2,-9
8017e08: 1884703a and r2,r3,r2
8017e0c: e0bfff15 stw r2,-4(fp)
IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac,helpvar);
8017e10: e0bffe17 ldw r2,-8(fp)
8017e14: 10800204 addi r2,r2,8
8017e18: e0ffff17 ldw r3,-4(fp)
8017e1c: 10c00035 stwio r3,0(r2)
return SUCCESS;
8017e20: 0005883a mov r2,zero
}
8017e24: e037883a mov sp,fp
8017e28: df000017 ldw fp,0(sp)
8017e2c: dec00104 addi sp,sp,4
8017e30: f800283a ret
08017e34 <tse_mac_setGMIImode>:
* COMMAND_CONFIG register is restored after reset.
* @API Type: Public
* @param pmac Pointer to the TSE MAC Control Interface Base address
*/
alt_32 tse_mac_setGMIImode(np_tse_mac *pmac)
{
8017e34: defffd04 addi sp,sp,-12
8017e38: df000215 stw fp,8(sp)
8017e3c: df000204 addi fp,sp,8
8017e40: e13ffe15 stw r4,-8(fp)
alt_32 helpvar;
helpvar = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac);
8017e44: e0bffe17 ldw r2,-8(fp)
8017e48: 10800204 addi r2,r2,8
8017e4c: 10800037 ldwio r2,0(r2)
8017e50: e0bfff15 stw r2,-4(fp)
helpvar |= ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8017e54: e0bfff17 ldw r2,-4(fp)
8017e58: 10800214 ori r2,r2,8
8017e5c: e0bfff15 stw r2,-4(fp)
IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac,helpvar);
8017e60: e0bffe17 ldw r2,-8(fp)
8017e64: 10800204 addi r2,r2,8
8017e68: e0ffff17 ldw r3,-4(fp)
8017e6c: 10c00035 stwio r3,0(r2)
return SUCCESS;
8017e70: 0005883a mov r2,zero
}
8017e74: e037883a mov sp,fp
8017e78: df000017 ldw fp,0(sp)
8017e7c: dec00104 addi sp,sp,4
8017e80: f800283a ret
08017e84 <alt_tse_phy_add_profile>:
* @param phy pointer to alt_tse_phy_profile structure describing PHY registers
* @return index of PHY added in PHY profile on success, else return ALTERA_TSE_MALLOC_FAILED if memory allocation failed
* PHY which are currently supported by default : Marvell 88E1111, Marvell Quad PHY 88E1145, National DP83865, and National DP83848C
*/
alt_32 alt_tse_phy_add_profile(alt_tse_phy_profile *phy)
{
8017e84: defffb04 addi sp,sp,-20
8017e88: dfc00415 stw ra,16(sp)
8017e8c: df000315 stw fp,12(sp)
8017e90: dc000215 stw r16,8(sp)
8017e94: df000304 addi fp,sp,12
8017e98: e13ffd15 stw r4,-12(fp)
alt_32 i;
/* search PHY profile for same ID */
for(i = 0; i < phy_profile_count; i++)
8017e9c: e03ffe15 stw zero,-8(fp)
8017ea0: 00002506 br 8017f38 <alt_tse_phy_add_profile+0xb4>
{
if(pphy_profiles[i]->oui == phy->oui && pphy_profiles[i]->model_number == phy->model_number)
8017ea4: e0bffe17 ldw r2,-8(fp)
8017ea8: 100690ba slli r3,r2,2
8017eac: 008201b4 movhi r2,2054
8017eb0: 1885883a add r2,r3,r2
8017eb4: 10b5ae17 ldw r2,-10568(r2)
8017eb8: 10c01417 ldw r3,80(r2)
8017ebc: e0bffd17 ldw r2,-12(fp)
8017ec0: 10801417 ldw r2,80(r2)
8017ec4: 1880191e bne r3,r2,8017f2c <alt_tse_phy_add_profile+0xa8>
8017ec8: e0bffe17 ldw r2,-8(fp)
8017ecc: 100690ba slli r3,r2,2
8017ed0: 008201b4 movhi r2,2054
8017ed4: 1885883a add r2,r3,r2
8017ed8: 10b5ae17 ldw r2,-10568(r2)
8017edc: 10c01503 ldbu r3,84(r2)
8017ee0: e0bffd17 ldw r2,-12(fp)
8017ee4: 10801503 ldbu r2,84(r2)
8017ee8: 18c03fcc andi r3,r3,255
8017eec: 10803fcc andi r2,r2,255
8017ef0: 18800e1e bne r3,r2,8017f2c <alt_tse_phy_add_profile+0xa8>
{
tse_dprintf(4, "WARNING : PHY OUI 0x%06x, PHY Model Number 0x%02x already exist in PHY profile\n", (int) phy->oui, phy->model_number);
8017ef4: e0bffd17 ldw r2,-12(fp)
8017ef8: 10801417 ldw r2,80(r2)
8017efc: 1007883a mov r3,r2
8017f00: e0bffd17 ldw r2,-12(fp)
8017f04: 10801503 ldbu r2,84(r2)
8017f08: 10803fcc andi r2,r2,255
8017f0c: 100d883a mov r6,r2
8017f10: 180b883a mov r5,r3
8017f14: 01020134 movhi r4,2052
8017f18: 211e4d04 addi r4,r4,31028
8017f1c: 8002c780 call 8002c78 <printf>
tse_dprintf(4, "In case of same PHY OUI and PHY Model Number in profile, first added PHY setting will be used\n");
8017f20: 01020134 movhi r4,2052
8017f24: 211e6104 addi r4,r4,31108
8017f28: 8002d9c0 call 8002d9c <puts>
for(i = 0; i < phy_profile_count; i++)
8017f2c: e0bffe17 ldw r2,-8(fp)
8017f30: 10800044 addi r2,r2,1
8017f34: e0bffe15 stw r2,-8(fp)
8017f38: d0a05b03 ldbu r2,-32404(gp)
8017f3c: 10803fcc andi r2,r2,255
8017f40: e0fffe17 ldw r3,-8(fp)
8017f44: 18bfd716 blt r3,r2,8017ea4 <alt_tse_phy_add_profile+0x20>
}
}
/* Allocate memory space to store the profile */
pphy_profiles[phy_profile_count] = (alt_tse_phy_profile *) malloc(sizeof(alt_tse_phy_profile));
8017f48: d0a05b03 ldbu r2,-32404(gp)
8017f4c: 14003fcc andi r16,r2,255
8017f50: 01001904 movi r4,100
8017f54: 8042c980 call 8042c98 <malloc>
8017f58: 1009883a mov r4,r2
8017f5c: 800690ba slli r3,r16,2
8017f60: 008201b4 movhi r2,2054
8017f64: 1885883a add r2,r3,r2
8017f68: 1135ae15 stw r4,-10568(r2)
if(!pphy_profiles[phy_profile_count]) {
8017f6c: d0a05b03 ldbu r2,-32404(gp)
8017f70: 10803fcc andi r2,r2,255
8017f74: 100690ba slli r3,r2,2
8017f78: 008201b4 movhi r2,2054
8017f7c: 1885883a add r2,r3,r2
8017f80: 10b5ae17 ldw r2,-10568(r2)
8017f84: 1000081e bne r2,zero,8017fa8 <alt_tse_phy_add_profile+0x124>
tse_dprintf(1, "ERROR : Unable to allocate memory for pphy_profile[%d]\n", phy_profile_count);
8017f88: d0a05b03 ldbu r2,-32404(gp)
8017f8c: 10803fcc andi r2,r2,255
8017f90: 100b883a mov r5,r2
8017f94: 01020134 movhi r4,2052
8017f98: 211e7904 addi r4,r4,31204
8017f9c: 8002c780 call 8002c78 <printf>
return ALTERA_TSE_MALLOC_FAILED;
8017fa0: 00bfffc4 movi r2,-1
8017fa4: 00001e06 br 8018020 <alt_tse_phy_add_profile+0x19c>
}
/* Store PHY information */
*pphy_profiles[phy_profile_count] = *phy;
8017fa8: d0a05b03 ldbu r2,-32404(gp)
8017fac: 10803fcc andi r2,r2,255
8017fb0: 100690ba slli r3,r2,2
8017fb4: 008201b4 movhi r2,2054
8017fb8: 1885883a add r2,r3,r2
8017fbc: 10f5ae17 ldw r3,-10568(r2)
8017fc0: e0bffd17 ldw r2,-12(fp)
8017fc4: 1009883a mov r4,r2
8017fc8: 00801904 movi r2,100
8017fcc: 100d883a mov r6,r2
8017fd0: 200b883a mov r5,r4
8017fd4: 1809883a mov r4,r3
8017fd8: 80086b80 call 80086b8 <memcpy>
strcpy(pphy_profiles[phy_profile_count]->name, phy->name);
8017fdc: d0a05b03 ldbu r2,-32404(gp)
8017fe0: 10803fcc andi r2,r2,255
8017fe4: 100690ba slli r3,r2,2
8017fe8: 008201b4 movhi r2,2054
8017fec: 1885883a add r2,r3,r2
8017ff0: 10b5ae17 ldw r2,-10568(r2)
8017ff4: 1007883a mov r3,r2
8017ff8: e0bffd17 ldw r2,-12(fp)
8017ffc: 100b883a mov r5,r2
8018000: 1809883a mov r4,r3
8018004: 8042f600 call 8042f60 <strcpy>
phy_profile_count++;
8018008: d0a05b03 ldbu r2,-32404(gp)
801800c: 10800044 addi r2,r2,1
8018010: d0a05b05 stb r2,-32404(gp)
return phy_profile_count - 1;
8018014: d0a05b03 ldbu r2,-32404(gp)
8018018: 10803fcc andi r2,r2,255
801801c: 10bfffc4 addi r2,r2,-1
}
8018020: e6ffff04 addi sp,fp,-4
8018024: dfc00217 ldw ra,8(sp)
8018028: df000117 ldw fp,4(sp)
801802c: dc000017 ldw r16,0(sp)
8018030: dec00304 addi sp,sp,12
8018034: f800283a ret
08018038 <alt_tse_system_add_sys>:
alt_32 alt_tse_system_add_sys(
alt_tse_system_mac *psys_mac,
alt_tse_system_msgdma *psys_msgdma,
alt_tse_system_desc_mem *psys_mem,
alt_tse_system_shared_fifo *psys_shared_fifo,
alt_tse_system_phy *psys_phy ) {
8018038: defff204 addi sp,sp,-56
801803c: dfc00d15 stw ra,52(sp)
8018040: df000c15 stw fp,48(sp)
8018044: dc000b15 stw r16,44(sp)
8018048: df000c04 addi fp,sp,48
801804c: e13ff715 stw r4,-36(fp)
8018050: e17ff615 stw r5,-40(fp)
8018054: e1bff515 stw r6,-44(fp)
8018058: e1fff415 stw r7,-48(fp)
int i;
int loop_end;
alt_tse_system_mac *pmac = psys_mac;
801805c: e0bff717 ldw r2,-36(fp)
8018060: e0bff815 stw r2,-32(fp)
alt_tse_system_msgdma *pmsgdma = psys_msgdma;
8018064: e0bff617 ldw r2,-40(fp)
8018068: e0bffb15 stw r2,-20(fp)
alt_tse_system_desc_mem *pmem = psys_mem;
801806c: e0bff517 ldw r2,-44(fp)
8018070: e0bffc15 stw r2,-16(fp)
alt_tse_system_shared_fifo *pfifo = psys_shared_fifo;
8018074: e0bff417 ldw r2,-48(fp)
8018078: e0bffe15 stw r2,-8(fp)
alt_tse_system_phy *pphy = psys_phy;
801807c: e0800217 ldw r2,8(fp)
8018080: e0bffd15 stw r2,-12(fp)
static alt_8 tse_system_count = 0;
/* Determine number of loop */
/* Run at least one for non-multi-channel MAC */
if(pmac->tse_num_of_channel == 0) {
8018084: e0bff817 ldw r2,-32(fp)
8018088: 10800303 ldbu r2,12(r2)
801808c: 10803fcc andi r2,r2,255
8018090: 1000031e bne r2,zero,80180a0 <alt_tse_system_add_sys+0x68>
loop_end = 1;
8018094: 00800044 movi r2,1
8018098: e0bff915 stw r2,-28(fp)
801809c: 00000e06 br 80180d8 <alt_tse_system_add_sys+0xa0>
}
else if(pmac->tse_num_of_channel > 0) {
80180a0: e0bff817 ldw r2,-32(fp)
80180a4: 10800303 ldbu r2,12(r2)
80180a8: 10803fcc andi r2,r2,255
80180ac: 10000526 beq r2,zero,80180c4 <alt_tse_system_add_sys+0x8c>
loop_end = pmac->tse_num_of_channel;
80180b0: e0bff817 ldw r2,-32(fp)
80180b4: 10800303 ldbu r2,12(r2)
80180b8: 10803fcc andi r2,r2,255
80180bc: e0bff915 stw r2,-28(fp)
80180c0: 00000506 br 80180d8 <alt_tse_system_add_sys+0xa0>
}
else {
tse_dprintf(2, "ERROR : Invalid number of channel specified!\n");
80180c4: 01020134 movhi r4,2052
80180c8: 211e8804 addi r4,r4,31264
80180cc: 8002d9c0 call 8002d9c <puts>
return ALTERA_TSE_SYSTEM_DEF_ERROR;
80180d0: 00bfffc4 movi r2,-1
80180d4: 00020306 br 80188e4 <alt_tse_system_add_sys+0x8ac>
}
for(i = 0; i < loop_end; i++) {
80180d8: e03ffa15 stw zero,-24(fp)
80180dc: 0001fd06 br 80188d4 <alt_tse_system_add_sys+0x89c>
/* Make sure the boundary of array is not exceeded */
if(tse_system_count >= MAXNETS) {
80180e0: d0a05b83 ldbu r2,-32402(gp)
80180e4: 10803fcc andi r2,r2,255
80180e8: 1080201c xori r2,r2,128
80180ec: 10bfe004 addi r2,r2,-128
80180f0: 10800110 cmplti r2,r2,4
80180f4: 10000c1e bne r2,zero,8018128 <alt_tse_system_add_sys+0xf0>
tse_dprintf(2, "ERROR : Number of TSE System added exceed the size of array!\n");
80180f8: 01020134 movhi r4,2052
80180fc: 211e9404 addi r4,r4,31312
8018100: 8002d9c0 call 8002d9c <puts>
tse_dprintf(2, "ERROR : Size of array = %d, Number of TSE System = %d\n", MAXNETS, tse_system_count);
8018104: d0a05b83 ldbu r2,-32402(gp)
8018108: 10803fcc andi r2,r2,255
801810c: 1080201c xori r2,r2,128
8018110: 10bfe004 addi r2,r2,-128
8018114: 100d883a mov r6,r2
8018118: 01400104 movi r5,4
801811c: 01020134 movhi r4,2052
8018120: 211ea404 addi r4,r4,31376
8018124: 8002c780 call 8002c78 <printf>
}
/* Add MAC info to alt_tse_system_info structure */
if(pmac == 0) {
8018128: e0bff817 ldw r2,-32(fp)
801812c: 1000081e bne r2,zero,8018150 <alt_tse_system_add_sys+0x118>
tse_dprintf(2, "ERROR : MAC system structure == NULL\n");
8018130: 01020134 movhi r4,2052
8018134: 211eb304 addi r4,r4,31436
8018138: 8002d9c0 call 8002d9c <puts>
tse_dprintf(2, "ERROR : Please pass in correct pointer to alt_tse_system_add_sys()\n");
801813c: 01020134 movhi r4,2052
8018140: 211ebd04 addi r4,r4,31476
8018144: 8002d9c0 call 8002d9c <puts>
return ALTERA_TSE_SYSTEM_DEF_ERROR;
8018148: 00bfffc4 movi r2,-1
801814c: 0001e506 br 80188e4 <alt_tse_system_add_sys+0x8ac>
}
tse_mac_device[tse_system_count].tse_mac_base = pmac->tse_mac_base + (i * 0x400);
8018150: e0bff817 ldw r2,-32(fp)
8018154: 10c00017 ldw r3,0(r2)
8018158: e0bffa17 ldw r2,-24(fp)
801815c: 100492ba slli r2,r2,10
8018160: 1009883a mov r4,r2
8018164: d0a05b83 ldbu r2,-32402(gp)
8018168: 10803fcc andi r2,r2,255
801816c: 1080201c xori r2,r2,128
8018170: 10bfe004 addi r2,r2,-128
8018174: 1907883a add r3,r3,r4
8018178: 11001324 muli r4,r2,76
801817c: 00820174 movhi r2,2053
8018180: 2085883a add r2,r4,r2
8018184: 10ee5415 stw r3,-18096(r2)
tse_mac_device[tse_system_count].tse_tx_depth = pmac->tse_tx_depth;
8018188: e0bff817 ldw r2,-32(fp)
801818c: 10c0010b ldhu r3,4(r2)
8018190: d0a05b83 ldbu r2,-32402(gp)
8018194: 10803fcc andi r2,r2,255
8018198: 1080201c xori r2,r2,128
801819c: 10bfe004 addi r2,r2,-128
80181a0: 18ffffcc andi r3,r3,65535
80181a4: 11001324 muli r4,r2,76
80181a8: 00820174 movhi r2,2053
80181ac: 2085883a add r2,r4,r2
80181b0: 10ee5515 stw r3,-18092(r2)
tse_mac_device[tse_system_count].tse_rx_depth = pmac->tse_rx_depth;
80181b4: e0bff817 ldw r2,-32(fp)
80181b8: 10c0018b ldhu r3,6(r2)
80181bc: d0a05b83 ldbu r2,-32402(gp)
80181c0: 10803fcc andi r2,r2,255
80181c4: 1080201c xori r2,r2,128
80181c8: 10bfe004 addi r2,r2,-128
80181cc: 18ffffcc andi r3,r3,65535
80181d0: 11001324 muli r4,r2,76
80181d4: 00820174 movhi r2,2053
80181d8: 2085883a add r2,r4,r2
80181dc: 10ee5615 stw r3,-18088(r2)
tse_mac_device[tse_system_count].tse_use_mdio = pmac->tse_use_mdio;
80181e0: d0a05b83 ldbu r2,-32402(gp)
80181e4: 10803fcc andi r2,r2,255
80181e8: 1080201c xori r2,r2,128
80181ec: 10bfe004 addi r2,r2,-128
80181f0: e0fff817 ldw r3,-32(fp)
80181f4: 18c00203 ldbu r3,8(r3)
80181f8: 11001324 muli r4,r2,76
80181fc: 00820174 movhi r2,2053
8018200: 2085883a add r2,r4,r2
8018204: 10ee5705 stb r3,-18084(r2)
tse_mac_device[tse_system_count].tse_en_maclite = pmac->tse_en_maclite;
8018208: d0a05b83 ldbu r2,-32402(gp)
801820c: 10803fcc andi r2,r2,255
8018210: 1080201c xori r2,r2,128
8018214: 10bfe004 addi r2,r2,-128
8018218: e0fff817 ldw r3,-32(fp)
801821c: 18c00243 ldbu r3,9(r3)
8018220: 11001324 muli r4,r2,76
8018224: 00820174 movhi r2,2053
8018228: 2085883a add r2,r4,r2
801822c: 10ee5745 stb r3,-18083(r2)
tse_mac_device[tse_system_count].tse_maclite_gige = pmac->tse_maclite_gige;
8018230: d0a05b83 ldbu r2,-32402(gp)
8018234: 10803fcc andi r2,r2,255
8018238: 1080201c xori r2,r2,128
801823c: 10bfe004 addi r2,r2,-128
8018240: e0fff817 ldw r3,-32(fp)
8018244: 18c00283 ldbu r3,10(r3)
8018248: 11001324 muli r4,r2,76
801824c: 00820174 movhi r2,2053
8018250: 2085883a add r2,r4,r2
8018254: 10ee5785 stb r3,-18082(r2)
tse_mac_device[tse_system_count].tse_multichannel_mac = pmac->tse_multichannel_mac;
8018258: d0a05b83 ldbu r2,-32402(gp)
801825c: 10803fcc andi r2,r2,255
8018260: 1080201c xori r2,r2,128
8018264: 10bfe004 addi r2,r2,-128
8018268: e0fff817 ldw r3,-32(fp)
801826c: 18c002c3 ldbu r3,11(r3)
8018270: 11001324 muli r4,r2,76
8018274: 00820174 movhi r2,2053
8018278: 2085883a add r2,r4,r2
801827c: 10ee57c5 stb r3,-18081(r2)
tse_mac_device[tse_system_count].tse_num_of_channel = pmac->tse_num_of_channel;
8018280: d0a05b83 ldbu r2,-32402(gp)
8018284: 10803fcc andi r2,r2,255
8018288: 1080201c xori r2,r2,128
801828c: 10bfe004 addi r2,r2,-128
8018290: e0fff817 ldw r3,-32(fp)
8018294: 18c00303 ldbu r3,12(r3)
8018298: 11001324 muli r4,r2,76
801829c: 00820174 movhi r2,2053
80182a0: 2085883a add r2,r4,r2
80182a4: 10ee5805 stb r3,-18080(r2)
tse_mac_device[tse_system_count].tse_mdio_shared = pmac->tse_mdio_shared;
80182a8: d0a05b83 ldbu r2,-32402(gp)
80182ac: 10803fcc andi r2,r2,255
80182b0: 1080201c xori r2,r2,128
80182b4: 10bfe004 addi r2,r2,-128
80182b8: e0fff817 ldw r3,-32(fp)
80182bc: 18c00343 ldbu r3,13(r3)
80182c0: 11001324 muli r4,r2,76
80182c4: 00820174 movhi r2,2053
80182c8: 2085883a add r2,r4,r2
80182cc: 10ee5845 stb r3,-18079(r2)
tse_mac_device[tse_system_count].tse_number_of_mac_mdio_shared = pmac->tse_number_of_mac_mdio_shared;
80182d0: d0a05b83 ldbu r2,-32402(gp)
80182d4: 10803fcc andi r2,r2,255
80182d8: 1080201c xori r2,r2,128
80182dc: 10bfe004 addi r2,r2,-128
80182e0: e0fff817 ldw r3,-32(fp)
80182e4: 18c00383 ldbu r3,14(r3)
80182e8: 11001324 muli r4,r2,76
80182ec: 00820174 movhi r2,2053
80182f0: 2085883a add r2,r4,r2
80182f4: 10ee5885 stb r3,-18078(r2)
tse_mac_device[tse_system_count].tse_pcs_ena = pmac->tse_pcs_ena;
80182f8: d0a05b83 ldbu r2,-32402(gp)
80182fc: 10803fcc andi r2,r2,255
8018300: 1080201c xori r2,r2,128
8018304: 10bfe004 addi r2,r2,-128
8018308: e0fff817 ldw r3,-32(fp)
801830c: 18c003c3 ldbu r3,15(r3)
8018310: 11001324 muli r4,r2,76
8018314: 00820174 movhi r2,2053
8018318: 2085883a add r2,r4,r2
801831c: 10ee58c5 stb r3,-18077(r2)
tse_mac_device[tse_system_count].tse_pcs_sgmii = pmac->tse_pcs_sgmii;
8018320: d0a05b83 ldbu r2,-32402(gp)
8018324: 10803fcc andi r2,r2,255
8018328: 1080201c xori r2,r2,128
801832c: 10bfe004 addi r2,r2,-128
8018330: e0fff817 ldw r3,-32(fp)
8018334: 18c00403 ldbu r3,16(r3)
8018338: 11001324 muli r4,r2,76
801833c: 00820174 movhi r2,2053
8018340: 2085883a add r2,r4,r2
8018344: 10ee5905 stb r3,-18076(r2)
/* Add MSGDMA info to alt_tse_system_info structure */
if(pmsgdma == 0) {
8018348: e0bffb17 ldw r2,-20(fp)
801834c: 10000d1e bne r2,zero,8018384 <alt_tse_system_add_sys+0x34c>
tse_dprintf(2, "ERROR : MSGDMA system structure == NULL\n");
8018350: 01020134 movhi r4,2052
8018354: 211ecf04 addi r4,r4,31548
8018358: 8002d9c0 call 8002d9c <puts>
tse_dprintf(2, "ERROR : Please pass in correct pointer to alt_tse_system_add_sys() for tse_mac_device[%d]\n", tse_system_count);
801835c: d0a05b83 ldbu r2,-32402(gp)
8018360: 10803fcc andi r2,r2,255
8018364: 1080201c xori r2,r2,128
8018368: 10bfe004 addi r2,r2,-128
801836c: 100b883a mov r5,r2
8018370: 01020134 movhi r4,2052
8018374: 211eda04 addi r4,r4,31592
8018378: 8002c780 call 8002c78 <printf>
return ALTERA_TSE_SYSTEM_DEF_ERROR;
801837c: 00bfffc4 movi r2,-1
8018380: 00015806 br 80188e4 <alt_tse_system_add_sys+0x8ac>
}
tse_mac_device[tse_system_count].tse_msgdma_tx = (char *) malloc(strlen(pmsgdma->tse_msgdma_tx) + 1);
8018384: e0bffb17 ldw r2,-20(fp)
8018388: 10800017 ldw r2,0(r2)
801838c: 1009883a mov r4,r2
8018390: 8002dac0 call 8002dac <strlen>
8018394: 10800044 addi r2,r2,1
8018398: d0e05b83 ldbu r3,-32402(gp)
801839c: 1c003fcc andi r16,r3,255
80183a0: 8400201c xori r16,r16,128
80183a4: 843fe004 addi r16,r16,-128
80183a8: 1009883a mov r4,r2
80183ac: 8042c980 call 8042c98 <malloc>
80183b0: 1009883a mov r4,r2
80183b4: 80c01324 muli r3,r16,76
80183b8: 00820174 movhi r2,2053
80183bc: 1885883a add r2,r3,r2
80183c0: 112e5a15 stw r4,-18072(r2)
if(!tse_mac_device[tse_system_count].tse_msgdma_tx) {
80183c4: d0a05b83 ldbu r2,-32402(gp)
80183c8: 10803fcc andi r2,r2,255
80183cc: 1080201c xori r2,r2,128
80183d0: 10bfe004 addi r2,r2,-128
80183d4: 10c01324 muli r3,r2,76
80183d8: 00820174 movhi r2,2053
80183dc: 1885883a add r2,r3,r2
80183e0: 10ae5a17 ldw r2,-18072(r2)
80183e4: 10000a1e bne r2,zero,8018410 <alt_tse_system_add_sys+0x3d8>
tse_dprintf(1, "ERROR : Unable to allocate memory for tse_mac_device[%d].tse_msgdma_tx\n", tse_system_count);
80183e8: d0a05b83 ldbu r2,-32402(gp)
80183ec: 10803fcc andi r2,r2,255
80183f0: 1080201c xori r2,r2,128
80183f4: 10bfe004 addi r2,r2,-128
80183f8: 100b883a mov r5,r2
80183fc: 01020134 movhi r4,2052
8018400: 211ef204 addi r4,r4,31688
8018404: 8002c780 call 8002c78 <printf>
return ALTERA_TSE_MALLOC_FAILED;
8018408: 00bfffc4 movi r2,-1
801840c: 00013506 br 80188e4 <alt_tse_system_add_sys+0x8ac>
}
strcpy(tse_mac_device[tse_system_count].tse_msgdma_tx, pmsgdma->tse_msgdma_tx);
8018410: d0a05b83 ldbu r2,-32402(gp)
8018414: 10803fcc andi r2,r2,255
8018418: 1080201c xori r2,r2,128
801841c: 10bfe004 addi r2,r2,-128
8018420: 10c01324 muli r3,r2,76
8018424: 00820174 movhi r2,2053
8018428: 1885883a add r2,r3,r2
801842c: 10ee5a17 ldw r3,-18072(r2)
8018430: e0bffb17 ldw r2,-20(fp)
8018434: 10800017 ldw r2,0(r2)
8018438: 100b883a mov r5,r2
801843c: 1809883a mov r4,r3
8018440: 8042f600 call 8042f60 <strcpy>
tse_mac_device[tse_system_count].tse_msgdma_rx = (char *) malloc(strlen(pmsgdma->tse_msgdma_rx) + 1);
8018444: e0bffb17 ldw r2,-20(fp)
8018448: 10800117 ldw r2,4(r2)
801844c: 1009883a mov r4,r2
8018450: 8002dac0 call 8002dac <strlen>
8018454: 10800044 addi r2,r2,1
8018458: d0e05b83 ldbu r3,-32402(gp)
801845c: 1c003fcc andi r16,r3,255
8018460: 8400201c xori r16,r16,128
8018464: 843fe004 addi r16,r16,-128
8018468: 1009883a mov r4,r2
801846c: 8042c980 call 8042c98 <malloc>
8018470: 1009883a mov r4,r2
8018474: 80c01324 muli r3,r16,76
8018478: 00820174 movhi r2,2053
801847c: 1885883a add r2,r3,r2
8018480: 112e5b15 stw r4,-18068(r2)
if(!tse_mac_device[tse_system_count].tse_msgdma_rx) {
8018484: d0a05b83 ldbu r2,-32402(gp)
8018488: 10803fcc andi r2,r2,255
801848c: 1080201c xori r2,r2,128
8018490: 10bfe004 addi r2,r2,-128
8018494: 10c01324 muli r3,r2,76
8018498: 00820174 movhi r2,2053
801849c: 1885883a add r2,r3,r2
80184a0: 10ae5b17 ldw r2,-18068(r2)
80184a4: 10000a1e bne r2,zero,80184d0 <alt_tse_system_add_sys+0x498>
tse_dprintf(1, "ERROR : Unable to allocate memory for tse_mac_device[%d].tse_msgdma_rx\n", tse_system_count);
80184a8: d0a05b83 ldbu r2,-32402(gp)
80184ac: 10803fcc andi r2,r2,255
80184b0: 1080201c xori r2,r2,128
80184b4: 10bfe004 addi r2,r2,-128
80184b8: 100b883a mov r5,r2
80184bc: 01020134 movhi r4,2052
80184c0: 211f0504 addi r4,r4,31764
80184c4: 8002c780 call 8002c78 <printf>
return ALTERA_TSE_MALLOC_FAILED;
80184c8: 00bfffc4 movi r2,-1
80184cc: 00010506 br 80188e4 <alt_tse_system_add_sys+0x8ac>
}
strcpy(tse_mac_device[tse_system_count].tse_msgdma_rx, pmsgdma->tse_msgdma_rx);
80184d0: d0a05b83 ldbu r2,-32402(gp)
80184d4: 10803fcc andi r2,r2,255
80184d8: 1080201c xori r2,r2,128
80184dc: 10bfe004 addi r2,r2,-128
80184e0: 10c01324 muli r3,r2,76
80184e4: 00820174 movhi r2,2053
80184e8: 1885883a add r2,r3,r2
80184ec: 10ee5b17 ldw r3,-18068(r2)
80184f0: e0bffb17 ldw r2,-20(fp)
80184f4: 10800117 ldw r2,4(r2)
80184f8: 100b883a mov r5,r2
80184fc: 1809883a mov r4,r3
8018500: 8042f600 call 8042f60 <strcpy>
tse_mac_device[tse_system_count].tse_msgdma_rx_irq = pmsgdma->tse_msgdma_rx_irq;
8018504: d0a05b83 ldbu r2,-32402(gp)
8018508: 10803fcc andi r2,r2,255
801850c: 1080201c xori r2,r2,128
8018510: 10bfe004 addi r2,r2,-128
8018514: e0fffb17 ldw r3,-20(fp)
8018518: 18c0020b ldhu r3,8(r3)
801851c: 11001324 muli r4,r2,76
8018520: 00820174 movhi r2,2053
8018524: 2085883a add r2,r4,r2
8018528: 10ee5c0d sth r3,-18064(r2)
/* Add descriptor memory info to alt_tse_system_info structure */
if(pmem == 0) {
801852c: e0bffc17 ldw r2,-16(fp)
8018530: 1000111e bne r2,zero,8018578 <alt_tse_system_add_sys+0x540>
tse_mac_device[tse_system_count].ext_desc_mem = TSE_INT_DESC_MEM;
8018534: d0a05b83 ldbu r2,-32402(gp)
8018538: 10803fcc andi r2,r2,255
801853c: 1080201c xori r2,r2,128
8018540: 10bfe004 addi r2,r2,-128
8018544: 10c01324 muli r3,r2,76
8018548: 00820174 movhi r2,2053
801854c: 1885883a add r2,r3,r2
8018550: 102e5c85 stb zero,-18062(r2)
tse_mac_device[tse_system_count].desc_mem_base = TSE_INT_DESC_MEM;
8018554: d0a05b83 ldbu r2,-32402(gp)
8018558: 10803fcc andi r2,r2,255
801855c: 1080201c xori r2,r2,128
8018560: 10bfe004 addi r2,r2,-128
8018564: 10c01324 muli r3,r2,76
8018568: 00820174 movhi r2,2053
801856c: 1885883a add r2,r3,r2
8018570: 102e5d15 stw zero,-18060(r2)
8018574: 00001406 br 80185c8 <alt_tse_system_add_sys+0x590>
}
else {
tse_mac_device[tse_system_count].ext_desc_mem = pmem->ext_desc_mem;
8018578: d0a05b83 ldbu r2,-32402(gp)
801857c: 10803fcc andi r2,r2,255
8018580: 1080201c xori r2,r2,128
8018584: 10bfe004 addi r2,r2,-128
8018588: e0fffc17 ldw r3,-16(fp)
801858c: 18c00003 ldbu r3,0(r3)
8018590: 11001324 muli r4,r2,76
8018594: 00820174 movhi r2,2053
8018598: 2085883a add r2,r4,r2
801859c: 10ee5c85 stb r3,-18062(r2)
tse_mac_device[tse_system_count].desc_mem_base = pmem->desc_mem_base;
80185a0: d0a05b83 ldbu r2,-32402(gp)
80185a4: 10803fcc andi r2,r2,255
80185a8: 1080201c xori r2,r2,128
80185ac: 10bfe004 addi r2,r2,-128
80185b0: e0fffc17 ldw r3,-16(fp)
80185b4: 18c00117 ldw r3,4(r3)
80185b8: 11001324 muli r4,r2,76
80185bc: 00820174 movhi r2,2053
80185c0: 2085883a add r2,r4,r2
80185c4: 10ee5d15 stw r3,-18060(r2)
}
/* Add shared fifo info to alt_tse_system_info structure */
if(pfifo == 0) {
80185c8: e0bffe17 ldw r2,-8(fp)
80185cc: 1000391e bne r2,zero,80186b4 <alt_tse_system_add_sys+0x67c>
tse_mac_device[tse_system_count].use_shared_fifo = TSE_NO_SHARED_FIFO;
80185d0: d0a05b83 ldbu r2,-32402(gp)
80185d4: 10803fcc andi r2,r2,255
80185d8: 1080201c xori r2,r2,128
80185dc: 10bfe004 addi r2,r2,-128
80185e0: 10c01324 muli r3,r2,76
80185e4: 00820174 movhi r2,2053
80185e8: 1885883a add r2,r3,r2
80185ec: 102e5e05 stb zero,-18056(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_tx_ctrl_base = TSE_NO_SHARED_FIFO;
80185f0: d0a05b83 ldbu r2,-32402(gp)
80185f4: 10803fcc andi r2,r2,255
80185f8: 1080201c xori r2,r2,128
80185fc: 10bfe004 addi r2,r2,-128
8018600: 10c01324 muli r3,r2,76
8018604: 00820174 movhi r2,2053
8018608: 1885883a add r2,r3,r2
801860c: 102e5f15 stw zero,-18052(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_tx_stat_base = TSE_NO_SHARED_FIFO;
8018610: d0a05b83 ldbu r2,-32402(gp)
8018614: 10803fcc andi r2,r2,255
8018618: 1080201c xori r2,r2,128
801861c: 10bfe004 addi r2,r2,-128
8018620: 10c01324 muli r3,r2,76
8018624: 00820174 movhi r2,2053
8018628: 1885883a add r2,r3,r2
801862c: 102e6015 stw zero,-18048(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_tx_depth = TSE_NO_SHARED_FIFO;
8018630: d0a05b83 ldbu r2,-32402(gp)
8018634: 10803fcc andi r2,r2,255
8018638: 1080201c xori r2,r2,128
801863c: 10bfe004 addi r2,r2,-128
8018640: 10c01324 muli r3,r2,76
8018644: 00820174 movhi r2,2053
8018648: 1885883a add r2,r3,r2
801864c: 102e6115 stw zero,-18044(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_rx_ctrl_base = TSE_NO_SHARED_FIFO;
8018650: d0a05b83 ldbu r2,-32402(gp)
8018654: 10803fcc andi r2,r2,255
8018658: 1080201c xori r2,r2,128
801865c: 10bfe004 addi r2,r2,-128
8018660: 10c01324 muli r3,r2,76
8018664: 00820174 movhi r2,2053
8018668: 1885883a add r2,r3,r2
801866c: 102e6215 stw zero,-18040(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_rx_stat_base = TSE_NO_SHARED_FIFO;
8018670: d0a05b83 ldbu r2,-32402(gp)
8018674: 10803fcc andi r2,r2,255
8018678: 1080201c xori r2,r2,128
801867c: 10bfe004 addi r2,r2,-128
8018680: 10c01324 muli r3,r2,76
8018684: 00820174 movhi r2,2053
8018688: 1885883a add r2,r3,r2
801868c: 102e6315 stw zero,-18036(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_rx_depth = TSE_NO_SHARED_FIFO;
8018690: d0a05b83 ldbu r2,-32402(gp)
8018694: 10803fcc andi r2,r2,255
8018698: 1080201c xori r2,r2,128
801869c: 10bfe004 addi r2,r2,-128
80186a0: 10c01324 muli r3,r2,76
80186a4: 00820174 movhi r2,2053
80186a8: 1885883a add r2,r3,r2
80186ac: 102e6415 stw zero,-18032(r2)
80186b0: 00004606 br 80187cc <alt_tse_system_add_sys+0x794>
}
else {
tse_mac_device[tse_system_count].use_shared_fifo = pfifo->use_shared_fifo;
80186b4: d0a05b83 ldbu r2,-32402(gp)
80186b8: 10803fcc andi r2,r2,255
80186bc: 1080201c xori r2,r2,128
80186c0: 10bfe004 addi r2,r2,-128
80186c4: e0fffe17 ldw r3,-8(fp)
80186c8: 18c00003 ldbu r3,0(r3)
80186cc: 11001324 muli r4,r2,76
80186d0: 00820174 movhi r2,2053
80186d4: 2085883a add r2,r4,r2
80186d8: 10ee5e05 stb r3,-18056(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_tx_ctrl_base = pfifo->tse_shared_fifo_tx_ctrl_base;
80186dc: d0a05b83 ldbu r2,-32402(gp)
80186e0: 10803fcc andi r2,r2,255
80186e4: 1080201c xori r2,r2,128
80186e8: 10bfe004 addi r2,r2,-128
80186ec: e0fffe17 ldw r3,-8(fp)
80186f0: 18c00117 ldw r3,4(r3)
80186f4: 11001324 muli r4,r2,76
80186f8: 00820174 movhi r2,2053
80186fc: 2085883a add r2,r4,r2
8018700: 10ee5f15 stw r3,-18052(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_tx_stat_base = pfifo->tse_shared_fifo_tx_stat_base;
8018704: d0a05b83 ldbu r2,-32402(gp)
8018708: 10803fcc andi r2,r2,255
801870c: 1080201c xori r2,r2,128
8018710: 10bfe004 addi r2,r2,-128
8018714: e0fffe17 ldw r3,-8(fp)
8018718: 18c00217 ldw r3,8(r3)
801871c: 11001324 muli r4,r2,76
8018720: 00820174 movhi r2,2053
8018724: 2085883a add r2,r4,r2
8018728: 10ee6015 stw r3,-18048(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_tx_depth = pfifo->tse_shared_fifo_tx_depth;
801872c: d0a05b83 ldbu r2,-32402(gp)
8018730: 10803fcc andi r2,r2,255
8018734: 1080201c xori r2,r2,128
8018738: 10bfe004 addi r2,r2,-128
801873c: e0fffe17 ldw r3,-8(fp)
8018740: 18c00317 ldw r3,12(r3)
8018744: 11001324 muli r4,r2,76
8018748: 00820174 movhi r2,2053
801874c: 2085883a add r2,r4,r2
8018750: 10ee6115 stw r3,-18044(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_rx_ctrl_base = pfifo->tse_shared_fifo_rx_ctrl_base;
8018754: d0a05b83 ldbu r2,-32402(gp)
8018758: 10803fcc andi r2,r2,255
801875c: 1080201c xori r2,r2,128
8018760: 10bfe004 addi r2,r2,-128
8018764: e0fffe17 ldw r3,-8(fp)
8018768: 18c00417 ldw r3,16(r3)
801876c: 11001324 muli r4,r2,76
8018770: 00820174 movhi r2,2053
8018774: 2085883a add r2,r4,r2
8018778: 10ee6215 stw r3,-18040(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_rx_stat_base = pfifo->tse_shared_fifo_rx_stat_base;
801877c: d0a05b83 ldbu r2,-32402(gp)
8018780: 10803fcc andi r2,r2,255
8018784: 1080201c xori r2,r2,128
8018788: 10bfe004 addi r2,r2,-128
801878c: e0fffe17 ldw r3,-8(fp)
8018790: 18c00517 ldw r3,20(r3)
8018794: 11001324 muli r4,r2,76
8018798: 00820174 movhi r2,2053
801879c: 2085883a add r2,r4,r2
80187a0: 10ee6315 stw r3,-18036(r2)
tse_mac_device[tse_system_count].tse_shared_fifo_rx_depth = pfifo->tse_shared_fifo_rx_depth;
80187a4: d0a05b83 ldbu r2,-32402(gp)
80187a8: 10803fcc andi r2,r2,255
80187ac: 1080201c xori r2,r2,128
80187b0: 10bfe004 addi r2,r2,-128
80187b4: e0fffe17 ldw r3,-8(fp)
80187b8: 18c00617 ldw r3,24(r3)
80187bc: 11001324 muli r4,r2,76
80187c0: 00820174 movhi r2,2053
80187c4: 2085883a add r2,r4,r2
80187c8: 10ee6415 stw r3,-18032(r2)
}
/* Add PHY info to alt_tse_system_info structure */
if(pphy == 0) {
80187cc: e0bffd17 ldw r2,-12(fp)
80187d0: 1000121e bne r2,zero,801881c <alt_tse_system_add_sys+0x7e4>
tse_mac_device[tse_system_count].tse_phy_mdio_address = TSE_PHY_AUTO_ADDRESS;
80187d4: d0a05b83 ldbu r2,-32402(gp)
80187d8: 10803fcc andi r2,r2,255
80187dc: 1080201c xori r2,r2,128
80187e0: 10bfe004 addi r2,r2,-128
80187e4: 11001324 muli r4,r2,76
80187e8: 00ffffc4 movi r3,-1
80187ec: 00820174 movhi r2,2053
80187f0: 2085883a add r2,r4,r2
80187f4: 10ee6515 stw r3,-18028(r2)
tse_mac_device[tse_system_count].tse_phy_cfg = 0;
80187f8: d0a05b83 ldbu r2,-32402(gp)
80187fc: 10803fcc andi r2,r2,255
8018800: 1080201c xori r2,r2,128
8018804: 10bfe004 addi r2,r2,-128
8018808: 10c01324 muli r3,r2,76
801880c: 00820174 movhi r2,2053
8018810: 1885883a add r2,r3,r2
8018814: 102e6615 stw zero,-18024(r2)
8018818: 00001406 br 801886c <alt_tse_system_add_sys+0x834>
}
else {
tse_mac_device[tse_system_count].tse_phy_mdio_address = pphy->tse_phy_mdio_address;
801881c: d0a05b83 ldbu r2,-32402(gp)
8018820: 10803fcc andi r2,r2,255
8018824: 1080201c xori r2,r2,128
8018828: 10bfe004 addi r2,r2,-128
801882c: e0fffd17 ldw r3,-12(fp)
8018830: 18c00017 ldw r3,0(r3)
8018834: 11001324 muli r4,r2,76
8018838: 00820174 movhi r2,2053
801883c: 2085883a add r2,r4,r2
8018840: 10ee6515 stw r3,-18028(r2)
tse_mac_device[tse_system_count].tse_phy_cfg = pphy->tse_phy_cfg;
8018844: d0a05b83 ldbu r2,-32402(gp)
8018848: 10803fcc andi r2,r2,255
801884c: 1080201c xori r2,r2,128
8018850: 10bfe004 addi r2,r2,-128
8018854: e0fffd17 ldw r3,-12(fp)
8018858: 18c00117 ldw r3,4(r3)
801885c: 11001324 muli r4,r2,76
8018860: 00820174 movhi r2,2053
8018864: 2085883a add r2,r4,r2
8018868: 10ee6615 stw r3,-18024(r2)
}
/* Point to next structure */
pmsgdma++;
801886c: e0bffb17 ldw r2,-20(fp)
8018870: 10800304 addi r2,r2,12
8018874: e0bffb15 stw r2,-20(fp)
if(pmem) pmem++;
8018878: e0bffc17 ldw r2,-16(fp)
801887c: 10000326 beq r2,zero,801888c <alt_tse_system_add_sys+0x854>
8018880: e0bffc17 ldw r2,-16(fp)
8018884: 10800204 addi r2,r2,8
8018888: e0bffc15 stw r2,-16(fp)
if(pfifo) pfifo++;
801888c: e0bffe17 ldw r2,-8(fp)
8018890: 10000326 beq r2,zero,80188a0 <alt_tse_system_add_sys+0x868>
8018894: e0bffe17 ldw r2,-8(fp)
8018898: 10800704 addi r2,r2,28
801889c: e0bffe15 stw r2,-8(fp)
if(pphy) pphy++;
80188a0: e0bffd17 ldw r2,-12(fp)
80188a4: 10000326 beq r2,zero,80188b4 <alt_tse_system_add_sys+0x87c>
80188a8: e0bffd17 ldw r2,-12(fp)
80188ac: 10800204 addi r2,r2,8
80188b0: e0bffd15 stw r2,-12(fp)
tse_system_count++;
80188b4: d0a05b83 ldbu r2,-32402(gp)
80188b8: 10800044 addi r2,r2,1
80188bc: d0a05b85 stb r2,-32402(gp)
max_mac_system = tse_system_count;
80188c0: d0a05b83 ldbu r2,-32402(gp)
80188c4: d0a00a05 stb r2,-32728(gp)
for(i = 0; i < loop_end; i++) {
80188c8: e0bffa17 ldw r2,-24(fp)
80188cc: 10800044 addi r2,r2,1
80188d0: e0bffa15 stw r2,-24(fp)
80188d4: e0fffa17 ldw r3,-24(fp)
80188d8: e0bff917 ldw r2,-28(fp)
80188dc: 18be0016 blt r3,r2,80180e0 <alt_tse_system_add_sys+0xa8>
}
return SUCCESS;
80188e0: 0005883a mov r2,zero
}
80188e4: e6ffff04 addi sp,fp,-4
80188e8: dfc00217 ldw ra,8(sp)
80188ec: df000117 ldw fp,4(sp)
80188f0: dc000017 ldw r16,0(sp)
80188f4: dec00304 addi sp,sp,12
80188f8: f800283a ret
080188fc <alt_tse_sys_enable_mdio_sharing>:
* @param number_of_mac number of MAC sharing MDIO block
* @return SUCCESS on success
* ALTERA_TSE_SYSTEM_DEF_ERROR if definition of system incorrect or pointer == NULL
* Multi-channel MAC not supported
*/
alt_32 alt_tse_sys_enable_mdio_sharing(alt_tse_system_mac **psys_mac_list, alt_u8 number_of_mac) {
80188fc: defff904 addi sp,sp,-28
8018900: dfc00615 stw ra,24(sp)
8018904: df000515 stw fp,20(sp)
8018908: df000504 addi fp,sp,20
801890c: e13ffc15 stw r4,-16(fp)
8018910: 2805883a mov r2,r5
8018914: e0bffb05 stb r2,-20(fp)
alt_32 i;
alt_32 j;
alt_tse_system_mac *psys_mac;
for(i = 0; i < number_of_mac; i++) {
8018918: e03fff15 stw zero,-4(fp)
801891c: 00003f06 br 8018a1c <alt_tse_sys_enable_mdio_sharing+0x120>
psys_mac = psys_mac_list[i];
8018920: e0bfff17 ldw r2,-4(fp)
8018924: 100490ba slli r2,r2,2
8018928: e0fffc17 ldw r3,-16(fp)
801892c: 1885883a add r2,r3,r2
8018930: 10800017 ldw r2,0(r2)
8018934: e0bffd15 stw r2,-12(fp)
if(psys_mac == 0) {
8018938: e0bffd17 ldw r2,-12(fp)
801893c: 1000081e bne r2,zero,8018960 <alt_tse_sys_enable_mdio_sharing+0x64>
tse_dprintf(2, "ERROR : MAC system structure == NULL\n");
8018940: 01020134 movhi r4,2052
8018944: 211eb304 addi r4,r4,31436
8018948: 8002d9c0 call 8002d9c <puts>
tse_dprintf(2, "ERROR : Please pass in correct pointer to alt_tse_sys_enable_mdio_sharing()\n");
801894c: 01020134 movhi r4,2052
8018950: 211f1804 addi r4,r4,31840
8018954: 8002d9c0 call 8002d9c <puts>
return ALTERA_TSE_SYSTEM_DEF_ERROR;
8018958: 00bfffc4 movi r2,-1
801895c: 00003306 br 8018a2c <alt_tse_sys_enable_mdio_sharing+0x130>
}
for(j = 0; j < max_mac_system; j++) {
8018960: e03ffe15 stw zero,-8(fp)
8018964: 00002606 br 8018a00 <alt_tse_sys_enable_mdio_sharing+0x104>
if(psys_mac->tse_mac_base == tse_mac_device[j].tse_mac_base) {
8018968: e0bffd17 ldw r2,-12(fp)
801896c: 10c00017 ldw r3,0(r2)
8018970: e0bffe17 ldw r2,-8(fp)
8018974: 11001324 muli r4,r2,76
8018978: 00820174 movhi r2,2053
801897c: 2085883a add r2,r4,r2
8018980: 10ae5417 ldw r2,-18096(r2)
8018984: 18801b1e bne r3,r2,80189f4 <alt_tse_sys_enable_mdio_sharing+0xf8>
if(tse_mac_device[j].tse_multichannel_mac) {
8018988: e0bffe17 ldw r2,-8(fp)
801898c: 10c01324 muli r3,r2,76
8018990: 00820174 movhi r2,2053
8018994: 1885883a add r2,r3,r2
8018998: 10ae57c3 ldbu r2,-18081(r2)
801899c: 10803fcc andi r2,r2,255
80189a0: 10000826 beq r2,zero,80189c4 <alt_tse_sys_enable_mdio_sharing+0xc8>
tse_dprintf(2, "ERROR : MDIO sharing supported by default for Multi-channel MAC\n");
80189a4: 01020134 movhi r4,2052
80189a8: 211f2c04 addi r4,r4,31920
80189ac: 8002d9c0 call 8002d9c <puts>
tse_dprintf(2, "ERROR : Do not include Multi-channel MAC in the MAC List\n");
80189b0: 01020134 movhi r4,2052
80189b4: 211f3d04 addi r4,r4,31988
80189b8: 8002d9c0 call 8002d9c <puts>
return ALTERA_TSE_SYSTEM_DEF_ERROR;
80189bc: 00bfffc4 movi r2,-1
80189c0: 00001a06 br 8018a2c <alt_tse_sys_enable_mdio_sharing+0x130>
}
tse_mac_device[j].tse_mdio_shared = 1;
80189c4: e0bffe17 ldw r2,-8(fp)
80189c8: 11001324 muli r4,r2,76
80189cc: 00c00044 movi r3,1
80189d0: 00820174 movhi r2,2053
80189d4: 2085883a add r2,r4,r2
80189d8: 10ee5845 stb r3,-18079(r2)
tse_mac_device[j].tse_number_of_mac_mdio_shared = number_of_mac;
80189dc: e0bffe17 ldw r2,-8(fp)
80189e0: 11001324 muli r4,r2,76
80189e4: e0fffb03 ldbu r3,-20(fp)
80189e8: 00820174 movhi r2,2053
80189ec: 2085883a add r2,r4,r2
80189f0: 10ee5885 stb r3,-18078(r2)
for(j = 0; j < max_mac_system; j++) {
80189f4: e0bffe17 ldw r2,-8(fp)
80189f8: 10800044 addi r2,r2,1
80189fc: e0bffe15 stw r2,-8(fp)
8018a00: d0a00a03 ldbu r2,-32728(gp)
8018a04: 10803fcc andi r2,r2,255
8018a08: e0fffe17 ldw r3,-8(fp)
8018a0c: 18bfd616 blt r3,r2,8018968 <alt_tse_sys_enable_mdio_sharing+0x6c>
for(i = 0; i < number_of_mac; i++) {
8018a10: e0bfff17 ldw r2,-4(fp)
8018a14: 10800044 addi r2,r2,1
8018a18: e0bfff15 stw r2,-4(fp)
8018a1c: e0bffb03 ldbu r2,-20(fp)
8018a20: e0ffff17 ldw r3,-4(fp)
8018a24: 18bfbe16 blt r3,r2,8018920 <alt_tse_sys_enable_mdio_sharing+0x24>
}
}
}
return SUCCESS;
8018a28: 0005883a mov r2,zero
}
8018a2c: e037883a mov sp,fp
8018a30: dfc00117 ldw ra,4(sp)
8018a34: df000017 ldw fp,0(sp)
8018a38: dec00204 addi sp,sp,8
8018a3c: f800283a ret
08018a40 <alt_tse_mac_get_common_speed>:
/* @Function Description: Get the common speed supported by all PHYs connected to the MAC within the same group
* @API Type: Public
* @param pmac Pointer to the TSE MAC Control Interface Base address
* @return common speed supported by all PHYs connected to the MAC, return TSE_PHY_SPEED_NO_COMMON if no common speed found
*/
alt_32 alt_tse_mac_get_common_speed(np_tse_mac *pmac) {
8018a40: defffc04 addi sp,sp,-16
8018a44: dfc00315 stw ra,12(sp)
8018a48: df000215 stw fp,8(sp)
8018a4c: df000204 addi fp,sp,8
8018a50: e13ffe15 stw r4,-8(fp)
alt_tse_mac_group *pmac_group = alt_tse_get_mac_info(pmac)->pmac_group;
8018a54: e13ffe17 ldw r4,-8(fp)
8018a58: 8018c1c0 call 8018c1c <alt_tse_get_mac_info>
8018a5c: 10800317 ldw r2,12(r2)
8018a60: e0bfff15 stw r2,-4(fp)
return alt_tse_phy_get_common_speed(pmac_group);
8018a64: e13fff17 ldw r4,-4(fp)
8018a68: 801bdb00 call 801bdb0 <alt_tse_phy_get_common_speed>
}
8018a6c: e037883a mov sp,fp
8018a70: dfc00117 ldw ra,4(sp)
8018a74: df000017 ldw fp,0(sp)
8018a78: dec00204 addi sp,sp,8
8018a7c: f800283a ret
08018a80 <alt_tse_mac_set_common_speed>:
* @API Type: Public
* @param pmac Pointer to the TSE MAC Control Interface Base address
* common_speed common speed supported by all PHYs
* @return common speed supported by all PHYs connected to the MAC, return TSE_PHY_SPEED_NO_COMMON if invalid common speed specified
*/
alt_32 alt_tse_mac_set_common_speed(np_tse_mac *pmac, alt_32 common_speed) {
8018a80: defffb04 addi sp,sp,-20
8018a84: dfc00415 stw ra,16(sp)
8018a88: df000315 stw fp,12(sp)
8018a8c: df000304 addi fp,sp,12
8018a90: e13ffe15 stw r4,-8(fp)
8018a94: e17ffd15 stw r5,-12(fp)
alt_tse_mac_group *pmac_group = alt_tse_get_mac_info(pmac)->pmac_group;
8018a98: e13ffe17 ldw r4,-8(fp)
8018a9c: 8018c1c0 call 8018c1c <alt_tse_get_mac_info>
8018aa0: 10800317 ldw r2,12(r2)
8018aa4: e0bfff15 stw r2,-4(fp)
return alt_tse_phy_set_common_speed(pmac_group, common_speed);
8018aa8: e17ffd17 ldw r5,-12(fp)
8018aac: e13fff17 ldw r4,-4(fp)
8018ab0: 801c0cc0 call 801c0cc <alt_tse_phy_set_common_speed>
}
8018ab4: e037883a mov sp,fp
8018ab8: dfc00117 ldw ra,4(sp)
8018abc: df000017 ldw fp,0(sp)
8018ac0: dec00204 addi sp,sp,8
8018ac4: f800283a ret
08018ac8 <alt_tse_get_system_index>:
/* @Function Description: Get the index of alt_tse_system_info structure in tse_mac_device[]
* @API Type: Internal
* @param psys_info Pointer to the alt_tse_system_info structure
* @return Index of alt_tse_system_info structure in tse_mac_device[]
*/
alt_32 alt_tse_get_system_index(alt_tse_system_info *psys_info) {
8018ac8: defffd04 addi sp,sp,-12
8018acc: df000215 stw fp,8(sp)
8018ad0: df000204 addi fp,sp,8
8018ad4: e13ffe15 stw r4,-8(fp)
alt_32 i;
for(i = 0; i < max_mac_system; i++) {
8018ad8: e03fff15 stw zero,-4(fp)
8018adc: 00000c06 br 8018b10 <alt_tse_get_system_index+0x48>
if(psys_info == &tse_mac_device[i]) {
8018ae0: e0bfff17 ldw r2,-4(fp)
8018ae4: 10c01324 muli r3,r2,76
8018ae8: 00820174 movhi r2,2053
8018aec: 10ae5404 addi r2,r2,-18096
8018af0: 1885883a add r2,r3,r2
8018af4: e0fffe17 ldw r3,-8(fp)
8018af8: 1880021e bne r3,r2,8018b04 <alt_tse_get_system_index+0x3c>
return i;
8018afc: e0bfff17 ldw r2,-4(fp)
8018b00: 00000806 br 8018b24 <alt_tse_get_system_index+0x5c>
for(i = 0; i < max_mac_system; i++) {
8018b04: e0bfff17 ldw r2,-4(fp)
8018b08: 10800044 addi r2,r2,1
8018b0c: e0bfff15 stw r2,-4(fp)
8018b10: d0a00a03 ldbu r2,-32728(gp)
8018b14: 10803fcc andi r2,r2,255
8018b18: e0ffff17 ldw r3,-4(fp)
8018b1c: 18bff016 blt r3,r2,8018ae0 <alt_tse_get_system_index+0x18>
}
}
return ALTERA_TSE_NO_INDEX_FOUND;
8018b20: 00bfffc4 movi r2,-1
}
8018b24: e037883a mov sp,fp
8018b28: df000017 ldw fp,0(sp)
8018b2c: dec00104 addi sp,sp,4
8018b30: f800283a ret
08018b34 <alt_tse_get_mac_group_index>:
/* @Function Description: Get the index of alt_tse_mac_group structure in pmac_groups[]
* @API Type: Internal
* @param pmac_group Pointer to the alt_tse_mac_group structure
* @return Index of alt_tse_mac_group structure in pmac_groups[]
*/
alt_32 alt_tse_get_mac_group_index(alt_tse_mac_group *pmac_group) {
8018b34: defffd04 addi sp,sp,-12
8018b38: df000215 stw fp,8(sp)
8018b3c: df000204 addi fp,sp,8
8018b40: e13ffe15 stw r4,-8(fp)
alt_32 i;
for(i = 0; i < mac_group_count; i++) {
8018b44: e03fff15 stw zero,-4(fp)
8018b48: 00000c06 br 8018b7c <alt_tse_get_mac_group_index+0x48>
if(pmac_group == pmac_groups[i]) {
8018b4c: e0bfff17 ldw r2,-4(fp)
8018b50: 100690ba slli r3,r2,2
8018b54: 008201b4 movhi r2,2054
8018b58: 1885883a add r2,r3,r2
8018b5c: 10b5aa17 ldw r2,-10584(r2)
8018b60: e0fffe17 ldw r3,-8(fp)
8018b64: 1880021e bne r3,r2,8018b70 <alt_tse_get_mac_group_index+0x3c>
return i;
8018b68: e0bfff17 ldw r2,-4(fp)
8018b6c: 00000806 br 8018b90 <alt_tse_get_mac_group_index+0x5c>
for(i = 0; i < mac_group_count; i++) {
8018b70: e0bfff17 ldw r2,-4(fp)
8018b74: 10800044 addi r2,r2,1
8018b78: e0bfff15 stw r2,-4(fp)
8018b7c: d0a05b43 ldbu r2,-32403(gp)
8018b80: 10803fcc andi r2,r2,255
8018b84: e0ffff17 ldw r3,-4(fp)
8018b88: 18bff016 blt r3,r2,8018b4c <alt_tse_get_mac_group_index+0x18>
}
}
return ALTERA_TSE_NO_INDEX_FOUND;
8018b8c: 00bfffc4 movi r2,-1
}
8018b90: e037883a mov sp,fp
8018b94: df000017 ldw fp,0(sp)
8018b98: dec00104 addi sp,sp,4
8018b9c: f800283a ret
08018ba0 <alt_tse_get_mac_info_index>:
/* @Function Description: Get the index of alt_tse_mac_info structure in pmac_groups[]->pmac_info[]
* @API Type: Internal
* @param pmac_group Pointer to the alt_tse_mac_info structure
* @return Index of alt_tse_mac_info structure in pmac_groups[]->pmac_info[]
*/
alt_32 alt_tse_get_mac_info_index(alt_tse_mac_info *pmac_info) {
8018ba0: defffd04 addi sp,sp,-12
8018ba4: df000215 stw fp,8(sp)
8018ba8: df000204 addi fp,sp,8
8018bac: e13ffe15 stw r4,-8(fp)
alt_32 i;
for(i = 0; i < pmac_info->pmac_group->channel; i++) {
8018bb0: e03fff15 stw zero,-4(fp)
8018bb4: 00000e06 br 8018bf0 <alt_tse_get_mac_info_index+0x50>
if(pmac_info == pmac_info->pmac_group->pmac_info[i]) {
8018bb8: e0bffe17 ldw r2,-8(fp)
8018bbc: 10c00317 ldw r3,12(r2)
8018bc0: e0bfff17 ldw r2,-4(fp)
8018bc4: 10800044 addi r2,r2,1
8018bc8: 100490ba slli r2,r2,2
8018bcc: 1885883a add r2,r3,r2
8018bd0: 10800017 ldw r2,0(r2)
8018bd4: e0fffe17 ldw r3,-8(fp)
8018bd8: 1880021e bne r3,r2,8018be4 <alt_tse_get_mac_info_index+0x44>
return i;
8018bdc: e0bfff17 ldw r2,-4(fp)
8018be0: 00000a06 br 8018c0c <alt_tse_get_mac_info_index+0x6c>
for(i = 0; i < pmac_info->pmac_group->channel; i++) {
8018be4: e0bfff17 ldw r2,-4(fp)
8018be8: 10800044 addi r2,r2,1
8018bec: e0bfff15 stw r2,-4(fp)
8018bf0: e0bffe17 ldw r2,-8(fp)
8018bf4: 10800317 ldw r2,12(r2)
8018bf8: 10800003 ldbu r2,0(r2)
8018bfc: 10803fcc andi r2,r2,255
8018c00: e0ffff17 ldw r3,-4(fp)
8018c04: 18bfec16 blt r3,r2,8018bb8 <alt_tse_get_mac_info_index+0x18>
}
}
return ALTERA_TSE_NO_INDEX_FOUND;
8018c08: 00bfffc4 movi r2,-1
}
8018c0c: e037883a mov sp,fp
8018c10: df000017 ldw fp,0(sp)
8018c14: dec00104 addi sp,sp,4
8018c18: f800283a ret
08018c1c <alt_tse_get_mac_info>:
/* @Function Description: Get the pointer of alt_tse_mac_info structure in pmac_groups[]->pmac_info[]
* @API Type: Internal
* @param pmac Pointer to the TSE MAC Control Interface Base address
* @return Pointer to alt_tse_mac_info structure in pmac_groups[]->pmac_info[]
*/
alt_tse_mac_info *alt_tse_get_mac_info(np_tse_mac *pmac) {
8018c1c: defffa04 addi sp,sp,-24
8018c20: df000515 stw fp,20(sp)
8018c24: df000504 addi fp,sp,20
8018c28: e13ffb15 stw r4,-20(fp)
alt_32 i;
alt_32 j;
alt_tse_mac_group *pmac_group = 0;
8018c2c: e03ffd15 stw zero,-12(fp)
alt_tse_mac_info *pmac_info = 0;
8018c30: e03ffc15 stw zero,-16(fp)
for(i = 0; i < mac_group_count; i++) {
8018c34: e03fff15 stw zero,-4(fp)
8018c38: 00002206 br 8018cc4 <alt_tse_get_mac_info+0xa8>
pmac_group = pmac_groups[i];
8018c3c: e0bfff17 ldw r2,-4(fp)
8018c40: 100690ba slli r3,r2,2
8018c44: 008201b4 movhi r2,2054
8018c48: 1885883a add r2,r3,r2
8018c4c: 10b5aa17 ldw r2,-10584(r2)
8018c50: e0bffd15 stw r2,-12(fp)
for(j = 0; j < pmac_group->channel; j++) {
8018c54: e03ffe15 stw zero,-8(fp)
8018c58: 00001206 br 8018ca4 <alt_tse_get_mac_info+0x88>
pmac_info = pmac_group->pmac_info[j];
8018c5c: e0fffd17 ldw r3,-12(fp)
8018c60: e0bffe17 ldw r2,-8(fp)
8018c64: 10800044 addi r2,r2,1
8018c68: 100490ba slli r2,r2,2
8018c6c: 1885883a add r2,r3,r2
8018c70: 10800017 ldw r2,0(r2)
8018c74: e0bffc15 stw r2,-16(fp)
if(((np_tse_mac *) pmac_info->psys_info->tse_mac_base) == pmac) {
8018c78: e0bffc17 ldw r2,-16(fp)
8018c7c: 10800217 ldw r2,8(r2)
8018c80: 10800017 ldw r2,0(r2)
8018c84: 1007883a mov r3,r2
8018c88: e0bffb17 ldw r2,-20(fp)
8018c8c: 10c0021e bne r2,r3,8018c98 <alt_tse_get_mac_info+0x7c>
return pmac_info;
8018c90: e0bffc17 ldw r2,-16(fp)
8018c94: 00001006 br 8018cd8 <alt_tse_get_mac_info+0xbc>
for(j = 0; j < pmac_group->channel; j++) {
8018c98: e0bffe17 ldw r2,-8(fp)
8018c9c: 10800044 addi r2,r2,1
8018ca0: e0bffe15 stw r2,-8(fp)
8018ca4: e0bffd17 ldw r2,-12(fp)
8018ca8: 10800003 ldbu r2,0(r2)
8018cac: 10803fcc andi r2,r2,255
8018cb0: e0fffe17 ldw r3,-8(fp)
8018cb4: 18bfe916 blt r3,r2,8018c5c <alt_tse_get_mac_info+0x40>
for(i = 0; i < mac_group_count; i++) {
8018cb8: e0bfff17 ldw r2,-4(fp)
8018cbc: 10800044 addi r2,r2,1
8018cc0: e0bfff15 stw r2,-4(fp)
8018cc4: d0a05b43 ldbu r2,-32403(gp)
8018cc8: 10803fcc andi r2,r2,255
8018ccc: e0ffff17 ldw r3,-4(fp)
8018cd0: 18bfda16 blt r3,r2,8018c3c <alt_tse_get_mac_info+0x20>
}
}
}
return 0;
8018cd4: 0005883a mov r2,zero
}
8018cd8: e037883a mov sp,fp
8018cdc: df000017 ldw fp,0(sp)
8018ce0: dec00104 addi sp,sp,4
8018ce4: f800283a ret
08018ce8 <alt_tse_mac_set_speed>:
* @param pmac Pointer to the TSE MAC Control Interface Base address
* @param speed 2 = 1000 Mbps, 1 = 100 Mbps, 0 = 10 Mbps
* @return ENP_PARAM if invalid speed specified, else return SUCCESS
*/
alt_32 alt_tse_mac_set_speed(np_tse_mac *pmac, alt_u8 speed)
{
8018ce8: defffc04 addi sp,sp,-16
8018cec: df000315 stw fp,12(sp)
8018cf0: df000304 addi fp,sp,12
8018cf4: e13ffe15 stw r4,-8(fp)
8018cf8: 2805883a mov r2,r5
8018cfc: e0bffd05 stb r2,-12(fp)
alt_32 helpvar;
helpvar = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac);
8018d00: e0bffe17 ldw r2,-8(fp)
8018d04: 10800204 addi r2,r2,8
8018d08: 10800037 ldwio r2,0(r2)
8018d0c: e0bfff15 stw r2,-4(fp)
/* 1000 Mbps */
if(speed == TSE_PHY_SPEED_1000) {
8018d10: e0bffd03 ldbu r2,-12(fp)
8018d14: 10800098 cmpnei r2,r2,2
8018d18: 1000091e bne r2,zero,8018d40 <alt_tse_mac_set_speed+0x58>
helpvar |= ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8018d1c: e0bfff17 ldw r2,-4(fp)
8018d20: 10800214 ori r2,r2,8
8018d24: e0bfff15 stw r2,-4(fp)
helpvar &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK;
8018d28: e0ffff17 ldw r3,-4(fp)
8018d2c: 00bf8034 movhi r2,65024
8018d30: 10bfffc4 addi r2,r2,-1
8018d34: 1884703a and r2,r3,r2
8018d38: e0bfff15 stw r2,-4(fp)
8018d3c: 00001906 br 8018da4 <alt_tse_mac_set_speed+0xbc>
}
/* 100 Mbps */
else if(speed == TSE_PHY_SPEED_100) {
8018d40: e0bffd03 ldbu r2,-12(fp)
8018d44: 10800058 cmpnei r2,r2,1
8018d48: 10000a1e bne r2,zero,8018d74 <alt_tse_mac_set_speed+0x8c>
helpvar &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8018d4c: e0ffff17 ldw r3,-4(fp)
8018d50: 00bffdc4 movi r2,-9
8018d54: 1884703a and r2,r3,r2
8018d58: e0bfff15 stw r2,-4(fp)
helpvar &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK;
8018d5c: e0ffff17 ldw r3,-4(fp)
8018d60: 00bf8034 movhi r2,65024
8018d64: 10bfffc4 addi r2,r2,-1
8018d68: 1884703a and r2,r3,r2
8018d6c: e0bfff15 stw r2,-4(fp)
8018d70: 00000c06 br 8018da4 <alt_tse_mac_set_speed+0xbc>
}
/* 10 Mbps */
else if(speed == TSE_PHY_SPEED_10) {
8018d74: e0bffd03 ldbu r2,-12(fp)
8018d78: 1000081e bne r2,zero,8018d9c <alt_tse_mac_set_speed+0xb4>
helpvar &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8018d7c: e0ffff17 ldw r3,-4(fp)
8018d80: 00bffdc4 movi r2,-9
8018d84: 1884703a and r2,r3,r2
8018d88: e0bfff15 stw r2,-4(fp)
helpvar |= ALTERA_TSEMAC_CMD_ENA_10_MSK;
8018d8c: e0bfff17 ldw r2,-4(fp)
8018d90: 10808034 orhi r2,r2,512
8018d94: e0bfff15 stw r2,-4(fp)
8018d98: 00000206 br 8018da4 <alt_tse_mac_set_speed+0xbc>
}
else {
return ENP_PARAM;
8018d9c: 00bffd84 movi r2,-10
8018da0: 00000506 br 8018db8 <alt_tse_mac_set_speed+0xd0>
}
IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac, helpvar);
8018da4: e0bffe17 ldw r2,-8(fp)
8018da8: 10800204 addi r2,r2,8
8018dac: e0ffff17 ldw r3,-4(fp)
8018db0: 10c00035 stwio r3,0(r2)
return SUCCESS;
8018db4: 0005883a mov r2,zero
}
8018db8: e037883a mov sp,fp
8018dbc: df000017 ldw fp,0(sp)
8018dc0: dec00104 addi sp,sp,4
8018dc4: f800283a ret
08018dc8 <alt_tse_mac_set_duplex>:
* @param pmac Pointer to the TSE MAC Control Interface Base address
* @param duplex 1 = Full Duplex, 0 = Half Duplex
* @return ENP_PARAM if invalid duplex specified, else return SUCCESS
*/
alt_32 alt_tse_mac_set_duplex(np_tse_mac *pmac, alt_u8 duplex)
{
8018dc8: defffc04 addi sp,sp,-16
8018dcc: df000315 stw fp,12(sp)
8018dd0: df000304 addi fp,sp,12
8018dd4: e13ffe15 stw r4,-8(fp)
8018dd8: 2805883a mov r2,r5
8018ddc: e0bffd05 stb r2,-12(fp)
alt_32 helpvar;
helpvar = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac);
8018de0: e0bffe17 ldw r2,-8(fp)
8018de4: 10800204 addi r2,r2,8
8018de8: 10800037 ldwio r2,0(r2)
8018dec: e0bfff15 stw r2,-4(fp)
/* Half Duplex */
if(duplex == TSE_PHY_DUPLEX_HALF) {
8018df0: e0bffd03 ldbu r2,-12(fp)
8018df4: 1000041e bne r2,zero,8018e08 <alt_tse_mac_set_duplex+0x40>
helpvar |= ALTERA_TSEMAC_CMD_HD_ENA_MSK;
8018df8: e0bfff17 ldw r2,-4(fp)
8018dfc: 10810014 ori r2,r2,1024
8018e00: e0bfff15 stw r2,-4(fp)
8018e04: 00000a06 br 8018e30 <alt_tse_mac_set_duplex+0x68>
}
/* Full Duplex */
else if(duplex == TSE_PHY_DUPLEX_FULL) {
8018e08: e0bffd03 ldbu r2,-12(fp)
8018e0c: 10800058 cmpnei r2,r2,1
8018e10: 1000051e bne r2,zero,8018e28 <alt_tse_mac_set_duplex+0x60>
helpvar &= ~ALTERA_TSEMAC_CMD_HD_ENA_MSK;
8018e14: e0ffff17 ldw r3,-4(fp)
8018e18: 00beffc4 movi r2,-1025
8018e1c: 1884703a and r2,r3,r2
8018e20: e0bfff15 stw r2,-4(fp)
8018e24: 00000206 br 8018e30 <alt_tse_mac_set_duplex+0x68>
}
else {
return ENP_PARAM;
8018e28: 00bffd84 movi r2,-10
8018e2c: 00000506 br 8018e44 <alt_tse_mac_set_duplex+0x7c>
}
IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac, helpvar);
8018e30: e0bffe17 ldw r2,-8(fp)
8018e34: 10800204 addi r2,r2,8
8018e38: e0ffff17 ldw r3,-4(fp)
8018e3c: 10c00035 stwio r3,0(r2)
return SUCCESS;
8018e40: 0005883a mov r2,zero
}
8018e44: e037883a mov sp,fp
8018e48: df000017 ldw fp,0(sp)
8018e4c: dec00104 addi sp,sp,4
8018e50: f800283a ret
08018e54 <getPHYSpeed>:
(((speed == TSE_PHY_SPEED_1000) ? 1 : 0) << 1) | \
(((speed == TSE_PHY_SPEED_100) ? 1 : 0) << 2) | \
(((speed == TSE_PHY_SPEED_10) ? 1 : 0) << 3) | \
((speed == TSE_PHY_SPEED_INVALID) ? ALT_TSE_E_INVALID_SPEED : 0))
alt_32 getPHYSpeed(np_tse_mac *pmac) {
8018e54: defff404 addi sp,sp,-48
8018e58: dfc00b15 stw ra,44(sp)
8018e5c: df000a15 stw fp,40(sp)
8018e60: df000a04 addi fp,sp,40
8018e64: e13ff715 stw r4,-36(fp)
alt_u8 speed = ALTERA_TSE_MAC_SPEED_DEFAULT;
8018e68: 00800044 movi r2,1
8018e6c: e0bffec5 stb r2,-5(fp)
alt_u8 duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT; /* 1 = full ; 0 = half*/
8018e70: 00800044 movi r2,1
8018e74: e0bffe85 stb r2,-6(fp)
alt_32 result = ALT_TSE_SPEED_DUPLEX(speed, duplex);
8018e78: e0bffe83 ldbu r2,-6(fp)
8018e7c: 10c0004c andi r3,r2,1
8018e80: e0bffec3 ldbu r2,-5(fp)
8018e84: 10800098 cmpnei r2,r2,2
8018e88: 1000021e bne r2,zero,8018e94 <getPHYSpeed+0x40>
8018e8c: 00800084 movi r2,2
8018e90: 00000106 br 8018e98 <getPHYSpeed+0x44>
8018e94: 0005883a mov r2,zero
8018e98: 10c6b03a or r3,r2,r3
8018e9c: e0bffec3 ldbu r2,-5(fp)
8018ea0: 10800058 cmpnei r2,r2,1
8018ea4: 1000021e bne r2,zero,8018eb0 <getPHYSpeed+0x5c>
8018ea8: 00800104 movi r2,4
8018eac: 00000106 br 8018eb4 <getPHYSpeed+0x60>
8018eb0: 0005883a mov r2,zero
8018eb4: 10c6b03a or r3,r2,r3
8018eb8: e0bffec3 ldbu r2,-5(fp)
8018ebc: 1000021e bne r2,zero,8018ec8 <getPHYSpeed+0x74>
8018ec0: 00800204 movi r2,8
8018ec4: 00000106 br 8018ecc <getPHYSpeed+0x78>
8018ec8: 0005883a mov r2,zero
8018ecc: 10c6b03a or r3,r2,r3
8018ed0: e0bffec3 ldbu r2,-5(fp)
8018ed4: 108000d8 cmpnei r2,r2,3
8018ed8: 1000021e bne r2,zero,8018ee4 <getPHYSpeed+0x90>
8018edc: 00800074 movhi r2,1
8018ee0: 00000106 br 8018ee8 <getPHYSpeed+0x94>
8018ee4: 0005883a mov r2,zero
8018ee8: 10c4b03a or r2,r2,r3
8018eec: e0bfff15 stw r2,-4(fp)
alt_tse_phy_info *pphy = 0;
8018ef0: e03ffd15 stw zero,-12(fp)
alt_tse_mac_info *pmac_info = 0;
8018ef4: e03ffc15 stw zero,-16(fp)
alt_tse_mac_group *pmac_group = 0;
8018ef8: e03ffb15 stw zero,-20(fp)
alt_tse_system_info *psys = 0;
8018efc: e03ffa15 stw zero,-24(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = 0;
8018f00: e03ff9c5 stb zero,-25(fp)
alt_8 mac_group_index = 0;
8018f04: e03ff985 stb zero,-26(fp)
/* initialized PHYs only once */
static alt_u8 is_init = 0;
if(is_init == 0) {
8018f08: d0a05bc3 ldbu r2,-32401(gp)
8018f0c: 10803fcc andi r2,r2,255
8018f10: 1000031e bne r2,zero,8018f20 <getPHYSpeed+0xcc>
alt_tse_phy_init();
8018f14: 801ae0c0 call 801ae0c <alt_tse_phy_init>
is_init = 1;
8018f18: 00800044 movi r2,1
8018f1c: d0a05bc5 stb r2,-32401(gp)
}
/* Look for pmac_group and pmac_info structure based on pmac or iface */
pmac_info = alt_tse_get_mac_info(pmac);
8018f20: e13ff717 ldw r4,-36(fp)
8018f24: 8018c1c0 call 8018c1c <alt_tse_get_mac_info>
8018f28: e0bffc15 stw r2,-16(fp)
if(pmac_info == 0) {
8018f2c: e0bffc17 ldw r2,-16(fp)
8018f30: 1000481e bne r2,zero,8019054 <getPHYSpeed+0x200>
speed = ALTERA_TSE_MAC_SPEED_DEFAULT;
8018f34: 00800044 movi r2,1
8018f38: e0bffec5 stb r2,-5(fp)
duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT;
8018f3c: 00800044 movi r2,1
8018f40: e0bffe85 stb r2,-6(fp)
result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_NO_PMAC_FOUND;
8018f44: e0bffe83 ldbu r2,-6(fp)
8018f48: 10c0004c andi r3,r2,1
8018f4c: e0bffec3 ldbu r2,-5(fp)
8018f50: 10800098 cmpnei r2,r2,2
8018f54: 1000021e bne r2,zero,8018f60 <getPHYSpeed+0x10c>
8018f58: 00800084 movi r2,2
8018f5c: 00000106 br 8018f64 <getPHYSpeed+0x110>
8018f60: 0005883a mov r2,zero
8018f64: 10c6b03a or r3,r2,r3
8018f68: e0bffec3 ldbu r2,-5(fp)
8018f6c: 10800058 cmpnei r2,r2,1
8018f70: 1000021e bne r2,zero,8018f7c <getPHYSpeed+0x128>
8018f74: 00800104 movi r2,4
8018f78: 00000106 br 8018f80 <getPHYSpeed+0x12c>
8018f7c: 0005883a mov r2,zero
8018f80: 10c6b03a or r3,r2,r3
8018f84: e0bffec3 ldbu r2,-5(fp)
8018f88: 1000021e bne r2,zero,8018f94 <getPHYSpeed+0x140>
8018f8c: 00800204 movi r2,8
8018f90: 00000106 br 8018f98 <getPHYSpeed+0x144>
8018f94: 0005883a mov r2,zero
8018f98: 10c6b03a or r3,r2,r3
8018f9c: e0bffec3 ldbu r2,-5(fp)
8018fa0: 108000d8 cmpnei r2,r2,3
8018fa4: 1000021e bne r2,zero,8018fb0 <getPHYSpeed+0x15c>
8018fa8: 00800074 movhi r2,1
8018fac: 00000106 br 8018fb4 <getPHYSpeed+0x160>
8018fb0: 0005883a mov r2,zero
8018fb4: 10c4b03a or r2,r2,r3
8018fb8: 10802034 orhi r2,r2,128
8018fbc: e0bfff15 stw r2,-4(fp)
tse_dprintf(2, "ERROR : [getPHYSpeed] pmac not found from list of pmac_info[]! Speed = %s Mbps, Duplex = %s\n", speed == TSE_PHY_SPEED_1000 ? "1000" :
8018fc0: e0bffec3 ldbu r2,-5(fp)
8018fc4: 108000a0 cmpeqi r2,r2,2
8018fc8: 10000e1e bne r2,zero,8019004 <getPHYSpeed+0x1b0>
8018fcc: e0bffec3 ldbu r2,-5(fp)
8018fd0: 10800060 cmpeqi r2,r2,1
8018fd4: 1000081e bne r2,zero,8018ff8 <getPHYSpeed+0x1a4>
8018fd8: e0bffec3 ldbu r2,-5(fp)
8018fdc: 1000031e bne r2,zero,8018fec <getPHYSpeed+0x198>
8018fe0: 00820134 movhi r2,2052
8018fe4: 109f4c04 addi r2,r2,32048
8018fe8: 00000806 br 801900c <getPHYSpeed+0x1b8>
8018fec: 00820134 movhi r2,2052
8018ff0: 109f4d04 addi r2,r2,32052
8018ff4: 00000506 br 801900c <getPHYSpeed+0x1b8>
8018ff8: 00820134 movhi r2,2052
8018ffc: 109f4f04 addi r2,r2,32060
8019000: 00000206 br 801900c <getPHYSpeed+0x1b8>
8019004: 00820134 movhi r2,2052
8019008: 109f5004 addi r2,r2,32064
801900c: e0fffe83 ldbu r3,-6(fp)
8019010: 18c00058 cmpnei r3,r3,1
8019014: 1800031e bne r3,zero,8019024 <getPHYSpeed+0x1d0>
8019018: 00c20134 movhi r3,2052
801901c: 18df5204 addi r3,r3,32072
8019020: 00000206 br 801902c <getPHYSpeed+0x1d8>
8019024: 00c20134 movhi r3,2052
8019028: 18df5404 addi r3,r3,32080
801902c: 180d883a mov r6,r3
8019030: 100b883a mov r5,r2
8019034: 01020134 movhi r4,2052
8019038: 211f5604 addi r4,r4,32088
801903c: 8002c780 call 8002c78 <printf>
speed == TSE_PHY_SPEED_100 ? "100" :
speed == TSE_PHY_SPEED_10 ? "10" : "Unknown",
duplex == 1 ? "Full" : "Half");
tse_dprintf(2, "ERROR : [getPHYSpeed] Please define tse_mac_device[] correctly\n");
8019040: 01020134 movhi r4,2052
8019044: 211f6e04 addi r4,r4,32184
8019048: 8002d9c0 call 8002d9c <puts>
return result;
801904c: e0bfff17 ldw r2,-4(fp)
8019050: 00021906 br 80198b8 <getPHYSpeed+0xa64>
}
pphy = pmac_info->pphy_info;
8019054: e0bffc17 ldw r2,-16(fp)
8019058: 10800117 ldw r2,4(r2)
801905c: e0bffd15 stw r2,-12(fp)
pmac_group = pmac_info->pmac_group;
8019060: e0bffc17 ldw r2,-16(fp)
8019064: 10800317 ldw r2,12(r2)
8019068: e0bffb15 stw r2,-20(fp)
psys = pmac_info->psys_info;
801906c: e0bffc17 ldw r2,-16(fp)
8019070: 10800217 ldw r2,8(r2)
8019074: e0bffa15 stw r2,-24(fp)
mac_info_index = alt_tse_get_mac_info_index(pmac_info);
8019078: e13ffc17 ldw r4,-16(fp)
801907c: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
8019080: e0bff9c5 stb r2,-25(fp)
mac_group_index = alt_tse_get_mac_group_index(pmac_group);
8019084: e13ffb17 ldw r4,-20(fp)
8019088: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801908c: e0bff985 stb r2,-26(fp)
/* MDIO is not used */
if (pmac_group->pmac_info[0]->psys_info->tse_use_mdio == 0)
8019090: e0bffb17 ldw r2,-20(fp)
8019094: 10800117 ldw r2,4(r2)
8019098: 10800217 ldw r2,8(r2)
801909c: 10800303 ldbu r2,12(r2)
80190a0: 10803fcc andi r2,r2,255
80190a4: 10005a1e bne r2,zero,8019210 <getPHYSpeed+0x3bc>
{
speed = ALTERA_TSE_MAC_SPEED_DEFAULT;
80190a8: 00800044 movi r2,1
80190ac: e0bffec5 stb r2,-5(fp)
duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT;
80190b0: 00800044 movi r2,1
80190b4: e0bffe85 stb r2,-6(fp)
result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_NO_MDIO;
80190b8: e0bffe83 ldbu r2,-6(fp)
80190bc: 10c0004c andi r3,r2,1
80190c0: e0bffec3 ldbu r2,-5(fp)
80190c4: 10800098 cmpnei r2,r2,2
80190c8: 1000021e bne r2,zero,80190d4 <getPHYSpeed+0x280>
80190cc: 00800084 movi r2,2
80190d0: 00000106 br 80190d8 <getPHYSpeed+0x284>
80190d4: 0005883a mov r2,zero
80190d8: 10c6b03a or r3,r2,r3
80190dc: e0bffec3 ldbu r2,-5(fp)
80190e0: 10800058 cmpnei r2,r2,1
80190e4: 1000021e bne r2,zero,80190f0 <getPHYSpeed+0x29c>
80190e8: 00800104 movi r2,4
80190ec: 00000106 br 80190f4 <getPHYSpeed+0x2a0>
80190f0: 0005883a mov r2,zero
80190f4: 10c6b03a or r3,r2,r3
80190f8: e0bffec3 ldbu r2,-5(fp)
80190fc: 1000021e bne r2,zero,8019108 <getPHYSpeed+0x2b4>
8019100: 00800204 movi r2,8
8019104: 00000106 br 801910c <getPHYSpeed+0x2b8>
8019108: 0005883a mov r2,zero
801910c: 10c6b03a or r3,r2,r3
8019110: e0bffec3 ldbu r2,-5(fp)
8019114: 108000d8 cmpnei r2,r2,3
8019118: 1000021e bne r2,zero,8019124 <getPHYSpeed+0x2d0>
801911c: 00800074 movhi r2,1
8019120: 00000106 br 8019128 <getPHYSpeed+0x2d4>
8019124: 0005883a mov r2,zero
8019128: 10c4b03a or r2,r2,r3
801912c: 10801034 orhi r2,r2,64
8019130: e0bfff15 stw r2,-4(fp)
usleep(ALTERA_NOMDIO_TIMEOUT_THRESHOLD);
8019134: 010003f4 movhi r4,15
8019138: 21109004 addi r4,r4,16960
801913c: 803811c0 call 803811c <usleep>
if(psys->tse_phy_cfg) {
8019140: e0bffa17 ldw r2,-24(fp)
8019144: 10801217 ldw r2,72(r2)
8019148: 10000d26 beq r2,zero,8019180 <getPHYSpeed+0x32c>
tse_dprintf(4, "WARNING : PHY[%d.%d] - MDIO not enabled! Running user configuration...\n", mac_group_index, mac_info_index);
801914c: e0bff987 ldb r2,-26(fp)
8019150: e0fff9c7 ldb r3,-25(fp)
8019154: 180d883a mov r6,r3
8019158: 100b883a mov r5,r2
801915c: 01020134 movhi r4,2052
8019160: 211f7f04 addi r4,r4,32252
8019164: 8002c780 call 8002c78 <printf>
result = psys->tse_phy_cfg(pmac);
8019168: e0bffa17 ldw r2,-24(fp)
801916c: 10801217 ldw r2,72(r2)
8019170: e13ff717 ldw r4,-36(fp)
8019174: 103ee83a callr r2
8019178: e0bfff15 stw r2,-4(fp)
801917c: 00002206 br 8019208 <getPHYSpeed+0x3b4>
}
else {
tse_dprintf(4, "WARNING : MAC Group[%d] - MDIO not enabled! Speed = %s, Duplex = %s\n", mac_group_index, speed == TSE_PHY_SPEED_1000 ? "1000" :
8019180: e13ff987 ldb r4,-26(fp)
8019184: e0bffec3 ldbu r2,-5(fp)
8019188: 108000a0 cmpeqi r2,r2,2
801918c: 10000e1e bne r2,zero,80191c8 <getPHYSpeed+0x374>
8019190: e0bffec3 ldbu r2,-5(fp)
8019194: 10800060 cmpeqi r2,r2,1
8019198: 1000081e bne r2,zero,80191bc <getPHYSpeed+0x368>
801919c: e0bffec3 ldbu r2,-5(fp)
80191a0: 1000031e bne r2,zero,80191b0 <getPHYSpeed+0x35c>
80191a4: 00820134 movhi r2,2052
80191a8: 109f4c04 addi r2,r2,32048
80191ac: 00000806 br 80191d0 <getPHYSpeed+0x37c>
80191b0: 00820134 movhi r2,2052
80191b4: 109f4d04 addi r2,r2,32052
80191b8: 00000506 br 80191d0 <getPHYSpeed+0x37c>
80191bc: 00820134 movhi r2,2052
80191c0: 109f4f04 addi r2,r2,32060
80191c4: 00000206 br 80191d0 <getPHYSpeed+0x37c>
80191c8: 00820134 movhi r2,2052
80191cc: 109f5004 addi r2,r2,32064
80191d0: e0fffe83 ldbu r3,-6(fp)
80191d4: 18c00058 cmpnei r3,r3,1
80191d8: 1800031e bne r3,zero,80191e8 <getPHYSpeed+0x394>
80191dc: 00c20134 movhi r3,2052
80191e0: 18df5204 addi r3,r3,32072
80191e4: 00000206 br 80191f0 <getPHYSpeed+0x39c>
80191e8: 00c20134 movhi r3,2052
80191ec: 18df5404 addi r3,r3,32080
80191f0: 180f883a mov r7,r3
80191f4: 100d883a mov r6,r2
80191f8: 200b883a mov r5,r4
80191fc: 01020134 movhi r4,2052
8019200: 211f9104 addi r4,r4,32324
8019204: 8002c780 call 8002c78 <printf>
speed == TSE_PHY_SPEED_100 ? "100" :
speed == TSE_PHY_SPEED_10 ? "10" : "Unknown",
duplex == 1 ? "Full" : "Half");
}
return result;
8019208: e0bfff17 ldw r2,-4(fp)
801920c: 0001aa06 br 80198b8 <getPHYSpeed+0xa64>
/* Not running simulation */
#ifndef ALT_SIM_OPTIMIZE
/* These variables declaration are here to avoid "warning: unused variable" message when compile for simulation */
np_tse_mac *pmac_group_base = (np_tse_mac *) pmac_group->pmac_info[0]->psys_info->tse_mac_base;
8019210: e0bffb17 ldw r2,-20(fp)
8019214: 10800117 ldw r2,4(r2)
8019218: 10800217 ldw r2,8(r2)
801921c: 10800017 ldw r2,0(r2)
8019220: e0bff815 stw r2,-32(fp)
/* if no PHY connected to the MAC */
if(pphy == 0) {
8019224: e0bffd17 ldw r2,-12(fp)
8019228: 1000491e bne r2,zero,8019350 <getPHYSpeed+0x4fc>
speed = ALTERA_TSE_MAC_SPEED_DEFAULT;
801922c: 00800044 movi r2,1
8019230: e0bffec5 stb r2,-5(fp)
duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT;
8019234: 00800044 movi r2,1
8019238: e0bffe85 stb r2,-6(fp)
result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_NO_PHY;
801923c: e0bffe83 ldbu r2,-6(fp)
8019240: 10c0004c andi r3,r2,1
8019244: e0bffec3 ldbu r2,-5(fp)
8019248: 10800098 cmpnei r2,r2,2
801924c: 1000021e bne r2,zero,8019258 <getPHYSpeed+0x404>
8019250: 00800084 movi r2,2
8019254: 00000106 br 801925c <getPHYSpeed+0x408>
8019258: 0005883a mov r2,zero
801925c: 10c6b03a or r3,r2,r3
8019260: e0bffec3 ldbu r2,-5(fp)
8019264: 10800058 cmpnei r2,r2,1
8019268: 1000021e bne r2,zero,8019274 <getPHYSpeed+0x420>
801926c: 00800104 movi r2,4
8019270: 00000106 br 8019278 <getPHYSpeed+0x424>
8019274: 0005883a mov r2,zero
8019278: 10c6b03a or r3,r2,r3
801927c: e0bffec3 ldbu r2,-5(fp)
8019280: 1000021e bne r2,zero,801928c <getPHYSpeed+0x438>
8019284: 00800204 movi r2,8
8019288: 00000106 br 8019290 <getPHYSpeed+0x43c>
801928c: 0005883a mov r2,zero
8019290: 10c6b03a or r3,r2,r3
8019294: e0bffec3 ldbu r2,-5(fp)
8019298: 108000d8 cmpnei r2,r2,3
801929c: 1000021e bne r2,zero,80192a8 <getPHYSpeed+0x454>
80192a0: 00800074 movhi r2,1
80192a4: 00000106 br 80192ac <getPHYSpeed+0x458>
80192a8: 0005883a mov r2,zero
80192ac: 10c4b03a or r2,r2,r3
80192b0: 10800834 orhi r2,r2,32
80192b4: e0bfff15 stw r2,-4(fp)
tse_dprintf(2, "ERROR : PHY[%d.%d] - No PHY connected! Speed = %s, Duplex = %s\n", mac_group_index, mac_info_index, speed == TSE_PHY_SPEED_1000 ? "1000" :
80192b8: e13ff987 ldb r4,-26(fp)
80192bc: e17ff9c7 ldb r5,-25(fp)
80192c0: e0bffec3 ldbu r2,-5(fp)
80192c4: 108000a0 cmpeqi r2,r2,2
80192c8: 10000e1e bne r2,zero,8019304 <getPHYSpeed+0x4b0>
80192cc: e0bffec3 ldbu r2,-5(fp)
80192d0: 10800060 cmpeqi r2,r2,1
80192d4: 1000081e bne r2,zero,80192f8 <getPHYSpeed+0x4a4>
80192d8: e0bffec3 ldbu r2,-5(fp)
80192dc: 1000031e bne r2,zero,80192ec <getPHYSpeed+0x498>
80192e0: 00820134 movhi r2,2052
80192e4: 109f4c04 addi r2,r2,32048
80192e8: 00000806 br 801930c <getPHYSpeed+0x4b8>
80192ec: 00820134 movhi r2,2052
80192f0: 109f4d04 addi r2,r2,32052
80192f4: 00000506 br 801930c <getPHYSpeed+0x4b8>
80192f8: 00820134 movhi r2,2052
80192fc: 109f4f04 addi r2,r2,32060
8019300: 00000206 br 801930c <getPHYSpeed+0x4b8>
8019304: 00820134 movhi r2,2052
8019308: 109f5004 addi r2,r2,32064
801930c: e0fffe83 ldbu r3,-6(fp)
8019310: 18c00058 cmpnei r3,r3,1
8019314: 1800031e bne r3,zero,8019324 <getPHYSpeed+0x4d0>
8019318: 00c20134 movhi r3,2052
801931c: 18df5204 addi r3,r3,32072
8019320: 00000206 br 801932c <getPHYSpeed+0x4d8>
8019324: 00c20134 movhi r3,2052
8019328: 18df5404 addi r3,r3,32080
801932c: d8c00015 stw r3,0(sp)
8019330: 100f883a mov r7,r2
8019334: 280d883a mov r6,r5
8019338: 200b883a mov r5,r4
801933c: 01020134 movhi r4,2052
8019340: 211fa304 addi r4,r4,32396
8019344: 8002c780 call 8002c78 <printf>
speed == TSE_PHY_SPEED_100 ? "100" :
speed == TSE_PHY_SPEED_10 ? "10" : "Unknown",
duplex == 1 ? "Full" : "Half");
return result;
8019348: e0bfff17 ldw r2,-4(fp)
801934c: 00015a06 br 80198b8 <getPHYSpeed+0xa64>
}
/* Small MAC */
if(pmac_info->mac_type == ALTERA_TSE_MACLITE_10_100) {
8019350: e0bffc17 ldw r2,-16(fp)
8019354: 10800003 ldbu r2,0(r2)
8019358: 10803fcc andi r2,r2,255
801935c: 10800058 cmpnei r2,r2,1
8019360: 1000071e bne r2,zero,8019380 <getPHYSpeed+0x52c>
alt_tse_phy_set_adv_1000(pphy, 0);
8019364: 000b883a mov r5,zero
8019368: e13ffd17 ldw r4,-12(fp)
801936c: 801b7f00 call 801b7f0 <alt_tse_phy_set_adv_1000>
alt_tse_phy_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD);
8019370: 01427104 movi r5,2500
8019374: e13ffd17 ldw r4,-12(fp)
8019378: 801af180 call 801af18 <alt_tse_phy_restart_an>
801937c: 00000e06 br 80193b8 <getPHYSpeed+0x564>
}
else if(pmac_info->mac_type == ALTERA_TSE_MACLITE_1000) {
8019380: e0bffc17 ldw r2,-16(fp)
8019384: 10800003 ldbu r2,0(r2)
8019388: 10803fcc andi r2,r2,255
801938c: 10800098 cmpnei r2,r2,2
8019390: 1000091e bne r2,zero,80193b8 <getPHYSpeed+0x564>
alt_tse_phy_set_adv_100(pphy, 0);
8019394: 000b883a mov r5,zero
8019398: e13ffd17 ldw r4,-12(fp)
801939c: 801b9b40 call 801b9b4 <alt_tse_phy_set_adv_100>
alt_tse_phy_set_adv_10(pphy, 0);
80193a0: 000b883a mov r5,zero
80193a4: e13ffd17 ldw r4,-12(fp)
80193a8: 801bc080 call 801bc08 <alt_tse_phy_set_adv_10>
alt_tse_phy_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD);
80193ac: 01427104 movi r5,2500
80193b0: e13ffd17 ldw r4,-12(fp)
80193b4: 801af180 call 801af18 <alt_tse_phy_restart_an>
}
/* check link connection for this PHY */
if(alt_tse_phy_check_link(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD) == TSE_PHY_AN_NOT_COMPLETE) {
80193b8: 01427104 movi r5,2500
80193bc: e13ffd17 ldw r4,-12(fp)
80193c0: 801b0dc0 call 801b0dc <alt_tse_phy_check_link>
80193c4: 10bfffd8 cmpnei r2,r2,-1
80193c8: 1000491e bne r2,zero,80194f0 <getPHYSpeed+0x69c>
speed = ALTERA_TSE_MAC_SPEED_DEFAULT;
80193cc: 00800044 movi r2,1
80193d0: e0bffec5 stb r2,-5(fp)
duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT;
80193d4: 00800044 movi r2,1
80193d8: e0bffe85 stb r2,-6(fp)
result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_AN_NOT_COMPLETE;
80193dc: e0bffe83 ldbu r2,-6(fp)
80193e0: 10c0004c andi r3,r2,1
80193e4: e0bffec3 ldbu r2,-5(fp)
80193e8: 10800098 cmpnei r2,r2,2
80193ec: 1000021e bne r2,zero,80193f8 <getPHYSpeed+0x5a4>
80193f0: 00800084 movi r2,2
80193f4: 00000106 br 80193fc <getPHYSpeed+0x5a8>
80193f8: 0005883a mov r2,zero
80193fc: 10c6b03a or r3,r2,r3
8019400: e0bffec3 ldbu r2,-5(fp)
8019404: 10800058 cmpnei r2,r2,1
8019408: 1000021e bne r2,zero,8019414 <getPHYSpeed+0x5c0>
801940c: 00800104 movi r2,4
8019410: 00000106 br 8019418 <getPHYSpeed+0x5c4>
8019414: 0005883a mov r2,zero
8019418: 10c6b03a or r3,r2,r3
801941c: e0bffec3 ldbu r2,-5(fp)
8019420: 1000021e bne r2,zero,801942c <getPHYSpeed+0x5d8>
8019424: 00800204 movi r2,8
8019428: 00000106 br 8019430 <getPHYSpeed+0x5dc>
801942c: 0005883a mov r2,zero
8019430: 10c6b03a or r3,r2,r3
8019434: e0bffec3 ldbu r2,-5(fp)
8019438: 108000d8 cmpnei r2,r2,3
801943c: 1000021e bne r2,zero,8019448 <getPHYSpeed+0x5f4>
8019440: 00800074 movhi r2,1
8019444: 00000106 br 801944c <getPHYSpeed+0x5f8>
8019448: 0005883a mov r2,zero
801944c: 10c4b03a or r2,r2,r3
8019450: 10800234 orhi r2,r2,8
8019454: e0bfff15 stw r2,-4(fp)
tse_dprintf(3, "WARNING : PHY[%d.%d] - Auto-Negotiation not completed! Speed = %s, Duplex = %s\n", mac_group_index, mac_info_index, speed == TSE_PHY_SPEED_1000 ? "1000" :
8019458: e13ff987 ldb r4,-26(fp)
801945c: e17ff9c7 ldb r5,-25(fp)
8019460: e0bffec3 ldbu r2,-5(fp)
8019464: 108000a0 cmpeqi r2,r2,2
8019468: 10000e1e bne r2,zero,80194a4 <getPHYSpeed+0x650>
801946c: e0bffec3 ldbu r2,-5(fp)
8019470: 10800060 cmpeqi r2,r2,1
8019474: 1000081e bne r2,zero,8019498 <getPHYSpeed+0x644>
8019478: e0bffec3 ldbu r2,-5(fp)
801947c: 1000031e bne r2,zero,801948c <getPHYSpeed+0x638>
8019480: 00820134 movhi r2,2052
8019484: 109f4c04 addi r2,r2,32048
8019488: 00000806 br 80194ac <getPHYSpeed+0x658>
801948c: 00820134 movhi r2,2052
8019490: 109f4d04 addi r2,r2,32052
8019494: 00000506 br 80194ac <getPHYSpeed+0x658>
8019498: 00820134 movhi r2,2052
801949c: 109f4f04 addi r2,r2,32060
80194a0: 00000206 br 80194ac <getPHYSpeed+0x658>
80194a4: 00820134 movhi r2,2052
80194a8: 109f5004 addi r2,r2,32064
80194ac: e0fffe83 ldbu r3,-6(fp)
80194b0: 18c00058 cmpnei r3,r3,1
80194b4: 1800031e bne r3,zero,80194c4 <getPHYSpeed+0x670>
80194b8: 00c20134 movhi r3,2052
80194bc: 18df5204 addi r3,r3,32072
80194c0: 00000206 br 80194cc <getPHYSpeed+0x678>
80194c4: 00c20134 movhi r3,2052
80194c8: 18df5404 addi r3,r3,32080
80194cc: d8c00015 stw r3,0(sp)
80194d0: 100f883a mov r7,r2
80194d4: 280d883a mov r6,r5
80194d8: 200b883a mov r5,r4
80194dc: 01020134 movhi r4,2052
80194e0: 211fb404 addi r4,r4,32464
80194e4: 8002c780 call 8002c78 <printf>
speed == TSE_PHY_SPEED_100 ? "100" :
speed == TSE_PHY_SPEED_10 ? "10" : "Unknown",
duplex == 1 ? "Full" : "Half");
return result;
80194e8: e0bfff17 ldw r2,-4(fp)
80194ec: 0000f206 br 80198b8 <getPHYSpeed+0xa64>
}
IOWR(&pmac_group_base->MDIO_ADDR1, 0, pphy->mdio_address);
80194f0: e0bff817 ldw r2,-32(fp)
80194f4: 10801004 addi r2,r2,64
80194f8: e0fffd17 ldw r3,-12(fp)
80194fc: 18c00003 ldbu r3,0(r3)
8019500: 18c03fcc andi r3,r3,255
8019504: 10c00035 stwio r3,0(r2)
/* To enable PHY loopback */
#if ENABLE_PHY_LOOPBACK
tse_dprintf(5, "INFO : PHY[%d.%d] - Putting PHY in loopback\n", mac_group_index, mac_info_index);
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_LOOPBACK, 1, 1); // enable PHY loopback
#else
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_LOOPBACK, 1, 0); // disable PHY loopback
8019508: d8000015 stw zero,0(sp)
801950c: 01c00044 movi r7,1
8019510: 01800384 movi r6,14
8019514: 000b883a mov r5,zero
8019518: e13ffd17 ldw r4,-12(fp)
801951c: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
#endif
/* if PHY not found in profile */
if(pphy->pphy_profile == 0) {
8019520: e0bffd17 ldw r2,-12(fp)
8019524: 10800517 ldw r2,20(r2)
8019528: 10002b1e bne r2,zero,80195d8 <getPHYSpeed+0x784>
tse_dprintf(3, "WARNING : PHY[%d.%d] - PHY not found in PHY profile\n", mac_group_index, mac_info_index);
801952c: e0bff987 ldb r2,-26(fp)
8019530: e0fff9c7 ldb r3,-25(fp)
8019534: 180d883a mov r6,r3
8019538: 100b883a mov r5,r2
801953c: 01020134 movhi r4,2052
8019540: 211fc804 addi r4,r4,32544
8019544: 8002c780 call 8002c78 <printf>
speed = ALTERA_TSE_MAC_SPEED_DEFAULT;
8019548: 00800044 movi r2,1
801954c: e0bffec5 stb r2,-5(fp)
duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT;
8019550: 00800044 movi r2,1
8019554: e0bffe85 stb r2,-6(fp)
result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_NO_PHY_PROFILE;
8019558: e0bffe83 ldbu r2,-6(fp)
801955c: 10c0004c andi r3,r2,1
8019560: e0bffec3 ldbu r2,-5(fp)
8019564: 10800098 cmpnei r2,r2,2
8019568: 1000021e bne r2,zero,8019574 <getPHYSpeed+0x720>
801956c: 00800084 movi r2,2
8019570: 00000106 br 8019578 <getPHYSpeed+0x724>
8019574: 0005883a mov r2,zero
8019578: 10c6b03a or r3,r2,r3
801957c: e0bffec3 ldbu r2,-5(fp)
8019580: 10800058 cmpnei r2,r2,1
8019584: 1000021e bne r2,zero,8019590 <getPHYSpeed+0x73c>
8019588: 00800104 movi r2,4
801958c: 00000106 br 8019594 <getPHYSpeed+0x740>
8019590: 0005883a mov r2,zero
8019594: 10c6b03a or r3,r2,r3
8019598: e0bffec3 ldbu r2,-5(fp)
801959c: 1000021e bne r2,zero,80195a8 <getPHYSpeed+0x754>
80195a0: 00800204 movi r2,8
80195a4: 00000106 br 80195ac <getPHYSpeed+0x758>
80195a8: 0005883a mov r2,zero
80195ac: 10c6b03a or r3,r2,r3
80195b0: e0bffec3 ldbu r2,-5(fp)
80195b4: 108000d8 cmpnei r2,r2,3
80195b8: 1000021e bne r2,zero,80195c4 <getPHYSpeed+0x770>
80195bc: 00800074 movhi r2,1
80195c0: 00000106 br 80195c8 <getPHYSpeed+0x774>
80195c4: 0005883a mov r2,zero
80195c8: 10c4b03a or r2,r2,r3
80195cc: 10800134 orhi r2,r2,4
80195d0: e0bfff15 stw r2,-4(fp)
80195d4: 00009306 br 8019824 <getPHYSpeed+0x9d0>
}
// retrieve duplex information from PHY
else
{
if(pphy->pphy_profile->link_status_read)
80195d8: e0bffd17 ldw r2,-12(fp)
80195dc: 10800517 ldw r2,20(r2)
80195e0: 10801817 ldw r2,96(r2)
80195e4: 10002526 beq r2,zero,801967c <getPHYSpeed+0x828>
{
result = pphy->pphy_profile->link_status_read(pmac_group_base);
80195e8: e0bffd17 ldw r2,-12(fp)
80195ec: 10800517 ldw r2,20(r2)
80195f0: 10801817 ldw r2,96(r2)
80195f4: e13ff817 ldw r4,-32(fp)
80195f8: 103ee83a callr r2
80195fc: e0bfff15 stw r2,-4(fp)
speed = (result & 0x02) ? TSE_PHY_SPEED_1000 :
8019600: e0bfff17 ldw r2,-4(fp)
8019604: 1080008c andi r2,r2,2
8019608: 10000c1e bne r2,zero,801963c <getPHYSpeed+0x7e8>
(result & 0x04) ? TSE_PHY_SPEED_100 :
801960c: e0bfff17 ldw r2,-4(fp)
8019610: 1080010c andi r2,r2,4
speed = (result & 0x02) ? TSE_PHY_SPEED_1000 :
8019614: 1000071e bne r2,zero,8019634 <getPHYSpeed+0x7e0>
(result & 0x08) ? TSE_PHY_SPEED_10 : TSE_PHY_SPEED_INVALID;
8019618: e0bfff17 ldw r2,-4(fp)
801961c: 1080020c andi r2,r2,8
speed = (result & 0x02) ? TSE_PHY_SPEED_1000 :
8019620: 10000226 beq r2,zero,801962c <getPHYSpeed+0x7d8>
8019624: 0005883a mov r2,zero
8019628: 00000506 br 8019640 <getPHYSpeed+0x7ec>
801962c: 008000c4 movi r2,3
8019630: 00000306 br 8019640 <getPHYSpeed+0x7ec>
8019634: 00800044 movi r2,1
8019638: 00000106 br 8019640 <getPHYSpeed+0x7ec>
801963c: 00800084 movi r2,2
8019640: e0bffec5 stb r2,-5(fp)
duplex = (result & 0x01) ? TSE_PHY_DUPLEX_FULL : TSE_PHY_DUPLEX_HALF;
8019644: e0bfff17 ldw r2,-4(fp)
8019648: 1080004c andi r2,r2,1
801964c: e0bffe85 stb r2,-6(fp)
if(result & ALT_TSE_E_INVALID_SPEED)
8019650: e0bfff17 ldw r2,-4(fp)
8019654: 1080006c andhi r2,r2,1
8019658: 10007226 beq r2,zero,8019824 <getPHYSpeed+0x9d0>
{
tse_dprintf(3, "WARNING : PHY[%d.%d] - Invalid speed read from PHY\n", mac_group_index, mac_info_index);
801965c: e0bff987 ldb r2,-26(fp)
8019660: e0fff9c7 ldb r3,-25(fp)
8019664: 180d883a mov r6,r3
8019668: 100b883a mov r5,r2
801966c: 01020134 movhi r4,2052
8019670: 211fd604 addi r4,r4,32600
8019674: 8002c780 call 8002c78 <printf>
8019678: 00006a06 br 8019824 <getPHYSpeed+0x9d0>
}
}
else if(pphy->pphy_profile->status_reg_location == 0)
801967c: e0bffd17 ldw r2,-12(fp)
8019680: 10800517 ldw r2,20(r2)
8019684: 10801583 ldbu r2,86(r2)
8019688: 10803fcc andi r2,r2,255
801968c: 10002b1e bne r2,zero,801973c <getPHYSpeed+0x8e8>
{
tse_dprintf(3, "WARNING : PHY[%d.%d] - PHY Specific Status register information not provided in profile\n", mac_group_index, mac_info_index);
8019690: e0bff987 ldb r2,-26(fp)
8019694: e0fff9c7 ldb r3,-25(fp)
8019698: 180d883a mov r6,r3
801969c: 100b883a mov r5,r2
80196a0: 01020134 movhi r4,2052
80196a4: 211fe304 addi r4,r4,32652
80196a8: 8002c780 call 8002c78 <printf>
speed = ALTERA_TSE_MAC_SPEED_DEFAULT;
80196ac: 00800044 movi r2,1
80196b0: e0bffec5 stb r2,-5(fp)
duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT;
80196b4: 00800044 movi r2,1
80196b8: e0bffe85 stb r2,-6(fp)
result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_PROFILE_INCORRECT_DEFINED;
80196bc: e0bffe83 ldbu r2,-6(fp)
80196c0: 10c0004c andi r3,r2,1
80196c4: e0bffec3 ldbu r2,-5(fp)
80196c8: 10800098 cmpnei r2,r2,2
80196cc: 1000021e bne r2,zero,80196d8 <getPHYSpeed+0x884>
80196d0: 00800084 movi r2,2
80196d4: 00000106 br 80196dc <getPHYSpeed+0x888>
80196d8: 0005883a mov r2,zero
80196dc: 10c6b03a or r3,r2,r3
80196e0: e0bffec3 ldbu r2,-5(fp)
80196e4: 10800058 cmpnei r2,r2,1
80196e8: 1000021e bne r2,zero,80196f4 <getPHYSpeed+0x8a0>
80196ec: 00800104 movi r2,4
80196f0: 00000106 br 80196f8 <getPHYSpeed+0x8a4>
80196f4: 0005883a mov r2,zero
80196f8: 10c6b03a or r3,r2,r3
80196fc: e0bffec3 ldbu r2,-5(fp)
8019700: 1000021e bne r2,zero,801970c <getPHYSpeed+0x8b8>
8019704: 00800204 movi r2,8
8019708: 00000106 br 8019710 <getPHYSpeed+0x8bc>
801970c: 0005883a mov r2,zero
8019710: 10c6b03a or r3,r2,r3
8019714: e0bffec3 ldbu r2,-5(fp)
8019718: 108000d8 cmpnei r2,r2,3
801971c: 1000021e bne r2,zero,8019728 <getPHYSpeed+0x8d4>
8019720: 00800074 movhi r2,1
8019724: 00000106 br 801972c <getPHYSpeed+0x8d8>
8019728: 0005883a mov r2,zero
801972c: 10c4b03a or r2,r2,r3
8019730: 108000b4 orhi r2,r2,2
8019734: e0bfff15 stw r2,-4(fp)
8019738: 00003a06 br 8019824 <getPHYSpeed+0x9d0>
}
else
{
/* extract connection speed and duplex information */
speed = alt_tse_phy_rd_mdio_reg(pphy, pphy->pphy_profile->status_reg_location, pphy->pphy_profile->speed_lsb_location, 2);
801973c: e0bffd17 ldw r2,-12(fp)
8019740: 10800517 ldw r2,20(r2)
8019744: 10801583 ldbu r2,86(r2)
8019748: 10c03fcc andi r3,r2,255
801974c: e0bffd17 ldw r2,-12(fp)
8019750: 10800517 ldw r2,20(r2)
8019754: 108015c3 ldbu r2,87(r2)
8019758: 10803fcc andi r2,r2,255
801975c: 01c00084 movi r7,2
8019760: 100d883a mov r6,r2
8019764: 180b883a mov r5,r3
8019768: e13ffd17 ldw r4,-12(fp)
801976c: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
8019770: e0bffec5 stb r2,-5(fp)
duplex = alt_tse_phy_rd_mdio_reg(pphy, pphy->pphy_profile->status_reg_location, pphy->pphy_profile->duplex_bit_location, 1);
8019774: e0bffd17 ldw r2,-12(fp)
8019778: 10800517 ldw r2,20(r2)
801977c: 10801583 ldbu r2,86(r2)
8019780: 10c03fcc andi r3,r2,255
8019784: e0bffd17 ldw r2,-12(fp)
8019788: 10800517 ldw r2,20(r2)
801978c: 10801603 ldbu r2,88(r2)
8019790: 10803fcc andi r2,r2,255
8019794: 01c00044 movi r7,1
8019798: 100d883a mov r6,r2
801979c: 180b883a mov r5,r3
80197a0: e13ffd17 ldw r4,-12(fp)
80197a4: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
80197a8: e0bffe85 stb r2,-6(fp)
result = ALT_TSE_SPEED_DUPLEX(speed, duplex);
80197ac: e0bffe83 ldbu r2,-6(fp)
80197b0: 10c0004c andi r3,r2,1
80197b4: e0bffec3 ldbu r2,-5(fp)
80197b8: 10800098 cmpnei r2,r2,2
80197bc: 1000021e bne r2,zero,80197c8 <getPHYSpeed+0x974>
80197c0: 00800084 movi r2,2
80197c4: 00000106 br 80197cc <getPHYSpeed+0x978>
80197c8: 0005883a mov r2,zero
80197cc: 10c6b03a or r3,r2,r3
80197d0: e0bffec3 ldbu r2,-5(fp)
80197d4: 10800058 cmpnei r2,r2,1
80197d8: 1000021e bne r2,zero,80197e4 <getPHYSpeed+0x990>
80197dc: 00800104 movi r2,4
80197e0: 00000106 br 80197e8 <getPHYSpeed+0x994>
80197e4: 0005883a mov r2,zero
80197e8: 10c6b03a or r3,r2,r3
80197ec: e0bffec3 ldbu r2,-5(fp)
80197f0: 1000021e bne r2,zero,80197fc <getPHYSpeed+0x9a8>
80197f4: 00800204 movi r2,8
80197f8: 00000106 br 8019800 <getPHYSpeed+0x9ac>
80197fc: 0005883a mov r2,zero
8019800: 10c6b03a or r3,r2,r3
8019804: e0bffec3 ldbu r2,-5(fp)
8019808: 108000d8 cmpnei r2,r2,3
801980c: 1000021e bne r2,zero,8019818 <getPHYSpeed+0x9c4>
8019810: 00800074 movhi r2,1
8019814: 00000106 br 801981c <getPHYSpeed+0x9c8>
8019818: 0005883a mov r2,zero
801981c: 10c4b03a or r2,r2,r3
8019820: e0bfff15 stw r2,-4(fp)
/* for simulation purpose, default to gigabit mode */
speed = 1;
duplex = 1;
#endif
tse_dprintf(5, "INFO : PHY[%d.%d] - Speed = %s, Duplex = %s\n", mac_group_index, mac_info_index, speed == TSE_PHY_SPEED_1000 ? "1000" :
8019824: e13ff987 ldb r4,-26(fp)
8019828: e17ff9c7 ldb r5,-25(fp)
801982c: e0bffec3 ldbu r2,-5(fp)
8019830: 108000a0 cmpeqi r2,r2,2
8019834: 10000e1e bne r2,zero,8019870 <getPHYSpeed+0xa1c>
8019838: e0bffec3 ldbu r2,-5(fp)
801983c: 10800060 cmpeqi r2,r2,1
8019840: 1000081e bne r2,zero,8019864 <getPHYSpeed+0xa10>
8019844: e0bffec3 ldbu r2,-5(fp)
8019848: 1000031e bne r2,zero,8019858 <getPHYSpeed+0xa04>
801984c: 00820134 movhi r2,2052
8019850: 109f4c04 addi r2,r2,32048
8019854: 00000806 br 8019878 <getPHYSpeed+0xa24>
8019858: 00820134 movhi r2,2052
801985c: 109f4d04 addi r2,r2,32052
8019860: 00000506 br 8019878 <getPHYSpeed+0xa24>
8019864: 00820134 movhi r2,2052
8019868: 109f4f04 addi r2,r2,32060
801986c: 00000206 br 8019878 <getPHYSpeed+0xa24>
8019870: 00820134 movhi r2,2052
8019874: 109f5004 addi r2,r2,32064
8019878: e0fffe83 ldbu r3,-6(fp)
801987c: 18c00058 cmpnei r3,r3,1
8019880: 1800031e bne r3,zero,8019890 <getPHYSpeed+0xa3c>
8019884: 00c20134 movhi r3,2052
8019888: 18df5204 addi r3,r3,32072
801988c: 00000206 br 8019898 <getPHYSpeed+0xa44>
8019890: 00c20134 movhi r3,2052
8019894: 18df5404 addi r3,r3,32080
8019898: d8c00015 stw r3,0(sp)
801989c: 100f883a mov r7,r2
80198a0: 280d883a mov r6,r5
80198a4: 200b883a mov r5,r4
80198a8: 01020134 movhi r4,2052
80198ac: 211ffa04 addi r4,r4,32744
80198b0: 8002c780 call 8002c78 <printf>
speed == TSE_PHY_SPEED_100 ? "100" :
speed == TSE_PHY_SPEED_10 ? "10" : "Unknown",
duplex == 1 ? "Full" : "Half");
return result;
80198b4: e0bfff17 ldw r2,-4(fp)
}
80198b8: e037883a mov sp,fp
80198bc: dfc00117 ldw ra,4(sp)
80198c0: df000017 ldw fp,0(sp)
80198c4: dec00204 addi sp,sp,8
80198c8: f800283a ret
080198cc <alt_tse_phy_rd_mdio_addr>:
/* @Function Description: Read MDIO address from the MDIO address1 register of first MAC within MAC group
* @API Type: Internal
* @param pmac Pointer to the alt_tse_phy_info structure
* @return return SUCCESS
*/
alt_32 alt_tse_phy_rd_mdio_addr(alt_tse_phy_info *pphy) {
80198cc: defffd04 addi sp,sp,-12
80198d0: df000215 stw fp,8(sp)
80198d4: df000204 addi fp,sp,8
80198d8: e13ffe15 stw r4,-8(fp)
np_tse_mac *pmac_group_base = (np_tse_mac *) pphy->pmac_info->pmac_group->pmac_info[0]->psys_info->tse_mac_base;
80198dc: e0bffe17 ldw r2,-8(fp)
80198e0: 10800617 ldw r2,24(r2)
80198e4: 10800317 ldw r2,12(r2)
80198e8: 10800117 ldw r2,4(r2)
80198ec: 10800217 ldw r2,8(r2)
80198f0: 10800017 ldw r2,0(r2)
80198f4: e0bfff15 stw r2,-4(fp)
return IORD(&pmac_group_base->MDIO_ADDR1, 0);
80198f8: e0bfff17 ldw r2,-4(fp)
80198fc: 10801004 addi r2,r2,64
8019900: 10800037 ldwio r2,0(r2)
}
8019904: e037883a mov sp,fp
8019908: df000017 ldw fp,0(sp)
801990c: dec00104 addi sp,sp,4
8019910: f800283a ret
08019914 <alt_tse_phy_wr_mdio_addr>:
* @API Type: Internal
* @param pmac Pointer to the alt_tse_phy_info structure
* @param mdio_address MDIO address to be written
* @return return SUCCESS
*/
alt_32 alt_tse_phy_wr_mdio_addr(alt_tse_phy_info *pphy, alt_u8 mdio_address) {
8019914: defffc04 addi sp,sp,-16
8019918: df000315 stw fp,12(sp)
801991c: df000304 addi fp,sp,12
8019920: e13ffe15 stw r4,-8(fp)
8019924: 2805883a mov r2,r5
8019928: e0bffd05 stb r2,-12(fp)
np_tse_mac *pmac_group_base = (np_tse_mac *) pphy->pmac_info->pmac_group->pmac_info[0]->psys_info->tse_mac_base;
801992c: e0bffe17 ldw r2,-8(fp)
8019930: 10800617 ldw r2,24(r2)
8019934: 10800317 ldw r2,12(r2)
8019938: 10800117 ldw r2,4(r2)
801993c: 10800217 ldw r2,8(r2)
8019940: 10800017 ldw r2,0(r2)
8019944: e0bfff15 stw r2,-4(fp)
IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdio_address);
8019948: e0bfff17 ldw r2,-4(fp)
801994c: 10801004 addi r2,r2,64
8019950: e0fffd03 ldbu r3,-12(fp)
8019954: 10c00035 stwio r3,0(r2)
return SUCCESS;
8019958: 0005883a mov r2,zero
}
801995c: e037883a mov sp,fp
8019960: df000017 ldw fp,0(sp)
8019964: dec00104 addi sp,sp,4
8019968: f800283a ret
0801996c <alt_tse_phy_wr_mdio_reg>:
* @param bit_length number of bits to be written to the register.
* @param data data to be written to the register at specific bit location of register.
* @return SUCCESS
*/
alt_32 alt_tse_phy_wr_mdio_reg(alt_tse_phy_info *pphy, alt_u8 reg_num, alt_u8 lsb_num, alt_u8 bit_length, alt_u16 data)
{
801996c: defff604 addi sp,sp,-40
8019970: df000915 stw fp,36(sp)
8019974: df000904 addi fp,sp,36
8019978: e13ffb15 stw r4,-20(fp)
801997c: 2807883a mov r3,r5
8019980: 300b883a mov r5,r6
8019984: 3809883a mov r4,r7
8019988: e0800117 ldw r2,4(fp)
801998c: e0fffa05 stb r3,-24(fp)
8019990: 2807883a mov r3,r5
8019994: e0fff905 stb r3,-28(fp)
8019998: 2007883a mov r3,r4
801999c: e0fff805 stb r3,-32(fp)
80199a0: e0bff70d sth r2,-36(fp)
alt_u16 temp_data;
alt_u16 bit_mask;
alt_32 i;
np_tse_mac *pmac = (np_tse_mac *) pphy->pmac_info->pmac_group->pmac_info[0]->psys_info->tse_mac_base;
80199a4: e0bffb17 ldw r2,-20(fp)
80199a8: 10800617 ldw r2,24(r2)
80199ac: 10800317 ldw r2,12(r2)
80199b0: 10800117 ldw r2,4(r2)
80199b4: 10800217 ldw r2,8(r2)
80199b8: 10800017 ldw r2,0(r2)
80199bc: e0bffd15 stw r2,-12(fp)
bit_mask = 0x00;
80199c0: e03fff8d sth zero,-2(fp)
/* generate mask consist of bit_length number of 1
* eg: bit_length = 3, bit_mask = 0b0000 0000 0000 0111
*/
for(i = 0; i < bit_length; i++)
80199c4: e03ffe15 stw zero,-8(fp)
80199c8: 00000906 br 80199f0 <alt_tse_phy_wr_mdio_reg+0x84>
{
bit_mask <<= 1;
80199cc: e0bfff8b ldhu r2,-2(fp)
80199d0: 1085883a add r2,r2,r2
80199d4: e0bfff8d sth r2,-2(fp)
bit_mask |= 0x01;
80199d8: e0bfff8b ldhu r2,-2(fp)
80199dc: 10800054 ori r2,r2,1
80199e0: e0bfff8d sth r2,-2(fp)
for(i = 0; i < bit_length; i++)
80199e4: e0bffe17 ldw r2,-8(fp)
80199e8: 10800044 addi r2,r2,1
80199ec: e0bffe15 stw r2,-8(fp)
80199f0: e0bff803 ldbu r2,-32(fp)
80199f4: e0fffe17 ldw r3,-8(fp)
80199f8: 18bff416 blt r3,r2,80199cc <alt_tse_phy_wr_mdio_reg+0x60>
}
/* shifting mask to left by bit_num */
bit_mask <<= lsb_num;
80199fc: e0ffff8b ldhu r3,-2(fp)
8019a00: e0bff903 ldbu r2,-28(fp)
8019a04: 1884983a sll r2,r3,r2
8019a08: e0bfff8d sth r2,-2(fp)
/* read register data */
temp_data = IORD(&pmac->mdio1, reg_num);
8019a0c: e0bffd17 ldw r2,-12(fp)
8019a10: 1080a004 addi r2,r2,640
8019a14: e0fffa03 ldbu r3,-24(fp)
8019a18: 180690ba slli r3,r3,2
8019a1c: 10c5883a add r2,r2,r3
8019a20: 10800037 ldwio r2,0(r2)
8019a24: e0bffc8d sth r2,-14(fp)
/* clear bits to be written */
temp_data &= ~bit_mask;
8019a28: e0bfff8b ldhu r2,-2(fp)
8019a2c: 0084303a nor r2,zero,r2
8019a30: 1007883a mov r3,r2
8019a34: e0bffc8b ldhu r2,-14(fp)
8019a38: 1884703a and r2,r3,r2
8019a3c: e0bffc8d sth r2,-14(fp)
/* OR-ed together corresponding bits data */
temp_data |= ((data << lsb_num) & bit_mask);
8019a40: e0fff70b ldhu r3,-36(fp)
8019a44: e0bff903 ldbu r2,-28(fp)
8019a48: 1884983a sll r2,r3,r2
8019a4c: 1007883a mov r3,r2
8019a50: e0bfff8b ldhu r2,-2(fp)
8019a54: 1884703a and r2,r3,r2
8019a58: 1007883a mov r3,r2
8019a5c: e0bffc8b ldhu r2,-14(fp)
8019a60: 1884b03a or r2,r3,r2
8019a64: e0bffc8d sth r2,-14(fp)
/* write data to MDIO register */
IOWR(&pmac->mdio1, reg_num, temp_data);
8019a68: e0bffd17 ldw r2,-12(fp)
8019a6c: 1080a004 addi r2,r2,640
8019a70: e0fffa03 ldbu r3,-24(fp)
8019a74: 180690ba slli r3,r3,2
8019a78: 10c5883a add r2,r2,r3
8019a7c: e0fffc8b ldhu r3,-14(fp)
8019a80: 10c00035 stwio r3,0(r2)
return SUCCESS;
8019a84: 0005883a mov r2,zero
}
8019a88: e037883a mov sp,fp
8019a8c: df000017 ldw fp,0(sp)
8019a90: dec00104 addi sp,sp,4
8019a94: f800283a ret
08019a98 <alt_tse_phy_rd_mdio_reg>:
* @param bit_length number of bits to be read from the register.
* @return data read from MDIO register
*/
alt_u32 alt_tse_phy_rd_mdio_reg(alt_tse_phy_info *pphy, alt_u8 reg_num, alt_u8 lsb_num, alt_u8 bit_length)
{
8019a98: defff704 addi sp,sp,-36
8019a9c: df000815 stw fp,32(sp)
8019aa0: df000804 addi fp,sp,32
8019aa4: e13ffb15 stw r4,-20(fp)
8019aa8: 2805883a mov r2,r5
8019aac: 3009883a mov r4,r6
8019ab0: 3807883a mov r3,r7
8019ab4: e0bffa05 stb r2,-24(fp)
8019ab8: 2005883a mov r2,r4
8019abc: e0bff905 stb r2,-28(fp)
8019ac0: 1805883a mov r2,r3
8019ac4: e0bff805 stb r2,-32(fp)
alt_u16 temp_data;
alt_u32 bit_mask;
alt_32 i;
np_tse_mac *pmac = (np_tse_mac *) pphy->pmac_info->pmac_group->pmac_info[0]->psys_info->tse_mac_base;
8019ac8: e0bffb17 ldw r2,-20(fp)
8019acc: 10800617 ldw r2,24(r2)
8019ad0: 10800317 ldw r2,12(r2)
8019ad4: 10800117 ldw r2,4(r2)
8019ad8: 10800217 ldw r2,8(r2)
8019adc: 10800017 ldw r2,0(r2)
8019ae0: e0bffd15 stw r2,-12(fp)
bit_mask = 0x00;
8019ae4: e03fff15 stw zero,-4(fp)
/* generate mask consist of bit_length number of 1
* eg: bit_length = 3, bit_mask = 0b0000 0000 0000 0111
*/
for(i = 0; i < bit_length; i++)
8019ae8: e03ffe15 stw zero,-8(fp)
8019aec: 00000906 br 8019b14 <alt_tse_phy_rd_mdio_reg+0x7c>
{
bit_mask <<= 1;
8019af0: e0bfff17 ldw r2,-4(fp)
8019af4: 1085883a add r2,r2,r2
8019af8: e0bfff15 stw r2,-4(fp)
bit_mask |= 0x01;
8019afc: e0bfff17 ldw r2,-4(fp)
8019b00: 10800054 ori r2,r2,1
8019b04: e0bfff15 stw r2,-4(fp)
for(i = 0; i < bit_length; i++)
8019b08: e0bffe17 ldw r2,-8(fp)
8019b0c: 10800044 addi r2,r2,1
8019b10: e0bffe15 stw r2,-8(fp)
8019b14: e0bff803 ldbu r2,-32(fp)
8019b18: e0fffe17 ldw r3,-8(fp)
8019b1c: 18bff416 blt r3,r2,8019af0 <alt_tse_phy_rd_mdio_reg+0x58>
}
/* read register data */
temp_data = IORD(&pmac->mdio1, reg_num);
8019b20: e0bffd17 ldw r2,-12(fp)
8019b24: 1080a004 addi r2,r2,640
8019b28: e0fffa03 ldbu r3,-24(fp)
8019b2c: 180690ba slli r3,r3,2
8019b30: 10c5883a add r2,r2,r3
8019b34: 10800037 ldwio r2,0(r2)
8019b38: e0bffc8d sth r2,-14(fp)
/* shifting read data */
temp_data >>= lsb_num;
8019b3c: e0fffc8b ldhu r3,-14(fp)
8019b40: e0bff903 ldbu r2,-28(fp)
8019b44: 1885d83a sra r2,r3,r2
8019b48: e0bffc8d sth r2,-14(fp)
return (temp_data & bit_mask);
8019b4c: e0fffc8b ldhu r3,-14(fp)
8019b50: e0bfff17 ldw r2,-4(fp)
8019b54: 1884703a and r2,r3,r2
}
8019b58: e037883a mov sp,fp
8019b5c: df000017 ldw fp,0(sp)
8019b60: dec00104 addi sp,sp,4
8019b64: f800283a ret
08019b68 <alt_tse_phy_add_profile_default>:
* @param pmac N/A
* @return Number of PHY in profile
*
* User might add their own PHY by calling alt_tse_phy_add_profile()
*/
alt_32 alt_tse_phy_add_profile_default() {
8019b68: deff8104 addi sp,sp,-508
8019b6c: dfc07e15 stw ra,504(sp)
8019b70: df007d15 stw fp,500(sp)
8019b74: df007d04 addi fp,sp,500
/* ------------------------------ */
/* Marvell PHY on PHYWORKX board */
/* ------------------------------ */
alt_tse_phy_profile MV88E1111 = {"Marvell 88E1111", /* Marvell 88E1111 */
8019b78: e0bfe704 addi r2,fp,-100
8019b7c: 00c01904 movi r3,100
8019b80: 180d883a mov r6,r3
8019b84: 000b883a mov r5,zero
8019b88: 1009883a mov r4,r2
8019b8c: 80088e40 call 80088e4 <memset>
8019b90: 009d9cb4 movhi r2,30322
8019b94: 10985344 addi r2,r2,24909
8019b98: e0bfe715 stw r2,-100(fp)
8019b9c: 00881b34 movhi r2,8300
8019ba0: 109b1944 addi r2,r2,27749
8019ba4: e0bfe815 stw r2,-96(fp)
8019ba8: 008c5174 movhi r2,12613
8019bac: 108e0e04 addi r2,r2,14392
8019bb0: e0bfe915 stw r2,-92(fp)
8019bb4: 00800c74 movhi r2,49
8019bb8: 108c4c44 addi r2,r2,12593
8019bbc: e0bfea15 stw r2,-88(fp)
8019bc0: e0bfeb04 addi r2,fp,-84
8019bc4: 00c01004 movi r3,64
8019bc8: 180d883a mov r6,r3
8019bcc: 000b883a mov r5,zero
8019bd0: 1009883a mov r4,r2
8019bd4: 80088e40 call 80088e4 <memset>
8019bd8: 009410c4 movi r2,20547
8019bdc: e0bffb15 stw r2,-20(fp)
8019be0: 00800304 movi r2,12
8019be4: e0bffc05 stb r2,-16(fp)
8019be8: 00800084 movi r2,2
8019bec: e0bffc45 stb r2,-15(fp)
8019bf0: 00800444 movi r2,17
8019bf4: e0bffc85 stb r2,-14(fp)
8019bf8: 00800384 movi r2,14
8019bfc: e0bffcc5 stb r2,-13(fp)
8019c00: 00800344 movi r2,13
8019c04: e0bffd05 stb r2,-12(fp)
8019c08: 00800284 movi r2,10
8019c0c: e0bffd45 stb r2,-11(fp)
8019c10: 008200b4 movhi r2,2050
8019c14: 10b15f04 addi r2,r2,-14980
8019c18: e0bffe15 stw r2,-8(fp)
/* ---------------------------------- */
/* Marvell Quad PHY on PHYWORKX board */
/* ---------------------------------- */
alt_tse_phy_profile MV88E1145 = {"Marvell Quad PHY 88E1145", /* Marvell 88E1145 */
8019c1c: e0bfce04 addi r2,fp,-200
8019c20: 00c01904 movi r3,100
8019c24: 180d883a mov r6,r3
8019c28: 000b883a mov r5,zero
8019c2c: 1009883a mov r4,r2
8019c30: 80088e40 call 80088e4 <memset>
8019c34: 009d9cb4 movhi r2,30322
8019c38: 10985344 addi r2,r2,24909
8019c3c: e0bfce15 stw r2,-200(fp)
8019c40: 00881b34 movhi r2,8300
8019c44: 109b1944 addi r2,r2,27749
8019c48: e0bfcf15 stw r2,-196(fp)
8019c4c: 00991874 movhi r2,25697
8019c50: 109d5444 addi r2,r2,30033
8019c54: e0bfd015 stw r2,-192(fp)
8019c58: 00965234 movhi r2,22856
8019c5c: 10940804 addi r2,r2,20512
8019c60: e0bfd115 stw r2,-188(fp)
8019c64: 00914e34 movhi r2,17720
8019c68: 108e0804 addi r2,r2,14368
8019c6c: e0bfd215 stw r2,-184(fp)
8019c70: 008d4d34 movhi r2,13620
8019c74: 108c4c44 addi r2,r2,12593
8019c78: e0bfd315 stw r2,-180(fp)
8019c7c: e03fd415 stw zero,-176(fp)
8019c80: e03fd515 stw zero,-172(fp)
8019c84: e03fd615 stw zero,-168(fp)
8019c88: e03fd715 stw zero,-164(fp)
8019c8c: e03fd815 stw zero,-160(fp)
8019c90: e03fd915 stw zero,-156(fp)
8019c94: e03fda15 stw zero,-152(fp)
8019c98: e03fdb15 stw zero,-148(fp)
8019c9c: e03fdc15 stw zero,-144(fp)
8019ca0: e03fdd15 stw zero,-140(fp)
8019ca4: e03fde15 stw zero,-136(fp)
8019ca8: e03fdf15 stw zero,-132(fp)
8019cac: e03fe015 stw zero,-128(fp)
8019cb0: e03fe115 stw zero,-124(fp)
8019cb4: 009410c4 movi r2,20547
8019cb8: e0bfe215 stw r2,-120(fp)
8019cbc: 00800344 movi r2,13
8019cc0: e0bfe305 stb r2,-116(fp)
8019cc4: 00800084 movi r2,2
8019cc8: e0bfe345 stb r2,-115(fp)
8019ccc: 00800444 movi r2,17
8019cd0: e0bfe385 stb r2,-114(fp)
8019cd4: 00800384 movi r2,14
8019cd8: e0bfe3c5 stb r2,-113(fp)
8019cdc: 00800344 movi r2,13
8019ce0: e0bfe405 stb r2,-112(fp)
8019ce4: 00800284 movi r2,10
8019ce8: e0bfe445 stb r2,-111(fp)
8019cec: 008200b4 movhi r2,2050
8019cf0: 10b15f04 addi r2,r2,-14980
8019cf4: e0bfe515 stw r2,-108(fp)
/* ------------------------------ */
/* National PHY on PHYWORKX board */
/* ------------------------------ */
alt_tse_phy_profile DP83865 = {"National DP83865", /* National DP83865 */
8019cf8: e0bfb504 addi r2,fp,-300
8019cfc: 00c01904 movi r3,100
8019d00: 180d883a mov r6,r3
8019d04: 000b883a mov r5,zero
8019d08: 1009883a mov r4,r2
8019d0c: 80088e40 call 80088e4 <memset>
8019d10: 009a5d34 movhi r2,26996
8019d14: 10985384 addi r2,r2,24910
8019d18: e0bfb515 stw r2,-300(fp)
8019d1c: 009b1874 movhi r2,27745
8019d20: 109b9bc4 addi r2,r2,28271
8019d24: e0bfb615 stw r2,-296(fp)
8019d28: 008e1434 movhi r2,14416
8019d2c: 10910804 addi r2,r2,17440
8019d30: e0bfb715 stw r2,-292(fp)
8019d34: 008d4db4 movhi r2,13622
8019d38: 108e0cc4 addi r2,r2,14387
8019d3c: e0bfb815 stw r2,-288(fp)
8019d40: e03fb915 stw zero,-284(fp)
8019d44: e0bfba04 addi r2,fp,-280
8019d48: 00c00f04 movi r3,60
8019d4c: 180d883a mov r6,r3
8019d50: 000b883a mov r5,zero
8019d54: 1009883a mov r4,r2
8019d58: 80088e40 call 80088e4 <memset>
8019d5c: 00800234 movhi r2,8
8019d60: 108005c4 addi r2,r2,23
8019d64: e0bfc915 stw r2,-220(fp)
8019d68: 008001c4 movi r2,7
8019d6c: e0bfca05 stb r2,-216(fp)
8019d70: 00800284 movi r2,10
8019d74: e0bfca45 stb r2,-215(fp)
8019d78: 00800444 movi r2,17
8019d7c: e0bfca85 stb r2,-214(fp)
8019d80: 008000c4 movi r2,3
8019d84: e0bfcac5 stb r2,-213(fp)
8019d88: 00800044 movi r2,1
8019d8c: e0bfcb05 stb r2,-212(fp)
8019d90: 00800084 movi r2,2
8019d94: e0bfcb45 stb r2,-211(fp)
/* -------------------------------------- */
/* National 10/100 PHY on PHYWORKX board */
/* -------------------------------------- */
alt_tse_phy_profile DP83848C = {"National DP83848C", /* National DP83848C */
8019d98: e0ff9c04 addi r3,fp,-400
8019d9c: 00820174 movhi r2,2053
8019da0: 10a00604 addi r2,r2,-32744
8019da4: 01001904 movi r4,100
8019da8: 200d883a mov r6,r4
8019dac: 100b883a mov r5,r2
8019db0: 1809883a mov r4,r3
8019db4: 80086b80 call 80086b8 <memcpy>
/* -------------------------------------- */
/* Intel PHY on C10LP EVA board */
/* -------------------------------------- */
alt_tse_phy_profile PEF7071 = {"Intel PEF7071", /* National DP83848C */
8019db8: e0ff8304 addi r3,fp,-500
8019dbc: 00820174 movhi r2,2053
8019dc0: 10a01f04 addi r2,r2,-32644
8019dc4: 01001904 movi r4,100
8019dc8: 200d883a mov r6,r4
8019dcc: 100b883a mov r5,r2
8019dd0: 1809883a mov r4,r3
8019dd4: 80086b80 call 80086b8 <memcpy>
&PEF7071_config, /* configure PEF7071 */
&PEF7071_link_status_read /* Function pointer to read from PHY specific status register */
};
/* add supported PHY to profile */
alt_tse_phy_add_profile(&MV88E1111);
8019dd8: e0bfe704 addi r2,fp,-100
8019ddc: 1009883a mov r4,r2
8019de0: 8017e840 call 8017e84 <alt_tse_phy_add_profile>
alt_tse_phy_add_profile(&MV88E1145);
8019de4: e0bfce04 addi r2,fp,-200
8019de8: 1009883a mov r4,r2
8019dec: 8017e840 call 8017e84 <alt_tse_phy_add_profile>
alt_tse_phy_add_profile(&DP83865);
8019df0: e0bfb504 addi r2,fp,-300
8019df4: 1009883a mov r4,r2
8019df8: 8017e840 call 8017e84 <alt_tse_phy_add_profile>
alt_tse_phy_add_profile(&DP83848C);
8019dfc: e0bf9c04 addi r2,fp,-400
8019e00: 1009883a mov r4,r2
8019e04: 8017e840 call 8017e84 <alt_tse_phy_add_profile>
alt_tse_phy_add_profile(&PEF7071);
8019e08: e0bf8304 addi r2,fp,-500
8019e0c: 1009883a mov r4,r2
8019e10: 8017e840 call 8017e84 <alt_tse_phy_add_profile>
return phy_profile_count;
8019e14: d0a05b03 ldbu r2,-32404(gp)
8019e18: 10803fcc andi r2,r2,255
}
8019e1c: e037883a mov sp,fp
8019e20: dfc00117 ldw ra,4(sp)
8019e24: df000017 ldw fp,0(sp)
8019e28: dec00204 addi sp,sp,8
8019e2c: f800283a ret
08019e30 <alt_tse_phy_print_profile>:
/* @Function Description: Display PHYs available in profile
* @API Type: Internal
* @param pmac N/A
* @return Number of PHY in profile
*/
alt_32 alt_tse_phy_print_profile() {
8019e30: defffd04 addi sp,sp,-12
8019e34: dfc00215 stw ra,8(sp)
8019e38: df000115 stw fp,4(sp)
8019e3c: df000104 addi fp,sp,4
alt_8 i;
/* display PHY in profile */
tse_dprintf(6, "List of PHY profiles supported (Total profiles = %d)...\n", phy_profile_count);
8019e40: d0a05b03 ldbu r2,-32404(gp)
8019e44: 10803fcc andi r2,r2,255
8019e48: 100b883a mov r5,r2
8019e4c: 01020174 movhi r4,2053
8019e50: 21203804 addi r4,r4,-32544
8019e54: 8002c780 call 8002c78 <printf>
for(i = 0; i < phy_profile_count; i++)
8019e58: e03fffc5 stb zero,-1(fp)
8019e5c: 00005d06 br 8019fd4 <alt_tse_phy_print_profile+0x1a4>
{
tse_dprintf(6, "Profile No.%2d :\n", i);
8019e60: e0bfffc7 ldb r2,-1(fp)
8019e64: 100b883a mov r5,r2
8019e68: 01020174 movhi r4,2053
8019e6c: 21204704 addi r4,r4,-32484
8019e70: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "PHY Name : %s\n", pphy_profiles[i]->name);
8019e74: e0bfffc7 ldb r2,-1(fp)
8019e78: 100690ba slli r3,r2,2
8019e7c: 008201b4 movhi r2,2054
8019e80: 1885883a add r2,r3,r2
8019e84: 10b5ae17 ldw r2,-10568(r2)
8019e88: 100b883a mov r5,r2
8019e8c: 01020174 movhi r4,2053
8019e90: 21204c04 addi r4,r4,-32464
8019e94: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "PHY OUI : 0x%06x\n", (int)pphy_profiles[i]->oui);
8019e98: e0bfffc7 ldb r2,-1(fp)
8019e9c: 100690ba slli r3,r2,2
8019ea0: 008201b4 movhi r2,2054
8019ea4: 1885883a add r2,r3,r2
8019ea8: 10b5ae17 ldw r2,-10568(r2)
8019eac: 10801417 ldw r2,80(r2)
8019eb0: 100b883a mov r5,r2
8019eb4: 01020174 movhi r4,2053
8019eb8: 21205204 addi r4,r4,-32440
8019ebc: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "PHY Model Num. : 0x%02x\n", pphy_profiles[i]->model_number);
8019ec0: e0bfffc7 ldb r2,-1(fp)
8019ec4: 100690ba slli r3,r2,2
8019ec8: 008201b4 movhi r2,2054
8019ecc: 1885883a add r2,r3,r2
8019ed0: 10b5ae17 ldw r2,-10568(r2)
8019ed4: 10801503 ldbu r2,84(r2)
8019ed8: 10803fcc andi r2,r2,255
8019edc: 100b883a mov r5,r2
8019ee0: 01020174 movhi r4,2053
8019ee4: 21205904 addi r4,r4,-32412
8019ee8: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "PHY Rev. Num. : 0x%02x\n", pphy_profiles[i]->revision_number);
8019eec: e0bfffc7 ldb r2,-1(fp)
8019ef0: 100690ba slli r3,r2,2
8019ef4: 008201b4 movhi r2,2054
8019ef8: 1885883a add r2,r3,r2
8019efc: 10b5ae17 ldw r2,-10568(r2)
8019f00: 10801543 ldbu r2,85(r2)
8019f04: 10803fcc andi r2,r2,255
8019f08: 100b883a mov r5,r2
8019f0c: 01020174 movhi r4,2053
8019f10: 21206004 addi r4,r4,-32384
8019f14: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "Status Register : 0x%02x\n", pphy_profiles[i]->status_reg_location);
8019f18: e0bfffc7 ldb r2,-1(fp)
8019f1c: 100690ba slli r3,r2,2
8019f20: 008201b4 movhi r2,2054
8019f24: 1885883a add r2,r3,r2
8019f28: 10b5ae17 ldw r2,-10568(r2)
8019f2c: 10801583 ldbu r2,86(r2)
8019f30: 10803fcc andi r2,r2,255
8019f34: 100b883a mov r5,r2
8019f38: 01020174 movhi r4,2053
8019f3c: 21206704 addi r4,r4,-32356
8019f40: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "Speed Bit : %d\n", pphy_profiles[i]->speed_lsb_location);
8019f44: e0bfffc7 ldb r2,-1(fp)
8019f48: 100690ba slli r3,r2,2
8019f4c: 008201b4 movhi r2,2054
8019f50: 1885883a add r2,r3,r2
8019f54: 10b5ae17 ldw r2,-10568(r2)
8019f58: 108015c3 ldbu r2,87(r2)
8019f5c: 10803fcc andi r2,r2,255
8019f60: 100b883a mov r5,r2
8019f64: 01020174 movhi r4,2053
8019f68: 21206e04 addi r4,r4,-32328
8019f6c: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "Duplex Bit : %d\n", pphy_profiles[i]->duplex_bit_location);
8019f70: e0bfffc7 ldb r2,-1(fp)
8019f74: 100690ba slli r3,r2,2
8019f78: 008201b4 movhi r2,2054
8019f7c: 1885883a add r2,r3,r2
8019f80: 10b5ae17 ldw r2,-10568(r2)
8019f84: 10801603 ldbu r2,88(r2)
8019f88: 10803fcc andi r2,r2,255
8019f8c: 100b883a mov r5,r2
8019f90: 01020174 movhi r4,2053
8019f94: 21207404 addi r4,r4,-32304
8019f98: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "Link Bit : %d\n\n", pphy_profiles[i]->link_bit_location);
8019f9c: e0bfffc7 ldb r2,-1(fp)
8019fa0: 100690ba slli r3,r2,2
8019fa4: 008201b4 movhi r2,2054
8019fa8: 1885883a add r2,r3,r2
8019fac: 10b5ae17 ldw r2,-10568(r2)
8019fb0: 10801643 ldbu r2,89(r2)
8019fb4: 10803fcc andi r2,r2,255
8019fb8: 100b883a mov r5,r2
8019fbc: 01020174 movhi r4,2053
8019fc0: 21207a04 addi r4,r4,-32280
8019fc4: 8002c780 call 8002c78 <printf>
for(i = 0; i < phy_profile_count; i++)
8019fc8: e0bfffc3 ldbu r2,-1(fp)
8019fcc: 10800044 addi r2,r2,1
8019fd0: e0bfffc5 stb r2,-1(fp)
8019fd4: e0ffffc7 ldb r3,-1(fp)
8019fd8: d0a05b03 ldbu r2,-32404(gp)
8019fdc: 10803fcc andi r2,r2,255
8019fe0: 18bf9f16 blt r3,r2,8019e60 <alt_tse_phy_print_profile+0x30>
}
return phy_profile_count;
8019fe4: d0a05b03 ldbu r2,-32404(gp)
8019fe8: 10803fcc andi r2,r2,255
}
8019fec: e037883a mov sp,fp
8019ff0: dfc00117 ldw ra,4(sp)
8019ff4: df000017 ldw fp,0(sp)
8019ff8: dec00204 addi sp,sp,8
8019ffc: f800283a ret
0801a000 <alt_tse_mac_group_init>:
* @API Type: Internal
* @param pmac N/A
* @return return SUCCESS
* return ALTERA_TSE_SYSTEM_DEF_ERROR if alt_tse_system_info structure definition error
*/
alt_32 alt_tse_mac_group_init() {
801a000: defffa04 addi sp,sp,-24
801a004: dfc00515 stw ra,20(sp)
801a008: df000415 stw fp,16(sp)
801a00c: df000404 addi fp,sp,16
alt_8 i;
alt_8 j;
alt_tse_mac_group *pmac_group = 0;
801a010: e03ffd15 stw zero,-12(fp)
alt_tse_mac_info *pmac_info = 0;
801a014: e03fff15 stw zero,-4(fp)
alt_tse_system_info *psys = 0;
801a018: e03ffc15 stw zero,-16(fp)
/* reset number of MAC group */
mac_group_count = 0;
801a01c: d0205b45 stb zero,-32403(gp)
/* loop through every alt_tse_system_info structure */
for(i = 0; i < max_mac_system; i++) {
801a020: e03ffec5 stb zero,-5(fp)
801a024: 00019206 br 801a670 <alt_tse_mac_group_init+0x670>
psys = &tse_mac_device[i];
801a028: e0bffec7 ldb r2,-5(fp)
801a02c: 10c01324 muli r3,r2,76
801a030: 00820174 movhi r2,2053
801a034: 10ae5404 addi r2,r2,-18096
801a038: 1885883a add r2,r3,r2
801a03c: e0bffc15 stw r2,-16(fp)
if((psys->tse_msgdma_tx != 0) && (psys->tse_msgdma_rx != 0)) {
801a040: e0bffc17 ldw r2,-16(fp)
801a044: 10800617 ldw r2,24(r2)
801a048: 10018626 beq r2,zero,801a664 <alt_tse_mac_group_init+0x664>
801a04c: e0bffc17 ldw r2,-16(fp)
801a050: 10800717 ldw r2,28(r2)
801a054: 10018326 beq r2,zero,801a664 <alt_tse_mac_group_init+0x664>
tse_dprintf(5, "INFO : TSE MAC %d found at address 0x%08x\n", mac_group_count, (int) psys->tse_mac_base);
801a058: d0a05b43 ldbu r2,-32403(gp)
801a05c: 10c03fcc andi r3,r2,255
801a060: e0bffc17 ldw r2,-16(fp)
801a064: 10800017 ldw r2,0(r2)
801a068: 100d883a mov r6,r2
801a06c: 180b883a mov r5,r3
801a070: 01020174 movhi r4,2053
801a074: 21208004 addi r4,r4,-32256
801a078: 8002c780 call 8002c78 <printf>
/* Allocate memory for the structure */
pmac_group = (alt_tse_mac_group *) malloc(sizeof(alt_tse_mac_group));
801a07c: 01000504 movi r4,20
801a080: 8042c980 call 8042c98 <malloc>
801a084: e0bffd15 stw r2,-12(fp)
if(!pmac_group) {
801a088: e0bffd17 ldw r2,-12(fp)
801a08c: 1000081e bne r2,zero,801a0b0 <alt_tse_mac_group_init+0xb0>
tse_dprintf(1, "ERROR : Unable to allocate memory for MAC Group[%d]\n", mac_group_count);
801a090: d0a05b43 ldbu r2,-32403(gp)
801a094: 10803fcc andi r2,r2,255
801a098: 100b883a mov r5,r2
801a09c: 01020174 movhi r4,2053
801a0a0: 21208c04 addi r4,r4,-32208
801a0a4: 8002c780 call 8002c78 <printf>
return ALTERA_TSE_MALLOC_FAILED;
801a0a8: 00bfffc4 movi r2,-1
801a0ac: 00017506 br 801a684 <alt_tse_mac_group_init+0x684>
}
/* Non-multi-channel MAC considered as 1 channel */
if(psys->tse_multichannel_mac) {
801a0b0: e0bffc17 ldw r2,-16(fp)
801a0b4: 108003c3 ldbu r2,15(r2)
801a0b8: 10803fcc andi r2,r2,255
801a0bc: 10001226 beq r2,zero,801a108 <alt_tse_mac_group_init+0x108>
pmac_group->channel = psys->tse_num_of_channel;
801a0c0: e0bffc17 ldw r2,-16(fp)
801a0c4: 10c00403 ldbu r3,16(r2)
801a0c8: e0bffd17 ldw r2,-12(fp)
801a0cc: 10c00005 stb r3,0(r2)
tse_dprintf(6, "INFO : Multi Channel = Yes\n");
801a0d0: 01020174 movhi r4,2053
801a0d4: 21209a04 addi r4,r4,-32152
801a0d8: 8002d9c0 call 8002d9c <puts>
tse_dprintf(6, "INFO : Number of channel = %d\n", pmac_group->channel);
801a0dc: e0bffd17 ldw r2,-12(fp)
801a0e0: 10800003 ldbu r2,0(r2)
801a0e4: 10803fcc andi r2,r2,255
801a0e8: 100b883a mov r5,r2
801a0ec: 01020174 movhi r4,2053
801a0f0: 2120a504 addi r4,r4,-32108
801a0f4: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : MDIO Shared = Yes\n");
801a0f8: 01020174 movhi r4,2053
801a0fc: 2120b004 addi r4,r4,-32064
801a100: 8002d9c0 call 8002d9c <puts>
801a104: 00001f06 br 801a184 <alt_tse_mac_group_init+0x184>
}
else if(psys->tse_mdio_shared) {
801a108: e0bffc17 ldw r2,-16(fp)
801a10c: 10800443 ldbu r2,17(r2)
801a110: 10803fcc andi r2,r2,255
801a114: 10001226 beq r2,zero,801a160 <alt_tse_mac_group_init+0x160>
pmac_group->channel = psys->tse_number_of_mac_mdio_shared;
801a118: e0bffc17 ldw r2,-16(fp)
801a11c: 10c00483 ldbu r3,18(r2)
801a120: e0bffd17 ldw r2,-12(fp)
801a124: 10c00005 stb r3,0(r2)
tse_dprintf(6, "INFO : Multi Channel = No\n");
801a128: 01020174 movhi r4,2053
801a12c: 2120bb04 addi r4,r4,-32020
801a130: 8002d9c0 call 8002d9c <puts>
tse_dprintf(6, "INFO : MDIO Shared = Yes\n");
801a134: 01020174 movhi r4,2053
801a138: 2120b004 addi r4,r4,-32064
801a13c: 8002d9c0 call 8002d9c <puts>
tse_dprintf(6, "INFO : Number of MAC Share MDIO = %d\n", pmac_group->channel);
801a140: e0bffd17 ldw r2,-12(fp)
801a144: 10800003 ldbu r2,0(r2)
801a148: 10803fcc andi r2,r2,255
801a14c: 100b883a mov r5,r2
801a150: 01020174 movhi r4,2053
801a154: 2120c504 addi r4,r4,-31980
801a158: 8002c780 call 8002c78 <printf>
801a15c: 00000906 br 801a184 <alt_tse_mac_group_init+0x184>
}
else {
pmac_group->channel = 1;
801a160: e0bffd17 ldw r2,-12(fp)
801a164: 00c00044 movi r3,1
801a168: 10c00005 stb r3,0(r2)
tse_dprintf(6, "INFO : Multi Channel = No\n");
801a16c: 01020174 movhi r4,2053
801a170: 2120bb04 addi r4,r4,-32020
801a174: 8002d9c0 call 8002d9c <puts>
tse_dprintf(6, "INFO : MDIO Shared = No\n");
801a178: 01020174 movhi r4,2053
801a17c: 2120d004 addi r4,r4,-31936
801a180: 8002d9c0 call 8002d9c <puts>
}
for(j = 0; j < pmac_group->channel; j++) {
801a184: e03ffe85 stb zero,-6(fp)
801a188: 00012106 br 801a610 <alt_tse_mac_group_init+0x610>
/* Allocate memory for the structure */
pmac_info = (alt_tse_mac_info *) malloc(sizeof(alt_tse_mac_info));
801a18c: 01000404 movi r4,16
801a190: 8042c980 call 8042c98 <malloc>
801a194: e0bfff15 stw r2,-4(fp)
if(!pmac_info) {
801a198: e0bfff17 ldw r2,-4(fp)
801a19c: 10000a1e bne r2,zero,801a1c8 <alt_tse_mac_group_init+0x1c8>
tse_dprintf(1, "ERROR : Unable to allocate memory for MAC Group[%d]->pmac_info[%d]\n", mac_group_count, j);
801a1a0: d0a05b43 ldbu r2,-32403(gp)
801a1a4: 10803fcc andi r2,r2,255
801a1a8: e0fffe87 ldb r3,-6(fp)
801a1ac: 180d883a mov r6,r3
801a1b0: 100b883a mov r5,r2
801a1b4: 01020174 movhi r4,2053
801a1b8: 2120da04 addi r4,r4,-31896
801a1bc: 8002c780 call 8002c78 <printf>
return ALTERA_TSE_MALLOC_FAILED;
801a1c0: 00bfffc4 movi r2,-1
801a1c4: 00012f06 br 801a684 <alt_tse_mac_group_init+0x684>
}
pmac_info->pmac_group = pmac_group;
801a1c8: e0bfff17 ldw r2,-4(fp)
801a1cc: e0fffd17 ldw r3,-12(fp)
801a1d0: 10c00315 stw r3,12(r2)
pmac_info->pphy_info = 0;
801a1d4: e0bfff17 ldw r2,-4(fp)
801a1d8: 10000115 stw zero,4(r2)
pmac_info->psys_info = &tse_mac_device[i + j];
801a1dc: e0fffec7 ldb r3,-5(fp)
801a1e0: e0bffe87 ldb r2,-6(fp)
801a1e4: 1885883a add r2,r3,r2
801a1e8: 10c01324 muli r3,r2,76
801a1ec: 00820174 movhi r2,2053
801a1f0: 10ae5404 addi r2,r2,-18096
801a1f4: 1887883a add r3,r3,r2
801a1f8: e0bfff17 ldw r2,-4(fp)
801a1fc: 10c00215 stw r3,8(r2)
/* check to make sure the alt_tse_system_info defined correctly or has been defined */
if((pmac_info->psys_info->tse_msgdma_tx == 0) || (pmac_info->psys_info->tse_msgdma_rx == 0)){
801a200: e0bfff17 ldw r2,-4(fp)
801a204: 10800217 ldw r2,8(r2)
801a208: 10800617 ldw r2,24(r2)
801a20c: 10000426 beq r2,zero,801a220 <alt_tse_mac_group_init+0x220>
801a210: e0bfff17 ldw r2,-4(fp)
801a214: 10800217 ldw r2,8(r2)
801a218: 10800717 ldw r2,28(r2)
801a21c: 1000091e bne r2,zero,801a244 <alt_tse_mac_group_init+0x244>
tse_dprintf(2, "ERROR : tse_mac_device[%d] does not defined correctly!\n", i + j);
801a220: e0fffec7 ldb r3,-5(fp)
801a224: e0bffe87 ldb r2,-6(fp)
801a228: 1885883a add r2,r3,r2
801a22c: 100b883a mov r5,r2
801a230: 01020174 movhi r4,2053
801a234: 2120ec04 addi r4,r4,-31824
801a238: 8002c780 call 8002c78 <printf>
return ALTERA_TSE_SYSTEM_DEF_ERROR;
801a23c: 00bfffc4 movi r2,-1
801a240: 00011006 br 801a684 <alt_tse_mac_group_init+0x684>
}
/* MAC type detection */
if(pmac_info->psys_info->tse_en_maclite) {
801a244: e0bfff17 ldw r2,-4(fp)
801a248: 10800217 ldw r2,8(r2)
801a24c: 10800343 ldbu r2,13(r2)
801a250: 10803fcc andi r2,r2,255
801a254: 10000d26 beq r2,zero,801a28c <alt_tse_mac_group_init+0x28c>
if(pmac_info->psys_info->tse_maclite_gige) {
801a258: e0bfff17 ldw r2,-4(fp)
801a25c: 10800217 ldw r2,8(r2)
801a260: 10800383 ldbu r2,14(r2)
801a264: 10803fcc andi r2,r2,255
801a268: 10000426 beq r2,zero,801a27c <alt_tse_mac_group_init+0x27c>
pmac_info->mac_type = ALTERA_TSE_MACLITE_1000;
801a26c: e0bfff17 ldw r2,-4(fp)
801a270: 00c00084 movi r3,2
801a274: 10c00005 stb r3,0(r2)
801a278: 00000606 br 801a294 <alt_tse_mac_group_init+0x294>
}
else {
pmac_info->mac_type = ALTERA_TSE_MACLITE_10_100;
801a27c: e0bfff17 ldw r2,-4(fp)
801a280: 00c00044 movi r3,1
801a284: 10c00005 stb r3,0(r2)
801a288: 00000206 br 801a294 <alt_tse_mac_group_init+0x294>
}
}
else {
pmac_info->mac_type = ALTERA_TSE_FULL_MAC;
801a28c: e0bfff17 ldw r2,-4(fp)
801a290: 10000005 stb zero,0(r2)
}
if((pmac_info->psys_info->tse_mdio_shared) && (!pmac_info->psys_info->tse_multichannel_mac)){
801a294: e0bfff17 ldw r2,-4(fp)
801a298: 10800217 ldw r2,8(r2)
801a29c: 10800443 ldbu r2,17(r2)
801a2a0: 10803fcc andi r2,r2,255
801a2a4: 10006626 beq r2,zero,801a440 <alt_tse_mac_group_init+0x440>
801a2a8: e0bfff17 ldw r2,-4(fp)
801a2ac: 10800217 ldw r2,8(r2)
801a2b0: 108003c3 ldbu r2,15(r2)
801a2b4: 10803fcc andi r2,r2,255
801a2b8: 1000611e bne r2,zero,801a440 <alt_tse_mac_group_init+0x440>
tse_dprintf(6, "INFO : MAC %2d Address = 0x%08x\n", j, (int) pmac_info->psys_info->tse_mac_base);
801a2bc: e0fffe87 ldb r3,-6(fp)
801a2c0: e0bfff17 ldw r2,-4(fp)
801a2c4: 10800217 ldw r2,8(r2)
801a2c8: 10800017 ldw r2,0(r2)
801a2cc: 100d883a mov r6,r2
801a2d0: 180b883a mov r5,r3
801a2d4: 01020174 movhi r4,2053
801a2d8: 2120fb04 addi r4,r4,-31764
801a2dc: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : MAC %2d Device = tse_mac_device[%d]\n", j, i + j);
801a2e0: e13ffe87 ldb r4,-6(fp)
801a2e4: e0fffec7 ldb r3,-5(fp)
801a2e8: e0bffe87 ldb r2,-6(fp)
801a2ec: 1885883a add r2,r3,r2
801a2f0: 100d883a mov r6,r2
801a2f4: 200b883a mov r5,r4
801a2f8: 01020174 movhi r4,2053
801a2fc: 21210704 addi r4,r4,-31716
801a300: 8002c780 call 8002c78 <printf>
switch(pmac_info->mac_type) {
801a304: e0bfff17 ldw r2,-4(fp)
801a308: 10800003 ldbu r2,0(r2)
801a30c: 10803fcc andi r2,r2,255
801a310: 10c00060 cmpeqi r3,r2,1
801a314: 18000c1e bne r3,zero,801a348 <alt_tse_mac_group_init+0x348>
801a318: 10c000a0 cmpeqi r3,r2,2
801a31c: 1800021e bne r3,zero,801a328 <alt_tse_mac_group_init+0x328>
801a320: 10001126 beq r2,zero,801a368 <alt_tse_mac_group_init+0x368>
801a324: 00001806 br 801a388 <alt_tse_mac_group_init+0x388>
case ALTERA_TSE_MACLITE_1000:
tse_dprintf(6, "INFO : MAC %2d Type = %s\n", j, "1000 Mbps Small MAC");
801a328: e0bffe87 ldb r2,-6(fp)
801a32c: 01820174 movhi r6,2053
801a330: 31a11604 addi r6,r6,-31656
801a334: 100b883a mov r5,r2
801a338: 01020174 movhi r4,2053
801a33c: 21211b04 addi r4,r4,-31636
801a340: 8002c780 call 8002c78 <printf>
break;
801a344: 00001806 br 801a3a8 <alt_tse_mac_group_init+0x3a8>
case ALTERA_TSE_MACLITE_10_100:
tse_dprintf(6, "INFO : MAC %2d Type = %s\n", j, "10/100 Mbps Small MAC");
801a348: e0bffe87 ldb r2,-6(fp)
801a34c: 01820174 movhi r6,2053
801a350: 31a12604 addi r6,r6,-31592
801a354: 100b883a mov r5,r2
801a358: 01020174 movhi r4,2053
801a35c: 21211b04 addi r4,r4,-31636
801a360: 8002c780 call 8002c78 <printf>
break;
801a364: 00001006 br 801a3a8 <alt_tse_mac_group_init+0x3a8>
case ALTERA_TSE_FULL_MAC:
tse_dprintf(6, "INFO : MAC %2d Type = %s\n", j, "10/100/1000 Ethernet MAC");
801a368: e0bffe87 ldb r2,-6(fp)
801a36c: 01820174 movhi r6,2053
801a370: 31a12c04 addi r6,r6,-31568
801a374: 100b883a mov r5,r2
801a378: 01020174 movhi r4,2053
801a37c: 21211b04 addi r4,r4,-31636
801a380: 8002c780 call 8002c78 <printf>
break;
801a384: 00000806 br 801a3a8 <alt_tse_mac_group_init+0x3a8>
default :
tse_dprintf(6, "INFO : MAC %2d Type = %s\n", j, "Unknown");
801a388: e0bffe87 ldb r2,-6(fp)
801a38c: 01820134 movhi r6,2052
801a390: 319f4d04 addi r6,r6,32052
801a394: 100b883a mov r5,r2
801a398: 01020174 movhi r4,2053
801a39c: 21211b04 addi r4,r4,-31636
801a3a0: 8002c780 call 8002c78 <printf>
break;
801a3a4: 0001883a nop
}
if(pmac_info->psys_info->tse_pcs_ena) {
801a3a8: e0bfff17 ldw r2,-4(fp)
801a3ac: 10800217 ldw r2,8(r2)
801a3b0: 108004c3 ldbu r2,19(r2)
801a3b4: 10803fcc andi r2,r2,255
801a3b8: 10008b26 beq r2,zero,801a5e8 <alt_tse_mac_group_init+0x5e8>
tse_dprintf(6, "INFO : PCS %2d Enable = %s\n", j, pmac_info->psys_info->tse_pcs_ena ? "Yes" : "No");
801a3bc: e0fffe87 ldb r3,-6(fp)
801a3c0: e0bfff17 ldw r2,-4(fp)
801a3c4: 10800217 ldw r2,8(r2)
801a3c8: 108004c3 ldbu r2,19(r2)
801a3cc: 10803fcc andi r2,r2,255
801a3d0: 10000326 beq r2,zero,801a3e0 <alt_tse_mac_group_init+0x3e0>
801a3d4: 00820174 movhi r2,2053
801a3d8: 10a13304 addi r2,r2,-31540
801a3dc: 00000206 br 801a3e8 <alt_tse_mac_group_init+0x3e8>
801a3e0: 00820174 movhi r2,2053
801a3e4: 10a13404 addi r2,r2,-31536
801a3e8: 100d883a mov r6,r2
801a3ec: 180b883a mov r5,r3
801a3f0: 01020174 movhi r4,2053
801a3f4: 21213504 addi r4,r4,-31532
801a3f8: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : PCS %2d SGMII Enable = %s\n", j, pmac_info->psys_info->tse_pcs_sgmii ? "Yes" : "No");
801a3fc: e0fffe87 ldb r3,-6(fp)
801a400: e0bfff17 ldw r2,-4(fp)
801a404: 10800217 ldw r2,8(r2)
801a408: 10800503 ldbu r2,20(r2)
801a40c: 10803fcc andi r2,r2,255
801a410: 10000326 beq r2,zero,801a420 <alt_tse_mac_group_init+0x420>
801a414: 00820174 movhi r2,2053
801a418: 10a13304 addi r2,r2,-31540
801a41c: 00000206 br 801a428 <alt_tse_mac_group_init+0x428>
801a420: 00820174 movhi r2,2053
801a424: 10a13404 addi r2,r2,-31536
801a428: 100d883a mov r6,r2
801a42c: 180b883a mov r5,r3
801a430: 01020174 movhi r4,2053
801a434: 21214004 addi r4,r4,-31488
801a438: 8002c780 call 8002c78 <printf>
if(pmac_info->psys_info->tse_pcs_ena) {
801a43c: 00006a06 br 801a5e8 <alt_tse_mac_group_init+0x5e8>
}
}
else {
/* display only once for all MAC, except shared MDIO MACs */
if(j == 0) {
801a440: e0bffe87 ldb r2,-6(fp)
801a444: 1000421e bne r2,zero,801a550 <alt_tse_mac_group_init+0x550>
switch(pmac_info->mac_type) {
801a448: e0bfff17 ldw r2,-4(fp)
801a44c: 10800003 ldbu r2,0(r2)
801a450: 10803fcc andi r2,r2,255
801a454: 10c00060 cmpeqi r3,r2,1
801a458: 18000a1e bne r3,zero,801a484 <alt_tse_mac_group_init+0x484>
801a45c: 10c000a0 cmpeqi r3,r2,2
801a460: 1800021e bne r3,zero,801a46c <alt_tse_mac_group_init+0x46c>
801a464: 10000d26 beq r2,zero,801a49c <alt_tse_mac_group_init+0x49c>
801a468: 00001206 br 801a4b4 <alt_tse_mac_group_init+0x4b4>
case ALTERA_TSE_MACLITE_1000:
tse_dprintf(6, "INFO : MAC Type = %s\n", "1000 Mbps Small MAC");
801a46c: 01420174 movhi r5,2053
801a470: 29611604 addi r5,r5,-31656
801a474: 01020174 movhi r4,2053
801a478: 21214b04 addi r4,r4,-31444
801a47c: 8002c780 call 8002c78 <printf>
break;
801a480: 00001206 br 801a4cc <alt_tse_mac_group_init+0x4cc>
case ALTERA_TSE_MACLITE_10_100:
tse_dprintf(6, "INFO : MAC Type = %s\n", "10/100 Mbps Small MAC");
801a484: 01420174 movhi r5,2053
801a488: 29612604 addi r5,r5,-31592
801a48c: 01020174 movhi r4,2053
801a490: 21214b04 addi r4,r4,-31444
801a494: 8002c780 call 8002c78 <printf>
break;
801a498: 00000c06 br 801a4cc <alt_tse_mac_group_init+0x4cc>
case ALTERA_TSE_FULL_MAC:
tse_dprintf(6, "INFO : MAC Type = %s\n", "10/100/1000 Ethernet MAC");
801a49c: 01420174 movhi r5,2053
801a4a0: 29612c04 addi r5,r5,-31568
801a4a4: 01020174 movhi r4,2053
801a4a8: 21214b04 addi r4,r4,-31444
801a4ac: 8002c780 call 8002c78 <printf>
break;
801a4b0: 00000606 br 801a4cc <alt_tse_mac_group_init+0x4cc>
default :
tse_dprintf(6, "INFO : MAC Type = %s\n", "Unknown");
801a4b4: 01420134 movhi r5,2052
801a4b8: 295f4d04 addi r5,r5,32052
801a4bc: 01020174 movhi r4,2053
801a4c0: 21214b04 addi r4,r4,-31444
801a4c4: 8002c780 call 8002c78 <printf>
break;
801a4c8: 0001883a nop
}
if(pmac_info->psys_info->tse_pcs_ena) {
801a4cc: e0bfff17 ldw r2,-4(fp)
801a4d0: 10800217 ldw r2,8(r2)
801a4d4: 108004c3 ldbu r2,19(r2)
801a4d8: 10803fcc andi r2,r2,255
801a4dc: 10001c26 beq r2,zero,801a550 <alt_tse_mac_group_init+0x550>
tse_dprintf(6, "INFO : PCS Enable = %s\n", pmac_info->psys_info->tse_pcs_ena ? "Yes" : "No");
801a4e0: e0bfff17 ldw r2,-4(fp)
801a4e4: 10800217 ldw r2,8(r2)
801a4e8: 108004c3 ldbu r2,19(r2)
801a4ec: 10803fcc andi r2,r2,255
801a4f0: 10000326 beq r2,zero,801a500 <alt_tse_mac_group_init+0x500>
801a4f4: 00820174 movhi r2,2053
801a4f8: 10a13304 addi r2,r2,-31540
801a4fc: 00000206 br 801a508 <alt_tse_mac_group_init+0x508>
801a500: 00820174 movhi r2,2053
801a504: 10a13404 addi r2,r2,-31536
801a508: 100b883a mov r5,r2
801a50c: 01020174 movhi r4,2053
801a510: 21215604 addi r4,r4,-31400
801a514: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : PCS SGMII Enable = %s\n", pmac_info->psys_info->tse_pcs_sgmii ? "Yes" : "No");
801a518: e0bfff17 ldw r2,-4(fp)
801a51c: 10800217 ldw r2,8(r2)
801a520: 10800503 ldbu r2,20(r2)
801a524: 10803fcc andi r2,r2,255
801a528: 10000326 beq r2,zero,801a538 <alt_tse_mac_group_init+0x538>
801a52c: 00820174 movhi r2,2053
801a530: 10a13304 addi r2,r2,-31540
801a534: 00000206 br 801a540 <alt_tse_mac_group_init+0x540>
801a538: 00820174 movhi r2,2053
801a53c: 10a13404 addi r2,r2,-31536
801a540: 100b883a mov r5,r2
801a544: 01020174 movhi r4,2053
801a548: 21216104 addi r4,r4,-31356
801a54c: 8002c780 call 8002c78 <printf>
}
}
if(pmac_info->psys_info->tse_multichannel_mac) {
801a550: e0bfff17 ldw r2,-4(fp)
801a554: 10800217 ldw r2,8(r2)
801a558: 108003c3 ldbu r2,15(r2)
801a55c: 10803fcc andi r2,r2,255
801a560: 10001326 beq r2,zero,801a5b0 <alt_tse_mac_group_init+0x5b0>
tse_dprintf(6, "INFO : Channel %2d Address = 0x%08x\n", j, (int) pmac_info->psys_info->tse_mac_base);
801a564: e0fffe87 ldb r3,-6(fp)
801a568: e0bfff17 ldw r2,-4(fp)
801a56c: 10800217 ldw r2,8(r2)
801a570: 10800017 ldw r2,0(r2)
801a574: 100d883a mov r6,r2
801a578: 180b883a mov r5,r3
801a57c: 01020174 movhi r4,2053
801a580: 21216c04 addi r4,r4,-31312
801a584: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : Channel %2d Device = tse_mac_device[%d]\n", j, i + j);
801a588: e13ffe87 ldb r4,-6(fp)
801a58c: e0fffec7 ldb r3,-5(fp)
801a590: e0bffe87 ldb r2,-6(fp)
801a594: 1885883a add r2,r3,r2
801a598: 100d883a mov r6,r2
801a59c: 200b883a mov r5,r4
801a5a0: 01020174 movhi r4,2053
801a5a4: 21217804 addi r4,r4,-31264
801a5a8: 8002c780 call 8002c78 <printf>
801a5ac: 00000e06 br 801a5e8 <alt_tse_mac_group_init+0x5e8>
}
else {
tse_dprintf(6, "INFO : MAC Address = 0x%08x\n", (int) pmac_info->psys_info->tse_mac_base);
801a5b0: e0bfff17 ldw r2,-4(fp)
801a5b4: 10800217 ldw r2,8(r2)
801a5b8: 10800017 ldw r2,0(r2)
801a5bc: 100b883a mov r5,r2
801a5c0: 01020174 movhi r4,2053
801a5c4: 21218704 addi r4,r4,-31204
801a5c8: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : MAC Device = tse_mac_device[%d]\n", i + j);
801a5cc: e0fffec7 ldb r3,-5(fp)
801a5d0: e0bffe87 ldb r2,-6(fp)
801a5d4: 1885883a add r2,r3,r2
801a5d8: 100b883a mov r5,r2
801a5dc: 01020174 movhi r4,2053
801a5e0: 21219304 addi r4,r4,-31156
801a5e4: 8002c780 call 8002c78 <printf>
}
}
/* store the pointer in MAC group variable for the detected channel */
pmac_group->pmac_info[j] = pmac_info;
801a5e8: e0bffe87 ldb r2,-6(fp)
801a5ec: e0fffd17 ldw r3,-12(fp)
801a5f0: 10800044 addi r2,r2,1
801a5f4: 100490ba slli r2,r2,2
801a5f8: 1885883a add r2,r3,r2
801a5fc: e0ffff17 ldw r3,-4(fp)
801a600: 10c00015 stw r3,0(r2)
for(j = 0; j < pmac_group->channel; j++) {
801a604: e0bffe83 ldbu r2,-6(fp)
801a608: 10800044 addi r2,r2,1
801a60c: e0bffe85 stb r2,-6(fp)
801a610: e0fffe87 ldb r3,-6(fp)
801a614: e0bffd17 ldw r2,-12(fp)
801a618: 10800003 ldbu r2,0(r2)
801a61c: 10803fcc andi r2,r2,255
801a620: 18beda16 blt r3,r2,801a18c <alt_tse_mac_group_init+0x18c>
}
/* store the pointer in global variable */
pmac_groups[mac_group_count] = pmac_group;
801a624: d0a05b43 ldbu r2,-32403(gp)
801a628: 10803fcc andi r2,r2,255
801a62c: 100890ba slli r4,r2,2
801a630: e0fffd17 ldw r3,-12(fp)
801a634: 008201b4 movhi r2,2054
801a638: 2085883a add r2,r4,r2
801a63c: 10f5aa15 stw r3,-10584(r2)
mac_group_count++;
801a640: d0a05b43 ldbu r2,-32403(gp)
801a644: 10800044 addi r2,r2,1
801a648: d0a05b45 stb r2,-32403(gp)
/* skip for subsequent Multi-channel MAC */
i += (pmac_group->channel - 1);
801a64c: e0bffd17 ldw r2,-12(fp)
801a650: 10c00003 ldbu r3,0(r2)
801a654: e0bffec3 ldbu r2,-5(fp)
801a658: 1885883a add r2,r3,r2
801a65c: 10bfffc4 addi r2,r2,-1
801a660: e0bffec5 stb r2,-5(fp)
for(i = 0; i < max_mac_system; i++) {
801a664: e0bffec3 ldbu r2,-5(fp)
801a668: 10800044 addi r2,r2,1
801a66c: e0bffec5 stb r2,-5(fp)
801a670: e0fffec7 ldb r3,-5(fp)
801a674: d0a00a03 ldbu r2,-32728(gp)
801a678: 10803fcc andi r2,r2,255
801a67c: 18be6a16 blt r3,r2,801a028 <alt_tse_mac_group_init+0x28>
}
}
return SUCCESS;
801a680: 0005883a mov r2,zero
}
801a684: e037883a mov sp,fp
801a688: dfc00117 ldw ra,4(sp)
801a68c: df000017 ldw fp,0(sp)
801a690: dec00204 addi sp,sp,8
801a694: f800283a ret
0801a698 <alt_tse_mac_get_phy>:
/* @Function Description: Store information of all the PHYs connected to MAC to phy_list
* @API Type: Internal
* @param pmac_group Pointer to the TSE MAC grouping structure
* @return Number of PHY not in profile, return ALTERA_TSE_MALLOC_FAILED if memory allocation failed
*/
alt_32 alt_tse_mac_get_phy(alt_tse_mac_group *pmac_group) {
801a698: deffed04 addi sp,sp,-76
801a69c: dfc01215 stw ra,72(sp)
801a6a0: df001115 stw fp,68(sp)
801a6a4: df001104 addi fp,sp,68
801a6a8: e13ff015 stw r4,-64(fp)
alt_32 phyid;
alt_32 phyid2 = 0;
801a6ac: e03fff15 stw zero,-4(fp)
alt_u8 revision_number;
alt_32 i;
alt_u8 is_phy_in_profile;
alt_32 return_value = 0;
801a6b0: e03ffd15 stw zero,-12(fp)
alt_8 phy_info_count = 0;
801a6b4: e03ffec5 stb zero,-5(fp)
alt_tse_phy_info *pphy = 0;
801a6b8: e03ff915 stw zero,-28(fp)
alt_tse_mac_info *pmac_info = 0;
801a6bc: e03ff815 stw zero,-32(fp)
alt_tse_system_info *psys = 0;
801a6c0: e03ff715 stw zero,-36(fp)
np_tse_mac *pmac_group_base = (np_tse_mac *) pmac_group->pmac_info[0]->psys_info->tse_mac_base;
801a6c4: e0bff017 ldw r2,-64(fp)
801a6c8: 10800117 ldw r2,4(r2)
801a6cc: 10800217 ldw r2,8(r2)
801a6d0: 10800017 ldw r2,0(r2)
801a6d4: e0bff615 stw r2,-40(fp)
/* Record previous MDIO address, to be restored at the end of function */
alt_32 mdioadd_prev = IORD(&pmac_group_base->MDIO_ADDR1, 0);
801a6d8: e0bff617 ldw r2,-40(fp)
801a6dc: 10801004 addi r2,r2,64
801a6e0: 10800037 ldwio r2,0(r2)
801a6e4: e0bff515 stw r2,-44(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801a6e8: e13ff017 ldw r4,-64(fp)
801a6ec: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801a6f0: e0bff4c5 stb r2,-45(fp)
/* loop all valid PHY address to look for connected PHY */
for (phyadd = 0x00; phyadd < pmac_group->channel /*0x20*/; phyadd++) //M.D. 2019-08-05: don't look at unused PHYs
801a6f4: e03ffcc5 stb zero,-13(fp)
801a6f8: 0000c106 br 801aa00 <alt_tse_mac_get_phy+0x368>
{
IOWR(&pmac_group_base->MDIO_ADDR1, 0, phyadd);
801a6fc: e0bff617 ldw r2,-40(fp)
801a700: 10801004 addi r2,r2,64
801a704: e0fffcc3 ldbu r3,-13(fp)
801a708: 10c00035 stwio r3,0(r2)
phyid = IORD(&pmac_group_base->mdio1.PHY_ID1,0); // read PHY ID
801a70c: e0bff617 ldw r2,-40(fp)
801a710: 1080a204 addi r2,r2,648
801a714: 10800037 ldwio r2,0(r2)
801a718: e0bff315 stw r2,-52(fp)
phyid2 = IORD(&pmac_group_base->mdio1.PHY_ID2,0); // read PHY ID
801a71c: e0bff617 ldw r2,-40(fp)
801a720: 1080a304 addi r2,r2,652
801a724: 10800037 ldwio r2,0(r2)
801a728: e0bfff15 stw r2,-4(fp)
/* PHY found */
if (phyid != phyid2)
801a72c: e0fff317 ldw r3,-52(fp)
801a730: e0bfff17 ldw r2,-4(fp)
801a734: 1880af26 beq r3,r2,801a9f4 <alt_tse_mac_get_phy+0x35c>
{
pphy = (alt_tse_phy_info *) malloc(sizeof(alt_tse_phy_info));
801a738: 01000704 movi r4,28
801a73c: 8042c980 call 8042c98 <malloc>
801a740: e0bff915 stw r2,-28(fp)
if(!pphy) {
801a744: e0bff917 ldw r2,-28(fp)
801a748: 1000091e bne r2,zero,801a770 <alt_tse_mac_get_phy+0xd8>
tse_dprintf(1, "ERROR : Unable to allocate memory for phy_info[%d.%d]\n", mac_group_index, phy_info_count);
801a74c: e0bff4c7 ldb r2,-45(fp)
801a750: e0fffec7 ldb r3,-5(fp)
801a754: 180d883a mov r6,r3
801a758: 100b883a mov r5,r2
801a75c: 01020174 movhi r4,2053
801a760: 2121a204 addi r4,r4,-31096
801a764: 8002c780 call 8002c78 <printf>
return ALTERA_TSE_MALLOC_FAILED;
801a768: 00bfffc4 movi r2,-1
801a76c: 0000c806 br 801aa90 <alt_tse_mac_get_phy+0x3f8>
}
/* store PHY address */
pphy->mdio_address = phyadd;
801a770: e0bff917 ldw r2,-28(fp)
801a774: e0fffcc3 ldbu r3,-13(fp)
801a778: 10c00005 stb r3,0(r2)
/* get oui, model number, and revision number from PHYID and PHYID2 */
oui = (phyid << 6) | ((phyid2 >> 10) & 0x3f);
801a77c: e0bff317 ldw r2,-52(fp)
801a780: 100691ba slli r3,r2,6
801a784: e0bfff17 ldw r2,-4(fp)
801a788: 1005d2ba srai r2,r2,10
801a78c: 10800fcc andi r2,r2,63
801a790: 1884b03a or r2,r3,r2
801a794: e0bff215 stw r2,-56(fp)
model_number = (phyid2 >> 4) & 0x3f;
801a798: e0bfff17 ldw r2,-4(fp)
801a79c: 1005d13a srai r2,r2,4
801a7a0: 10800fcc andi r2,r2,63
801a7a4: e0bff1c5 stb r2,-57(fp)
revision_number = phyid2 & 0x0f;
801a7a8: e0bfff17 ldw r2,-4(fp)
801a7ac: 108003cc andi r2,r2,15
801a7b0: e0bff185 stb r2,-58(fp)
/* map the PHY with PHY in profile */
is_phy_in_profile = 0;
801a7b4: e03ffac5 stb zero,-21(fp)
for(i = 0; i < phy_profile_count; i++) {
801a7b8: e03ffb15 stw zero,-20(fp)
801a7bc: 00002c06 br 801a870 <alt_tse_mac_get_phy+0x1d8>
/* if PHY match with PHY in profile */
if((pphy_profiles[i]->oui == oui) && (pphy_profiles[i]->model_number == model_number))
801a7c0: e0bffb17 ldw r2,-20(fp)
801a7c4: 100690ba slli r3,r2,2
801a7c8: 008201b4 movhi r2,2054
801a7cc: 1885883a add r2,r3,r2
801a7d0: 10b5ae17 ldw r2,-10568(r2)
801a7d4: 10801417 ldw r2,80(r2)
801a7d8: e0fff217 ldw r3,-56(fp)
801a7dc: 1880211e bne r3,r2,801a864 <alt_tse_mac_get_phy+0x1cc>
801a7e0: e0bffb17 ldw r2,-20(fp)
801a7e4: 100690ba slli r3,r2,2
801a7e8: 008201b4 movhi r2,2054
801a7ec: 1885883a add r2,r3,r2
801a7f0: 10b5ae17 ldw r2,-10568(r2)
801a7f4: 10801503 ldbu r2,84(r2)
801a7f8: e0fff1c3 ldbu r3,-57(fp)
801a7fc: 10803fcc andi r2,r2,255
801a800: 1880181e bne r3,r2,801a864 <alt_tse_mac_get_phy+0x1cc>
{
pphy->pphy_profile = pphy_profiles[i];
801a804: e0bffb17 ldw r2,-20(fp)
801a808: 100690ba slli r3,r2,2
801a80c: 008201b4 movhi r2,2054
801a810: 1885883a add r2,r3,r2
801a814: 10f5ae17 ldw r3,-10568(r2)
801a818: e0bff917 ldw r2,-28(fp)
801a81c: 10c00515 stw r3,20(r2)
/* PHY found, add it to phy_list */
tse_dprintf(5, "INFO : PHY %s found at PHY address 0x%02x of MAC Group[%d]\n", pphy_profiles[i]->name, phyadd, mac_group_index);
801a820: e0bffb17 ldw r2,-20(fp)
801a824: 100690ba slli r3,r2,2
801a828: 008201b4 movhi r2,2054
801a82c: 1885883a add r2,r3,r2
801a830: 10b5ae17 ldw r2,-10568(r2)
801a834: 1009883a mov r4,r2
801a838: e0bffcc3 ldbu r2,-13(fp)
801a83c: e0fff4c7 ldb r3,-45(fp)
801a840: 180f883a mov r7,r3
801a844: 100d883a mov r6,r2
801a848: 200b883a mov r5,r4
801a84c: 01020174 movhi r4,2053
801a850: 2121b104 addi r4,r4,-31036
801a854: 8002c780 call 8002c78 <printf>
is_phy_in_profile = 1;
801a858: 00800044 movi r2,1
801a85c: e0bffac5 stb r2,-21(fp)
break;
801a860: 00000706 br 801a880 <alt_tse_mac_get_phy+0x1e8>
for(i = 0; i < phy_profile_count; i++) {
801a864: e0bffb17 ldw r2,-20(fp)
801a868: 10800044 addi r2,r2,1
801a86c: e0bffb15 stw r2,-20(fp)
801a870: d0a05b03 ldbu r2,-32404(gp)
801a874: 10803fcc andi r2,r2,255
801a878: e0fffb17 ldw r3,-20(fp)
801a87c: 18bfd016 blt r3,r2,801a7c0 <alt_tse_mac_get_phy+0x128>
}
}
/* PHY not found in PHY profile */
if(is_phy_in_profile == 0) {
801a880: e0bffac3 ldbu r2,-21(fp)
801a884: 10000f1e bne r2,zero,801a8c4 <alt_tse_mac_get_phy+0x22c>
pphy->pphy_profile = 0;
801a888: e0bff917 ldw r2,-28(fp)
801a88c: 10000515 stw zero,20(r2)
tse_dprintf(3, "WARNING : Unknown PHY found at PHY address 0x%02x of MAC Group[%d]\n", phyadd, mac_group_index);
801a890: e0bffcc3 ldbu r2,-13(fp)
801a894: e0fff4c7 ldb r3,-45(fp)
801a898: 180d883a mov r6,r3
801a89c: 100b883a mov r5,r2
801a8a0: 01020174 movhi r4,2053
801a8a4: 2121c104 addi r4,r4,-30972
801a8a8: 8002c780 call 8002c78 <printf>
tse_dprintf(3, "WARNING : Please add PHY information to PHY profile\n");
801a8ac: 01020174 movhi r4,2053
801a8b0: 2121d204 addi r4,r4,-30904
801a8b4: 8002d9c0 call 8002d9c <puts>
return_value++;
801a8b8: e0bffd17 ldw r2,-12(fp)
801a8bc: 10800044 addi r2,r2,1
801a8c0: e0bffd15 stw r2,-12(fp)
}
tse_dprintf(6, "INFO : PHY OUI = 0x%06x\n", (int) oui);
801a8c4: e0bff217 ldw r2,-56(fp)
801a8c8: 100b883a mov r5,r2
801a8cc: 01020174 movhi r4,2053
801a8d0: 2121df04 addi r4,r4,-30852
801a8d4: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : PHY Model Number = 0x%02x\n", model_number);
801a8d8: e0bff1c3 ldbu r2,-57(fp)
801a8dc: 100b883a mov r5,r2
801a8e0: 01020174 movhi r4,2053
801a8e4: 2121ea04 addi r4,r4,-30808
801a8e8: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : PHY Revision Number = 0x%01x\n", revision_number);
801a8ec: e0bff183 ldbu r2,-58(fp)
801a8f0: 100b883a mov r5,r2
801a8f4: 01020174 movhi r4,2053
801a8f8: 2121f504 addi r4,r4,-30764
801a8fc: 8002c780 call 8002c78 <printf>
/* map the detected PHY to connected MAC */
if(alt_tse_mac_associate_phy(pmac_group, pphy) == TSE_PHY_MAP_SUCCESS) {
801a900: e17ff917 ldw r5,-28(fp)
801a904: e13ff017 ldw r4,-64(fp)
801a908: 801aaa40 call 801aaa4 <alt_tse_mac_associate_phy>
801a90c: 1000341e bne r2,zero,801a9e0 <alt_tse_mac_get_phy+0x348>
pmac_info = pphy->pmac_info;
801a910: e0bff917 ldw r2,-28(fp)
801a914: 10800617 ldw r2,24(r2)
801a918: e0bff815 stw r2,-32(fp)
psys = pmac_info->psys_info;
801a91c: e0bff817 ldw r2,-32(fp)
801a920: 10800217 ldw r2,8(r2)
801a924: e0bff715 stw r2,-36(fp)
/* Disable PHY loopback to allow Auto-Negotiation completed */
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_LOOPBACK, 1, 0); // disable PHY loopback
801a928: d8000015 stw zero,0(sp)
801a92c: 01c00044 movi r7,1
801a930: 01800384 movi r6,14
801a934: 000b883a mov r5,zero
801a938: e13ff917 ldw r4,-28(fp)
801a93c: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
/* Reset auto-negotiation advertisement */
alt_tse_phy_set_adv_1000(pphy, 1);
801a940: 01400044 movi r5,1
801a944: e13ff917 ldw r4,-28(fp)
801a948: 801b7f00 call 801b7f0 <alt_tse_phy_set_adv_1000>
alt_tse_phy_set_adv_100(pphy, 1);
801a94c: 01400044 movi r5,1
801a950: e13ff917 ldw r4,-28(fp)
801a954: 801b9b40 call 801b9b4 <alt_tse_phy_set_adv_100>
alt_tse_phy_set_adv_10(pphy, 1);
801a958: 01400044 movi r5,1
801a95c: e13ff917 ldw r4,-28(fp)
801a960: 801bc080 call 801bc08 <alt_tse_phy_set_adv_10>
/* check link connection for this PHY */
alt_tse_phy_restart_an(pphy, ALTERA_CHECKLINK_TIMEOUT_THRESHOLD);
801a964: 0149c404 movi r5,10000
801a968: e13ff917 ldw r4,-28(fp)
801a96c: 801af180 call 801af18 <alt_tse_phy_restart_an>
/* Perform additional setting if there is any */
/* Profile specific */
if(pphy->pphy_profile) {
801a970: e0bff917 ldw r2,-28(fp)
801a974: 10800517 ldw r2,20(r2)
801a978: 10000f26 beq r2,zero,801a9b8 <alt_tse_mac_get_phy+0x320>
if(pphy->pphy_profile->phy_cfg) {
801a97c: e0bff917 ldw r2,-28(fp)
801a980: 10800517 ldw r2,20(r2)
801a984: 10801717 ldw r2,92(r2)
801a988: 10000b26 beq r2,zero,801a9b8 <alt_tse_mac_get_phy+0x320>
tse_dprintf(6, "INFO : Applying additional PHY configuration of %s\n", pphy->pphy_profile->name);
801a98c: e0bff917 ldw r2,-28(fp)
801a990: 10800517 ldw r2,20(r2)
801a994: 100b883a mov r5,r2
801a998: 01020174 movhi r4,2053
801a99c: 21220004 addi r4,r4,-30720
801a9a0: 8002c780 call 8002c78 <printf>
pphy->pphy_profile->phy_cfg(pmac_group_base);
801a9a4: e0bff917 ldw r2,-28(fp)
801a9a8: 10800517 ldw r2,20(r2)
801a9ac: 10801717 ldw r2,92(r2)
801a9b0: e13ff617 ldw r4,-40(fp)
801a9b4: 103ee83a callr r2
}
}
/* Initialize PHY, call user's function pointer in alt_tse_system_info structure */
/* Individual PHY specific */
if(psys->tse_phy_cfg) {
801a9b8: e0bff717 ldw r2,-36(fp)
801a9bc: 10801217 ldw r2,72(r2)
801a9c0: 10000726 beq r2,zero,801a9e0 <alt_tse_mac_get_phy+0x348>
tse_dprintf(6, "INFO : Applying additional user PHY configuration\n");
801a9c4: 01020174 movhi r4,2053
801a9c8: 21220e04 addi r4,r4,-30664
801a9cc: 8002d9c0 call 8002d9c <puts>
psys->tse_phy_cfg(pmac_group_base);
801a9d0: e0bff717 ldw r2,-36(fp)
801a9d4: 10801217 ldw r2,72(r2)
801a9d8: e13ff617 ldw r4,-40(fp)
801a9dc: 103ee83a callr r2
}
}
tse_dprintf(6, "\n");
801a9e0: 01000284 movi r4,10
801a9e4: 8002cb80 call 8002cb8 <putchar>
phy_info_count++;
801a9e8: e0bffec3 ldbu r2,-5(fp)
801a9ec: 10800044 addi r2,r2,1
801a9f0: e0bffec5 stb r2,-5(fp)
for (phyadd = 0x00; phyadd < pmac_group->channel /*0x20*/; phyadd++) //M.D. 2019-08-05: don't look at unused PHYs
801a9f4: e0bffcc3 ldbu r2,-13(fp)
801a9f8: 10800044 addi r2,r2,1
801a9fc: e0bffcc5 stb r2,-13(fp)
801aa00: e0bff017 ldw r2,-64(fp)
801aa04: 10800003 ldbu r2,0(r2)
801aa08: e0fffcc3 ldbu r3,-13(fp)
801aa0c: 10803fcc andi r2,r2,255
801aa10: 18bf3a36 bltu r3,r2,801a6fc <alt_tse_mac_get_phy+0x64>
}
}
TK_SLEEP(100); //Wait a little bit for PHY reset after specific configuration
801aa14: 01001944 movi r4,101
801aa18: 801730c0 call 801730c <OSTimeDly>
/* check to verify the number of connected PHY match the number of channel */
if(pmac_group->channel != phy_info_count) {
801aa1c: e0bff017 ldw r2,-64(fp)
801aa20: 10800003 ldbu r2,0(r2)
801aa24: 10c03fcc andi r3,r2,255
801aa28: e0bffec7 ldb r2,-5(fp)
801aa2c: 18801326 beq r3,r2,801aa7c <alt_tse_mac_get_phy+0x3e4>
if(phy_info_count == 0) {
801aa30: e0bffec7 ldb r2,-5(fp)
801aa34: 1000061e bne r2,zero,801aa50 <alt_tse_mac_get_phy+0x3b8>
tse_dprintf(2, "ERROR : MAC Group[%d] - No PHY connected!\n", mac_group_index);
801aa38: e0bff4c7 ldb r2,-45(fp)
801aa3c: 100b883a mov r5,r2
801aa40: 01020174 movhi r4,2053
801aa44: 21221c04 addi r4,r4,-30608
801aa48: 8002c780 call 8002c78 <printf>
801aa4c: 00000b06 br 801aa7c <alt_tse_mac_get_phy+0x3e4>
}
else {
tse_dprintf(3, "WARNING : MAC Group[%d] - Number of PHY connected is not equal to the number of channel, Number of PHY : %d, Channel : %d\n", mac_group_index, phy_info_count, pmac_group->channel);
801aa50: e0fff4c7 ldb r3,-45(fp)
801aa54: e13ffec7 ldb r4,-5(fp)
801aa58: e0bff017 ldw r2,-64(fp)
801aa5c: 10800003 ldbu r2,0(r2)
801aa60: 10803fcc andi r2,r2,255
801aa64: 100f883a mov r7,r2
801aa68: 200d883a mov r6,r4
801aa6c: 180b883a mov r5,r3
801aa70: 01020174 movhi r4,2053
801aa74: 21222804 addi r4,r4,-30560
801aa78: 8002c780 call 8002c78 <printf>
}
}
/* Restore previous MDIO address */
IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdioadd_prev);
801aa7c: e0bff617 ldw r2,-40(fp)
801aa80: 10801004 addi r2,r2,64
801aa84: e0fff517 ldw r3,-44(fp)
801aa88: 10c00035 stwio r3,0(r2)
return return_value;
801aa8c: e0bffd17 ldw r2,-12(fp)
}
801aa90: e037883a mov sp,fp
801aa94: dfc00117 ldw ra,4(sp)
801aa98: df000017 ldw fp,0(sp)
801aa9c: dec00204 addi sp,sp,8
801aaa0: f800283a ret
0801aaa4 <alt_tse_mac_associate_phy>:
* @param pmac_group Pointer to the TSE MAC grouping structure
* @param pphy Pointer to the TSE PHY info structure which hold information of PHY
* @return return TSE_PHY_MAP_ERROR if mapping error
* return TSE_PHY_MAP_SUCCESS otherwise
*/
alt_32 alt_tse_mac_associate_phy(alt_tse_mac_group *pmac_group, alt_tse_phy_info *pphy) {
801aaa4: defff604 addi sp,sp,-40
801aaa8: dfc00915 stw ra,36(sp)
801aaac: df000815 stw fp,32(sp)
801aab0: df000804 addi fp,sp,32
801aab4: e13ff915 stw r4,-28(fp)
801aab8: e17ff815 stw r5,-32(fp)
alt_32 i;
alt_32 return_value = TSE_PHY_MAP_SUCCESS;
801aabc: e03ffd15 stw zero,-12(fp)
alt_u8 is_mapped;
alt_tse_system_info *psys = 0;
801aac0: e03ffc15 stw zero,-16(fp)
alt_tse_mac_info *pmac_info = 0;
801aac4: e03ffb15 stw zero,-20(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = 0;
801aac8: e03ffac5 stb zero,-21(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801aacc: e13ff917 ldw r4,-28(fp)
801aad0: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801aad4: e0bffa85 stb r2,-22(fp)
alt_8 sys_info_index = 0;
801aad8: e03ffa45 stb zero,-23(fp)
is_mapped = 0;
801aadc: e03fffc5 stb zero,-1(fp)
for(i = 0; i < pmac_group->channel; i++) {
801aae0: e03ffe15 stw zero,-8(fp)
801aae4: 00002b06 br 801ab94 <alt_tse_mac_associate_phy+0xf0>
pmac_info = pmac_group->pmac_info[i];
801aae8: e0fff917 ldw r3,-28(fp)
801aaec: e0bffe17 ldw r2,-8(fp)
801aaf0: 10800044 addi r2,r2,1
801aaf4: 100490ba slli r2,r2,2
801aaf8: 1885883a add r2,r3,r2
801aafc: 10800017 ldw r2,0(r2)
801ab00: e0bffb15 stw r2,-20(fp)
psys = pmac_info->psys_info;
801ab04: e0bffb17 ldw r2,-20(fp)
801ab08: 10800217 ldw r2,8(r2)
801ab0c: e0bffc15 stw r2,-16(fp)
/* map according to the PHY address in alt_tse_system_info.h */
if(psys->tse_phy_mdio_address == pphy->mdio_address) {
801ab10: e0bffc17 ldw r2,-16(fp)
801ab14: 10c01117 ldw r3,68(r2)
801ab18: e0bff817 ldw r2,-32(fp)
801ab1c: 10800003 ldbu r2,0(r2)
801ab20: 10803fcc andi r2,r2,255
801ab24: 1880181e bne r3,r2,801ab88 <alt_tse_mac_associate_phy+0xe4>
mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801ab28: e13ffb17 ldw r4,-20(fp)
801ab2c: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801ab30: e0bffac5 stb r2,-21(fp)
sys_info_index = alt_tse_get_system_index(psys);
801ab34: e13ffc17 ldw r4,-16(fp)
801ab38: 8018ac80 call 8018ac8 <alt_tse_get_system_index>
801ab3c: e0bffa45 stb r2,-23(fp)
pmac_info->pphy_info = pphy;
801ab40: e0bffb17 ldw r2,-20(fp)
801ab44: e0fff817 ldw r3,-32(fp)
801ab48: 10c00115 stw r3,4(r2)
pphy->pmac_info = pmac_info;
801ab4c: e0bff817 ldw r2,-32(fp)
801ab50: e0fffb17 ldw r3,-20(fp)
801ab54: 10c00615 stw r3,24(r2)
tse_dprintf(5, "INFO : PHY[%d.%d] - Explicitly mapped to tse_mac_device[%d]\n", mac_group_index, mac_info_index, sys_info_index);
801ab58: e0bffa87 ldb r2,-22(fp)
801ab5c: e0fffac7 ldb r3,-21(fp)
801ab60: e13ffa47 ldb r4,-23(fp)
801ab64: 200f883a mov r7,r4
801ab68: 180d883a mov r6,r3
801ab6c: 100b883a mov r5,r2
801ab70: 01020174 movhi r4,2053
801ab74: 21224704 addi r4,r4,-30436
801ab78: 8002c780 call 8002c78 <printf>
is_mapped = 1;
801ab7c: 00800044 movi r2,1
801ab80: e0bfffc5 stb r2,-1(fp)
break;
801ab84: 00000806 br 801aba8 <alt_tse_mac_associate_phy+0x104>
for(i = 0; i < pmac_group->channel; i++) {
801ab88: e0bffe17 ldw r2,-8(fp)
801ab8c: 10800044 addi r2,r2,1
801ab90: e0bffe15 stw r2,-8(fp)
801ab94: e0bff917 ldw r2,-28(fp)
801ab98: 10800003 ldbu r2,0(r2)
801ab9c: 10803fcc andi r2,r2,255
801aba0: e0fffe17 ldw r3,-8(fp)
801aba4: 18bfd016 blt r3,r2,801aae8 <alt_tse_mac_associate_phy+0x44>
}
}
/* if not yet map, it will automatically mapped to the first TSE device encountered with tse_phy_mdio_address = TSE_PHY_AUTO_ADDRESS */
if(is_mapped == 0) {
801aba8: e0bfffc3 ldbu r2,-1(fp)
801abac: 10003c1e bne r2,zero,801aca0 <alt_tse_mac_associate_phy+0x1fc>
for(i = 0; i < pmac_group->channel; i++) {
801abb0: e03ffe15 stw zero,-8(fp)
801abb4: 00003506 br 801ac8c <alt_tse_mac_associate_phy+0x1e8>
pmac_info = pmac_group->pmac_info[i];
801abb8: e0fff917 ldw r3,-28(fp)
801abbc: e0bffe17 ldw r2,-8(fp)
801abc0: 10800044 addi r2,r2,1
801abc4: 100490ba slli r2,r2,2
801abc8: 1885883a add r2,r3,r2
801abcc: 10800017 ldw r2,0(r2)
801abd0: e0bffb15 stw r2,-20(fp)
psys = pmac_info->psys_info;
801abd4: e0bffb17 ldw r2,-20(fp)
801abd8: 10800217 ldw r2,8(r2)
801abdc: e0bffc15 stw r2,-16(fp)
/* alt_tse_system_info structure definition error */
if((psys->tse_msgdma_tx == 0) || (psys->tse_msgdma_rx == 0)){
801abe0: e0bffc17 ldw r2,-16(fp)
801abe4: 10800617 ldw r2,24(r2)
801abe8: 10002426 beq r2,zero,801ac7c <alt_tse_mac_associate_phy+0x1d8>
801abec: e0bffc17 ldw r2,-16(fp)
801abf0: 10800717 ldw r2,28(r2)
801abf4: 10002126 beq r2,zero,801ac7c <alt_tse_mac_associate_phy+0x1d8>
continue;
}
if(psys->tse_phy_mdio_address == TSE_PHY_AUTO_ADDRESS) {
801abf8: e0bffc17 ldw r2,-16(fp)
801abfc: 10801117 ldw r2,68(r2)
801ac00: 10bfffd8 cmpnei r2,r2,-1
801ac04: 10001e1e bne r2,zero,801ac80 <alt_tse_mac_associate_phy+0x1dc>
mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801ac08: e13ffb17 ldw r4,-20(fp)
801ac0c: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801ac10: e0bffac5 stb r2,-21(fp)
sys_info_index = alt_tse_get_system_index(psys);
801ac14: e13ffc17 ldw r4,-16(fp)
801ac18: 8018ac80 call 8018ac8 <alt_tse_get_system_index>
801ac1c: e0bffa45 stb r2,-23(fp)
pmac_info->pphy_info = pphy;
801ac20: e0bffb17 ldw r2,-20(fp)
801ac24: e0fff817 ldw r3,-32(fp)
801ac28: 10c00115 stw r3,4(r2)
pphy->pmac_info = pmac_info;
801ac2c: e0bff817 ldw r2,-32(fp)
801ac30: e0fffb17 ldw r3,-20(fp)
801ac34: 10c00615 stw r3,24(r2)
psys->tse_phy_mdio_address = pphy->mdio_address;
801ac38: e0bff817 ldw r2,-32(fp)
801ac3c: 10800003 ldbu r2,0(r2)
801ac40: 10c03fcc andi r3,r2,255
801ac44: e0bffc17 ldw r2,-16(fp)
801ac48: 10c01115 stw r3,68(r2)
tse_dprintf(5, "INFO : PHY[%d.%d] - Automatically mapped to tse_mac_device[%d]\n", mac_group_index, mac_info_index, sys_info_index);
801ac4c: e0bffa87 ldb r2,-22(fp)
801ac50: e0fffac7 ldb r3,-21(fp)
801ac54: e13ffa47 ldb r4,-23(fp)
801ac58: 200f883a mov r7,r4
801ac5c: 180d883a mov r6,r3
801ac60: 100b883a mov r5,r2
801ac64: 01020174 movhi r4,2053
801ac68: 21225704 addi r4,r4,-30372
801ac6c: 8002c780 call 8002c78 <printf>
is_mapped = 1;
801ac70: 00800044 movi r2,1
801ac74: e0bfffc5 stb r2,-1(fp)
break;
801ac78: 00000906 br 801aca0 <alt_tse_mac_associate_phy+0x1fc>
continue;
801ac7c: 0001883a nop
for(i = 0; i < pmac_group->channel; i++) {
801ac80: e0bffe17 ldw r2,-8(fp)
801ac84: 10800044 addi r2,r2,1
801ac88: e0bffe15 stw r2,-8(fp)
801ac8c: e0bff917 ldw r2,-28(fp)
801ac90: 10800003 ldbu r2,0(r2)
801ac94: 10803fcc andi r2,r2,255
801ac98: e0fffe17 ldw r3,-8(fp)
801ac9c: 18bfc616 blt r3,r2,801abb8 <alt_tse_mac_associate_phy+0x114>
}
}
}
/* Still cannot find any matched MAC-PHY */
if(is_mapped == 0) {
801aca0: e0bfffc3 ldbu r2,-1(fp)
801aca4: 1000091e bne r2,zero,801accc <alt_tse_mac_associate_phy+0x228>
pphy->pmac_info = 0;
801aca8: e0bff817 ldw r2,-32(fp)
801acac: 10000615 stw zero,24(r2)
tse_dprintf(2, "WARNING : PHY[%d.X] - Mapping of PHY to MAC failed! Make sure the PHY address is defined correctly in tse_mac_device[] structure, and number of PHYs connected is equivalent to number of channel\n", mac_group_index);
801acb0: e0bffa87 ldb r2,-22(fp)
801acb4: 100b883a mov r5,r2
801acb8: 01020174 movhi r4,2053
801acbc: 21226804 addi r4,r4,-30304
801acc0: 8002c780 call 8002c78 <printf>
return_value = TSE_PHY_MAP_ERROR;
801acc4: 00bfffc4 movi r2,-1
801acc8: e0bffd15 stw r2,-12(fp)
}
return return_value;
801accc: e0bffd17 ldw r2,-12(fp)
}
801acd0: e037883a mov sp,fp
801acd4: dfc00117 ldw ra,4(sp)
801acd8: df000017 ldw fp,0(sp)
801acdc: dec00204 addi sp,sp,8
801ace0: f800283a ret
0801ace4 <alt_tse_phy_cfg_pcs>:
/* @Function Description: Configure operating mode of Altera PCS if available
* @API Type: Internal
* @param pmac_info pointer to MAC info variable
* @return return SUCCESS
*/
alt_32 alt_tse_phy_cfg_pcs(alt_tse_mac_info *pmac_info) {
801ace4: defff804 addi sp,sp,-32
801ace8: dfc00715 stw ra,28(sp)
801acec: df000615 stw fp,24(sp)
801acf0: df000604 addi fp,sp,24
801acf4: e13ffa15 stw r4,-24(fp)
alt_tse_system_info *psys = pmac_info->psys_info;
801acf8: e0bffa17 ldw r2,-24(fp)
801acfc: 10800217 ldw r2,8(r2)
801ad00: e0bffd15 stw r2,-12(fp)
np_tse_mac *pmac = (np_tse_mac *) psys->tse_mac_base;
801ad04: e0bffd17 ldw r2,-12(fp)
801ad08: 10800017 ldw r2,0(r2)
801ad0c: e0bfff15 stw r2,-4(fp)
alt_tse_mac_group *pmac_group = pmac_info->pmac_group;
801ad10: e0bffa17 ldw r2,-24(fp)
801ad14: 10800317 ldw r2,12(r2)
801ad18: e0bffe15 stw r2,-8(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801ad1c: e13ffa17 ldw r4,-24(fp)
801ad20: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801ad24: e0bffcc5 stb r2,-13(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801ad28: e13ffe17 ldw r4,-8(fp)
801ad2c: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801ad30: e0bffc85 stb r2,-14(fp)
if(psys->tse_pcs_ena) {
801ad34: e0bffd17 ldw r2,-12(fp)
801ad38: 108004c3 ldbu r2,19(r2)
801ad3c: 10803fcc andi r2,r2,255
801ad40: 10002c26 beq r2,zero,801adf4 <alt_tse_phy_cfg_pcs+0x110>
tse_dprintf(5, "INFO : PCS[%d.%d] - Configuring PCS operating mode\n", mac_group_index, mac_info_index);
801ad44: e0bffc87 ldb r2,-14(fp)
801ad48: e0fffcc7 ldb r3,-13(fp)
801ad4c: 180d883a mov r6,r3
801ad50: 100b883a mov r5,r2
801ad54: 01020174 movhi r4,2053
801ad58: 21229904 addi r4,r4,-30108
801ad5c: 8002c780 call 8002c78 <printf>
alt_32 data = IORD(&pmac->mdio0.CONTROL, ALTERA_TSE_PCS_IF_MODE);
801ad60: e0bfff17 ldw r2,-4(fp)
801ad64: 10808004 addi r2,r2,512
801ad68: 10801404 addi r2,r2,80
801ad6c: 10800037 ldwio r2,0(r2)
801ad70: e0bffb15 stw r2,-20(fp)
if(psys->tse_pcs_sgmii) {
801ad74: e0bffd17 ldw r2,-12(fp)
801ad78: 10800503 ldbu r2,20(r2)
801ad7c: 10803fcc andi r2,r2,255
801ad80: 10000e26 beq r2,zero,801adbc <alt_tse_phy_cfg_pcs+0xd8>
tse_dprintf(5, "INFO : PCS[%d.%d] - PCS SGMII mode enabled\n", mac_group_index, mac_info_index);
801ad84: e0bffc87 ldb r2,-14(fp)
801ad88: e0fffcc7 ldb r3,-13(fp)
801ad8c: 180d883a mov r6,r3
801ad90: 100b883a mov r5,r2
801ad94: 01020174 movhi r4,2053
801ad98: 2122a704 addi r4,r4,-30052
801ad9c: 8002c780 call 8002c78 <printf>
IOWR(&pmac->mdio0.CONTROL, ALTERA_TSE_PCS_IF_MODE, data | 0x03);
801ada0: e0bfff17 ldw r2,-4(fp)
801ada4: 10808004 addi r2,r2,512
801ada8: 10801404 addi r2,r2,80
801adac: e0fffb17 ldw r3,-20(fp)
801adb0: 18c000d4 ori r3,r3,3
801adb4: 10c00035 stwio r3,0(r2)
801adb8: 00000e06 br 801adf4 <alt_tse_phy_cfg_pcs+0x110>
}
else {
tse_dprintf(5, "INFO : PCS[%d.%d] - PCS SGMII mode disabled\n", mac_group_index, mac_info_index);
801adbc: e0bffc87 ldb r2,-14(fp)
801adc0: e0fffcc7 ldb r3,-13(fp)
801adc4: 180d883a mov r6,r3
801adc8: 100b883a mov r5,r2
801adcc: 01020174 movhi r4,2053
801add0: 2122b304 addi r4,r4,-30004
801add4: 8002c780 call 8002c78 <printf>
IOWR(&pmac->mdio0.CONTROL, ALTERA_TSE_PCS_IF_MODE, data & ~0x03);
801add8: e0bfff17 ldw r2,-4(fp)
801addc: 10808004 addi r2,r2,512
801ade0: 10801404 addi r2,r2,80
801ade4: e13ffb17 ldw r4,-20(fp)
801ade8: 00ffff04 movi r3,-4
801adec: 20c6703a and r3,r4,r3
801adf0: 10c00035 stwio r3,0(r2)
}
}
return SUCCESS;
801adf4: 0005883a mov r2,zero
}
801adf8: e037883a mov sp,fp
801adfc: dfc00117 ldw ra,4(sp)
801ae00: df000017 ldw fp,0(sp)
801ae04: dec00204 addi sp,sp,8
801ae08: f800283a ret
0801ae0c <alt_tse_phy_init>:
/* @Function Description: Detect and initialize all the PHYs connected
* @API Type: Internal
* @param pmac N/A
* @return SUCCESS
*/
alt_32 alt_tse_phy_init() {
801ae0c: defffb04 addi sp,sp,-20
801ae10: dfc00415 stw ra,16(sp)
801ae14: df000315 stw fp,12(sp)
801ae18: df000304 addi fp,sp,12
alt_8 i = 0;
801ae1c: e03fffc5 stb zero,-1(fp)
alt_8 j = 0;
801ae20: e03fff85 stb zero,-2(fp)
alt_tse_mac_group *pmac_group = 0;
801ae24: e03ffe15 stw zero,-8(fp)
alt_tse_mac_info *pmac_info = 0;
801ae28: e03ffd15 stw zero,-12(fp)
/* add supported PHYs */
alt_tse_phy_add_profile_default();
801ae2c: 8019b680 call 8019b68 <alt_tse_phy_add_profile_default>
/* display PHY in profile */
alt_tse_phy_print_profile();
801ae30: 8019e300 call 8019e30 <alt_tse_phy_print_profile>
alt_tse_mac_group_init();
801ae34: 801a0000 call 801a000 <alt_tse_mac_group_init>
/* initialize for each TSE MAC */
/* run once only for multi-channel MAC */
for(i = 0; i < mac_group_count; i++) {
801ae38: e03fffc5 stb zero,-1(fp)
801ae3c: 00002c06 br 801aef0 <alt_tse_phy_init+0xe4>
pmac_group = pmac_groups[i];
801ae40: e0bfffc7 ldb r2,-1(fp)
801ae44: 100690ba slli r3,r2,2
801ae48: 008201b4 movhi r2,2054
801ae4c: 1885883a add r2,r3,r2
801ae50: 10b5aa17 ldw r2,-10584(r2)
801ae54: e0bffe15 stw r2,-8(fp)
if(pmac_group->pmac_info[0]->psys_info->tse_use_mdio) {
801ae58: e0bffe17 ldw r2,-8(fp)
801ae5c: 10800117 ldw r2,4(r2)
801ae60: 10800217 ldw r2,8(r2)
801ae64: 10800303 ldbu r2,12(r2)
801ae68: 10803fcc andi r2,r2,255
801ae6c: 10000326 beq r2,zero,801ae7c <alt_tse_phy_init+0x70>
/* get connected PHYs */
alt_tse_mac_get_phy(pmac_group);
801ae70: e13ffe17 ldw r4,-8(fp)
801ae74: 801a6980 call 801a698 <alt_tse_mac_get_phy>
801ae78: 00000706 br 801ae98 <alt_tse_phy_init+0x8c>
}
else {
tse_dprintf(3, "WARNING : MAC Groups[%d]->pmac_info[%d] MDIO is not used, unable to run PHY detection\n", i, j);
801ae7c: e0bfffc7 ldb r2,-1(fp)
801ae80: e0ffff87 ldb r3,-2(fp)
801ae84: 180d883a mov r6,r3
801ae88: 100b883a mov r5,r2
801ae8c: 01020174 movhi r4,2053
801ae90: 2122bf04 addi r4,r4,-29956
801ae94: 8002c780 call 8002c78 <printf>
}
/* Configure PCS mode if MAC+PCS system is used */
for(j = 0; j < pmac_group->channel; j++) {
801ae98: e03fff85 stb zero,-2(fp)
801ae9c: 00000c06 br 801aed0 <alt_tse_phy_init+0xc4>
pmac_info = pmac_group->pmac_info[j];
801aea0: e0bfff87 ldb r2,-2(fp)
801aea4: e0fffe17 ldw r3,-8(fp)
801aea8: 10800044 addi r2,r2,1
801aeac: 100490ba slli r2,r2,2
801aeb0: 1885883a add r2,r3,r2
801aeb4: 10800017 ldw r2,0(r2)
801aeb8: e0bffd15 stw r2,-12(fp)
alt_tse_phy_cfg_pcs(pmac_info);
801aebc: e13ffd17 ldw r4,-12(fp)
801aec0: 801ace40 call 801ace4 <alt_tse_phy_cfg_pcs>
for(j = 0; j < pmac_group->channel; j++) {
801aec4: e0bfff83 ldbu r2,-2(fp)
801aec8: 10800044 addi r2,r2,1
801aecc: e0bfff85 stb r2,-2(fp)
801aed0: e0ffff87 ldb r3,-2(fp)
801aed4: e0bffe17 ldw r2,-8(fp)
801aed8: 10800003 ldbu r2,0(r2)
801aedc: 10803fcc andi r2,r2,255
801aee0: 18bfef16 blt r3,r2,801aea0 <alt_tse_phy_init+0x94>
for(i = 0; i < mac_group_count; i++) {
801aee4: e0bfffc3 ldbu r2,-1(fp)
801aee8: 10800044 addi r2,r2,1
801aeec: e0bfffc5 stb r2,-1(fp)
801aef0: e0ffffc7 ldb r3,-1(fp)
801aef4: d0a05b43 ldbu r2,-32403(gp)
801aef8: 10803fcc andi r2,r2,255
801aefc: 18bfd016 blt r3,r2,801ae40 <alt_tse_phy_init+0x34>
}
}
return SUCCESS;
801af00: 0005883a mov r2,zero
}
801af04: e037883a mov sp,fp
801af08: dfc00117 ldw ra,4(sp)
801af0c: df000017 ldw fp,0(sp)
801af10: dec00204 addi sp,sp,8
801af14: f800283a ret
0801af18 <alt_tse_phy_restart_an>:
* timeout_threshold timeout value of Auto-Negotiation
* @return return TSE_PHY_AN_COMPLETE if success
* return TSE_PHY_AN_NOT_COMPLETE if auto-negotiation not completed
* return TSE_PHY_AN_NOT_CAPABLE if the PHY not capable for AN
*/
alt_32 alt_tse_phy_restart_an(alt_tse_phy_info *pphy, alt_u32 timeout_threshold) {
801af18: defff704 addi sp,sp,-36
801af1c: dfc00815 stw ra,32(sp)
801af20: df000715 stw fp,28(sp)
801af24: df000704 addi fp,sp,28
801af28: e13ffb15 stw r4,-20(fp)
801af2c: e17ffa15 stw r5,-24(fp)
/* pointer to MAC associated and MAC group */
alt_tse_mac_info *pmac_info = pphy->pmac_info;
801af30: e0bffb17 ldw r2,-20(fp)
801af34: 10800617 ldw r2,24(r2)
801af38: e0bfff15 stw r2,-4(fp)
alt_tse_mac_group *pmac_group = pmac_info->pmac_group;
801af3c: e0bfff17 ldw r2,-4(fp)
801af40: 10800317 ldw r2,12(r2)
801af44: e0bffe15 stw r2,-8(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801af48: e13fff17 ldw r4,-4(fp)
801af4c: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801af50: e0bffcc5 stb r2,-13(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801af54: e13ffe17 ldw r4,-8(fp)
801af58: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801af5c: e0bffc85 stb r2,-14(fp)
/* Record previous MDIO address, to be restored at the end of function */
alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy);
801af60: e13ffb17 ldw r4,-20(fp)
801af64: 80198cc0 call 80198cc <alt_tse_phy_rd_mdio_addr>
801af68: e0bffc45 stb r2,-15(fp)
/* write PHY address to MDIO to access the i-th PHY */
alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address);
801af6c: e0bffb17 ldw r2,-20(fp)
801af70: 10800003 ldbu r2,0(r2)
801af74: 10803fcc andi r2,r2,255
801af78: 100b883a mov r5,r2
801af7c: e13ffb17 ldw r4,-20(fp)
801af80: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
if(!alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_ABILITY, 1)) {
801af84: 01c00044 movi r7,1
801af88: 018000c4 movi r6,3
801af8c: 01400044 movi r5,1
801af90: e13ffb17 ldw r4,-20(fp)
801af94: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801af98: 10000d1e bne r2,zero,801afd0 <alt_tse_phy_restart_an+0xb8>
tse_dprintf(3, "WARNING : PHY[%d.%d] - PHY not capable for Auto-Negotiation\n", mac_group_index, mac_info_index);
801af9c: e0bffc87 ldb r2,-14(fp)
801afa0: e0fffcc7 ldb r3,-13(fp)
801afa4: 180d883a mov r6,r3
801afa8: 100b883a mov r5,r2
801afac: 01020174 movhi r4,2053
801afb0: 2122d504 addi r4,r4,-29868
801afb4: 8002c780 call 8002c78 <printf>
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801afb8: e0bffc43 ldbu r2,-15(fp)
801afbc: 100b883a mov r5,r2
801afc0: e13ffb17 ldw r4,-20(fp)
801afc4: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return TSE_PHY_AN_NOT_CAPABLE;
801afc8: 00bfff84 movi r2,-2
801afcc: 00003e06 br 801b0c8 <alt_tse_phy_restart_an+0x1b0>
}
/* enable Auto-Negotiation */
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_AN_ENA, 1, 1);
801afd0: 00800044 movi r2,1
801afd4: d8800015 stw r2,0(sp)
801afd8: 01c00044 movi r7,1
801afdc: 01800304 movi r6,12
801afe0: 000b883a mov r5,zero
801afe4: e13ffb17 ldw r4,-20(fp)
801afe8: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
/* send PHY reset command */
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_RESTART_AN, 1, 1);
801afec: 00800044 movi r2,1
801aff0: d8800015 stw r2,0(sp)
801aff4: 01c00044 movi r7,1
801aff8: 01800244 movi r6,9
801affc: 000b883a mov r5,zero
801b000: e13ffb17 ldw r4,-20(fp)
801b004: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(5, "INFO : PHY[%d.%d] - Restart Auto-Negotiation, checking PHY link...\n", mac_group_index, mac_info_index);
801b008: e0bffc87 ldb r2,-14(fp)
801b00c: e0fffcc7 ldb r3,-13(fp)
801b010: 180d883a mov r6,r3
801b014: 100b883a mov r5,r2
801b018: 01020174 movhi r4,2053
801b01c: 2122e504 addi r4,r4,-29804
801b020: 8002c780 call 8002c78 <printf>
alt_32 timeout = 0;
801b024: e03ffd15 stw zero,-12(fp)
while(alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1) == 0 ){
801b028: 00001506 br 801b080 <alt_tse_phy_restart_an+0x168>
if(timeout++ > timeout_threshold) {
801b02c: e0bffd17 ldw r2,-12(fp)
801b030: 10c00044 addi r3,r2,1
801b034: e0fffd15 stw r3,-12(fp)
801b038: 1007883a mov r3,r2
801b03c: e0bffa17 ldw r2,-24(fp)
801b040: 10c00d2e bgeu r2,r3,801b078 <alt_tse_phy_restart_an+0x160>
tse_dprintf(4, "WARNING : PHY[%d.%d] - Auto-Negotiation FAILED\n", mac_group_index, mac_info_index);
801b044: e0bffc87 ldb r2,-14(fp)
801b048: e0fffcc7 ldb r3,-13(fp)
801b04c: 180d883a mov r6,r3
801b050: 100b883a mov r5,r2
801b054: 01020174 movhi r4,2053
801b058: 2122f704 addi r4,r4,-29732
801b05c: 8002c780 call 8002c78 <printf>
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801b060: e0bffc43 ldbu r2,-15(fp)
801b064: 100b883a mov r5,r2
801b068: e13ffb17 ldw r4,-20(fp)
801b06c: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return TSE_PHY_AN_NOT_COMPLETE;
801b070: 00bfffc4 movi r2,-1
801b074: 00001406 br 801b0c8 <alt_tse_phy_restart_an+0x1b0>
}
usleep(1000);
801b078: 0100fa04 movi r4,1000
801b07c: 803811c0 call 803811c <usleep>
while(alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1) == 0 ){
801b080: 01c00044 movi r7,1
801b084: 01800144 movi r6,5
801b088: 01400044 movi r5,1
801b08c: e13ffb17 ldw r4,-20(fp)
801b090: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b094: 103fe526 beq r2,zero,801b02c <alt_tse_phy_restart_an+0x114>
}
tse_dprintf(5, "INFO : PHY[%d.%d] - Auto-Negotiation PASSED\n", mac_group_index, mac_info_index);
801b098: e0bffc87 ldb r2,-14(fp)
801b09c: e0fffcc7 ldb r3,-13(fp)
801b0a0: 180d883a mov r6,r3
801b0a4: 100b883a mov r5,r2
801b0a8: 01020174 movhi r4,2053
801b0ac: 21230304 addi r4,r4,-29684
801b0b0: 8002c780 call 8002c78 <printf>
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801b0b4: e0bffc43 ldbu r2,-15(fp)
801b0b8: 100b883a mov r5,r2
801b0bc: e13ffb17 ldw r4,-20(fp)
801b0c0: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return TSE_PHY_AN_COMPLETE;
801b0c4: 0005883a mov r2,zero
}
801b0c8: e037883a mov sp,fp
801b0cc: dfc00117 ldw ra,4(sp)
801b0d0: df000017 ldw fp,0(sp)
801b0d4: dec00204 addi sp,sp,8
801b0d8: f800283a ret
0801b0dc <alt_tse_phy_check_link>:
* timeout_threshold timeout value of Auto-Negotiation
* @return return TSE_PHY_AN_COMPLETE if success
* return TSE_PHY_AN_NOT_COMPLETE if auto-negotiation not completed
*/
alt_32 alt_tse_phy_check_link(alt_tse_phy_info *pphy, alt_u32 timeout_threshold)
{
801b0dc: defff804 addi sp,sp,-32
801b0e0: dfc00715 stw ra,28(sp)
801b0e4: df000615 stw fp,24(sp)
801b0e8: df000604 addi fp,sp,24
801b0ec: e13ffb15 stw r4,-20(fp)
801b0f0: e17ffa15 stw r5,-24(fp)
alt_32 timeout=0;
801b0f4: e03fff15 stw zero,-4(fp)
/* pointer to MAC associated and MAC group */
alt_tse_mac_info *pmac_info = pphy->pmac_info;
801b0f8: e0bffb17 ldw r2,-20(fp)
801b0fc: 10800617 ldw r2,24(r2)
801b100: e0bffe15 stw r2,-8(fp)
alt_tse_mac_group *pmac_group = pmac_info->pmac_group;
801b104: e0bffe17 ldw r2,-8(fp)
801b108: 10800317 ldw r2,12(r2)
801b10c: e0bffd15 stw r2,-12(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801b110: e13ffe17 ldw r4,-8(fp)
801b114: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801b118: e0bffcc5 stb r2,-13(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801b11c: e13ffd17 ldw r4,-12(fp)
801b120: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801b124: e0bffc85 stb r2,-14(fp)
/* Record previous MDIO address, to be restored at the end of function */
alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy);
801b128: e13ffb17 ldw r4,-20(fp)
801b12c: 80198cc0 call 80198cc <alt_tse_phy_rd_mdio_addr>
801b130: e0bffc45 stb r2,-15(fp)
/* write PHY address to MDIO to access the i-th PHY */
alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address);
801b134: e0bffb17 ldw r2,-20(fp)
801b138: 10800003 ldbu r2,0(r2)
801b13c: 10803fcc andi r2,r2,255
801b140: 100b883a mov r5,r2
801b144: e13ffb17 ldw r4,-20(fp)
801b148: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
/* Issue a PHY reset here and wait for the link
* autonegotiation complete again... this takes several SECONDS(!)
* so be very careful not to do it frequently
* perform this when PHY is configured in loopback or has no link yet.
*/
tse_dprintf(5, "INFO : PHY[%d.%d] - Checking link...\n", mac_group_index, mac_info_index);
801b14c: e0bffc87 ldb r2,-14(fp)
801b150: e0fffcc7 ldb r3,-13(fp)
801b154: 180d883a mov r6,r3
801b158: 100b883a mov r5,r2
801b15c: 01020174 movhi r4,2053
801b160: 21230f04 addi r4,r4,-29636
801b164: 8002c780 call 8002c78 <printf>
while( ((alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_LOOPBACK, 1)) != 0) ||
801b168: 00002106 br 801b1f0 <alt_tse_phy_check_link+0x114>
((alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1)) == 0) )
{
if (timeout++ > timeout_threshold)
801b16c: e0bfff17 ldw r2,-4(fp)
801b170: 10c00044 addi r3,r2,1
801b174: e0ffff15 stw r3,-4(fp)
801b178: 1007883a mov r3,r2
801b17c: e0bffa17 ldw r2,-24(fp)
801b180: 10c0192e bgeu r2,r3,801b1e8 <alt_tse_phy_check_link+0x10c>
{
tse_dprintf(5, "INFO : PHY[%d.%d] - Link not yet established, restart auto-negotiation...\n", mac_group_index, mac_info_index);
801b184: e0bffc87 ldb r2,-14(fp)
801b188: e0fffcc7 ldb r3,-13(fp)
801b18c: 180d883a mov r6,r3
801b190: 100b883a mov r5,r2
801b194: 01020174 movhi r4,2053
801b198: 21231a04 addi r4,r4,-29592
801b19c: 8002c780 call 8002c78 <printf>
/* restart Auto-Negotiation */
/* if Auto-Negotiation still cannot complete, then go to next PHY */
if(alt_tse_phy_restart_an(pphy, timeout_threshold) == TSE_PHY_AN_NOT_COMPLETE)
801b1a0: e17ffa17 ldw r5,-24(fp)
801b1a4: e13ffb17 ldw r4,-20(fp)
801b1a8: 801af180 call 801af18 <alt_tse_phy_restart_an>
801b1ac: 10bfffd8 cmpnei r2,r2,-1
801b1b0: 10000d1e bne r2,zero,801b1e8 <alt_tse_phy_check_link+0x10c>
{
tse_dprintf(3, "WARNING : PHY[%d.%d] - Link could not established\n", mac_group_index, mac_info_index);
801b1b4: e0bffc87 ldb r2,-14(fp)
801b1b8: e0fffcc7 ldb r3,-13(fp)
801b1bc: 180d883a mov r6,r3
801b1c0: 100b883a mov r5,r2
801b1c4: 01020174 movhi r4,2053
801b1c8: 21232e04 addi r4,r4,-29512
801b1cc: 8002c780 call 8002c78 <printf>
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801b1d0: e0bffc43 ldbu r2,-15(fp)
801b1d4: 100b883a mov r5,r2
801b1d8: e13ffb17 ldw r4,-20(fp)
801b1dc: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return TSE_PHY_AN_NOT_COMPLETE;
801b1e0: 00bfffc4 movi r2,-1
801b1e4: 00001a06 br 801b250 <alt_tse_phy_check_link+0x174>
}
}
usleep(1000);
801b1e8: 0100fa04 movi r4,1000
801b1ec: 803811c0 call 803811c <usleep>
while( ((alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_LOOPBACK, 1)) != 0) ||
801b1f0: 01c00044 movi r7,1
801b1f4: 01800384 movi r6,14
801b1f8: 000b883a mov r5,zero
801b1fc: e13ffb17 ldw r4,-20(fp)
801b200: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b204: 103fd91e bne r2,zero,801b16c <alt_tse_phy_check_link+0x90>
((alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1)) == 0) )
801b208: 01c00044 movi r7,1
801b20c: 01800144 movi r6,5
801b210: 01400044 movi r5,1
801b214: e13ffb17 ldw r4,-20(fp)
801b218: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
while( ((alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_LOOPBACK, 1)) != 0) ||
801b21c: 103fd326 beq r2,zero,801b16c <alt_tse_phy_check_link+0x90>
}
tse_dprintf(5, "INFO : PHY[%d.%d] - Link established\n", mac_group_index, mac_info_index);
801b220: e0bffc87 ldb r2,-14(fp)
801b224: e0fffcc7 ldb r3,-13(fp)
801b228: 180d883a mov r6,r3
801b22c: 100b883a mov r5,r2
801b230: 01020174 movhi r4,2053
801b234: 21233b04 addi r4,r4,-29460
801b238: 8002c780 call 8002c78 <printf>
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801b23c: e0bffc43 ldbu r2,-15(fp)
801b240: 100b883a mov r5,r2
801b244: e13ffb17 ldw r4,-20(fp)
801b248: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return TSE_PHY_AN_COMPLETE;
801b24c: 0005883a mov r2,zero
}
801b250: e037883a mov sp,fp
801b254: dfc00117 ldw ra,4(sp)
801b258: df000017 ldw fp,0(sp)
801b25c: dec00204 addi sp,sp,8
801b260: f800283a ret
0801b264 <alt_tse_phy_get_cap>:
* @param pmac Pointer to the alt_tse_phy_info structure
* @return return TSE_PHY_AN_COMPLETE if success
* return TSE_PHY_AN_NOT_COMPLETE if auto-negotiation not completed
* return TSE_PHY_AN_NOT_CAPABLE if the PHY not capable for AN
*/
alt_32 alt_tse_phy_get_cap(alt_tse_phy_info *pphy) {
801b264: defff904 addi sp,sp,-28
801b268: dfc00615 stw ra,24(sp)
801b26c: df000515 stw fp,20(sp)
801b270: df000504 addi fp,sp,20
801b274: e13ffb15 stw r4,-20(fp)
alt_32 return_value = TSE_PHY_AN_COMPLETE;
801b278: e03fff15 stw zero,-4(fp)
/* pointer to MAC associated and MAC group */
alt_tse_mac_info *pmac_info = pphy->pmac_info;
801b27c: e0bffb17 ldw r2,-20(fp)
801b280: 10800617 ldw r2,24(r2)
801b284: e0bffd15 stw r2,-12(fp)
alt_tse_mac_group *pmac_group = pmac_info->pmac_group;
801b288: e0bffd17 ldw r2,-12(fp)
801b28c: 10800317 ldw r2,12(r2)
801b290: e0bffc15 stw r2,-16(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801b294: e13ffd17 ldw r4,-12(fp)
801b298: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801b29c: e0bffe45 stb r2,-7(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801b2a0: e13ffc17 ldw r4,-16(fp)
801b2a4: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801b2a8: e0bffe85 stb r2,-6(fp)
/* Record previous MDIO address, to be restored at the end of function */
alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy);
801b2ac: e13ffb17 ldw r4,-20(fp)
801b2b0: 80198cc0 call 80198cc <alt_tse_phy_rd_mdio_addr>
801b2b4: e0bffec5 stb r2,-5(fp)
/* write PHY address to MDIO to access the i-th PHY */
alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address);
801b2b8: e0bffb17 ldw r2,-20(fp)
801b2bc: 10800003 ldbu r2,0(r2)
801b2c0: 10803fcc andi r2,r2,255
801b2c4: 100b883a mov r5,r2
801b2c8: e13ffb17 ldw r4,-20(fp)
801b2cc: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
if(!alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_ABILITY, 1)) {
801b2d0: 01c00044 movi r7,1
801b2d4: 018000c4 movi r6,3
801b2d8: 01400044 movi r5,1
801b2dc: e13ffb17 ldw r4,-20(fp)
801b2e0: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b2e4: 10000d1e bne r2,zero,801b31c <alt_tse_phy_get_cap+0xb8>
tse_dprintf(3, "WARNING : PHY[%d.%d] - PHY not capable for Auto-Negotiation\n", mac_group_index, mac_info_index);
801b2e8: e0bffe87 ldb r2,-6(fp)
801b2ec: e0fffe47 ldb r3,-7(fp)
801b2f0: 180d883a mov r6,r3
801b2f4: 100b883a mov r5,r2
801b2f8: 01020174 movhi r4,2053
801b2fc: 2122d504 addi r4,r4,-29868
801b300: 8002c780 call 8002c78 <printf>
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801b304: e0bffec3 ldbu r2,-5(fp)
801b308: 100b883a mov r5,r2
801b30c: e13ffb17 ldw r4,-20(fp)
801b310: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return TSE_PHY_AN_NOT_CAPABLE;
801b314: 00bfff84 movi r2,-2
801b318: 00013006 br 801b7dc <alt_tse_phy_get_cap+0x578>
}
/* check whether link has been established */
alt_tse_phy_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD);
801b31c: 01427104 movi r5,2500
801b320: e13ffb17 ldw r4,-20(fp)
801b324: 801af180 call 801af18 <alt_tse_phy_restart_an>
if(alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1) == 0) {
801b328: 01c00044 movi r7,1
801b32c: 01800144 movi r6,5
801b330: 01400044 movi r5,1
801b334: e13ffb17 ldw r4,-20(fp)
801b338: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b33c: 1000021e bne r2,zero,801b348 <alt_tse_phy_get_cap+0xe4>
return_value = TSE_PHY_AN_NOT_COMPLETE;
801b340: 00bfffc4 movi r2,-1
801b344: e0bfff15 stw r2,-4(fp)
}
/* get PHY capabilities */
pphy->link_capability.cap_1000_base_x_full = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_EXT_STATUS, TSE_PHY_MDIO_EXT_STATUS_1000BASE_X_FULL, 1);
801b348: 01c00044 movi r7,1
801b34c: 018003c4 movi r6,15
801b350: 014003c4 movi r5,15
801b354: e13ffb17 ldw r4,-20(fp)
801b358: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b35c: 1007883a mov r3,r2
801b360: e0bffb17 ldw r2,-20(fp)
801b364: 10c00045 stb r3,1(r2)
pphy->link_capability.cap_1000_base_x_half = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_EXT_STATUS, TSE_PHY_MDIO_EXT_STATUS_1000BASE_X_HALF, 1);
801b368: 01c00044 movi r7,1
801b36c: 01800384 movi r6,14
801b370: 014003c4 movi r5,15
801b374: e13ffb17 ldw r4,-20(fp)
801b378: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b37c: 1007883a mov r3,r2
801b380: e0bffb17 ldw r2,-20(fp)
801b384: 10c00085 stb r3,2(r2)
pphy->link_capability.cap_1000_base_t_full = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_EXT_STATUS, TSE_PHY_MDIO_EXT_STATUS_1000BASE_T_FULL, 1);
801b388: 01c00044 movi r7,1
801b38c: 01800344 movi r6,13
801b390: 014003c4 movi r5,15
801b394: e13ffb17 ldw r4,-20(fp)
801b398: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b39c: 1007883a mov r3,r2
801b3a0: e0bffb17 ldw r2,-20(fp)
801b3a4: 10c000c5 stb r3,3(r2)
pphy->link_capability.cap_1000_base_t_half = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_EXT_STATUS, TSE_PHY_MDIO_EXT_STATUS_1000BASE_T_HALF, 1);
801b3a8: 01c00044 movi r7,1
801b3ac: 01800304 movi r6,12
801b3b0: 014003c4 movi r5,15
801b3b4: e13ffb17 ldw r4,-20(fp)
801b3b8: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b3bc: 1007883a mov r3,r2
801b3c0: e0bffb17 ldw r2,-20(fp)
801b3c4: 10c00105 stb r3,4(r2)
pphy->link_capability.cap_100_base_t4 = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_T4, 1);
801b3c8: 01c00044 movi r7,1
801b3cc: 018003c4 movi r6,15
801b3d0: 01400044 movi r5,1
801b3d4: e13ffb17 ldw r4,-20(fp)
801b3d8: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b3dc: 1007883a mov r3,r2
801b3e0: e0bffb17 ldw r2,-20(fp)
801b3e4: 10c00145 stb r3,5(r2)
pphy->link_capability.cap_100_base_x_full = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_X_FULL, 1);
801b3e8: 01c00044 movi r7,1
801b3ec: 01800384 movi r6,14
801b3f0: 01400044 movi r5,1
801b3f4: e13ffb17 ldw r4,-20(fp)
801b3f8: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b3fc: 1007883a mov r3,r2
801b400: e0bffb17 ldw r2,-20(fp)
801b404: 10c00185 stb r3,6(r2)
pphy->link_capability.cap_100_base_x_half = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_X_HALF, 1);
801b408: 01c00044 movi r7,1
801b40c: 01800344 movi r6,13
801b410: 01400044 movi r5,1
801b414: e13ffb17 ldw r4,-20(fp)
801b418: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b41c: 1007883a mov r3,r2
801b420: e0bffb17 ldw r2,-20(fp)
801b424: 10c001c5 stb r3,7(r2)
pphy->link_capability.cap_100_base_t2_full = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_T2_FULL, 1);
801b428: 01c00044 movi r7,1
801b42c: 01800284 movi r6,10
801b430: 01400044 movi r5,1
801b434: e13ffb17 ldw r4,-20(fp)
801b438: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b43c: 1007883a mov r3,r2
801b440: e0bffb17 ldw r2,-20(fp)
801b444: 10c00205 stb r3,8(r2)
pphy->link_capability.cap_100_base_t2_half = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_T2_HALF, 1);
801b448: 01c00044 movi r7,1
801b44c: 01800244 movi r6,9
801b450: 01400044 movi r5,1
801b454: e13ffb17 ldw r4,-20(fp)
801b458: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b45c: 1007883a mov r3,r2
801b460: e0bffb17 ldw r2,-20(fp)
801b464: 10c00245 stb r3,9(r2)
pphy->link_capability.cap_10_base_t_full = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_10BASE_T_FULL, 1);
801b468: 01c00044 movi r7,1
801b46c: 01800304 movi r6,12
801b470: 01400044 movi r5,1
801b474: e13ffb17 ldw r4,-20(fp)
801b478: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b47c: 1007883a mov r3,r2
801b480: e0bffb17 ldw r2,-20(fp)
801b484: 10c00285 stb r3,10(r2)
pphy->link_capability.cap_10_base_t_half = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_10BASE_T_HALF, 1);
801b488: 01c00044 movi r7,1
801b48c: 018002c4 movi r6,11
801b490: 01400044 movi r5,1
801b494: e13ffb17 ldw r4,-20(fp)
801b498: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b49c: 1007883a mov r3,r2
801b4a0: e0bffb17 ldw r2,-20(fp)
801b4a4: 10c002c5 stb r3,11(r2)
/* get link partner capability */
pphy->link_capability.lp_1000_base_t_full = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_1000BASE_T_STATUS, TSE_PHY_MDIO_1000BASE_T_STATUS_LP_FULL_ADV, 1);
801b4a8: 01c00044 movi r7,1
801b4ac: 018002c4 movi r6,11
801b4b0: 01400284 movi r5,10
801b4b4: e13ffb17 ldw r4,-20(fp)
801b4b8: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b4bc: 1007883a mov r3,r2
801b4c0: e0bffb17 ldw r2,-20(fp)
801b4c4: 10c00305 stb r3,12(r2)
pphy->link_capability.lp_1000_base_t_half = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_1000BASE_T_STATUS, TSE_PHY_MDIO_1000BASE_T_STATUS_LP_HALF_ADV, 1);
801b4c8: 01c00044 movi r7,1
801b4cc: 01800284 movi r6,10
801b4d0: 01400284 movi r5,10
801b4d4: e13ffb17 ldw r4,-20(fp)
801b4d8: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b4dc: 1007883a mov r3,r2
801b4e0: e0bffb17 ldw r2,-20(fp)
801b4e4: 10c00345 stb r3,13(r2)
pphy->link_capability.lp_100_base_t4 = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_REMADV, TSE_PHY_MDIO_ADV_100BASE_T4, 1);
801b4e8: 01c00044 movi r7,1
801b4ec: 01800244 movi r6,9
801b4f0: 01400144 movi r5,5
801b4f4: e13ffb17 ldw r4,-20(fp)
801b4f8: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b4fc: 1007883a mov r3,r2
801b500: e0bffb17 ldw r2,-20(fp)
801b504: 10c00385 stb r3,14(r2)
pphy->link_capability.lp_100_base_tx_full = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_REMADV, TSE_PHY_MDIO_ADV_100BASE_TX_FULL, 1);
801b508: 01c00044 movi r7,1
801b50c: 01800204 movi r6,8
801b510: 01400144 movi r5,5
801b514: e13ffb17 ldw r4,-20(fp)
801b518: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b51c: 1007883a mov r3,r2
801b520: e0bffb17 ldw r2,-20(fp)
801b524: 10c003c5 stb r3,15(r2)
pphy->link_capability.lp_100_base_tx_half = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_REMADV, TSE_PHY_MDIO_ADV_100BASE_TX_HALF, 1);
801b528: 01c00044 movi r7,1
801b52c: 018001c4 movi r6,7
801b530: 01400144 movi r5,5
801b534: e13ffb17 ldw r4,-20(fp)
801b538: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b53c: 1007883a mov r3,r2
801b540: e0bffb17 ldw r2,-20(fp)
801b544: 10c00405 stb r3,16(r2)
pphy->link_capability.lp_10_base_tx_full = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_REMADV, TSE_PHY_MDIO_ADV_10BASE_TX_FULL, 1);
801b548: 01c00044 movi r7,1
801b54c: 01800184 movi r6,6
801b550: 01400144 movi r5,5
801b554: e13ffb17 ldw r4,-20(fp)
801b558: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b55c: 1007883a mov r3,r2
801b560: e0bffb17 ldw r2,-20(fp)
801b564: 10c00445 stb r3,17(r2)
pphy->link_capability.lp_10_base_tx_half = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_REMADV, TSE_PHY_MDIO_ADV_10BASE_TX_HALF, 1);
801b568: 01c00044 movi r7,1
801b56c: 01800144 movi r6,5
801b570: 01400144 movi r5,5
801b574: e13ffb17 ldw r4,-20(fp)
801b578: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b57c: 1007883a mov r3,r2
801b580: e0bffb17 ldw r2,-20(fp)
801b584: 10c00485 stb r3,18(r2)
tse_dprintf(6, "INFO : PHY[%d.%d] - Capability of PHY :\n", mac_group_index, mac_info_index);
801b588: e0bffe87 ldb r2,-6(fp)
801b58c: e0fffe47 ldb r3,-7(fp)
801b590: 180d883a mov r6,r3
801b594: 100b883a mov r5,r2
801b598: 01020174 movhi r4,2053
801b59c: 21234604 addi r4,r4,-29416
801b5a0: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 1000 Base-X Full Duplex = %d\n", pphy->link_capability.cap_1000_base_x_full);
801b5a4: e0bffb17 ldw r2,-20(fp)
801b5a8: 10800043 ldbu r2,1(r2)
801b5ac: 10803fcc andi r2,r2,255
801b5b0: 100b883a mov r5,r2
801b5b4: 01020174 movhi r4,2053
801b5b8: 21235104 addi r4,r4,-29372
801b5bc: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 1000 Base-X Half Duplex = %d\n", pphy->link_capability.cap_1000_base_x_half);
801b5c0: e0bffb17 ldw r2,-20(fp)
801b5c4: 10800083 ldbu r2,2(r2)
801b5c8: 10803fcc andi r2,r2,255
801b5cc: 100b883a mov r5,r2
801b5d0: 01020174 movhi r4,2053
801b5d4: 21235b04 addi r4,r4,-29332
801b5d8: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 1000 Base-T Full Duplex = %d\n", pphy->link_capability.cap_1000_base_t_full);
801b5dc: e0bffb17 ldw r2,-20(fp)
801b5e0: 108000c3 ldbu r2,3(r2)
801b5e4: 10803fcc andi r2,r2,255
801b5e8: 100b883a mov r5,r2
801b5ec: 01020174 movhi r4,2053
801b5f0: 21236504 addi r4,r4,-29292
801b5f4: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 1000 Base-T Half Duplex = %d\n", pphy->link_capability.cap_1000_base_t_half);
801b5f8: e0bffb17 ldw r2,-20(fp)
801b5fc: 10800103 ldbu r2,4(r2)
801b600: 10803fcc andi r2,r2,255
801b604: 100b883a mov r5,r2
801b608: 01020174 movhi r4,2053
801b60c: 21236f04 addi r4,r4,-29252
801b610: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 100 Base-T4 = %d\n", pphy->link_capability.cap_100_base_t4);
801b614: e0bffb17 ldw r2,-20(fp)
801b618: 10800143 ldbu r2,5(r2)
801b61c: 10803fcc andi r2,r2,255
801b620: 100b883a mov r5,r2
801b624: 01020174 movhi r4,2053
801b628: 21237904 addi r4,r4,-29212
801b62c: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 100 Base-X Full Duplex = %d\n", pphy->link_capability.cap_100_base_x_full);
801b630: e0bffb17 ldw r2,-20(fp)
801b634: 10800183 ldbu r2,6(r2)
801b638: 10803fcc andi r2,r2,255
801b63c: 100b883a mov r5,r2
801b640: 01020174 movhi r4,2053
801b644: 21238304 addi r4,r4,-29172
801b648: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 100 Base-X Half Duplex = %d\n", pphy->link_capability.cap_100_base_x_half);
801b64c: e0bffb17 ldw r2,-20(fp)
801b650: 108001c3 ldbu r2,7(r2)
801b654: 10803fcc andi r2,r2,255
801b658: 100b883a mov r5,r2
801b65c: 01020174 movhi r4,2053
801b660: 21238d04 addi r4,r4,-29132
801b664: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 100 Base-T2 Full Duplex = %d\n", pphy->link_capability.cap_100_base_t2_full);
801b668: e0bffb17 ldw r2,-20(fp)
801b66c: 10800203 ldbu r2,8(r2)
801b670: 10803fcc andi r2,r2,255
801b674: 100b883a mov r5,r2
801b678: 01020174 movhi r4,2053
801b67c: 21239704 addi r4,r4,-29092
801b680: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 100 Base-T2 Half Duplex = %d\n", pphy->link_capability.cap_100_base_t2_half);
801b684: e0bffb17 ldw r2,-20(fp)
801b688: 10800243 ldbu r2,9(r2)
801b68c: 10803fcc andi r2,r2,255
801b690: 100b883a mov r5,r2
801b694: 01020174 movhi r4,2053
801b698: 2123a104 addi r4,r4,-29052
801b69c: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 10 Base-T Full Duplex = %d\n", pphy->link_capability.cap_10_base_t_full);
801b6a0: e0bffb17 ldw r2,-20(fp)
801b6a4: 10800283 ldbu r2,10(r2)
801b6a8: 10803fcc andi r2,r2,255
801b6ac: 100b883a mov r5,r2
801b6b0: 01020174 movhi r4,2053
801b6b4: 2123ab04 addi r4,r4,-29012
801b6b8: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 10 Base-T Half Duplex = %d\n", pphy->link_capability.cap_10_base_t_half);
801b6bc: e0bffb17 ldw r2,-20(fp)
801b6c0: 108002c3 ldbu r2,11(r2)
801b6c4: 10803fcc andi r2,r2,255
801b6c8: 100b883a mov r5,r2
801b6cc: 01020174 movhi r4,2053
801b6d0: 2123b504 addi r4,r4,-28972
801b6d4: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "\n");
801b6d8: 01000284 movi r4,10
801b6dc: 8002cb80 call 8002cb8 <putchar>
tse_dprintf(6, "INFO : PHY[%d.%d] - Link Partner Capability :\n", mac_group_index, mac_info_index);
801b6e0: e0bffe87 ldb r2,-6(fp)
801b6e4: e0fffe47 ldb r3,-7(fp)
801b6e8: 180d883a mov r6,r3
801b6ec: 100b883a mov r5,r2
801b6f0: 01020174 movhi r4,2053
801b6f4: 2123bf04 addi r4,r4,-28932
801b6f8: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 1000 Base-T Full Duplex = %d\n", pphy->link_capability.lp_1000_base_t_full);
801b6fc: e0bffb17 ldw r2,-20(fp)
801b700: 10800303 ldbu r2,12(r2)
801b704: 10803fcc andi r2,r2,255
801b708: 100b883a mov r5,r2
801b70c: 01020174 movhi r4,2053
801b710: 21236504 addi r4,r4,-29292
801b714: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 1000 Base-T Half Duplex = %d\n", pphy->link_capability.lp_1000_base_t_half);
801b718: e0bffb17 ldw r2,-20(fp)
801b71c: 10800343 ldbu r2,13(r2)
801b720: 10803fcc andi r2,r2,255
801b724: 100b883a mov r5,r2
801b728: 01020174 movhi r4,2053
801b72c: 21236f04 addi r4,r4,-29252
801b730: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 100 Base-T4 = %d\n", pphy->link_capability.lp_100_base_t4);
801b734: e0bffb17 ldw r2,-20(fp)
801b738: 10800383 ldbu r2,14(r2)
801b73c: 10803fcc andi r2,r2,255
801b740: 100b883a mov r5,r2
801b744: 01020174 movhi r4,2053
801b748: 21237904 addi r4,r4,-29212
801b74c: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 100 Base-TX Full Duplex = %d\n", pphy->link_capability.lp_100_base_tx_full);
801b750: e0bffb17 ldw r2,-20(fp)
801b754: 108003c3 ldbu r2,15(r2)
801b758: 10803fcc andi r2,r2,255
801b75c: 100b883a mov r5,r2
801b760: 01020174 movhi r4,2053
801b764: 2123cc04 addi r4,r4,-28880
801b768: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 100 Base-TX Half Duplex = %d\n", pphy->link_capability.lp_100_base_tx_half);
801b76c: e0bffb17 ldw r2,-20(fp)
801b770: 10800403 ldbu r2,16(r2)
801b774: 10803fcc andi r2,r2,255
801b778: 100b883a mov r5,r2
801b77c: 01020174 movhi r4,2053
801b780: 2123d604 addi r4,r4,-28840
801b784: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 10 Base-TX Full Duplex = %d\n", pphy->link_capability.lp_10_base_tx_full);
801b788: e0bffb17 ldw r2,-20(fp)
801b78c: 10800443 ldbu r2,17(r2)
801b790: 10803fcc andi r2,r2,255
801b794: 100b883a mov r5,r2
801b798: 01020174 movhi r4,2053
801b79c: 2123e004 addi r4,r4,-28800
801b7a0: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "INFO : 10 Base-TX Half Duplex = %d\n", pphy->link_capability.lp_10_base_tx_half);
801b7a4: e0bffb17 ldw r2,-20(fp)
801b7a8: 10800483 ldbu r2,18(r2)
801b7ac: 10803fcc andi r2,r2,255
801b7b0: 100b883a mov r5,r2
801b7b4: 01020174 movhi r4,2053
801b7b8: 2123ea04 addi r4,r4,-28760
801b7bc: 8002c780 call 8002c78 <printf>
tse_dprintf(6, "\n");
801b7c0: 01000284 movi r4,10
801b7c4: 8002cb80 call 8002cb8 <putchar>
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801b7c8: e0bffec3 ldbu r2,-5(fp)
801b7cc: 100b883a mov r5,r2
801b7d0: e13ffb17 ldw r4,-20(fp)
801b7d4: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return return_value;
801b7d8: e0bfff17 ldw r2,-4(fp)
}
801b7dc: e037883a mov sp,fp
801b7e0: dfc00117 ldw ra,4(sp)
801b7e4: df000017 ldw fp,0(sp)
801b7e8: dec00204 addi sp,sp,8
801b7ec: f800283a ret
0801b7f0 <alt_tse_phy_set_adv_1000>:
* @param pmac Pointer to the alt_tse_phy_info structure
* enable set Enable = 1 to advertise this speed if the PHY capable
* set Enable = 0 to disable advertise of this speed
* @return return SUCCESS
*/
alt_32 alt_tse_phy_set_adv_1000(alt_tse_phy_info *pphy, alt_u8 enable) {
801b7f0: defff604 addi sp,sp,-40
801b7f4: dfc00915 stw ra,36(sp)
801b7f8: df000815 stw fp,32(sp)
801b7fc: df000804 addi fp,sp,32
801b800: e13ffa15 stw r4,-24(fp)
801b804: 2805883a mov r2,r5
801b808: e0bff905 stb r2,-28(fp)
alt_u8 cap;
/* pointer to MAC associated and MAC group */
alt_tse_mac_info *pmac_info = pphy->pmac_info;
801b80c: e0bffa17 ldw r2,-24(fp)
801b810: 10800617 ldw r2,24(r2)
801b814: e0bffc15 stw r2,-16(fp)
alt_tse_mac_group *pmac_group = pmac_info->pmac_group;
801b818: e0bffc17 ldw r2,-16(fp)
801b81c: 10800317 ldw r2,12(r2)
801b820: e0bffe15 stw r2,-8(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801b824: e13ffc17 ldw r4,-16(fp)
801b828: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801b82c: e0bffdc5 stb r2,-9(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801b830: e13ffe17 ldw r4,-8(fp)
801b834: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801b838: e0bfffc5 stb r2,-1(fp)
/* Record previous MDIO address, to be restored at the end of function */
alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy);
801b83c: e13ffa17 ldw r4,-24(fp)
801b840: 80198cc0 call 80198cc <alt_tse_phy_rd_mdio_addr>
801b844: e0bffbc5 stb r2,-17(fp)
/* write PHY address to MDIO to access the i-th PHY */
alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address);
801b848: e0bffa17 ldw r2,-24(fp)
801b84c: 10800003 ldbu r2,0(r2)
801b850: 10803fcc andi r2,r2,255
801b854: 100b883a mov r5,r2
801b858: e13ffa17 ldw r4,-24(fp)
801b85c: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
/* if enable = 1, set advertisement based on PHY capability */
if(enable) {
801b860: e0bff903 ldbu r2,-28(fp)
801b864: 10002d26 beq r2,zero,801b91c <alt_tse_phy_set_adv_1000+0x12c>
cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_EXT_STATUS, TSE_PHY_MDIO_EXT_STATUS_1000BASE_T_FULL, 1);
801b868: 01c00044 movi r7,1
801b86c: 01800344 movi r6,13
801b870: 014003c4 movi r5,15
801b874: e13ffa17 ldw r4,-24(fp)
801b878: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b87c: e0bffb85 stb r2,-18(fp)
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_1000BASE_T_CTRL, TSE_PHY_MDIO_1000BASE_T_CTRL_FULL_ADV, 1, cap);
801b880: e0bffb83 ldbu r2,-18(fp)
801b884: d8800015 stw r2,0(sp)
801b888: 01c00044 movi r7,1
801b88c: 01800244 movi r6,9
801b890: 01400244 movi r5,9
801b894: e13ffa17 ldw r4,-24(fp)
801b898: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 1000 Base-T Full Duplex set to %d\n", mac_group_index, mac_info_index, cap);
801b89c: e0bfffc7 ldb r2,-1(fp)
801b8a0: e0fffdc7 ldb r3,-9(fp)
801b8a4: e13ffb83 ldbu r4,-18(fp)
801b8a8: 200f883a mov r7,r4
801b8ac: 180d883a mov r6,r3
801b8b0: 100b883a mov r5,r2
801b8b4: 01020174 movhi r4,2053
801b8b8: 2123f404 addi r4,r4,-28720
801b8bc: 8002c780 call 8002c78 <printf>
/* 1000 Mbps Half duplex not supported by TSE MAC */
cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_EXT_STATUS, TSE_PHY_MDIO_EXT_STATUS_1000BASE_T_HALF, 1);
801b8c0: 01c00044 movi r7,1
801b8c4: 01800304 movi r6,12
801b8c8: 014003c4 movi r5,15
801b8cc: e13ffa17 ldw r4,-24(fp)
801b8d0: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801b8d4: e0bffb85 stb r2,-18(fp)
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_1000BASE_T_CTRL, TSE_PHY_MDIO_1000BASE_T_CTRL_HALF_ADV, 1, cap);
801b8d8: e0bffb83 ldbu r2,-18(fp)
801b8dc: d8800015 stw r2,0(sp)
801b8e0: 01c00044 movi r7,1
801b8e4: 01800204 movi r6,8
801b8e8: 01400244 movi r5,9
801b8ec: e13ffa17 ldw r4,-24(fp)
801b8f0: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 1000 Base-T Half Duplex set to %d\n", mac_group_index, mac_info_index, cap);
801b8f4: e0bfffc7 ldb r2,-1(fp)
801b8f8: e0fffdc7 ldb r3,-9(fp)
801b8fc: e13ffb83 ldbu r4,-18(fp)
801b900: 200f883a mov r7,r4
801b904: 180d883a mov r6,r3
801b908: 100b883a mov r5,r2
801b90c: 01020174 movhi r4,2053
801b910: 21240704 addi r4,r4,-28644
801b914: 8002c780 call 8002c78 <printf>
801b918: 00001c06 br 801b98c <alt_tse_phy_set_adv_1000+0x19c>
}
/* else disable advertisement of this speed */
else {
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_1000BASE_T_CTRL, TSE_PHY_MDIO_1000BASE_T_CTRL_FULL_ADV, 1, 0);
801b91c: d8000015 stw zero,0(sp)
801b920: 01c00044 movi r7,1
801b924: 01800244 movi r6,9
801b928: 01400244 movi r5,9
801b92c: e13ffa17 ldw r4,-24(fp)
801b930: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 1000 Base-T Full Duplex set to %d\n", mac_group_index, mac_info_index, 0);
801b934: e0bfffc7 ldb r2,-1(fp)
801b938: e0fffdc7 ldb r3,-9(fp)
801b93c: 000f883a mov r7,zero
801b940: 180d883a mov r6,r3
801b944: 100b883a mov r5,r2
801b948: 01020174 movhi r4,2053
801b94c: 2123f404 addi r4,r4,-28720
801b950: 8002c780 call 8002c78 <printf>
/* 1000 Mbps Half duplex not supported by TSE MAC */
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_1000BASE_T_CTRL, TSE_PHY_MDIO_1000BASE_T_CTRL_HALF_ADV, 1, 0);
801b954: d8000015 stw zero,0(sp)
801b958: 01c00044 movi r7,1
801b95c: 01800204 movi r6,8
801b960: 01400244 movi r5,9
801b964: e13ffa17 ldw r4,-24(fp)
801b968: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement 1000 Base-T half Duplex set to %d\n", mac_group_index, mac_info_index, 0);
801b96c: e0bfffc7 ldb r2,-1(fp)
801b970: e0fffdc7 ldb r3,-9(fp)
801b974: 000f883a mov r7,zero
801b978: 180d883a mov r6,r3
801b97c: 100b883a mov r5,r2
801b980: 01020174 movhi r4,2053
801b984: 21241a04 addi r4,r4,-28568
801b988: 8002c780 call 8002c78 <printf>
}
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801b98c: e0bffbc3 ldbu r2,-17(fp)
801b990: 100b883a mov r5,r2
801b994: e13ffa17 ldw r4,-24(fp)
801b998: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return SUCCESS;
801b99c: 0005883a mov r2,zero
}
801b9a0: e037883a mov sp,fp
801b9a4: dfc00117 ldw ra,4(sp)
801b9a8: df000017 ldw fp,0(sp)
801b9ac: dec00204 addi sp,sp,8
801b9b0: f800283a ret
0801b9b4 <alt_tse_phy_set_adv_100>:
* @param pmac Pointer to the alt_tse_phy_info structure
* enable set Enable = 1 to advertise this speed if the PHY capable
* set Enable = 0 to disable advertise of this speed
* @return return SUCCESS
*/
alt_32 alt_tse_phy_set_adv_100(alt_tse_phy_info *pphy, alt_u8 enable) {
801b9b4: defff804 addi sp,sp,-32
801b9b8: dfc00715 stw ra,28(sp)
801b9bc: df000615 stw fp,24(sp)
801b9c0: df000604 addi fp,sp,24
801b9c4: e13ffc15 stw r4,-16(fp)
801b9c8: 2805883a mov r2,r5
801b9cc: e0bffb05 stb r2,-20(fp)
alt_u8 cap;
/* pointer to MAC associated and MAC group */
alt_tse_mac_info *pmac_info = pphy->pmac_info;
801b9d0: e0bffc17 ldw r2,-16(fp)
801b9d4: 10800617 ldw r2,24(r2)
801b9d8: e0bffd15 stw r2,-12(fp)
alt_tse_mac_group *pmac_group = pmac_info->pmac_group;
801b9dc: e0bffd17 ldw r2,-12(fp)
801b9e0: 10800317 ldw r2,12(r2)
801b9e4: e0bffe15 stw r2,-8(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801b9e8: e13ffd17 ldw r4,-12(fp)
801b9ec: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801b9f0: e0bfff45 stb r2,-3(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801b9f4: e13ffe17 ldw r4,-8(fp)
801b9f8: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801b9fc: e0bfff05 stb r2,-4(fp)
/* Record previous MDIO address, to be restored at the end of function */
alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy);
801ba00: e13ffc17 ldw r4,-16(fp)
801ba04: 80198cc0 call 80198cc <alt_tse_phy_rd_mdio_addr>
801ba08: e0bfff85 stb r2,-2(fp)
/* write PHY address to MDIO to access the i-th PHY */
alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address);
801ba0c: e0bffc17 ldw r2,-16(fp)
801ba10: 10800003 ldbu r2,0(r2)
801ba14: 10803fcc andi r2,r2,255
801ba18: 100b883a mov r5,r2
801ba1c: e13ffc17 ldw r4,-16(fp)
801ba20: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
/* if enable = 1, set advertisement based on PHY capability */
if(enable) {
801ba24: e0bffb03 ldbu r2,-20(fp)
801ba28: 10004326 beq r2,zero,801bb38 <alt_tse_phy_set_adv_100+0x184>
cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_T4, 1);
801ba2c: 01c00044 movi r7,1
801ba30: 018003c4 movi r6,15
801ba34: 01400044 movi r5,1
801ba38: e13ffc17 ldw r4,-16(fp)
801ba3c: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801ba40: e0bfffc5 stb r2,-1(fp)
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_T4, 1, cap);
801ba44: e0bfffc3 ldbu r2,-1(fp)
801ba48: d8800015 stw r2,0(sp)
801ba4c: 01c00044 movi r7,1
801ba50: 01800244 movi r6,9
801ba54: 01400104 movi r5,4
801ba58: e13ffc17 ldw r4,-16(fp)
801ba5c: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 100 Base-T4 set to %d\n", mac_group_index, mac_info_index, cap);
801ba60: e0bfff07 ldb r2,-4(fp)
801ba64: e0ffff47 ldb r3,-3(fp)
801ba68: e13fffc3 ldbu r4,-1(fp)
801ba6c: 200f883a mov r7,r4
801ba70: 180d883a mov r6,r3
801ba74: 100b883a mov r5,r2
801ba78: 01020174 movhi r4,2053
801ba7c: 21242c04 addi r4,r4,-28496
801ba80: 8002c780 call 8002c78 <printf>
cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_X_FULL, 1);
801ba84: 01c00044 movi r7,1
801ba88: 01800384 movi r6,14
801ba8c: 01400044 movi r5,1
801ba90: e13ffc17 ldw r4,-16(fp)
801ba94: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801ba98: e0bfffc5 stb r2,-1(fp)
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_TX_FULL, 1, cap);
801ba9c: e0bfffc3 ldbu r2,-1(fp)
801baa0: d8800015 stw r2,0(sp)
801baa4: 01c00044 movi r7,1
801baa8: 01800204 movi r6,8
801baac: 01400104 movi r5,4
801bab0: e13ffc17 ldw r4,-16(fp)
801bab4: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 100 Base-TX Full Duplex set to %d\n", mac_group_index, mac_info_index, cap);
801bab8: e0bfff07 ldb r2,-4(fp)
801babc: e0ffff47 ldb r3,-3(fp)
801bac0: e13fffc3 ldbu r4,-1(fp)
801bac4: 200f883a mov r7,r4
801bac8: 180d883a mov r6,r3
801bacc: 100b883a mov r5,r2
801bad0: 01020174 movhi r4,2053
801bad4: 21243c04 addi r4,r4,-28432
801bad8: 8002c780 call 8002c78 <printf>
cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_X_HALF, 1);
801badc: 01c00044 movi r7,1
801bae0: 01800344 movi r6,13
801bae4: 01400044 movi r5,1
801bae8: e13ffc17 ldw r4,-16(fp)
801baec: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801baf0: e0bfffc5 stb r2,-1(fp)
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_TX_HALF, 1, cap);
801baf4: e0bfffc3 ldbu r2,-1(fp)
801baf8: d8800015 stw r2,0(sp)
801bafc: 01c00044 movi r7,1
801bb00: 018001c4 movi r6,7
801bb04: 01400104 movi r5,4
801bb08: e13ffc17 ldw r4,-16(fp)
801bb0c: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 100 Base-TX Half Duplex set to %d\n", mac_group_index, mac_info_index, cap);
801bb10: e0bfff07 ldb r2,-4(fp)
801bb14: e0ffff47 ldb r3,-3(fp)
801bb18: e13fffc3 ldbu r4,-1(fp)
801bb1c: 200f883a mov r7,r4
801bb20: 180d883a mov r6,r3
801bb24: 100b883a mov r5,r2
801bb28: 01020174 movhi r4,2053
801bb2c: 21244f04 addi r4,r4,-28356
801bb30: 8002c780 call 8002c78 <printf>
801bb34: 00002a06 br 801bbe0 <alt_tse_phy_set_adv_100+0x22c>
}
/* else disable advertisement of this speed */
else {
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_T4, 1, 0);
801bb38: d8000015 stw zero,0(sp)
801bb3c: 01c00044 movi r7,1
801bb40: 01800244 movi r6,9
801bb44: 01400104 movi r5,4
801bb48: e13ffc17 ldw r4,-16(fp)
801bb4c: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 100 Base-T4 set to %d\n", mac_group_index, mac_info_index, 0);
801bb50: e0bfff07 ldb r2,-4(fp)
801bb54: e0ffff47 ldb r3,-3(fp)
801bb58: 000f883a mov r7,zero
801bb5c: 180d883a mov r6,r3
801bb60: 100b883a mov r5,r2
801bb64: 01020174 movhi r4,2053
801bb68: 21242c04 addi r4,r4,-28496
801bb6c: 8002c780 call 8002c78 <printf>
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_TX_FULL, 1, 0);
801bb70: d8000015 stw zero,0(sp)
801bb74: 01c00044 movi r7,1
801bb78: 01800204 movi r6,8
801bb7c: 01400104 movi r5,4
801bb80: e13ffc17 ldw r4,-16(fp)
801bb84: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 100 Base-TX Full Duplex set to %d\n", mac_group_index, mac_info_index, 0);
801bb88: e0bfff07 ldb r2,-4(fp)
801bb8c: e0ffff47 ldb r3,-3(fp)
801bb90: 000f883a mov r7,zero
801bb94: 180d883a mov r6,r3
801bb98: 100b883a mov r5,r2
801bb9c: 01020174 movhi r4,2053
801bba0: 21243c04 addi r4,r4,-28432
801bba4: 8002c780 call 8002c78 <printf>
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_TX_HALF, 1, 0);
801bba8: d8000015 stw zero,0(sp)
801bbac: 01c00044 movi r7,1
801bbb0: 018001c4 movi r6,7
801bbb4: 01400104 movi r5,4
801bbb8: e13ffc17 ldw r4,-16(fp)
801bbbc: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 100 Base-TX Half Duplex set to %d\n", mac_group_index, mac_info_index, 0);
801bbc0: e0bfff07 ldb r2,-4(fp)
801bbc4: e0ffff47 ldb r3,-3(fp)
801bbc8: 000f883a mov r7,zero
801bbcc: 180d883a mov r6,r3
801bbd0: 100b883a mov r5,r2
801bbd4: 01020174 movhi r4,2053
801bbd8: 21244f04 addi r4,r4,-28356
801bbdc: 8002c780 call 8002c78 <printf>
}
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801bbe0: e0bfff83 ldbu r2,-2(fp)
801bbe4: 100b883a mov r5,r2
801bbe8: e13ffc17 ldw r4,-16(fp)
801bbec: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return SUCCESS;
801bbf0: 0005883a mov r2,zero
}
801bbf4: e037883a mov sp,fp
801bbf8: dfc00117 ldw ra,4(sp)
801bbfc: df000017 ldw fp,0(sp)
801bc00: dec00204 addi sp,sp,8
801bc04: f800283a ret
0801bc08 <alt_tse_phy_set_adv_10>:
* @param pmac Pointer to the alt_tse_phy_info structure
* enable set Enable = 1 to advertise this speed if the PHY capable
* set Enable = 0 to disable advertise of this speed
* @return return SUCCESS
*/
alt_32 alt_tse_phy_set_adv_10(alt_tse_phy_info *pphy, alt_u8 enable) {
801bc08: defff504 addi sp,sp,-44
801bc0c: dfc00a15 stw ra,40(sp)
801bc10: df000915 stw fp,36(sp)
801bc14: df000904 addi fp,sp,36
801bc18: e13ff915 stw r4,-28(fp)
801bc1c: 2805883a mov r2,r5
801bc20: e0bff805 stb r2,-32(fp)
alt_u8 cap;
/* pointer to MAC associated and MAC group */
alt_tse_mac_info *pmac_info = pphy->pmac_info;
801bc24: e0bff917 ldw r2,-28(fp)
801bc28: 10800617 ldw r2,24(r2)
801bc2c: e0bfff15 stw r2,-4(fp)
alt_tse_mac_group *pmac_group = pmac_info->pmac_group;
801bc30: e0bfff17 ldw r2,-4(fp)
801bc34: 10800317 ldw r2,12(r2)
801bc38: e0bffe15 stw r2,-8(fp)
/* get index of the pointers in pointer array list */
int mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801bc3c: e13fff17 ldw r4,-4(fp)
801bc40: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801bc44: e0bffd15 stw r2,-12(fp)
int mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801bc48: e13ffe17 ldw r4,-8(fp)
801bc4c: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801bc50: e0bffc15 stw r2,-16(fp)
/* Record previous MDIO address, to be restored at the end of function */
int mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy);
801bc54: e13ff917 ldw r4,-28(fp)
801bc58: 80198cc0 call 80198cc <alt_tse_phy_rd_mdio_addr>
801bc5c: e0bffb15 stw r2,-20(fp)
/* write PHY address to MDIO to access the i-th PHY */
alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address);
801bc60: e0bff917 ldw r2,-28(fp)
801bc64: 10800003 ldbu r2,0(r2)
801bc68: 10803fcc andi r2,r2,255
801bc6c: 100b883a mov r5,r2
801bc70: e13ff917 ldw r4,-28(fp)
801bc74: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
/* if enable = 1, set advertisement based on PHY capability */
if(enable) {
801bc78: e0bff803 ldbu r2,-32(fp)
801bc7c: 10002926 beq r2,zero,801bd24 <alt_tse_phy_set_adv_10+0x11c>
cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_10BASE_T_FULL, 1);
801bc80: 01c00044 movi r7,1
801bc84: 01800304 movi r6,12
801bc88: 01400044 movi r5,1
801bc8c: e13ff917 ldw r4,-28(fp)
801bc90: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801bc94: e0bffac5 stb r2,-21(fp)
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_10BASE_TX_FULL, 1, cap);
801bc98: e0bffac3 ldbu r2,-21(fp)
801bc9c: d8800015 stw r2,0(sp)
801bca0: 01c00044 movi r7,1
801bca4: 01800184 movi r6,6
801bca8: 01400104 movi r5,4
801bcac: e13ff917 ldw r4,-28(fp)
801bcb0: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 10 Base-TX Full Duplex set to %d\n", mac_group_index, mac_info_index, cap);
801bcb4: e0bffac3 ldbu r2,-21(fp)
801bcb8: 100f883a mov r7,r2
801bcbc: e1bffd17 ldw r6,-12(fp)
801bcc0: e17ffc17 ldw r5,-16(fp)
801bcc4: 01020174 movhi r4,2053
801bcc8: 21246204 addi r4,r4,-28280
801bccc: 8002c780 call 8002c78 <printf>
cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_10BASE_T_HALF, 1);
801bcd0: 01c00044 movi r7,1
801bcd4: 018002c4 movi r6,11
801bcd8: 01400044 movi r5,1
801bcdc: e13ff917 ldw r4,-28(fp)
801bce0: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801bce4: e0bffac5 stb r2,-21(fp)
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_10BASE_TX_HALF, 1, cap);
801bce8: e0bffac3 ldbu r2,-21(fp)
801bcec: d8800015 stw r2,0(sp)
801bcf0: 01c00044 movi r7,1
801bcf4: 01800144 movi r6,5
801bcf8: 01400104 movi r5,4
801bcfc: e13ff917 ldw r4,-28(fp)
801bd00: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 10 Base-TX Half Duplex set to %d\n", mac_group_index, mac_info_index, cap);
801bd04: e0bffac3 ldbu r2,-21(fp)
801bd08: 100f883a mov r7,r2
801bd0c: e1bffd17 ldw r6,-12(fp)
801bd10: e17ffc17 ldw r5,-16(fp)
801bd14: 01020174 movhi r4,2053
801bd18: 21247504 addi r4,r4,-28204
801bd1c: 8002c780 call 8002c78 <printf>
801bd20: 00001806 br 801bd84 <alt_tse_phy_set_adv_10+0x17c>
}
/* else disable advertisement of this speed */
else {
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_10BASE_TX_FULL, 1, 0);
801bd24: d8000015 stw zero,0(sp)
801bd28: 01c00044 movi r7,1
801bd2c: 01800184 movi r6,6
801bd30: 01400104 movi r5,4
801bd34: e13ff917 ldw r4,-28(fp)
801bd38: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 10 Base-TX Full Duplex set to %d\n", mac_group_index, mac_info_index, 0);
801bd3c: 000f883a mov r7,zero
801bd40: e1bffd17 ldw r6,-12(fp)
801bd44: e17ffc17 ldw r5,-16(fp)
801bd48: 01020174 movhi r4,2053
801bd4c: 21246204 addi r4,r4,-28280
801bd50: 8002c780 call 8002c78 <printf>
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_10BASE_TX_HALF, 1, 0);
801bd54: d8000015 stw zero,0(sp)
801bd58: 01c00044 movi r7,1
801bd5c: 01800144 movi r6,5
801bd60: 01400104 movi r5,4
801bd64: e13ff917 ldw r4,-28(fp)
801bd68: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 10 Base-TX Half Duplex set to %d\n", mac_group_index, mac_info_index, 0);
801bd6c: 000f883a mov r7,zero
801bd70: e1bffd17 ldw r6,-12(fp)
801bd74: e17ffc17 ldw r5,-16(fp)
801bd78: 01020174 movhi r4,2053
801bd7c: 21247504 addi r4,r4,-28204
801bd80: 8002c780 call 8002c78 <printf>
}
/* Restore previous MDIO address */
alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev);
801bd84: e0bffb17 ldw r2,-20(fp)
801bd88: 10803fcc andi r2,r2,255
801bd8c: 100b883a mov r5,r2
801bd90: e13ff917 ldw r4,-28(fp)
801bd94: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
return SUCCESS;
801bd98: 0005883a mov r2,zero
}
801bd9c: e037883a mov sp,fp
801bda0: dfc00117 ldw ra,4(sp)
801bda4: df000017 ldw fp,0(sp)
801bda8: dec00204 addi sp,sp,8
801bdac: f800283a ret
0801bdb0 <alt_tse_phy_get_common_speed>:
/* @Function Description: Get the common speed supported by all PHYs connected to the MAC within the same group
* @API Type: Internal
* @param pmac_group Pointer to the TSE MAC Group structure which group all the MACs that should use the same speed
* @return common speed supported by all PHYs connected to the MAC, return TSE_PHY_SPEED_NO_COMMON if no common speed found
*/
alt_32 alt_tse_phy_get_common_speed(alt_tse_mac_group *pmac_group) {
801bdb0: defff504 addi sp,sp,-44
801bdb4: dfc00a15 stw ra,40(sp)
801bdb8: df000915 stw fp,36(sp)
801bdbc: df000904 addi fp,sp,36
801bdc0: e13ff715 stw r4,-36(fp)
alt_32 i;
alt_u8 common_1000 = 1;
801bdc4: 00800044 movi r2,1
801bdc8: e0bfffc5 stb r2,-1(fp)
alt_u8 common_100 = 1;
801bdcc: 00800044 movi r2,1
801bdd0: e0bffdc5 stb r2,-9(fp)
alt_u8 common_10 = 1;
801bdd4: 00800044 movi r2,1
801bdd8: e0bffd85 stb r2,-10(fp)
alt_32 common_speed;
alt_u8 none_an_complete = 1;
801bddc: 00800044 movi r2,1
801bde0: e0bffbc5 stb r2,-17(fp)
alt_tse_mac_info *pmac_info = 0;
801bde4: e03ffa15 stw zero,-24(fp)
alt_tse_phy_info *pphy = 0;
801bde8: e03ff915 stw zero,-28(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801bdec: e13ff717 ldw r4,-36(fp)
801bdf0: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801bdf4: e0bff8c5 stb r2,-29(fp)
/* reset Auto-Negotiation advertisement */
for(i = 0; i < pmac_group->channel; i++) {
801bdf8: e03ffe15 stw zero,-8(fp)
801bdfc: 00001a06 br 801be68 <alt_tse_phy_get_common_speed+0xb8>
pmac_info = pmac_group->pmac_info[i];
801be00: e0fff717 ldw r3,-36(fp)
801be04: e0bffe17 ldw r2,-8(fp)
801be08: 10800044 addi r2,r2,1
801be0c: 100490ba slli r2,r2,2
801be10: 1885883a add r2,r3,r2
801be14: 10800017 ldw r2,0(r2)
801be18: e0bffa15 stw r2,-24(fp)
pphy = pmac_info->pphy_info;
801be1c: e0bffa17 ldw r2,-24(fp)
801be20: 10800117 ldw r2,4(r2)
801be24: e0bff915 stw r2,-28(fp)
/* run only if PHY connected */
if(pphy) {
801be28: e0bff917 ldw r2,-28(fp)
801be2c: 10000926 beq r2,zero,801be54 <alt_tse_phy_get_common_speed+0xa4>
alt_tse_phy_set_adv_1000(pphy, 1);
801be30: 01400044 movi r5,1
801be34: e13ff917 ldw r4,-28(fp)
801be38: 801b7f00 call 801b7f0 <alt_tse_phy_set_adv_1000>
alt_tse_phy_set_adv_100(pphy, 1);
801be3c: 01400044 movi r5,1
801be40: e13ff917 ldw r4,-28(fp)
801be44: 801b9b40 call 801b9b4 <alt_tse_phy_set_adv_100>
alt_tse_phy_set_adv_10(pphy, 1);
801be48: 01400044 movi r5,1
801be4c: e13ff917 ldw r4,-28(fp)
801be50: 801bc080 call 801bc08 <alt_tse_phy_set_adv_10>
}
tse_dprintf(6, "\n");
801be54: 01000284 movi r4,10
801be58: 8002cb80 call 8002cb8 <putchar>
for(i = 0; i < pmac_group->channel; i++) {
801be5c: e0bffe17 ldw r2,-8(fp)
801be60: 10800044 addi r2,r2,1
801be64: e0bffe15 stw r2,-8(fp)
801be68: e0bff717 ldw r2,-36(fp)
801be6c: 10800003 ldbu r2,0(r2)
801be70: 10803fcc andi r2,r2,255
801be74: e0fffe17 ldw r3,-8(fp)
801be78: 18bfe116 blt r3,r2,801be00 <alt_tse_phy_get_common_speed+0x50>
}
/* loop through every PHY connected */
for(i = 0; i < pmac_group->channel; i++) {
801be7c: e03ffe15 stw zero,-8(fp)
801be80: 00005506 br 801bfd8 <alt_tse_phy_get_common_speed+0x228>
pmac_info = pmac_group->pmac_info[i];
801be84: e0fff717 ldw r3,-36(fp)
801be88: e0bffe17 ldw r2,-8(fp)
801be8c: 10800044 addi r2,r2,1
801be90: 100490ba slli r2,r2,2
801be94: 1885883a add r2,r3,r2
801be98: 10800017 ldw r2,0(r2)
801be9c: e0bffa15 stw r2,-24(fp)
pphy = pmac_info->pphy_info;
801bea0: e0bffa17 ldw r2,-24(fp)
801bea4: 10800117 ldw r2,4(r2)
801bea8: e0bff915 stw r2,-28(fp)
/* if no PHY connected */
if(!pphy) {
801beac: e0bff917 ldw r2,-28(fp)
801beb0: 10004326 beq r2,zero,801bfc0 <alt_tse_phy_get_common_speed+0x210>
continue;
}
/* get PHY capability */
/* skip for PHY with Auto-Negotiation not completed */
if(alt_tse_phy_get_cap(pphy) != TSE_PHY_AN_COMPLETE) {
801beb4: e13ff917 ldw r4,-28(fp)
801beb8: 801b2640 call 801b264 <alt_tse_phy_get_cap>
801bebc: 1000421e bne r2,zero,801bfc8 <alt_tse_phy_get_common_speed+0x218>
continue;
}
none_an_complete = 0;
801bec0: e03ffbc5 stb zero,-17(fp)
/* Small MAC */
if(pmac_info->mac_type == ALTERA_TSE_MACLITE_10_100) {
801bec4: e0bffa17 ldw r2,-24(fp)
801bec8: 10800003 ldbu r2,0(r2)
801becc: 10803fcc andi r2,r2,255
801bed0: 10800058 cmpnei r2,r2,1
801bed4: 1000021e bne r2,zero,801bee0 <alt_tse_phy_get_common_speed+0x130>
common_1000 = 0;
801bed8: e03fffc5 stb zero,-1(fp)
801bedc: 00000706 br 801befc <alt_tse_phy_get_common_speed+0x14c>
}
else if(pmac_info->mac_type == ALTERA_TSE_MACLITE_1000) {
801bee0: e0bffa17 ldw r2,-24(fp)
801bee4: 10800003 ldbu r2,0(r2)
801bee8: 10803fcc andi r2,r2,255
801beec: 10800098 cmpnei r2,r2,2
801bef0: 1000021e bne r2,zero,801befc <alt_tse_phy_get_common_speed+0x14c>
common_100 = 0;
801bef4: e03ffdc5 stb zero,-9(fp)
common_10 = 0;
801bef8: e03ffd85 stb zero,-10(fp)
}
/* get common capabilities for all PHYs and link partners */
common_1000 &= ((pphy->link_capability.cap_1000_base_t_full & pphy->link_capability.lp_1000_base_t_full));
801befc: e0bff917 ldw r2,-28(fp)
801bf00: 10c000c3 ldbu r3,3(r2)
801bf04: e0bff917 ldw r2,-28(fp)
801bf08: 10800303 ldbu r2,12(r2)
801bf0c: 1884703a and r2,r3,r2
801bf10: 1007883a mov r3,r2
801bf14: e0bfffc3 ldbu r2,-1(fp)
801bf18: 10c4703a and r2,r2,r3
801bf1c: e0bfffc5 stb r2,-1(fp)
//(pphy->link_capability.cap_1000_base_t_half & pphy->link_capability.lp_1000_base_t_half));
common_100 &= ((pphy->link_capability.cap_100_base_x_full & pphy->link_capability.lp_100_base_tx_full) |
801bf20: e0bff917 ldw r2,-28(fp)
801bf24: 10c00183 ldbu r3,6(r2)
801bf28: e0bff917 ldw r2,-28(fp)
801bf2c: 108003c3 ldbu r2,15(r2)
801bf30: 1884703a and r2,r3,r2
801bf34: 1009883a mov r4,r2
(pphy->link_capability.cap_100_base_x_half & pphy->link_capability.lp_100_base_tx_half) |
801bf38: e0bff917 ldw r2,-28(fp)
801bf3c: 10c001c3 ldbu r3,7(r2)
801bf40: e0bff917 ldw r2,-28(fp)
801bf44: 10800403 ldbu r2,16(r2)
common_100 &= ((pphy->link_capability.cap_100_base_x_full & pphy->link_capability.lp_100_base_tx_full) |
801bf48: 1884703a and r2,r3,r2
801bf4c: 2084b03a or r2,r4,r2
801bf50: 1009883a mov r4,r2
(pphy->link_capability.cap_100_base_t4 & pphy->link_capability.lp_100_base_t4));
801bf54: e0bff917 ldw r2,-28(fp)
801bf58: 10c00143 ldbu r3,5(r2)
801bf5c: e0bff917 ldw r2,-28(fp)
801bf60: 10800383 ldbu r2,14(r2)
common_100 &= ((pphy->link_capability.cap_100_base_x_full & pphy->link_capability.lp_100_base_tx_full) |
801bf64: 1884703a and r2,r3,r2
801bf68: 2084b03a or r2,r4,r2
801bf6c: 1007883a mov r3,r2
801bf70: e0bffdc3 ldbu r2,-9(fp)
801bf74: 10c4703a and r2,r2,r3
801bf78: e0bffdc5 stb r2,-9(fp)
common_10 &= ((pphy->link_capability.cap_10_base_t_full & pphy->link_capability.lp_10_base_tx_full) |
801bf7c: e0bff917 ldw r2,-28(fp)
801bf80: 10c00283 ldbu r3,10(r2)
801bf84: e0bff917 ldw r2,-28(fp)
801bf88: 10800443 ldbu r2,17(r2)
801bf8c: 1884703a and r2,r3,r2
801bf90: 1009883a mov r4,r2
(pphy->link_capability.cap_10_base_t_half & pphy->link_capability.lp_10_base_tx_half));
801bf94: e0bff917 ldw r2,-28(fp)
801bf98: 10c002c3 ldbu r3,11(r2)
801bf9c: e0bff917 ldw r2,-28(fp)
801bfa0: 10800483 ldbu r2,18(r2)
common_10 &= ((pphy->link_capability.cap_10_base_t_full & pphy->link_capability.lp_10_base_tx_full) |
801bfa4: 1884703a and r2,r3,r2
801bfa8: 2084b03a or r2,r4,r2
801bfac: 1007883a mov r3,r2
801bfb0: e0bffd83 ldbu r2,-10(fp)
801bfb4: 10c4703a and r2,r2,r3
801bfb8: e0bffd85 stb r2,-10(fp)
801bfbc: 00000306 br 801bfcc <alt_tse_phy_get_common_speed+0x21c>
continue;
801bfc0: 0001883a nop
801bfc4: 00000106 br 801bfcc <alt_tse_phy_get_common_speed+0x21c>
continue;
801bfc8: 0001883a nop
for(i = 0; i < pmac_group->channel; i++) {
801bfcc: e0bffe17 ldw r2,-8(fp)
801bfd0: 10800044 addi r2,r2,1
801bfd4: e0bffe15 stw r2,-8(fp)
801bfd8: e0bff717 ldw r2,-36(fp)
801bfdc: 10800003 ldbu r2,0(r2)
801bfe0: 10803fcc andi r2,r2,255
801bfe4: e0fffe17 ldw r3,-8(fp)
801bfe8: 18bfa616 blt r3,r2,801be84 <alt_tse_phy_get_common_speed+0xd4>
}
/* get common speed based on capabilities */
if(none_an_complete == 1) {
801bfec: e0bffbc3 ldbu r2,-17(fp)
801bff0: 10800058 cmpnei r2,r2,1
801bff4: 1000081e bne r2,zero,801c018 <alt_tse_phy_get_common_speed+0x268>
common_speed = TSE_PHY_SPEED_NO_COMMON;
801bff8: 00bfffc4 movi r2,-1
801bffc: e0bffc15 stw r2,-16(fp)
tse_dprintf(2, "ERROR : MAC Group[%d] - None of the PHYs Auto-Negotiation completed!\n", mac_group_index);
801c000: e0bff8c7 ldb r2,-29(fp)
801c004: 100b883a mov r5,r2
801c008: 01020174 movhi r4,2053
801c00c: 21248804 addi r4,r4,-28128
801c010: 8002c780 call 8002c78 <printf>
801c014: 00002706 br 801c0b4 <alt_tse_phy_get_common_speed+0x304>
}
else if(common_1000) {
801c018: e0bfffc3 ldbu r2,-1(fp)
801c01c: 10000926 beq r2,zero,801c044 <alt_tse_phy_get_common_speed+0x294>
common_speed = TSE_PHY_SPEED_1000;
801c020: 00800084 movi r2,2
801c024: e0bffc15 stw r2,-16(fp)
tse_dprintf(5, "INFO : MAC Group[%d] - Common Speed : %d Mbps\n", mac_group_index, 1000);
801c028: e0bff8c7 ldb r2,-29(fp)
801c02c: 0180fa04 movi r6,1000
801c030: 100b883a mov r5,r2
801c034: 01020174 movhi r4,2053
801c038: 21249a04 addi r4,r4,-28056
801c03c: 8002c780 call 8002c78 <printf>
801c040: 00001c06 br 801c0b4 <alt_tse_phy_get_common_speed+0x304>
}
else if(common_100) {
801c044: e0bffdc3 ldbu r2,-9(fp)
801c048: 10000926 beq r2,zero,801c070 <alt_tse_phy_get_common_speed+0x2c0>
common_speed = TSE_PHY_SPEED_100;
801c04c: 00800044 movi r2,1
801c050: e0bffc15 stw r2,-16(fp)
tse_dprintf(5, "INFO : MAC Group[%d] - Common Speed : %d Mbps\n", mac_group_index, 100);
801c054: e0bff8c7 ldb r2,-29(fp)
801c058: 01801904 movi r6,100
801c05c: 100b883a mov r5,r2
801c060: 01020174 movhi r4,2053
801c064: 21249a04 addi r4,r4,-28056
801c068: 8002c780 call 8002c78 <printf>
801c06c: 00001106 br 801c0b4 <alt_tse_phy_get_common_speed+0x304>
}
else if(common_10) {
801c070: e0bffd83 ldbu r2,-10(fp)
801c074: 10000826 beq r2,zero,801c098 <alt_tse_phy_get_common_speed+0x2e8>
common_speed = TSE_PHY_SPEED_10;
801c078: e03ffc15 stw zero,-16(fp)
tse_dprintf(5, "INFO : MAC Group[%d] - Common Speed : %d Mbps\n", mac_group_index, 10);
801c07c: e0bff8c7 ldb r2,-29(fp)
801c080: 01800284 movi r6,10
801c084: 100b883a mov r5,r2
801c088: 01020174 movhi r4,2053
801c08c: 21249a04 addi r4,r4,-28056
801c090: 8002c780 call 8002c78 <printf>
801c094: 00000706 br 801c0b4 <alt_tse_phy_get_common_speed+0x304>
}
else {
common_speed = TSE_PHY_SPEED_NO_COMMON;
801c098: 00bfffc4 movi r2,-1
801c09c: e0bffc15 stw r2,-16(fp)
tse_dprintf(2, "ERROR : MAC Group[%d] - No common speed at all!\n", mac_group_index); }
801c0a0: e0bff8c7 ldb r2,-29(fp)
801c0a4: 100b883a mov r5,r2
801c0a8: 01020174 movhi r4,2053
801c0ac: 2124a704 addi r4,r4,-28004
801c0b0: 8002c780 call 8002c78 <printf>
return common_speed;
801c0b4: e0bffc17 ldw r2,-16(fp)
}
801c0b8: e037883a mov sp,fp
801c0bc: dfc00117 ldw ra,4(sp)
801c0c0: df000017 ldw fp,0(sp)
801c0c4: dec00204 addi sp,sp,8
801c0c8: f800283a ret
0801c0cc <alt_tse_phy_set_common_speed>:
* @API Type: Internal
* @param pmac_group Pointer to the TSE MAC Group structure which group all the MACs that should use the same speed
* common_speed common speed supported by all PHYs
* @return common speed supported by all PHYs connected to the MAC, return TSE_PHY_SPEED_NO_COMMON if invalid common speed specified
*/
alt_32 alt_tse_phy_set_common_speed(alt_tse_mac_group *pmac_group, alt_32 common_speed) {
801c0cc: defff004 addi sp,sp,-64
801c0d0: dfc00f15 stw ra,60(sp)
801c0d4: df000e15 stw fp,56(sp)
801c0d8: dc400d15 stw r17,52(sp)
801c0dc: dc000c15 stw r16,48(sp)
801c0e0: df000e04 addi fp,sp,56
801c0e4: e13ff415 stw r4,-48(fp)
801c0e8: e17ff315 stw r5,-52(fp)
alt_u8 speed;
alt_u8 duplex;
alt_u8 gb_capable;
alt_tse_phy_info *pphy = 0;
801c0ec: e03ffb15 stw zero,-20(fp)
alt_tse_mac_info *pmac_info = 0;
801c0f0: e03ffa15 stw zero,-24(fp)
alt_tse_system_info *psys = 0;
801c0f4: e03ff915 stw zero,-28(fp)
/* get index of the pointers in pointer array list */
alt_8 mac_info_index = 0;
801c0f8: e03ff8c5 stb zero,-29(fp)
alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group);
801c0fc: e13ff417 ldw r4,-48(fp)
801c100: 8018b340 call 8018b34 <alt_tse_get_mac_group_index>
801c104: e0bff885 stb r2,-30(fp)
/* Record previous MDIO address, to be restored at the end of function */
np_tse_mac *pmac_group_base = (np_tse_mac *)pmac_group->pmac_info[0]->psys_info->tse_mac_base;
801c108: e0bff417 ldw r2,-48(fp)
801c10c: 10800117 ldw r2,4(r2)
801c110: 10800217 ldw r2,8(r2)
801c114: 10800017 ldw r2,0(r2)
801c118: e0bff715 stw r2,-36(fp)
alt_32 mdioadd_prev = IORD(&pmac_group_base->MDIO_ADDR1, 0);
801c11c: e0bff717 ldw r2,-36(fp)
801c120: 10801004 addi r2,r2,64
801c124: 10800037 ldwio r2,0(r2)
801c128: e0bff615 stw r2,-40(fp)
if((common_speed < TSE_PHY_SPEED_10) || (common_speed > TSE_PHY_SPEED_1000)) {
801c12c: e0bff317 ldw r2,-52(fp)
801c130: 10000316 blt r2,zero,801c140 <alt_tse_phy_set_common_speed+0x74>
801c134: e0bff317 ldw r2,-52(fp)
801c138: 108000d0 cmplti r2,r2,3
801c13c: 10000c1e bne r2,zero,801c170 <alt_tse_phy_set_common_speed+0xa4>
tse_dprintf(2, "ERROR : MAC Group[%d] - Invalid common speed specified! common speed = %d\n", mac_group_index, (int)common_speed);
801c140: e0bff887 ldb r2,-30(fp)
801c144: e1bff317 ldw r6,-52(fp)
801c148: 100b883a mov r5,r2
801c14c: 01020174 movhi r4,2053
801c150: 2124b404 addi r4,r4,-27952
801c154: 8002c780 call 8002c78 <printf>
/* Restore previous MDIO address */
IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdioadd_prev);
801c158: e0bff717 ldw r2,-36(fp)
801c15c: 10801004 addi r2,r2,64
801c160: e0fff617 ldw r3,-40(fp)
801c164: 10c00035 stwio r3,0(r2)
return TSE_PHY_SPEED_NO_COMMON;
801c168: 00bfffc4 movi r2,-1
801c16c: 0000fc06 br 801c560 <alt_tse_phy_set_common_speed+0x494>
}
/* loop through every PHY connected */
for(i = 0; i < pmac_group->channel; i++) {
801c170: e03ffc15 stw zero,-16(fp)
801c174: 0000da06 br 801c4e0 <alt_tse_phy_set_common_speed+0x414>
pmac_info = pmac_group->pmac_info[i];
801c178: e0fff417 ldw r3,-48(fp)
801c17c: e0bffc17 ldw r2,-16(fp)
801c180: 10800044 addi r2,r2,1
801c184: 100490ba slli r2,r2,2
801c188: 1885883a add r2,r3,r2
801c18c: 10800017 ldw r2,0(r2)
801c190: e0bffa15 stw r2,-24(fp)
mac_info_index = alt_tse_get_mac_info_index(pmac_info);
801c194: e13ffa17 ldw r4,-24(fp)
801c198: 8018ba00 call 8018ba0 <alt_tse_get_mac_info_index>
801c19c: e0bff8c5 stb r2,-29(fp)
pphy = pmac_info->pphy_info;
801c1a0: e0bffa17 ldw r2,-24(fp)
801c1a4: 10800117 ldw r2,4(r2)
801c1a8: e0bffb15 stw r2,-20(fp)
/* if no PHY connected */
if(!pphy) {
801c1ac: e0bffb17 ldw r2,-20(fp)
801c1b0: 1000c726 beq r2,zero,801c4d0 <alt_tse_phy_set_common_speed+0x404>
continue;
}
psys = pmac_info->psys_info;
801c1b4: e0bffa17 ldw r2,-24(fp)
801c1b8: 10800217 ldw r2,8(r2)
801c1bc: e0bff915 stw r2,-28(fp)
/* write PHY address to MDIO to access the i-th PHY */
alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address);
801c1c0: e0bffb17 ldw r2,-20(fp)
801c1c4: 10800003 ldbu r2,0(r2)
801c1c8: 10803fcc andi r2,r2,255
801c1cc: 100b883a mov r5,r2
801c1d0: e13ffb17 ldw r4,-20(fp)
801c1d4: 80199140 call 8019914 <alt_tse_phy_wr_mdio_addr>
/* capability of PHY supports 1000 Mbps */
gb_capable = pphy->link_capability.cap_1000_base_t_full || pphy->link_capability.cap_1000_base_t_half ||
801c1d8: e0bffb17 ldw r2,-20(fp)
801c1dc: 108000c3 ldbu r2,3(r2)
pphy->link_capability.cap_1000_base_x_full || pphy->link_capability.cap_1000_base_x_half;
801c1e0: 10803fcc andi r2,r2,255
801c1e4: 10000c1e bne r2,zero,801c218 <alt_tse_phy_set_common_speed+0x14c>
gb_capable = pphy->link_capability.cap_1000_base_t_full || pphy->link_capability.cap_1000_base_t_half ||
801c1e8: e0bffb17 ldw r2,-20(fp)
801c1ec: 10800103 ldbu r2,4(r2)
801c1f0: 10803fcc andi r2,r2,255
801c1f4: 1000081e bne r2,zero,801c218 <alt_tse_phy_set_common_speed+0x14c>
pphy->link_capability.cap_1000_base_x_full || pphy->link_capability.cap_1000_base_x_half;
801c1f8: e0bffb17 ldw r2,-20(fp)
801c1fc: 10800043 ldbu r2,1(r2)
gb_capable = pphy->link_capability.cap_1000_base_t_full || pphy->link_capability.cap_1000_base_t_half ||
801c200: 10803fcc andi r2,r2,255
801c204: 1000041e bne r2,zero,801c218 <alt_tse_phy_set_common_speed+0x14c>
pphy->link_capability.cap_1000_base_x_full || pphy->link_capability.cap_1000_base_x_half;
801c208: e0bffb17 ldw r2,-20(fp)
801c20c: 10800083 ldbu r2,2(r2)
801c210: 10803fcc andi r2,r2,255
801c214: 10000226 beq r2,zero,801c220 <alt_tse_phy_set_common_speed+0x154>
801c218: 00800044 movi r2,1
801c21c: 00000106 br 801c224 <alt_tse_phy_set_common_speed+0x158>
801c220: 0005883a mov r2,zero
gb_capable = pphy->link_capability.cap_1000_base_t_full || pphy->link_capability.cap_1000_base_t_half ||
801c224: e0bff5c5 stb r2,-41(fp)
/* if PHY does not supports 1000 Mbps, and common speed is 1000 Mbps */
if((!gb_capable) && (common_speed == TSE_PHY_SPEED_1000)) {
801c228: e0bff5c3 ldbu r2,-41(fp)
801c22c: 1000101e bne r2,zero,801c270 <alt_tse_phy_set_common_speed+0x1a4>
801c230: e0bff317 ldw r2,-52(fp)
801c234: 10800098 cmpnei r2,r2,2
801c238: 10000d1e bne r2,zero,801c270 <alt_tse_phy_set_common_speed+0x1a4>
tse_dprintf(2, "ERROR : PHY[%d.%d] - PHY does not support 1000 Mbps, please specify valid common speed\n", mac_group_index, mac_info_index);
801c23c: e0bff887 ldb r2,-30(fp)
801c240: e0fff8c7 ldb r3,-29(fp)
801c244: 180d883a mov r6,r3
801c248: 100b883a mov r5,r2
801c24c: 01020174 movhi r4,2053
801c250: 2124c804 addi r4,r4,-27872
801c254: 8002c780 call 8002c78 <printf>
/* Restore previous MDIO address */
IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdioadd_prev);
801c258: e0bff717 ldw r2,-36(fp)
801c25c: 10801004 addi r2,r2,64
801c260: e0fff617 ldw r3,-40(fp)
801c264: 10c00035 stwio r3,0(r2)
return TSE_PHY_SPEED_NO_COMMON;
801c268: 00bfffc4 movi r2,-1
801c26c: 0000bc06 br 801c560 <alt_tse_phy_set_common_speed+0x494>
}
/* if PHY is not Auto-Negotiation capable */
if(!alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_ABILITY, 1)) {
801c270: 01c00044 movi r7,1
801c274: 018000c4 movi r6,3
801c278: 01400044 movi r5,1
801c27c: e13ffb17 ldw r4,-20(fp)
801c280: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801c284: 1000141e bne r2,zero,801c2d8 <alt_tse_phy_set_common_speed+0x20c>
/* if PHY supports 1000 Mbps, write msb of speed */
if(gb_capable) {
801c288: e0bff5c3 ldbu r2,-41(fp)
801c28c: 10000926 beq r2,zero,801c2b4 <alt_tse_phy_set_common_speed+0x1e8>
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_SPEED_MSB, 1, common_speed >> 1);
801c290: e0bff317 ldw r2,-52(fp)
801c294: 1005d07a srai r2,r2,1
801c298: 10bfffcc andi r2,r2,65535
801c29c: d8800015 stw r2,0(sp)
801c2a0: 01c00044 movi r7,1
801c2a4: 01800184 movi r6,6
801c2a8: 000b883a mov r5,zero
801c2ac: e13ffb17 ldw r4,-20(fp)
801c2b0: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
}
/* write lsb of speed */
alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_SPEED_LSB, 1, common_speed);
801c2b4: e0bff317 ldw r2,-52(fp)
801c2b8: 10bfffcc andi r2,r2,65535
801c2bc: d8800015 stw r2,0(sp)
801c2c0: 01c00044 movi r7,1
801c2c4: 01800344 movi r6,13
801c2c8: 000b883a mov r5,zero
801c2cc: e13ffb17 ldw r4,-20(fp)
801c2d0: 801996c0 call 801996c <alt_tse_phy_wr_mdio_reg>
/* continue to next PHY */
continue;
801c2d4: 00007f06 br 801c4d4 <alt_tse_phy_set_common_speed+0x408>
}
/* set Auto-Negotiation advertisement based on common speed */
if(common_speed == TSE_PHY_SPEED_1000) {
801c2d8: e0bff317 ldw r2,-52(fp)
801c2dc: 10800098 cmpnei r2,r2,2
801c2e0: 10000a1e bne r2,zero,801c30c <alt_tse_phy_set_common_speed+0x240>
alt_tse_phy_set_adv_1000(pphy, 1);
801c2e4: 01400044 movi r5,1
801c2e8: e13ffb17 ldw r4,-20(fp)
801c2ec: 801b7f00 call 801b7f0 <alt_tse_phy_set_adv_1000>
alt_tse_phy_set_adv_100(pphy, 1);
801c2f0: 01400044 movi r5,1
801c2f4: e13ffb17 ldw r4,-20(fp)
801c2f8: 801b9b40 call 801b9b4 <alt_tse_phy_set_adv_100>
alt_tse_phy_set_adv_10(pphy, 1);
801c2fc: 01400044 movi r5,1
801c300: e13ffb17 ldw r4,-20(fp)
801c304: 801bc080 call 801bc08 <alt_tse_phy_set_adv_10>
801c308: 00002206 br 801c394 <alt_tse_phy_set_common_speed+0x2c8>
}
else if(common_speed == TSE_PHY_SPEED_100) {
801c30c: e0bff317 ldw r2,-52(fp)
801c310: 10800058 cmpnei r2,r2,1
801c314: 10000a1e bne r2,zero,801c340 <alt_tse_phy_set_common_speed+0x274>
alt_tse_phy_set_adv_1000(pphy, 0);
801c318: 000b883a mov r5,zero
801c31c: e13ffb17 ldw r4,-20(fp)
801c320: 801b7f00 call 801b7f0 <alt_tse_phy_set_adv_1000>
alt_tse_phy_set_adv_100(pphy, 1);
801c324: 01400044 movi r5,1
801c328: e13ffb17 ldw r4,-20(fp)
801c32c: 801b9b40 call 801b9b4 <alt_tse_phy_set_adv_100>
alt_tse_phy_set_adv_10(pphy, 1);
801c330: 01400044 movi r5,1
801c334: e13ffb17 ldw r4,-20(fp)
801c338: 801bc080 call 801bc08 <alt_tse_phy_set_adv_10>
801c33c: 00001506 br 801c394 <alt_tse_phy_set_common_speed+0x2c8>
}
else if(common_speed == TSE_PHY_SPEED_10) {
801c340: e0bff317 ldw r2,-52(fp)
801c344: 10000a1e bne r2,zero,801c370 <alt_tse_phy_set_common_speed+0x2a4>
alt_tse_phy_set_adv_1000(pphy, 0);
801c348: 000b883a mov r5,zero
801c34c: e13ffb17 ldw r4,-20(fp)
801c350: 801b7f00 call 801b7f0 <alt_tse_phy_set_adv_1000>
alt_tse_phy_set_adv_100(pphy, 0);
801c354: 000b883a mov r5,zero
801c358: e13ffb17 ldw r4,-20(fp)
801c35c: 801b9b40 call 801b9b4 <alt_tse_phy_set_adv_100>
alt_tse_phy_set_adv_10(pphy, 1);
801c360: 01400044 movi r5,1
801c364: e13ffb17 ldw r4,-20(fp)
801c368: 801bc080 call 801bc08 <alt_tse_phy_set_adv_10>
801c36c: 00000906 br 801c394 <alt_tse_phy_set_common_speed+0x2c8>
}
else {
alt_tse_phy_set_adv_1000(pphy, 0);
801c370: 000b883a mov r5,zero
801c374: e13ffb17 ldw r4,-20(fp)
801c378: 801b7f00 call 801b7f0 <alt_tse_phy_set_adv_1000>
alt_tse_phy_set_adv_100(pphy, 0);
801c37c: 000b883a mov r5,zero
801c380: e13ffb17 ldw r4,-20(fp)
801c384: 801b9b40 call 801b9b4 <alt_tse_phy_set_adv_100>
alt_tse_phy_set_adv_10(pphy, 0);
801c388: 000b883a mov r5,zero
801c38c: e13ffb17 ldw r4,-20(fp)
801c390: 801bc080 call 801bc08 <alt_tse_phy_set_adv_10>
}
/* if PHY Auto-Negotiation is completed */
if(alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1) == 1) {
801c394: 01c00044 movi r7,1
801c398: 01800144 movi r6,5
801c39c: 01400044 movi r5,1
801c3a0: e13ffb17 ldw r4,-20(fp)
801c3a4: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801c3a8: 10800058 cmpnei r2,r2,1
801c3ac: 10003a1e bne r2,zero,801c498 <alt_tse_phy_set_common_speed+0x3cc>
/* read both msb and lsb of speed bits if PHY support 1000 Mbps */
if(gb_capable) {
801c3b0: e0bff5c3 ldbu r2,-41(fp)
801c3b4: 10000f26 beq r2,zero,801c3f4 <alt_tse_phy_set_common_speed+0x328>
/* get speed information after Auto-Negotiation */
speed = alt_tse_phy_rd_mdio_reg(pphy, pphy->pphy_profile->status_reg_location, pphy->pphy_profile->speed_lsb_location, 2);
801c3b8: e0bffb17 ldw r2,-20(fp)
801c3bc: 10800517 ldw r2,20(r2)
801c3c0: 10801583 ldbu r2,86(r2)
801c3c4: 10c03fcc andi r3,r2,255
801c3c8: e0bffb17 ldw r2,-20(fp)
801c3cc: 10800517 ldw r2,20(r2)
801c3d0: 108015c3 ldbu r2,87(r2)
801c3d4: 10803fcc andi r2,r2,255
801c3d8: 01c00084 movi r7,2
801c3dc: 100d883a mov r6,r2
801c3e0: 180b883a mov r5,r3
801c3e4: e13ffb17 ldw r4,-20(fp)
801c3e8: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801c3ec: e0bffdc5 stb r2,-9(fp)
801c3f0: 00000e06 br 801c42c <alt_tse_phy_set_common_speed+0x360>
}
/* read lsb of speed only if PHY support only 10/100 Mbps */
else {
/* get speed and link information after Auto-Negotiation */
speed = alt_tse_phy_rd_mdio_reg(pphy, pphy->pphy_profile->status_reg_location, pphy->pphy_profile->speed_lsb_location, 1);
801c3f4: e0bffb17 ldw r2,-20(fp)
801c3f8: 10800517 ldw r2,20(r2)
801c3fc: 10801583 ldbu r2,86(r2)
801c400: 10c03fcc andi r3,r2,255
801c404: e0bffb17 ldw r2,-20(fp)
801c408: 10800517 ldw r2,20(r2)
801c40c: 108015c3 ldbu r2,87(r2)
801c410: 10803fcc andi r2,r2,255
801c414: 01c00044 movi r7,1
801c418: 100d883a mov r6,r2
801c41c: 180b883a mov r5,r3
801c420: e13ffb17 ldw r4,-20(fp)
801c424: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801c428: e0bffdc5 stb r2,-9(fp)
}
/* if current speed != common speed, then restart Auto-Negotiation */
if(speed != common_speed) {
801c42c: e0bffdc3 ldbu r2,-9(fp)
801c430: e0fff317 ldw r3,-52(fp)
801c434: 18800326 beq r3,r2,801c444 <alt_tse_phy_set_common_speed+0x378>
alt_tse_phy_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD);
801c438: 01427104 movi r5,2500
801c43c: e13ffb17 ldw r4,-20(fp)
801c440: 801af180 call 801af18 <alt_tse_phy_restart_an>
}
/* get speed information after Auto-Negotiation */
duplex = alt_tse_phy_rd_mdio_reg(pphy, pphy->pphy_profile->status_reg_location, pphy->pphy_profile->duplex_bit_location, 1);
801c444: e0bffb17 ldw r2,-20(fp)
801c448: 10800517 ldw r2,20(r2)
801c44c: 10801583 ldbu r2,86(r2)
801c450: 10c03fcc andi r3,r2,255
801c454: e0bffb17 ldw r2,-20(fp)
801c458: 10800517 ldw r2,20(r2)
801c45c: 10801603 ldbu r2,88(r2)
801c460: 10803fcc andi r2,r2,255
801c464: 01c00044 movi r7,1
801c468: 100d883a mov r6,r2
801c46c: 180b883a mov r5,r3
801c470: e13ffb17 ldw r4,-20(fp)
801c474: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801c478: e0bff585 stb r2,-42(fp)
/* Set MAC duplex register */
alt_tse_mac_set_duplex((np_tse_mac *)psys->tse_mac_base, duplex);
801c47c: e0bff917 ldw r2,-28(fp)
801c480: 10800017 ldw r2,0(r2)
801c484: 1007883a mov r3,r2
801c488: e0bff583 ldbu r2,-42(fp)
801c48c: 100b883a mov r5,r2
801c490: 1809883a mov r4,r3
801c494: 8018dc80 call 8018dc8 <alt_tse_mac_set_duplex>
}
tse_dprintf(5, "INFO : PHY[%d.%d] - PHY STATUS = 0x%04x\n\n", mac_group_index, mac_info_index, (int) alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, 0, 16));
801c498: e43ff887 ldb r16,-30(fp)
801c49c: e47ff8c7 ldb r17,-29(fp)
801c4a0: 01c00404 movi r7,16
801c4a4: 000d883a mov r6,zero
801c4a8: 01400044 movi r5,1
801c4ac: e13ffb17 ldw r4,-20(fp)
801c4b0: 8019a980 call 8019a98 <alt_tse_phy_rd_mdio_reg>
801c4b4: 100f883a mov r7,r2
801c4b8: 880d883a mov r6,r17
801c4bc: 800b883a mov r5,r16
801c4c0: 01020174 movhi r4,2053
801c4c4: 2124df04 addi r4,r4,-27780
801c4c8: 8002c780 call 8002c78 <printf>
801c4cc: 00000106 br 801c4d4 <alt_tse_phy_set_common_speed+0x408>
continue;
801c4d0: 0001883a nop
for(i = 0; i < pmac_group->channel; i++) {
801c4d4: e0bffc17 ldw r2,-16(fp)
801c4d8: 10800044 addi r2,r2,1
801c4dc: e0bffc15 stw r2,-16(fp)
801c4e0: e0bff417 ldw r2,-48(fp)
801c4e4: 10800003 ldbu r2,0(r2)
801c4e8: 10803fcc andi r2,r2,255
801c4ec: e0fffc17 ldw r3,-16(fp)
801c4f0: 18bf2116 blt r3,r2,801c178 <alt_tse_phy_set_common_speed+0xac>
}
tse_dprintf(5, "INFO : MAC Group[%d] - All PHYs set to common speed : %d Mbps\n", mac_group_index, (common_speed == TSE_PHY_SPEED_1000) ? 1000 : ((common_speed == TSE_PHY_SPEED_100) ? 100 : 10));
801c4f4: e0fff887 ldb r3,-30(fp)
801c4f8: e0bff317 ldw r2,-52(fp)
801c4fc: 108000a0 cmpeqi r2,r2,2
801c500: 1000071e bne r2,zero,801c520 <alt_tse_phy_set_common_speed+0x454>
801c504: e0bff317 ldw r2,-52(fp)
801c508: 10800058 cmpnei r2,r2,1
801c50c: 1000021e bne r2,zero,801c518 <alt_tse_phy_set_common_speed+0x44c>
801c510: 00801904 movi r2,100
801c514: 00000306 br 801c524 <alt_tse_phy_set_common_speed+0x458>
801c518: 00800284 movi r2,10
801c51c: 00000106 br 801c524 <alt_tse_phy_set_common_speed+0x458>
801c520: 0080fa04 movi r2,1000
801c524: 100d883a mov r6,r2
801c528: 180b883a mov r5,r3
801c52c: 01020174 movhi r4,2053
801c530: 2124eb04 addi r4,r4,-27732
801c534: 8002c780 call 8002c78 <printf>
/* Set MAC speed register */
alt_tse_mac_set_speed(pmac_group_base, common_speed);
801c538: e0bff317 ldw r2,-52(fp)
801c53c: 10803fcc andi r2,r2,255
801c540: 100b883a mov r5,r2
801c544: e13ff717 ldw r4,-36(fp)
801c548: 8018ce80 call 8018ce8 <alt_tse_mac_set_speed>
/* Restore previous MDIO address */
IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdioadd_prev);
801c54c: e0bff717 ldw r2,-36(fp)
801c550: 10801004 addi r2,r2,64
801c554: e0fff617 ldw r3,-40(fp)
801c558: 10c00035 stwio r3,0(r2)
return common_speed;
801c55c: e0bff317 ldw r2,-52(fp)
}
801c560: e6fffe04 addi sp,fp,-8
801c564: dfc00317 ldw ra,12(sp)
801c568: df000217 ldw fp,8(sp)
801c56c: dc400117 ldw r17,4(sp)
801c570: dc000017 ldw r16,0(sp)
801c574: dec00404 addi sp,sp,16
801c578: f800283a ret
0801c57c <marvell_phy_cfg>:
/* @Function Description: Additional configuration for Marvell PHY
* @API Type: Internal
* @param pmac Pointer to the first TSE MAC Control Interface Base address of MAC group
*/
alt_32 marvell_phy_cfg(np_tse_mac *pmac) {
801c57c: defffc04 addi sp,sp,-16
801c580: dfc00315 stw ra,12(sp)
801c584: df000215 stw fp,8(sp)
801c588: df000204 addi fp,sp,8
801c58c: e13ffe15 stw r4,-8(fp)
alt_u16 dat;
/* If there is no link yet, we enable auto crossover and reset the PHY */
if((IORD(&pmac->mdio1.STATUS, 0) & PCS_ST_an_done) == 0) {
801c590: e0bffe17 ldw r2,-8(fp)
801c594: 1080a104 addi r2,r2,644
801c598: 10800037 ldwio r2,0(r2)
801c59c: 1080080c andi r2,r2,32
801c5a0: 1000161e bne r2,zero,801c5fc <marvell_phy_cfg+0x80>
tse_dprintf(5, "MARVELL : Enabling auto crossover\n");
801c5a4: 01020174 movhi r4,2053
801c5a8: 2124fc04 addi r4,r4,-27664
801c5ac: 8002d9c0 call 8002d9c <puts>
IOWR(&pmac->mdio1.CONTROL, 16, 0x0078);
801c5b0: e0bffe17 ldw r2,-8(fp)
801c5b4: 1080a004 addi r2,r2,640
801c5b8: 10801004 addi r2,r2,64
801c5bc: 00c01e04 movi r3,120
801c5c0: 10c00035 stwio r3,0(r2)
tse_dprintf(5, "MARVELL : PHY reset\n");
801c5c4: 01020174 movhi r4,2053
801c5c8: 21250504 addi r4,r4,-27628
801c5cc: 8002d9c0 call 8002d9c <puts>
dat = IORD(&pmac->mdio1.CONTROL, 0);
801c5d0: e0bffe17 ldw r2,-8(fp)
801c5d4: 1080a004 addi r2,r2,640
801c5d8: 10800037 ldwio r2,0(r2)
801c5dc: e0bfff8d sth r2,-2(fp)
IOWR(&pmac->mdio1.CONTROL, 0, dat | PCS_CTL_sw_reset);
801c5e0: e0bffe17 ldw r2,-8(fp)
801c5e4: 1080a004 addi r2,r2,640
801c5e8: e13fff8b ldhu r4,-2(fp)
801c5ec: 00e00004 movi r3,-32768
801c5f0: 20c6b03a or r3,r4,r3
801c5f4: 18ffffcc andi r3,r3,65535
801c5f8: 10c00035 stwio r3,0(r2)
}
return 0;
801c5fc: 0005883a mov r2,zero
}
801c600: e037883a mov sp,fp
801c604: dfc00117 ldw ra,4(sp)
801c608: df000017 ldw fp,0(sp)
801c60c: dec00204 addi sp,sp,8
801c610: f800283a ret
0801c614 <marvell_cfg_gmii>:
/* @Function Description: Change operating mode of Marvell PHY to GMII
* @API Type: Internal
* @param pmac Pointer to the first TSE MAC Control Interface Base address within MAC group
*/
alt_32 marvell_cfg_gmii(np_tse_mac *pmac) {
801c614: defffc04 addi sp,sp,-16
801c618: dfc00315 stw ra,12(sp)
801c61c: df000215 stw fp,8(sp)
801c620: df000204 addi fp,sp,8
801c624: e13ffe15 stw r4,-8(fp)
alt_u16 dat = IORD(&pmac->mdio1.reg1b, 0);
801c628: e0bffe17 ldw r2,-8(fp)
801c62c: 1080bb04 addi r2,r2,748
801c630: 10800037 ldwio r2,0(r2)
801c634: e0bfff8d sth r2,-2(fp)
dat &= 0xfff0;
801c638: e0ffff8b ldhu r3,-2(fp)
801c63c: 00bffc04 movi r2,-16
801c640: 1884703a and r2,r3,r2
801c644: e0bfff8d sth r2,-2(fp)
tse_dprintf(5, "MARVELL : Mode changed to GMII to copper mode\n");
801c648: 01020174 movhi r4,2053
801c64c: 21250a04 addi r4,r4,-27608
801c650: 8002d9c0 call 8002d9c <puts>
IOWR(&pmac->mdio1.reg1b, 0, dat | 0xf);
801c654: e0bffe17 ldw r2,-8(fp)
801c658: 1080bb04 addi r2,r2,748
801c65c: e0ffff8b ldhu r3,-2(fp)
801c660: 18c003d4 ori r3,r3,15
801c664: 18ffffcc andi r3,r3,65535
801c668: 10c00035 stwio r3,0(r2)
tse_dprintf(5, "MARVELL : Disable RGMII Timing Control\n");
801c66c: 01020174 movhi r4,2053
801c670: 21251604 addi r4,r4,-27560
801c674: 8002d9c0 call 8002d9c <puts>
dat = IORD(&pmac->mdio1.reg14, 0);
801c678: e0bffe17 ldw r2,-8(fp)
801c67c: 1080b404 addi r2,r2,720
801c680: 10800037 ldwio r2,0(r2)
801c684: e0bfff8d sth r2,-2(fp)
dat &= ~0x82;
801c688: e0ffff8b ldhu r3,-2(fp)
801c68c: 00bfdf44 movi r2,-131
801c690: 1884703a and r2,r3,r2
801c694: e0bfff8d sth r2,-2(fp)
IOWR(&pmac->mdio1.reg14, 0, dat);
801c698: e0bffe17 ldw r2,-8(fp)
801c69c: 1080b404 addi r2,r2,720
801c6a0: e0ffff8b ldhu r3,-2(fp)
801c6a4: 10c00035 stwio r3,0(r2)
tse_dprintf(5, "MARVELL : PHY reset\n");
801c6a8: 01020174 movhi r4,2053
801c6ac: 21250504 addi r4,r4,-27628
801c6b0: 8002d9c0 call 8002d9c <puts>
dat = IORD(&pmac->mdio1.CONTROL, 0);
801c6b4: e0bffe17 ldw r2,-8(fp)
801c6b8: 1080a004 addi r2,r2,640
801c6bc: 10800037 ldwio r2,0(r2)
801c6c0: e0bfff8d sth r2,-2(fp)
IOWR(&pmac->mdio1.CONTROL, 0, dat | PCS_CTL_sw_reset);
801c6c4: e0bffe17 ldw r2,-8(fp)
801c6c8: 1080a004 addi r2,r2,640
801c6cc: e13fff8b ldhu r4,-2(fp)
801c6d0: 00e00004 movi r3,-32768
801c6d4: 20c6b03a or r3,r4,r3
801c6d8: 18ffffcc andi r3,r3,65535
801c6dc: 10c00035 stwio r3,0(r2)
return 1;
801c6e0: 00800044 movi r2,1
}
801c6e4: e037883a mov sp,fp
801c6e8: dfc00117 ldw ra,4(sp)
801c6ec: df000017 ldw fp,0(sp)
801c6f0: dec00204 addi sp,sp,8
801c6f4: f800283a ret
0801c6f8 <marvell_cfg_sgmii>:
/* @Function Description: Change operating mode of Marvell PHY to SGMII
* @API Type: Internal
* @param pmac Pointer to the first TSE MAC Control Interface Base address within MAC group
*/
alt_32 marvell_cfg_sgmii(np_tse_mac *pmac) {
801c6f8: defffc04 addi sp,sp,-16
801c6fc: dfc00315 stw ra,12(sp)
801c700: df000215 stw fp,8(sp)
801c704: df000204 addi fp,sp,8
801c708: e13ffe15 stw r4,-8(fp)
alt_u16 dat = IORD(&pmac->mdio1.reg1b, 0);
801c70c: e0bffe17 ldw r2,-8(fp)
801c710: 1080bb04 addi r2,r2,748
801c714: 10800037 ldwio r2,0(r2)
801c718: e0bfff8d sth r2,-2(fp)
dat &= 0xfff0;
801c71c: e0ffff8b ldhu r3,-2(fp)
801c720: 00bffc04 movi r2,-16
801c724: 1884703a and r2,r3,r2
801c728: e0bfff8d sth r2,-2(fp)
tse_dprintf(5, "MARVELL : Mode changed to SGMII without clock with SGMII Auto-Neg to copper mode\n");
801c72c: 01020174 movhi r4,2053
801c730: 21252004 addi r4,r4,-27520
801c734: 8002d9c0 call 8002d9c <puts>
IOWR(&pmac->mdio1.reg1b, 0, dat | 0x4);
801c738: e0bffe17 ldw r2,-8(fp)
801c73c: 1080bb04 addi r2,r2,748
801c740: e0ffff8b ldhu r3,-2(fp)
801c744: 18c00114 ori r3,r3,4
801c748: 18ffffcc andi r3,r3,65535
801c74c: 10c00035 stwio r3,0(r2)
tse_dprintf(5, "MARVELL : Disable RGMII Timing Control\n");
801c750: 01020174 movhi r4,2053
801c754: 21251604 addi r4,r4,-27560
801c758: 8002d9c0 call 8002d9c <puts>
dat = IORD(&pmac->mdio1.reg14, 0);
801c75c: e0bffe17 ldw r2,-8(fp)
801c760: 1080b404 addi r2,r2,720
801c764: 10800037 ldwio r2,0(r2)
801c768: e0bfff8d sth r2,-2(fp)
dat &= ~0x82;
801c76c: e0ffff8b ldhu r3,-2(fp)
801c770: 00bfdf44 movi r2,-131
801c774: 1884703a and r2,r3,r2
801c778: e0bfff8d sth r2,-2(fp)
IOWR(&pmac->mdio1.reg14, 0, dat);
801c77c: e0bffe17 ldw r2,-8(fp)
801c780: 1080b404 addi r2,r2,720
801c784: e0ffff8b ldhu r3,-2(fp)
801c788: 10c00035 stwio r3,0(r2)
tse_dprintf(5, "MARVELL : PHY reset\n");
801c78c: 01020174 movhi r4,2053
801c790: 21250504 addi r4,r4,-27628
801c794: 8002d9c0 call 8002d9c <puts>
dat = IORD(&pmac->mdio1.CONTROL, 0);
801c798: e0bffe17 ldw r2,-8(fp)
801c79c: 1080a004 addi r2,r2,640
801c7a0: 10800037 ldwio r2,0(r2)
801c7a4: e0bfff8d sth r2,-2(fp)
IOWR(&pmac->mdio1.CONTROL, 0, dat | PCS_CTL_sw_reset);
801c7a8: e0bffe17 ldw r2,-8(fp)
801c7ac: 1080a004 addi r2,r2,640
801c7b0: e13fff8b ldhu r4,-2(fp)
801c7b4: 00e00004 movi r3,-32768
801c7b8: 20c6b03a or r3,r4,r3
801c7bc: 18ffffcc andi r3,r3,65535
801c7c0: 10c00035 stwio r3,0(r2)
return 1;
801c7c4: 00800044 movi r2,1
}
801c7c8: e037883a mov sp,fp
801c7cc: dfc00117 ldw ra,4(sp)
801c7d0: df000017 ldw fp,0(sp)
801c7d4: dec00204 addi sp,sp,8
801c7d8: f800283a ret
0801c7dc <marvell_cfg_rgmii>:
/* @Function Description: Change operating mode of Marvell PHY to RGMII
* @API Type: Internal
* @param pmac Pointer to the first TSE MAC Control Interface Base address within MAC group
*/
alt_32 marvell_cfg_rgmii(np_tse_mac *pmac) {
801c7dc: defffc04 addi sp,sp,-16
801c7e0: dfc00315 stw ra,12(sp)
801c7e4: df000215 stw fp,8(sp)
801c7e8: df000204 addi fp,sp,8
801c7ec: e13ffe15 stw r4,-8(fp)
alt_u16 dat = IORD(&pmac->mdio1.reg1b, 0);
801c7f0: e0bffe17 ldw r2,-8(fp)
801c7f4: 1080bb04 addi r2,r2,748
801c7f8: 10800037 ldwio r2,0(r2)
801c7fc: e0bfff8d sth r2,-2(fp)
dat &= 0xfff0;
801c800: e0ffff8b ldhu r3,-2(fp)
801c804: 00bffc04 movi r2,-16
801c808: 1884703a and r2,r3,r2
801c80c: e0bfff8d sth r2,-2(fp)
tse_dprintf(5, "MARVELL : Mode changed to RGMII/Modified MII to Copper mode\n");
801c810: 01020174 movhi r4,2053
801c814: 21253504 addi r4,r4,-27436
801c818: 8002d9c0 call 8002d9c <puts>
IOWR(&pmac->mdio1.reg1b, 0, dat | 0xb);
801c81c: e0bffe17 ldw r2,-8(fp)
801c820: 1080bb04 addi r2,r2,748
801c824: e0ffff8b ldhu r3,-2(fp)
801c828: 18c002d4 ori r3,r3,11
801c82c: 18ffffcc andi r3,r3,65535
801c830: 10c00035 stwio r3,0(r2)
tse_dprintf(5, "MARVELL : Enable RGMII Timing Control\n");
801c834: 01020174 movhi r4,2053
801c838: 21254404 addi r4,r4,-27376
801c83c: 8002d9c0 call 8002d9c <puts>
dat = IORD(&pmac->mdio1.reg14, 0);
801c840: e0bffe17 ldw r2,-8(fp)
801c844: 1080b404 addi r2,r2,720
801c848: 10800037 ldwio r2,0(r2)
801c84c: e0bfff8d sth r2,-2(fp)
dat &= ~0x82;
801c850: e0ffff8b ldhu r3,-2(fp)
801c854: 00bfdf44 movi r2,-131
801c858: 1884703a and r2,r3,r2
801c85c: e0bfff8d sth r2,-2(fp)
dat |= 0x82;
801c860: e0bfff8b ldhu r2,-2(fp)
801c864: 10802094 ori r2,r2,130
801c868: e0bfff8d sth r2,-2(fp)
IOWR(&pmac->mdio1.reg14, 0, dat);
801c86c: e0bffe17 ldw r2,-8(fp)
801c870: 1080b404 addi r2,r2,720
801c874: e0ffff8b ldhu r3,-2(fp)
801c878: 10c00035 stwio r3,0(r2)
tse_dprintf(5, "MARVELL : PHY reset\n");
801c87c: 01020174 movhi r4,2053
801c880: 21250504 addi r4,r4,-27628
801c884: 8002d9c0 call 8002d9c <puts>
dat = IORD(&pmac->mdio1.CONTROL, 0);
801c888: e0bffe17 ldw r2,-8(fp)
801c88c: 1080a004 addi r2,r2,640
801c890: 10800037 ldwio r2,0(r2)
801c894: e0bfff8d sth r2,-2(fp)
IOWR(&pmac->mdio1.CONTROL, 0, dat | PCS_CTL_sw_reset);
801c898: e0bffe17 ldw r2,-8(fp)
801c89c: 1080a004 addi r2,r2,640
801c8a0: e13fff8b ldhu r4,-2(fp)
801c8a4: 00e00004 movi r3,-32768
801c8a8: 20c6b03a or r3,r4,r3
801c8ac: 18ffffcc andi r3,r3,65535
801c8b0: 10c00035 stwio r3,0(r2)
return 1;
801c8b4: 00800044 movi r2,1
}
801c8b8: e037883a mov sp,fp
801c8bc: dfc00117 ldw ra,4(sp)
801c8c0: df000017 ldw fp,0(sp)
801c8c4: dec00204 addi sp,sp,8
801c8c8: f800283a ret
0801c8cc <DP83848C_link_status_read>:
/* @Function Description: Read link status from PHY specific status register of DP83848C
* @API Type: Internal
* @param pmac Pointer to the first TSE MAC Control Interface Base address within MAC group
*/
alt_u32 DP83848C_link_status_read(np_tse_mac *pmac) {
801c8cc: defffc04 addi sp,sp,-16
801c8d0: df000315 stw fp,12(sp)
801c8d4: df000304 addi fp,sp,12
801c8d8: e13ffd15 stw r4,-12(fp)
alt_u32 link_status = 0;
801c8dc: e03fff15 stw zero,-4(fp)
alt_u32 reg_status = IORD(&pmac->mdio1.reg10, 0);
801c8e0: e0bffd17 ldw r2,-12(fp)
801c8e4: 1080b004 addi r2,r2,704
801c8e8: 10800037 ldwio r2,0(r2)
801c8ec: e0bffe15 stw r2,-8(fp)
/* If speed == 10 Mbps */
if(reg_status & 0x2) {
801c8f0: e0bffe17 ldw r2,-8(fp)
801c8f4: 1080008c andi r2,r2,2
801c8f8: 10000426 beq r2,zero,801c90c <DP83848C_link_status_read+0x40>
link_status |= 0x8;
801c8fc: e0bfff17 ldw r2,-4(fp)
801c900: 10800214 ori r2,r2,8
801c904: e0bfff15 stw r2,-4(fp)
801c908: 00000306 br 801c918 <DP83848C_link_status_read+0x4c>
}
/* Else speed = 100 Mbps */
else {
link_status |= 0x4;
801c90c: e0bfff17 ldw r2,-4(fp)
801c910: 10800114 ori r2,r2,4
801c914: e0bfff15 stw r2,-4(fp)
}
/* If duplex == Full */
if(reg_status & 0x4) {
801c918: e0bffe17 ldw r2,-8(fp)
801c91c: 1080010c andi r2,r2,4
801c920: 10000326 beq r2,zero,801c930 <DP83848C_link_status_read+0x64>
link_status |= 0x1;
801c924: e0bfff17 ldw r2,-4(fp)
801c928: 10800054 ori r2,r2,1
801c92c: e0bfff15 stw r2,-4(fp)
}
return link_status;
801c930: e0bfff17 ldw r2,-4(fp)
}
801c934: e037883a mov sp,fp
801c938: df000017 ldw fp,0(sp)
801c93c: dec00104 addi sp,sp,4
801c940: f800283a ret
0801c944 <PEF7071_config>:
/* @Function Description: Additional configuration for PEF7071 Phy
* @API Type: Internal
* @param pmac Pointer to the first TSE MAC Control Interface Base address within MAC group
*/
alt_32 PEF7071_config(np_tse_mac *pmac)
{
801c944: defffd04 addi sp,sp,-12
801c948: df000215 stw fp,8(sp)
801c94c: df000204 addi fp,sp,8
801c950: e13ffe15 stw r4,-8(fp)
alt_u16 dat;
dat = IORD(&pmac->mdio1.reg14, 0);
801c954: e0bffe17 ldw r2,-8(fp)
801c958: 1080b404 addi r2,r2,720
801c95c: 10800037 ldwio r2,0(r2)
801c960: e0bfff8d sth r2,-2(fp)
dat &= 0x3FFF;
801c964: e0bfff8b ldhu r2,-2(fp)
801c968: 108fffcc andi r2,r2,16383
801c96c: e0bfff8d sth r2,-2(fp)
dat |= 0x0100;
801c970: e0bfff8b ldhu r2,-2(fp)
801c974: 10804014 ori r2,r2,256
801c978: e0bfff8d sth r2,-2(fp)
IOWR(&pmac->mdio1.reg14, 0, dat);
801c97c: e0bffe17 ldw r2,-8(fp)
801c980: 1080b404 addi r2,r2,720
801c984: e0ffff8b ldhu r3,-2(fp)
801c988: 10c00035 stwio r3,0(r2)
return 0;
801c98c: 0005883a mov r2,zero
}
801c990: e037883a mov sp,fp
801c994: df000017 ldw fp,0(sp)
801c998: dec00104 addi sp,sp,4
801c99c: f800283a ret
0801c9a0 <PEF7071_link_status_read>:
/* @Function Description: Read link status from PHY specific status register of PEF7071
* @API Type: Internal
* @param pmac Pointer to the first TSE MAC Control Interface Base address within MAC group
*/
alt_u32 PEF7071_link_status_read(np_tse_mac *pmac)
{
801c9a0: defffc04 addi sp,sp,-16
801c9a4: df000315 stw fp,12(sp)
801c9a8: df000304 addi fp,sp,12
801c9ac: e13ffd15 stw r4,-12(fp)
alt_u32 link_status = 0;
801c9b0: e03fff15 stw zero,-4(fp)
alt_u32 reg18 = IORD(&pmac->mdio1.reg18, 0);
801c9b4: e0bffd17 ldw r2,-12(fp)
801c9b8: 1080b804 addi r2,r2,736
801c9bc: 10800037 ldwio r2,0(r2)
801c9c0: e0bffe15 stw r2,-8(fp)
if ((reg18 & 0x3)==0) { link_status |= 0x8; } /* If speed == 10 Mbps */
801c9c4: e0bffe17 ldw r2,-8(fp)
801c9c8: 108000cc andi r2,r2,3
801c9cc: 1000031e bne r2,zero,801c9dc <PEF7071_link_status_read+0x3c>
801c9d0: e0bfff17 ldw r2,-4(fp)
801c9d4: 10800214 ori r2,r2,8
801c9d8: e0bfff15 stw r2,-4(fp)
if ((reg18 & 0x3)==1) { link_status |= 0x4; } /* Else speed = 100 Mbps */
801c9dc: e0bffe17 ldw r2,-8(fp)
801c9e0: 108000cc andi r2,r2,3
801c9e4: 10800058 cmpnei r2,r2,1
801c9e8: 1000031e bne r2,zero,801c9f8 <PEF7071_link_status_read+0x58>
801c9ec: e0bfff17 ldw r2,-4(fp)
801c9f0: 10800114 ori r2,r2,4
801c9f4: e0bfff15 stw r2,-4(fp)
if ((reg18 & 0x3)==2) { link_status |= 0x2; } /* Else speed = 1000 Mbps */
801c9f8: e0bffe17 ldw r2,-8(fp)
801c9fc: 108000cc andi r2,r2,3
801ca00: 10800098 cmpnei r2,r2,2
801ca04: 1000031e bne r2,zero,801ca14 <PEF7071_link_status_read+0x74>
801ca08: e0bfff17 ldw r2,-4(fp)
801ca0c: 10800094 ori r2,r2,2
801ca10: e0bfff15 stw r2,-4(fp)
/* If duplex == Full */
if(reg18 & 0x8) {
801ca14: e0bffe17 ldw r2,-8(fp)
801ca18: 1080020c andi r2,r2,8
801ca1c: 10000326 beq r2,zero,801ca2c <PEF7071_link_status_read+0x8c>
link_status |= 0x1;
801ca20: e0bfff17 ldw r2,-4(fp)
801ca24: 10800054 ori r2,r2,1
801ca28: e0bfff15 stw r2,-4(fp)
}
return link_status;
801ca2c: e0bfff17 ldw r2,-4(fp)
}
801ca30: e037883a mov sp,fp
801ca34: df000017 ldw fp,0(sp)
801ca38: dec00104 addi sp,sp,4
801ca3c: f800283a ret
0801ca40 <altera_avalon_uart_read_fd>:
*
*/
int
altera_avalon_uart_read_fd(alt_fd* fd, char* buffer, int space)
{
801ca40: defffa04 addi sp,sp,-24
801ca44: dfc00515 stw ra,20(sp)
801ca48: df000415 stw fp,16(sp)
801ca4c: df000404 addi fp,sp,16
801ca50: e13ffe15 stw r4,-8(fp)
801ca54: e17ffd15 stw r5,-12(fp)
801ca58: e1bffc15 stw r6,-16(fp)
altera_avalon_uart_dev* dev = (altera_avalon_uart_dev*) fd->dev;
801ca5c: e0bffe17 ldw r2,-8(fp)
801ca60: 10800017 ldw r2,0(r2)
801ca64: e0bfff15 stw r2,-4(fp)
return altera_avalon_uart_read(&dev->state, buffer, space,
801ca68: e0bfff17 ldw r2,-4(fp)
801ca6c: 10c00a04 addi r3,r2,40
801ca70: e0bffe17 ldw r2,-8(fp)
801ca74: 10800217 ldw r2,8(r2)
801ca78: 100f883a mov r7,r2
801ca7c: e1bffc17 ldw r6,-16(fp)
801ca80: e17ffd17 ldw r5,-12(fp)
801ca84: 1809883a mov r4,r3
801ca88: 801d0b00 call 801d0b0 <altera_avalon_uart_read>
fd->fd_flags);
}
801ca8c: e037883a mov sp,fp
801ca90: dfc00117 ldw ra,4(sp)
801ca94: df000017 ldw fp,0(sp)
801ca98: dec00204 addi sp,sp,8
801ca9c: f800283a ret
0801caa0 <altera_avalon_uart_write_fd>:
int
altera_avalon_uart_write_fd(alt_fd* fd, const char* buffer, int space)
{
801caa0: defffa04 addi sp,sp,-24
801caa4: dfc00515 stw ra,20(sp)
801caa8: df000415 stw fp,16(sp)
801caac: df000404 addi fp,sp,16
801cab0: e13ffe15 stw r4,-8(fp)
801cab4: e17ffd15 stw r5,-12(fp)
801cab8: e1bffc15 stw r6,-16(fp)
altera_avalon_uart_dev* dev = (altera_avalon_uart_dev*) fd->dev;
801cabc: e0bffe17 ldw r2,-8(fp)
801cac0: 10800017 ldw r2,0(r2)
801cac4: e0bfff15 stw r2,-4(fp)
return altera_avalon_uart_write(&dev->state, buffer, space,
801cac8: e0bfff17 ldw r2,-4(fp)
801cacc: 10c00a04 addi r3,r2,40
801cad0: e0bffe17 ldw r2,-8(fp)
801cad4: 10800217 ldw r2,8(r2)
801cad8: 100f883a mov r7,r2
801cadc: e1bffc17 ldw r6,-16(fp)
801cae0: e17ffd17 ldw r5,-12(fp)
801cae4: 1809883a mov r4,r3
801cae8: 801d3540 call 801d354 <altera_avalon_uart_write>
fd->fd_flags);
}
801caec: e037883a mov sp,fp
801caf0: dfc00117 ldw ra,4(sp)
801caf4: df000017 ldw fp,0(sp)
801caf8: dec00204 addi sp,sp,8
801cafc: f800283a ret
0801cb00 <altera_avalon_uart_close_fd>:
#endif /* ALTERA_AVALON_UART_USE_IOCTL */
int
altera_avalon_uart_close_fd(alt_fd* fd)
{
801cb00: defffc04 addi sp,sp,-16
801cb04: dfc00315 stw ra,12(sp)
801cb08: df000215 stw fp,8(sp)
801cb0c: df000204 addi fp,sp,8
801cb10: e13ffe15 stw r4,-8(fp)
altera_avalon_uart_dev* dev = (altera_avalon_uart_dev*) fd->dev;
801cb14: e0bffe17 ldw r2,-8(fp)
801cb18: 10800017 ldw r2,0(r2)
801cb1c: e0bfff15 stw r2,-4(fp)
return altera_avalon_uart_close(&dev->state, fd->fd_flags);
801cb20: e0bfff17 ldw r2,-4(fp)
801cb24: 10c00a04 addi r3,r2,40
801cb28: e0bffe17 ldw r2,-8(fp)
801cb2c: 10800217 ldw r2,8(r2)
801cb30: 100b883a mov r5,r2
801cb34: 1809883a mov r4,r3
801cb38: 801d0200 call 801d020 <altera_avalon_uart_close>
}
801cb3c: e037883a mov sp,fp
801cb40: dfc00117 ldw ra,4(sp)
801cb44: df000017 ldw fp,0(sp)
801cb48: dec00204 addi sp,sp,8
801cb4c: f800283a ret
0801cb50 <altera_avalon_uart_init>:
alt_u32 status);
void
altera_avalon_uart_init(altera_avalon_uart_state* sp,
alt_u32 irq_controller_id, alt_u32 irq)
{
801cb50: defff204 addi sp,sp,-56
801cb54: dfc00d15 stw ra,52(sp)
801cb58: df000c15 stw fp,48(sp)
801cb5c: df000c04 addi fp,sp,48
801cb60: e13ff715 stw r4,-36(fp)
801cb64: e17ff615 stw r5,-40(fp)
801cb68: e1bff515 stw r6,-44(fp)
void* base = sp->base;
801cb6c: e0bff717 ldw r2,-36(fp)
801cb70: 10800017 ldw r2,0(r2)
801cb74: e0bfff15 stw r2,-4(fp)
/*
* Initialise the read and write flags and the semaphores used to
* protect access to the circular buffers when running in a multi-threaded
* environment.
*/
error = ALT_FLAG_CREATE (&sp->events, 0) ||
801cb78: e0bff717 ldw r2,-36(fp)
801cb7c: 10800704 addi r2,r2,28
801cb80: e0bffd15 stw r2,-12(fp)
801cb84: e03ffc8d sth zero,-14(fp)
static ALT_INLINE int ALT_ALWAYS_INLINE alt_flag_create (OS_FLAG_GRP** pgroup,
OS_FLAGS flags)
{
INT8U err;
*pgroup = OSFlagCreate (flags, &err);
801cb88: e0bffc8b ldhu r2,-14(fp)
801cb8c: e0fff844 addi r3,fp,-31
801cb90: 180b883a mov r5,r3
801cb94: 1009883a mov r4,r2
801cb98: 8011e780 call 8011e78 <OSFlagCreate>
801cb9c: 1007883a mov r3,r2
801cba0: e0bffd17 ldw r2,-12(fp)
801cba4: 10c00015 stw r3,0(r2)
return err;
801cba8: e0bff843 ldbu r2,-31(fp)
801cbac: 10803fcc andi r2,r2,255
ALT_SEM_CREATE (&sp->read_lock, 1) ||
801cbb0: 1000241e bne r2,zero,801cc44 <altera_avalon_uart_init+0xf4>
801cbb4: e0bff717 ldw r2,-36(fp)
801cbb8: 10800804 addi r2,r2,32
801cbbc: e0bffb15 stw r2,-20(fp)
801cbc0: 00800044 movi r2,1
801cbc4: e0bffa8d sth r2,-22(fp)
801cbc8: e0bffa8b ldhu r2,-22(fp)
801cbcc: 1009883a mov r4,r2
801cbd0: 80157740 call 8015774 <OSSemCreate>
801cbd4: 1007883a mov r3,r2
801cbd8: e0bffb17 ldw r2,-20(fp)
801cbdc: 10c00015 stw r3,0(r2)
return *sem ? 0 : -1;
801cbe0: e0bffb17 ldw r2,-20(fp)
801cbe4: 10800017 ldw r2,0(r2)
801cbe8: 10000226 beq r2,zero,801cbf4 <altera_avalon_uart_init+0xa4>
801cbec: 0005883a mov r2,zero
801cbf0: 00000106 br 801cbf8 <altera_avalon_uart_init+0xa8>
801cbf4: 00bfffc4 movi r2,-1
error = ALT_FLAG_CREATE (&sp->events, 0) ||
801cbf8: 1000121e bne r2,zero,801cc44 <altera_avalon_uart_init+0xf4>
ALT_SEM_CREATE (&sp->write_lock, 1);
801cbfc: e0bff717 ldw r2,-36(fp)
801cc00: 10800904 addi r2,r2,36
801cc04: e0bff915 stw r2,-28(fp)
801cc08: 00800044 movi r2,1
801cc0c: e0bff88d sth r2,-30(fp)
*sem = OSSemCreate (value);
801cc10: e0bff88b ldhu r2,-30(fp)
801cc14: 1009883a mov r4,r2
801cc18: 80157740 call 8015774 <OSSemCreate>
801cc1c: 1007883a mov r3,r2
801cc20: e0bff917 ldw r2,-28(fp)
801cc24: 10c00015 stw r3,0(r2)
return *sem ? 0 : -1;
801cc28: e0bff917 ldw r2,-28(fp)
801cc2c: 10800017 ldw r2,0(r2)
801cc30: 10000226 beq r2,zero,801cc3c <altera_avalon_uart_init+0xec>
801cc34: 0005883a mov r2,zero
801cc38: 00000106 br 801cc40 <altera_avalon_uart_init+0xf0>
801cc3c: 00bfffc4 movi r2,-1
ALT_SEM_CREATE (&sp->read_lock, 1) ||
801cc40: 10000226 beq r2,zero,801cc4c <altera_avalon_uart_init+0xfc>
801cc44: 00800044 movi r2,1
801cc48: 00000106 br 801cc50 <altera_avalon_uart_init+0x100>
801cc4c: 0005883a mov r2,zero
error = ALT_FLAG_CREATE (&sp->events, 0) ||
801cc50: e0bffe15 stw r2,-8(fp)
if (!error)
801cc54: e0bffe17 ldw r2,-8(fp)
801cc58: 10000f1e bne r2,zero,801cc98 <altera_avalon_uart_init+0x148>
{
/* enable interrupts at the device */
sp->ctrl = ALTERA_AVALON_UART_CONTROL_RTS_MSK |
801cc5c: e0bff717 ldw r2,-36(fp)
801cc60: 00c32004 movi r3,3200
801cc64: 10c00115 stw r3,4(r2)
ALTERA_AVALON_UART_CONTROL_RRDY_MSK |
ALTERA_AVALON_UART_CONTROL_DCTS_MSK;
IOWR_ALTERA_AVALON_UART_CONTROL(base, sp->ctrl);
801cc68: e0bfff17 ldw r2,-4(fp)
801cc6c: 10800304 addi r2,r2,12
801cc70: e0fff717 ldw r3,-36(fp)
801cc74: 18c00117 ldw r3,4(r3)
801cc78: 10c00035 stwio r3,0(r2)
/* register the interrupt handler */
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
alt_ic_isr_register(irq_controller_id, irq, altera_avalon_uart_irq, sp,
801cc7c: d8000015 stw zero,0(sp)
801cc80: e1fff717 ldw r7,-36(fp)
801cc84: 018200b4 movhi r6,2050
801cc88: 31b32c04 addi r6,r6,-13136
801cc8c: e17ff517 ldw r5,-44(fp)
801cc90: e13ff617 ldw r4,-40(fp)
801cc94: 80374940 call 8037494 <alt_ic_isr_register>
0x0);
#else
alt_irq_register (irq, sp, altera_avalon_uart_irq);
#endif
}
}
801cc98: 0001883a nop
801cc9c: e037883a mov sp,fp
801cca0: dfc00117 ldw ra,4(sp)
801cca4: df000017 ldw fp,0(sp)
801cca8: dec00204 addi sp,sp,8
801ccac: f800283a ret
0801ccb0 <altera_avalon_uart_irq>:
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
static void altera_avalon_uart_irq(void* context)
#else
static void altera_avalon_uart_irq(void* context, alt_u32 id)
#endif
{
801ccb0: defffa04 addi sp,sp,-24
801ccb4: dfc00515 stw ra,20(sp)
801ccb8: df000415 stw fp,16(sp)
801ccbc: df000404 addi fp,sp,16
801ccc0: e13ffc15 stw r4,-16(fp)
alt_u32 status;
altera_avalon_uart_state* sp = (altera_avalon_uart_state*) context;
801ccc4: e0bffc17 ldw r2,-16(fp)
801ccc8: e0bfff15 stw r2,-4(fp)
void* base = sp->base;
801cccc: e0bfff17 ldw r2,-4(fp)
801ccd0: 10800017 ldw r2,0(r2)
801ccd4: e0bffe15 stw r2,-8(fp)
/*
* Read the status register in order to determine the cause of the
* interrupt.
*/
status = IORD_ALTERA_AVALON_UART_STATUS(base);
801ccd8: e0bffe17 ldw r2,-8(fp)
801ccdc: 10800204 addi r2,r2,8
801cce0: 10800037 ldwio r2,0(r2)
801cce4: e0bffd15 stw r2,-12(fp)
/* Clear any error flags set at the device */
IOWR_ALTERA_AVALON_UART_STATUS(base, 0);
801cce8: e0bffe17 ldw r2,-8(fp)
801ccec: 10800204 addi r2,r2,8
801ccf0: 0007883a mov r3,zero
801ccf4: 10c00035 stwio r3,0(r2)
/* Dummy read to ensure IRQ is negated before ISR returns */
IORD_ALTERA_AVALON_UART_STATUS(base);
801ccf8: e0bffe17 ldw r2,-8(fp)
801ccfc: 10800204 addi r2,r2,8
801cd00: 10800037 ldwio r2,0(r2)
/* process a read irq */
if (status & ALTERA_AVALON_UART_STATUS_RRDY_MSK)
801cd04: e0bffd17 ldw r2,-12(fp)
801cd08: 1080200c andi r2,r2,128
801cd0c: 10000326 beq r2,zero,801cd1c <altera_avalon_uart_irq+0x6c>
{
altera_avalon_uart_rxirq(sp, status);
801cd10: e17ffd17 ldw r5,-12(fp)
801cd14: e13fff17 ldw r4,-4(fp)
801cd18: 801cd4c0 call 801cd4c <altera_avalon_uart_rxirq>
}
/* process a write irq */
if (status & (ALTERA_AVALON_UART_STATUS_TRDY_MSK |
801cd1c: e0bffd17 ldw r2,-12(fp)
801cd20: 1081100c andi r2,r2,1088
801cd24: 10000326 beq r2,zero,801cd34 <altera_avalon_uart_irq+0x84>
ALTERA_AVALON_UART_STATUS_DCTS_MSK))
{
altera_avalon_uart_txirq(sp, status);
801cd28: e17ffd17 ldw r5,-12(fp)
801cd2c: e13fff17 ldw r4,-4(fp)
801cd30: 801ce800 call 801ce80 <altera_avalon_uart_txirq>
}
}
801cd34: 0001883a nop
801cd38: e037883a mov sp,fp
801cd3c: dfc00117 ldw ra,4(sp)
801cd40: df000017 ldw fp,0(sp)
801cd44: dec00204 addi sp,sp,8
801cd48: f800283a ret
0801cd4c <altera_avalon_uart_rxirq>:
* the receive circular buffer, and sets the apropriate flags to indicate
* that there is data ready to be processed.
*/
static void
altera_avalon_uart_rxirq(altera_avalon_uart_state* sp, alt_u32 status)
{
801cd4c: defff904 addi sp,sp,-28
801cd50: dfc00615 stw ra,24(sp)
801cd54: df000515 stw fp,20(sp)
801cd58: df000504 addi fp,sp,20
801cd5c: e13ffc15 stw r4,-16(fp)
801cd60: e17ffb15 stw r5,-20(fp)
alt_u32 next;
/* If there was an error, discard the data */
if (status & (ALTERA_AVALON_UART_STATUS_PE_MSK |
801cd64: e0bffb17 ldw r2,-20(fp)
801cd68: 108000cc andi r2,r2,3
801cd6c: 10003e1e bne r2,zero,801ce68 <altera_avalon_uart_rxirq+0x11c>
* In a multi-threaded environment, set the read event flag to indicate
* that there is data ready. This is only done if the circular buffer was
* previously empty.
*/
if (sp->rx_end == sp->rx_start)
801cd70: e0bffc17 ldw r2,-16(fp)
801cd74: 10c00317 ldw r3,12(r2)
801cd78: e0bffc17 ldw r2,-16(fp)
801cd7c: 10800217 ldw r2,8(r2)
801cd80: 1880121e bne r3,r2,801cdcc <altera_avalon_uart_rxirq+0x80>
{
ALT_FLAG_POST (sp->events, ALT_UART_READ_RDY, OS_FLAG_SET);
801cd84: e0bffc17 ldw r2,-16(fp)
801cd88: 10800717 ldw r2,28(r2)
801cd8c: e0bffe15 stw r2,-8(fp)
801cd90: 00800044 movi r2,1
801cd94: e0bffd8d sth r2,-10(fp)
801cd98: 00800044 movi r2,1
801cd9c: e0bffd45 stb r2,-11(fp)
OS_FLAGS flags,
INT8U opt)
{
INT8U err;
if (OSRunning)
801cda0: d0a04b43 ldbu r2,-32467(gp)
801cda4: 10803fcc andi r2,r2,255
801cda8: 10000826 beq r2,zero,801cdcc <altera_avalon_uart_rxirq+0x80>
{
OSFlagPost (group, flags, opt, &err);
801cdac: e0bffd8b ldhu r2,-10(fp)
801cdb0: e0fffd43 ldbu r3,-11(fp)
801cdb4: e13ffd04 addi r4,fp,-12
801cdb8: 200f883a mov r7,r4
801cdbc: 180d883a mov r6,r3
801cdc0: 100b883a mov r5,r2
801cdc4: e13ffe17 ldw r4,-8(fp)
801cdc8: 80129700 call 8012970 <OSFlagPost>
}
/* Determine which slot to use next in the circular buffer */
next = (sp->rx_end + 1) & ALT_AVALON_UART_BUF_MSK;
801cdcc: e0bffc17 ldw r2,-16(fp)
801cdd0: 10800317 ldw r2,12(r2)
801cdd4: 10800044 addi r2,r2,1
801cdd8: 10800fcc andi r2,r2,63
801cddc: e0bfff15 stw r2,-4(fp)
/* Transfer data from the device to the circular buffer */
sp->rx_buf[sp->rx_end] = IORD_ALTERA_AVALON_UART_RXDATA(sp->base);
801cde0: e0bffc17 ldw r2,-16(fp)
801cde4: 10800017 ldw r2,0(r2)
801cde8: 10c00037 ldwio r3,0(r2)
801cdec: e0bffc17 ldw r2,-16(fp)
801cdf0: 10800317 ldw r2,12(r2)
801cdf4: 1809883a mov r4,r3
801cdf8: e0fffc17 ldw r3,-16(fp)
801cdfc: 1885883a add r2,r3,r2
801ce00: 11000a05 stb r4,40(r2)
sp->rx_end = next;
801ce04: e0bffc17 ldw r2,-16(fp)
801ce08: e0ffff17 ldw r3,-4(fp)
801ce0c: 10c00315 stw r3,12(r2)
next = (sp->rx_end + 1) & ALT_AVALON_UART_BUF_MSK;
801ce10: e0bffc17 ldw r2,-16(fp)
801ce14: 10800317 ldw r2,12(r2)
801ce18: 10800044 addi r2,r2,1
801ce1c: 10800fcc andi r2,r2,63
801ce20: e0bfff15 stw r2,-4(fp)
/*
* If the cicular buffer was full, disable interrupts. Interrupts will be
* re-enabled when data is removed from the buffer.
*/
if (next == sp->rx_start)
801ce24: e0bffc17 ldw r2,-16(fp)
801ce28: 10800217 ldw r2,8(r2)
801ce2c: e0ffff17 ldw r3,-4(fp)
801ce30: 18800e1e bne r3,r2,801ce6c <altera_avalon_uart_rxirq+0x120>
{
sp->ctrl &= ~ALTERA_AVALON_UART_CONTROL_RRDY_MSK;
801ce34: e0bffc17 ldw r2,-16(fp)
801ce38: 10c00117 ldw r3,4(r2)
801ce3c: 00bfdfc4 movi r2,-129
801ce40: 1886703a and r3,r3,r2
801ce44: e0bffc17 ldw r2,-16(fp)
801ce48: 10c00115 stw r3,4(r2)
IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl);
801ce4c: e0bffc17 ldw r2,-16(fp)
801ce50: 10800017 ldw r2,0(r2)
801ce54: 10800304 addi r2,r2,12
801ce58: e0fffc17 ldw r3,-16(fp)
801ce5c: 18c00117 ldw r3,4(r3)
801ce60: 10c00035 stwio r3,0(r2)
801ce64: 00000106 br 801ce6c <altera_avalon_uart_rxirq+0x120>
return;
801ce68: 0001883a nop
}
}
801ce6c: e037883a mov sp,fp
801ce70: dfc00117 ldw ra,4(sp)
801ce74: df000017 ldw fp,0(sp)
801ce78: dec00204 addi sp,sp,8
801ce7c: f800283a ret
0801ce80 <altera_avalon_uart_txirq>:
* buffer to the device, and sets the apropriate flags to indicate that
* there is data ready to be processed.
*/
static void
altera_avalon_uart_txirq(altera_avalon_uart_state* sp, alt_u32 status)
{
801ce80: defffa04 addi sp,sp,-24
801ce84: dfc00515 stw ra,20(sp)
801ce88: df000415 stw fp,16(sp)
801ce8c: df000404 addi fp,sp,16
801ce90: e13ffd15 stw r4,-12(fp)
801ce94: e17ffc15 stw r5,-16(fp)
/* Transfer data if there is some ready to be transfered */
if (sp->tx_start != sp->tx_end)
801ce98: e0bffd17 ldw r2,-12(fp)
801ce9c: 10c00417 ldw r3,16(r2)
801cea0: e0bffd17 ldw r2,-12(fp)
801cea4: 10800517 ldw r2,20(r2)
801cea8: 18804626 beq r3,r2,801cfc4 <altera_avalon_uart_txirq+0x144>
/*
* If the device is using flow control (i.e. RTS/CTS), then the
* transmitter is required to throttle if CTS is high.
*/
if (!(sp->flags & ALT_AVALON_UART_FC) ||
801ceac: e0bffd17 ldw r2,-12(fp)
801ceb0: 10800617 ldw r2,24(r2)
801ceb4: 1080008c andi r2,r2,2
801ceb8: 10000326 beq r2,zero,801cec8 <altera_avalon_uart_txirq+0x48>
(status & ALTERA_AVALON_UART_STATUS_CTS_MSK))
801cebc: e0bffc17 ldw r2,-16(fp)
801cec0: 1082000c andi r2,r2,2048
if (!(sp->flags & ALT_AVALON_UART_FC) ||
801cec4: 10003126 beq r2,zero,801cf8c <altera_avalon_uart_txirq+0x10c>
* In a multi-threaded environment, set the write event flag to indicate
* that there is space in the circular buffer. This is only done if the
* buffer was previously empty.
*/
if (sp->tx_start == ((sp->tx_end + 1) & ALT_AVALON_UART_BUF_MSK))
801cec8: e0bffd17 ldw r2,-12(fp)
801cecc: 10c00417 ldw r3,16(r2)
801ced0: e0bffd17 ldw r2,-12(fp)
801ced4: 10800517 ldw r2,20(r2)
801ced8: 10800044 addi r2,r2,1
801cedc: 10800fcc andi r2,r2,63
801cee0: 1880121e bne r3,r2,801cf2c <altera_avalon_uart_txirq+0xac>
{
ALT_FLAG_POST (sp->events,
801cee4: e0bffd17 ldw r2,-12(fp)
801cee8: 10800717 ldw r2,28(r2)
801ceec: e0bfff15 stw r2,-4(fp)
801cef0: 00800084 movi r2,2
801cef4: e0bffe8d sth r2,-6(fp)
801cef8: 00800044 movi r2,1
801cefc: e0bffe45 stb r2,-7(fp)
if (OSRunning)
801cf00: d0a04b43 ldbu r2,-32467(gp)
801cf04: 10803fcc andi r2,r2,255
801cf08: 10000826 beq r2,zero,801cf2c <altera_avalon_uart_txirq+0xac>
OSFlagPost (group, flags, opt, &err);
801cf0c: e0bffe8b ldhu r2,-6(fp)
801cf10: e0fffe43 ldbu r3,-7(fp)
801cf14: e13ffe04 addi r4,fp,-8
801cf18: 200f883a mov r7,r4
801cf1c: 180d883a mov r6,r3
801cf20: 100b883a mov r5,r2
801cf24: e13fff17 ldw r4,-4(fp)
801cf28: 80129700 call 8012970 <OSFlagPost>
OS_FLAG_SET);
}
/* Write the data to the device */
IOWR_ALTERA_AVALON_UART_TXDATA(sp->base, sp->tx_buf[sp->tx_start]);
801cf2c: e0bffd17 ldw r2,-12(fp)
801cf30: 10800017 ldw r2,0(r2)
801cf34: 10800104 addi r2,r2,4
801cf38: e0fffd17 ldw r3,-12(fp)
801cf3c: 18c00417 ldw r3,16(r3)
801cf40: e13ffd17 ldw r4,-12(fp)
801cf44: 20c7883a add r3,r4,r3
801cf48: 18c01a03 ldbu r3,104(r3)
801cf4c: 18c03fcc andi r3,r3,255
801cf50: 10c00035 stwio r3,0(r2)
sp->tx_start = (++sp->tx_start) & ALT_AVALON_UART_BUF_MSK;
801cf54: e0bffd17 ldw r2,-12(fp)
801cf58: 10800417 ldw r2,16(r2)
801cf5c: 10800044 addi r2,r2,1
801cf60: e0fffd17 ldw r3,-12(fp)
801cf64: 18800415 stw r2,16(r3)
801cf68: 10c00fcc andi r3,r2,63
801cf6c: e0bffd17 ldw r2,-12(fp)
801cf70: 10c00415 stw r3,16(r2)
/*
* In case the tranmit interrupt had previously been disabled by
* detecting a low value on CTS, it is reenabled here.
*/
sp->ctrl |= ALTERA_AVALON_UART_CONTROL_TRDY_MSK;
801cf74: e0bffd17 ldw r2,-12(fp)
801cf78: 10800117 ldw r2,4(r2)
801cf7c: 10c01014 ori r3,r2,64
801cf80: e0bffd17 ldw r2,-12(fp)
801cf84: 10c00115 stw r3,4(r2)
801cf88: 00000e06 br 801cfc4 <altera_avalon_uart_txirq+0x144>
* the last write to the status register. To avoid this resulting in
* deadlock, it's necessary to re-check the status register here
* before throttling.
*/
status = IORD_ALTERA_AVALON_UART_STATUS(sp->base);
801cf8c: e0bffd17 ldw r2,-12(fp)
801cf90: 10800017 ldw r2,0(r2)
801cf94: 10800204 addi r2,r2,8
801cf98: 10800037 ldwio r2,0(r2)
801cf9c: e0bffc15 stw r2,-16(fp)
if (!(status & ALTERA_AVALON_UART_STATUS_CTS_MSK))
801cfa0: e0bffc17 ldw r2,-16(fp)
801cfa4: 1082000c andi r2,r2,2048
801cfa8: 1000061e bne r2,zero,801cfc4 <altera_avalon_uart_txirq+0x144>
{
sp->ctrl &= ~ALTERA_AVALON_UART_CONTROL_TRDY_MSK;
801cfac: e0bffd17 ldw r2,-12(fp)
801cfb0: 10c00117 ldw r3,4(r2)
801cfb4: 00bfefc4 movi r2,-65
801cfb8: 1886703a and r3,r3,r2
801cfbc: e0bffd17 ldw r2,-12(fp)
801cfc0: 10c00115 stw r3,4(r2)
/*
* If the circular buffer is empty, disable the interrupt. This will be
* re-enabled when new data is placed in the buffer.
*/
if (sp->tx_start == sp->tx_end)
801cfc4: e0bffd17 ldw r2,-12(fp)
801cfc8: 10c00417 ldw r3,16(r2)
801cfcc: e0bffd17 ldw r2,-12(fp)
801cfd0: 10800517 ldw r2,20(r2)
801cfd4: 1880061e bne r3,r2,801cff0 <altera_avalon_uart_txirq+0x170>
{
sp->ctrl &= ~(ALTERA_AVALON_UART_CONTROL_TRDY_MSK |
801cfd8: e0bffd17 ldw r2,-12(fp)
801cfdc: 10c00117 ldw r3,4(r2)
801cfe0: 00beefc4 movi r2,-1089
801cfe4: 1886703a and r3,r3,r2
801cfe8: e0bffd17 ldw r2,-12(fp)
801cfec: 10c00115 stw r3,4(r2)
ALTERA_AVALON_UART_CONTROL_DCTS_MSK);
}
IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl);
801cff0: e0bffd17 ldw r2,-12(fp)
801cff4: 10800017 ldw r2,0(r2)
801cff8: 10800304 addi r2,r2,12
801cffc: e0fffd17 ldw r3,-12(fp)
801d000: 18c00117 ldw r3,4(r3)
801d004: 10c00035 stwio r3,0(r2)
}
801d008: 0001883a nop
801d00c: e037883a mov sp,fp
801d010: dfc00117 ldw ra,4(sp)
801d014: df000017 ldw fp,0(sp)
801d018: dec00204 addi sp,sp,8
801d01c: f800283a ret
0801d020 <altera_avalon_uart_close>:
* The close routine is not implemented for the small driver; instead it will
* map to null. This is because the small driver simply waits while characters
* are transmitted; there is no interrupt-serviced buffer to empty
*/
int altera_avalon_uart_close(altera_avalon_uart_state* sp, int flags)
{
801d020: defffd04 addi sp,sp,-12
801d024: df000215 stw fp,8(sp)
801d028: df000204 addi fp,sp,8
801d02c: e13fff15 stw r4,-4(fp)
801d030: e17ffe15 stw r5,-8(fp)
/*
* Wait for all transmit data to be emptied by the UART ISR.
*/
while (sp->tx_start != sp->tx_end) {
801d034: 00000506 br 801d04c <altera_avalon_uart_close+0x2c>
if (flags & O_NONBLOCK) {
801d038: e0bffe17 ldw r2,-8(fp)
801d03c: 1090000c andi r2,r2,16384
801d040: 10000226 beq r2,zero,801d04c <altera_avalon_uart_close+0x2c>
return -EWOULDBLOCK;
801d044: 00bffd44 movi r2,-11
801d048: 00000606 br 801d064 <altera_avalon_uart_close+0x44>
while (sp->tx_start != sp->tx_end) {
801d04c: e0bfff17 ldw r2,-4(fp)
801d050: 10c00417 ldw r3,16(r2)
801d054: e0bfff17 ldw r2,-4(fp)
801d058: 10800517 ldw r2,20(r2)
801d05c: 18bff61e bne r3,r2,801d038 <altera_avalon_uart_close+0x18>
}
}
return 0;
801d060: 0005883a mov r2,zero
}
801d064: e037883a mov sp,fp
801d068: df000017 ldw fp,0(sp)
801d06c: dec00104 addi sp,sp,4
801d070: f800283a ret
0801d074 <alt_get_errno>:
{
801d074: defffe04 addi sp,sp,-8
801d078: dfc00115 stw ra,4(sp)
801d07c: df000015 stw fp,0(sp)
801d080: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
801d084: d0a02717 ldw r2,-32612(gp)
801d088: 10000326 beq r2,zero,801d098 <alt_get_errno+0x24>
801d08c: d0a02717 ldw r2,-32612(gp)
801d090: 103ee83a callr r2
801d094: 00000106 br 801d09c <alt_get_errno+0x28>
801d098: d0a04204 addi r2,gp,-32504
}
801d09c: e037883a mov sp,fp
801d0a0: dfc00117 ldw ra,4(sp)
801d0a4: df000017 ldw fp,0(sp)
801d0a8: dec00204 addi sp,sp,8
801d0ac: f800283a ret
0801d0b0 <altera_avalon_uart_read>:
*/
int
altera_avalon_uart_read(altera_avalon_uart_state* sp, char* ptr, int len,
int flags)
{
801d0b0: deffeb04 addi sp,sp,-84
801d0b4: dfc01415 stw ra,80(sp)
801d0b8: df001315 stw fp,76(sp)
801d0bc: df001304 addi fp,sp,76
801d0c0: e13ff115 stw r4,-60(fp)
801d0c4: e17ff015 stw r5,-64(fp)
801d0c8: e1bfef15 stw r6,-68(fp)
801d0cc: e1ffee15 stw r7,-72(fp)
alt_irq_context context;
int block;
alt_u8 read_would_block = 0;
801d0d0: e03fffc5 stb zero,-1(fp)
int count = 0;
801d0d4: e03ffe15 stw zero,-8(fp)
/*
* Construct a flag to indicate whether the device is being accessed in
* blocking or non-blocking mode.
*/
block = !(flags & O_NONBLOCK);
801d0d8: e0bfee17 ldw r2,-72(fp)
801d0dc: 1090000c andi r2,r2,16384
801d0e0: 1005003a cmpeq r2,r2,zero
801d0e4: 10803fcc andi r2,r2,255
801d0e8: e0bffd15 stw r2,-12(fp)
/*
* When running in a multi threaded environment, obtain the "read_lock"
* semaphore. This ensures that reading from the device is thread-safe.
*/
ALT_SEM_PEND (sp->read_lock, 0);
801d0ec: e0bff117 ldw r2,-60(fp)
801d0f0: 10800817 ldw r2,32(r2)
801d0f4: e0bffb15 stw r2,-20(fp)
801d0f8: e03ffa8d sth zero,-22(fp)
static ALT_INLINE int ALT_ALWAYS_INLINE alt_sem_pend (OS_EVENT* sem,
INT16U timeout)
{
INT8U err;
OSSemPend (sem, timeout, &err);
801d0fc: e0bffa8b ldhu r2,-22(fp)
801d100: e0fff284 addi r3,fp,-54
801d104: 180d883a mov r6,r3
801d108: 100b883a mov r5,r2
801d10c: e13ffb17 ldw r4,-20(fp)
801d110: 8015a600 call 8015a60 <OSSemPend>
/*
* Read the required amount of data, until the circular buffer runs
* empty
*/
while ((count < len) && (sp->rx_start != sp->rx_end))
801d114: 00001306 br 801d164 <altera_avalon_uart_read+0xb4>
{
count++;
801d118: e0bffe17 ldw r2,-8(fp)
801d11c: 10800044 addi r2,r2,1
801d120: e0bffe15 stw r2,-8(fp)
*ptr++ = sp->rx_buf[sp->rx_start];
801d124: e0bff117 ldw r2,-60(fp)
801d128: 10800217 ldw r2,8(r2)
801d12c: e0fff117 ldw r3,-60(fp)
801d130: 1885883a add r2,r3,r2
801d134: 11000a03 ldbu r4,40(r2)
801d138: e0bff017 ldw r2,-64(fp)
801d13c: 10c00044 addi r3,r2,1
801d140: e0fff015 stw r3,-64(fp)
801d144: 2007883a mov r3,r4
801d148: 10c00005 stb r3,0(r2)
sp->rx_start = (sp->rx_start+1) & ALT_AVALON_UART_BUF_MSK;
801d14c: e0bff117 ldw r2,-60(fp)
801d150: 10800217 ldw r2,8(r2)
801d154: 10800044 addi r2,r2,1
801d158: 10c00fcc andi r3,r2,63
801d15c: e0bff117 ldw r2,-60(fp)
801d160: 10c00215 stw r3,8(r2)
while ((count < len) && (sp->rx_start != sp->rx_end))
801d164: e0fffe17 ldw r3,-8(fp)
801d168: e0bfef17 ldw r2,-68(fp)
801d16c: 1880050e bge r3,r2,801d184 <altera_avalon_uart_read+0xd4>
801d170: e0bff117 ldw r2,-60(fp)
801d174: 10c00217 ldw r3,8(r2)
801d178: e0bff117 ldw r2,-60(fp)
801d17c: 10800317 ldw r2,12(r2)
801d180: 18bfe51e bne r3,r2,801d118 <altera_avalon_uart_read+0x68>
/*
* If no data has been transferred, the circular buffer is empty, and
* this is not a non-blocking access, block waiting for data to arrive.
*/
if (!count && (sp->rx_start == sp->rx_end))
801d184: e0bffe17 ldw r2,-8(fp)
801d188: 10003a1e bne r2,zero,801d274 <altera_avalon_uart_read+0x1c4>
801d18c: e0bff117 ldw r2,-60(fp)
801d190: 10c00217 ldw r3,8(r2)
801d194: e0bff117 ldw r2,-60(fp)
801d198: 10800317 ldw r2,12(r2)
801d19c: 1880351e bne r3,r2,801d274 <altera_avalon_uart_read+0x1c4>
{
if (!block)
801d1a0: e0bffd17 ldw r2,-12(fp)
801d1a4: 1000071e bne r2,zero,801d1c4 <altera_avalon_uart_read+0x114>
{
/* Set errno to indicate the reason we're not returning any data */
ALT_ERRNO = EWOULDBLOCK;
801d1a8: 801d0740 call 801d074 <alt_get_errno>
801d1ac: 1007883a mov r3,r2
801d1b0: 008002c4 movi r2,11
801d1b4: 18800015 stw r2,0(r3)
read_would_block = 1;
801d1b8: 00800044 movi r2,1
801d1bc: e0bfffc5 stb r2,-1(fp)
break;
801d1c0: 00003006 br 801d284 <altera_avalon_uart_read+0x1d4>
NIOS2_READ_STATUS (context);
801d1c4: 0005303a rdctl r2,status
801d1c8: e0bff515 stw r2,-44(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801d1cc: e0fff517 ldw r3,-44(fp)
801d1d0: 00bfff84 movi r2,-2
801d1d4: 1884703a and r2,r3,r2
801d1d8: 1001703a wrctl status,r2
return context;
801d1dc: e0bff517 ldw r2,-44(fp)
{
/* Block waiting for some data to arrive */
/* First, ensure read interrupts are enabled to avoid deadlock */
context = alt_irq_disable_all ();
801d1e0: e0bffc15 stw r2,-16(fp)
sp->ctrl |= ALTERA_AVALON_UART_CONTROL_RRDY_MSK;
801d1e4: e0bff117 ldw r2,-60(fp)
801d1e8: 10800117 ldw r2,4(r2)
801d1ec: 10c02014 ori r3,r2,128
801d1f0: e0bff117 ldw r2,-60(fp)
801d1f4: 10c00115 stw r3,4(r2)
IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl);
801d1f8: e0bff117 ldw r2,-60(fp)
801d1fc: 10800017 ldw r2,0(r2)
801d200: 10800304 addi r2,r2,12
801d204: e0fff117 ldw r3,-60(fp)
801d208: 18c00117 ldw r3,4(r3)
801d20c: 10c00035 stwio r3,0(r2)
801d210: e0bffc17 ldw r2,-16(fp)
801d214: e0bff615 stw r2,-40(fp)
NIOS2_WRITE_STATUS (context);
801d218: e0bff617 ldw r2,-40(fp)
801d21c: 1001703a wrctl status,r2
* flag set in the interrupt service routine. This avoids wasting CPU
* cycles waiting in this thread, when we could be doing something more
* profitable elsewhere.
*/
ALT_FLAG_PEND (sp->events,
801d220: e0bff117 ldw r2,-60(fp)
801d224: 10800717 ldw r2,28(r2)
801d228: e0bff915 stw r2,-28(fp)
801d22c: 00800044 movi r2,1
801d230: e0bff88d sth r2,-30(fp)
801d234: 00bfe0c4 movi r2,-125
801d238: e0bff845 stb r2,-31(fp)
801d23c: e03ff78d sth zero,-34(fp)
if (OSRunning)
801d240: d0a04b43 ldbu r2,-32467(gp)
801d244: 10803fcc andi r2,r2,255
801d248: 10000a26 beq r2,zero,801d274 <altera_avalon_uart_read+0x1c4>
OSFlagPend (group, flags, wait_type, timeout, &err);
801d24c: e0fff88b ldhu r3,-30(fp)
801d250: e13ff843 ldbu r4,-31(fp)
801d254: e17ff78b ldhu r5,-34(fp)
801d258: e0bff2c4 addi r2,fp,-53
801d25c: d8800015 stw r2,0(sp)
801d260: 280f883a mov r7,r5
801d264: 200d883a mov r6,r4
801d268: 180b883a mov r5,r3
801d26c: e13ff917 ldw r4,-28(fp)
801d270: 80123780 call 8012378 <OSFlagPend>
OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME,
0);
}
}
}
while (!count && len);
801d274: e0bffe17 ldw r2,-8(fp)
801d278: 1000021e bne r2,zero,801d284 <altera_avalon_uart_read+0x1d4>
801d27c: e0bfef17 ldw r2,-68(fp)
801d280: 103fb81e bne r2,zero,801d164 <altera_avalon_uart_read+0xb4>
/*
* Now that access to the circular buffer is complete, release the read
* semaphore so that other threads can access the buffer.
*/
ALT_SEM_POST (sp->read_lock);
801d284: e0bff117 ldw r2,-60(fp)
801d288: 10800817 ldw r2,32(r2)
801d28c: 1009883a mov r4,r2
801d290: 8015d840 call 8015d84 <OSSemPost>
NIOS2_READ_STATUS (context);
801d294: 0005303a rdctl r2,status
801d298: e0bff315 stw r2,-52(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801d29c: e0fff317 ldw r3,-52(fp)
801d2a0: 00bfff84 movi r2,-2
801d2a4: 1884703a and r2,r3,r2
801d2a8: 1001703a wrctl status,r2
return context;
801d2ac: e0bff317 ldw r2,-52(fp)
/*
* Ensure that interrupts are enabled, so that the circular buffer can
* re-fill.
*/
context = alt_irq_disable_all ();
801d2b0: e0bffc15 stw r2,-16(fp)
sp->ctrl |= ALTERA_AVALON_UART_CONTROL_RRDY_MSK;
801d2b4: e0bff117 ldw r2,-60(fp)
801d2b8: 10800117 ldw r2,4(r2)
801d2bc: 10c02014 ori r3,r2,128
801d2c0: e0bff117 ldw r2,-60(fp)
801d2c4: 10c00115 stw r3,4(r2)
IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl);
801d2c8: e0bff117 ldw r2,-60(fp)
801d2cc: 10800017 ldw r2,0(r2)
801d2d0: 10800304 addi r2,r2,12
801d2d4: e0fff117 ldw r3,-60(fp)
801d2d8: 18c00117 ldw r3,4(r3)
801d2dc: 10c00035 stwio r3,0(r2)
801d2e0: e0bffc17 ldw r2,-16(fp)
801d2e4: e0bff415 stw r2,-48(fp)
NIOS2_WRITE_STATUS (context);
801d2e8: e0bff417 ldw r2,-48(fp)
801d2ec: 1001703a wrctl status,r2
alt_irq_enable_all (context);
/* Return the number of bytes read */
if(read_would_block) {
801d2f0: e0bfffc3 ldbu r2,-1(fp)
801d2f4: 10000226 beq r2,zero,801d300 <altera_avalon_uart_read+0x250>
return -EWOULDBLOCK;
801d2f8: 00bffd44 movi r2,-11
801d2fc: 00000106 br 801d304 <altera_avalon_uart_read+0x254>
}
else {
return count;
801d300: e0bffe17 ldw r2,-8(fp)
}
}
801d304: e037883a mov sp,fp
801d308: dfc00117 ldw ra,4(sp)
801d30c: df000017 ldw fp,0(sp)
801d310: dec00204 addi sp,sp,8
801d314: f800283a ret
0801d318 <alt_get_errno>:
{
801d318: defffe04 addi sp,sp,-8
801d31c: dfc00115 stw ra,4(sp)
801d320: df000015 stw fp,0(sp)
801d324: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
801d328: d0a02717 ldw r2,-32612(gp)
801d32c: 10000326 beq r2,zero,801d33c <alt_get_errno+0x24>
801d330: d0a02717 ldw r2,-32612(gp)
801d334: 103ee83a callr r2
801d338: 00000106 br 801d340 <alt_get_errno+0x28>
801d33c: d0a04204 addi r2,gp,-32504
}
801d340: e037883a mov sp,fp
801d344: dfc00117 ldw ra,4(sp)
801d348: df000017 ldw fp,0(sp)
801d34c: dec00204 addi sp,sp,8
801d350: f800283a ret
0801d354 <altera_avalon_uart_write>:
*/
int
altera_avalon_uart_write(altera_avalon_uart_state* sp, const char* ptr, int len,
int flags)
{
801d354: deffeb04 addi sp,sp,-84
801d358: dfc01415 stw ra,80(sp)
801d35c: df001315 stw fp,76(sp)
801d360: df001304 addi fp,sp,76
801d364: e13ff115 stw r4,-60(fp)
801d368: e17ff015 stw r5,-64(fp)
801d36c: e1bfef15 stw r6,-68(fp)
801d370: e1ffee15 stw r7,-72(fp)
alt_irq_context context;
int no_block;
alt_u32 next;
int count = len;
801d374: e0bfef17 ldw r2,-68(fp)
801d378: e0bfff15 stw r2,-4(fp)
/*
* Construct a flag to indicate whether the device is being accessed in
* blocking or non-blocking mode.
*/
no_block = (flags & O_NONBLOCK);
801d37c: e0bfee17 ldw r2,-72(fp)
801d380: 1090000c andi r2,r2,16384
801d384: e0bffe15 stw r2,-8(fp)
/*
* When running in a multi threaded environment, obtain the "write_lock"
* semaphore. This ensures that writing to the device is thread-safe.
*/
ALT_SEM_PEND (sp->write_lock, 0);
801d388: e0bff117 ldw r2,-60(fp)
801d38c: 10800917 ldw r2,36(r2)
801d390: e0bffb15 stw r2,-20(fp)
801d394: e03ffa8d sth zero,-22(fp)
801d398: e0bffa8b ldhu r2,-22(fp)
801d39c: e0fff284 addi r3,fp,-54
801d3a0: 180d883a mov r6,r3
801d3a4: 100b883a mov r5,r2
801d3a8: e13ffb17 ldw r4,-20(fp)
801d3ac: 8015a600 call 8015a60 <OSSemPend>
* Loop transferring data from the input buffer to the transmit circular
* buffer. The loop is terminated once all the data has been transferred,
* or, (if in non-blocking mode) the buffer becomes full.
*/
while (count)
801d3b0: 00005006 br 801d4f4 <altera_avalon_uart_write+0x1a0>
{
/* Determine the next slot in the buffer to access */
next = (sp->tx_end + 1) & ALT_AVALON_UART_BUF_MSK;
801d3b4: e0bff117 ldw r2,-60(fp)
801d3b8: 10800517 ldw r2,20(r2)
801d3bc: 10800044 addi r2,r2,1
801d3c0: 10800fcc andi r2,r2,63
801d3c4: e0bffd15 stw r2,-12(fp)
/* block waiting for space if necessary */
if (next == sp->tx_start)
801d3c8: e0bff117 ldw r2,-60(fp)
801d3cc: 10800417 ldw r2,16(r2)
801d3d0: e0fffd17 ldw r3,-12(fp)
801d3d4: 1880371e bne r3,r2,801d4b4 <altera_avalon_uart_write+0x160>
{
if (no_block)
801d3d8: e0bffe17 ldw r2,-8(fp)
801d3dc: 10000526 beq r2,zero,801d3f4 <altera_avalon_uart_write+0xa0>
{
/* Set errno to indicate why this function returned early */
ALT_ERRNO = EWOULDBLOCK;
801d3e0: 801d3180 call 801d318 <alt_get_errno>
801d3e4: 1007883a mov r3,r2
801d3e8: 008002c4 movi r2,11
801d3ec: 18800015 stw r2,0(r3)
break;
801d3f0: 00004206 br 801d4fc <altera_avalon_uart_write+0x1a8>
NIOS2_READ_STATUS (context);
801d3f4: 0005303a rdctl r2,status
801d3f8: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801d3fc: e0fff817 ldw r3,-32(fp)
801d400: 00bfff84 movi r2,-2
801d404: 1884703a and r2,r3,r2
801d408: 1001703a wrctl status,r2
return context;
801d40c: e0bff817 ldw r2,-32(fp)
{
/* Block waiting for space in the circular buffer */
/* First, ensure transmit interrupts are enabled to avoid deadlock */
context = alt_irq_disable_all ();
801d410: e0bffc15 stw r2,-16(fp)
sp->ctrl |= (ALTERA_AVALON_UART_CONTROL_TRDY_MSK |
801d414: e0bff117 ldw r2,-60(fp)
801d418: 10800117 ldw r2,4(r2)
801d41c: 10c11014 ori r3,r2,1088
801d420: e0bff117 ldw r2,-60(fp)
801d424: 10c00115 stw r3,4(r2)
ALTERA_AVALON_UART_CONTROL_DCTS_MSK);
IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl);
801d428: e0bff117 ldw r2,-60(fp)
801d42c: 10800017 ldw r2,0(r2)
801d430: 10800304 addi r2,r2,12
801d434: e0fff117 ldw r3,-60(fp)
801d438: 18c00117 ldw r3,4(r3)
801d43c: 10c00035 stwio r3,0(r2)
801d440: e0bffc17 ldw r2,-16(fp)
801d444: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context);
801d448: e0bff917 ldw r2,-28(fp)
801d44c: 1001703a wrctl status,r2
* flag set in the interrupt service routine. This avoids wasting CPU
* cycles waiting in this thread, when we could be doing something
* more profitable elsewhere.
*/
ALT_FLAG_PEND (sp->events,
801d450: e0bff117 ldw r2,-60(fp)
801d454: 10800717 ldw r2,28(r2)
801d458: e0bff715 stw r2,-36(fp)
801d45c: 00800084 movi r2,2
801d460: e0bff68d sth r2,-38(fp)
801d464: 00bfe0c4 movi r2,-125
801d468: e0bff645 stb r2,-39(fp)
801d46c: e03ff58d sth zero,-42(fp)
if (OSRunning)
801d470: d0a04b43 ldbu r2,-32467(gp)
801d474: 10803fcc andi r2,r2,255
801d478: 10000a26 beq r2,zero,801d4a4 <altera_avalon_uart_write+0x150>
OSFlagPend (group, flags, wait_type, timeout, &err);
801d47c: e0fff68b ldhu r3,-38(fp)
801d480: e13ff643 ldbu r4,-39(fp)
801d484: e17ff58b ldhu r5,-42(fp)
801d488: e0bff2c4 addi r2,fp,-53
801d48c: d8800015 stw r2,0(sp)
801d490: 280f883a mov r7,r5
801d494: 200d883a mov r6,r4
801d498: 180b883a mov r5,r3
801d49c: e13ff717 ldw r4,-36(fp)
801d4a0: 80123780 call 8012378 <OSFlagPend>
ALT_UART_WRITE_RDY,
OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME,
0);
}
while ((next == sp->tx_start));
801d4a4: e0bff117 ldw r2,-60(fp)
801d4a8: 10800417 ldw r2,16(r2)
801d4ac: e0fffd17 ldw r3,-12(fp)
801d4b0: 18bfe726 beq r3,r2,801d450 <altera_avalon_uart_write+0xfc>
}
}
count--;
801d4b4: e0bfff17 ldw r2,-4(fp)
801d4b8: 10bfffc4 addi r2,r2,-1
801d4bc: e0bfff15 stw r2,-4(fp)
/* Add the next character to the transmit buffer */
sp->tx_buf[sp->tx_end] = *ptr++;
801d4c0: e0bff017 ldw r2,-64(fp)
801d4c4: 10c00044 addi r3,r2,1
801d4c8: e0fff015 stw r3,-64(fp)
801d4cc: 10c00003 ldbu r3,0(r2)
801d4d0: e0bff117 ldw r2,-60(fp)
801d4d4: 10800517 ldw r2,20(r2)
801d4d8: 1809883a mov r4,r3
801d4dc: e0fff117 ldw r3,-60(fp)
801d4e0: 1885883a add r2,r3,r2
801d4e4: 11001a05 stb r4,104(r2)
sp->tx_end = next;
801d4e8: e0bff117 ldw r2,-60(fp)
801d4ec: e0fffd17 ldw r3,-12(fp)
801d4f0: 10c00515 stw r3,20(r2)
while (count)
801d4f4: e0bfff17 ldw r2,-4(fp)
801d4f8: 103fae1e bne r2,zero,801d3b4 <altera_avalon_uart_write+0x60>
/*
* Now that access to the circular buffer is complete, release the write
* semaphore so that other threads can access the buffer.
*/
ALT_SEM_POST (sp->write_lock);
801d4fc: e0bff117 ldw r2,-60(fp)
801d500: 10800917 ldw r2,36(r2)
801d504: 1009883a mov r4,r2
801d508: 8015d840 call 8015d84 <OSSemPost>
NIOS2_READ_STATUS (context);
801d50c: 0005303a rdctl r2,status
801d510: e0bff315 stw r2,-52(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801d514: e0fff317 ldw r3,-52(fp)
801d518: 00bfff84 movi r2,-2
801d51c: 1884703a and r2,r3,r2
801d520: 1001703a wrctl status,r2
return context;
801d524: e0bff317 ldw r2,-52(fp)
/*
* Ensure that interrupts are enabled, so that the circular buffer can
* drain.
*/
context = alt_irq_disable_all ();
801d528: e0bffc15 stw r2,-16(fp)
sp->ctrl |= ALTERA_AVALON_UART_CONTROL_TRDY_MSK |
801d52c: e0bff117 ldw r2,-60(fp)
801d530: 10800117 ldw r2,4(r2)
801d534: 10c11014 ori r3,r2,1088
801d538: e0bff117 ldw r2,-60(fp)
801d53c: 10c00115 stw r3,4(r2)
ALTERA_AVALON_UART_CONTROL_DCTS_MSK;
IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl);
801d540: e0bff117 ldw r2,-60(fp)
801d544: 10800017 ldw r2,0(r2)
801d548: 10800304 addi r2,r2,12
801d54c: e0fff117 ldw r3,-60(fp)
801d550: 18c00117 ldw r3,4(r3)
801d554: 10c00035 stwio r3,0(r2)
801d558: e0bffc17 ldw r2,-16(fp)
801d55c: e0bff415 stw r2,-48(fp)
NIOS2_WRITE_STATUS (context);
801d560: e0bff417 ldw r2,-48(fp)
801d564: 1001703a wrctl status,r2
alt_irq_enable_all (context);
/* return the number of bytes written */
return (len - count);
801d568: e0ffef17 ldw r3,-68(fp)
801d56c: e0bfff17 ldw r2,-4(fp)
801d570: 1885c83a sub r2,r3,r2
}
801d574: e037883a mov sp,fp
801d578: dfc00117 ldw ra,4(sp)
801d57c: df000017 ldw fp,0(sp)
801d580: dec00204 addi sp,sp,8
801d584: f800283a ret
0801d588 <alt_flash_device_register>:
typedef struct alt_flash_dev alt_flash_dev;
typedef alt_flash_dev alt_flash_fd;
static ALT_INLINE int alt_flash_device_register( alt_flash_fd* fd)
{
801d588: defffd04 addi sp,sp,-12
801d58c: dfc00215 stw ra,8(sp)
801d590: df000115 stw fp,4(sp)
801d594: df000104 addi fp,sp,4
801d598: e13fff15 stw r4,-4(fp)
extern alt_llist alt_flash_dev_list;
return alt_dev_llist_insert ((alt_dev_llist*) fd, &alt_flash_dev_list);
801d59c: d1600404 addi r5,gp,-32752
801d5a0: e13fff17 ldw r4,-4(fp)
801d5a4: 80372a00 call 80372a0 <alt_dev_llist_insert>
}
801d5a8: e037883a mov sp,fp
801d5ac: dfc00117 ldw ra,4(sp)
801d5b0: df000017 ldw fp,0(sp)
801d5b4: dec00204 addi sp,sp,8
801d5b8: f800283a ret
0801d5bc <alt_qspi_controller_lock>:
* -EINVAL -> Invalid arguments
* -ETIME -> Time out and skipping the looping after 0.7 sec.
* -ENOLCK -> Sectors lock failed.
**/
int alt_qspi_controller_lock(alt_flash_dev *flash_info, alt_u32 sectors_to_lock)
{
801d5bc: defff804 addi sp,sp,-32
801d5c0: dfc00715 stw ra,28(sp)
801d5c4: df000615 stw fp,24(sp)
801d5c8: df000604 addi fp,sp,24
801d5cc: e13ffb15 stw r4,-20(fp)
801d5d0: e17ffa15 stw r5,-24(fp)
alt_u32 mem_op_value = 0; /* value to write to EPCQ_MEM_OP register */
801d5d4: e03fff15 stw zero,-4(fp)
alt_qspi_controller_dev* qspi_flash_info = NULL;
801d5d8: e03ffe15 stw zero,-8(fp)
alt_u32 result = 0;
801d5dc: e03ffd15 stw zero,-12(fp)
alt_32 status = 0;
801d5e0: e03ffc15 stw zero,-16(fp)
/* return -EINVAL if flash_info is NULL */
if(NULL == flash_info || 0 > sectors_to_lock)
801d5e4: e0bffb17 ldw r2,-20(fp)
801d5e8: 1000021e bne r2,zero,801d5f4 <alt_qspi_controller_lock+0x38>
{
return -EINVAL;
801d5ec: 00bffa84 movi r2,-22
801d5f0: 00003106 br 801d6b8 <alt_qspi_controller_lock+0xfc>
}
qspi_flash_info = (alt_qspi_controller_dev*)flash_info;
801d5f4: e0bffb17 ldw r2,-20(fp)
801d5f8: e0bffe15 stw r2,-8(fp)
/* sector value should occupy bits 17:8 */
mem_op_value = sectors_to_lock << 8;
801d5fc: e0bffa17 ldw r2,-24(fp)
801d600: 1004923a slli r2,r2,8
801d604: e0bfff15 stw r2,-4(fp)
/* sector protect commands 0b11 occupies lower 2 bits */
mem_op_value |= ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_PROTECT_CMD;
801d608: e0bfff17 ldw r2,-4(fp)
801d60c: 108000d4 ori r2,r2,3
801d610: e0bfff15 stw r2,-4(fp)
/* write sector protect command to QSPI_MEM_OP register to protect sectors */
IOWR_ALTERA_QSPI_CONTROLLER_MEM_OP(qspi_flash_info->csr_base, mem_op_value);
801d614: e0bffe17 ldw r2,-8(fp)
801d618: 10803017 ldw r2,192(r2)
801d61c: 10800304 addi r2,r2,12
801d620: 1007883a mov r3,r2
801d624: e0bfff17 ldw r2,-4(fp)
801d628: 18800035 stwio r2,0(r3)
/* poll write in progress to make sure no operation is in progress */
status = alt_qspi_poll_for_write_in_progress(qspi_flash_info);
801d62c: e13ffe17 ldw r4,-8(fp)
801d630: 801e0100 call 801e010 <alt_qspi_poll_for_write_in_progress>
801d634: e0bffc15 stw r2,-16(fp)
if(status != 0)
801d638: e0bffc17 ldw r2,-16(fp)
801d63c: 10000226 beq r2,zero,801d648 <alt_qspi_controller_lock+0x8c>
{
return status;
801d640: e0bffc17 ldw r2,-16(fp)
801d644: 00001c06 br 801d6b8 <alt_qspi_controller_lock+0xfc>
}
status = IORD_ALTERA_QSPI_CONTROLLER_STATUS(qspi_flash_info->csr_base);
801d648: e0bffe17 ldw r2,-8(fp)
801d64c: 10803017 ldw r2,192(r2)
801d650: 10800037 ldwio r2,0(r2)
801d654: e0bffc15 stw r2,-16(fp)
result |= (status >> 2) & 0x07; /* extract out BP3 - BP0 */
801d658: e0bffc17 ldw r2,-16(fp)
801d65c: 1005d0ba srai r2,r2,2
801d660: 108001cc andi r2,r2,7
801d664: e0fffd17 ldw r3,-12(fp)
801d668: 1884b03a or r2,r3,r2
801d66c: e0bffd15 stw r2,-12(fp)
result |= (status >> 3) & 0x08; /* extract out BP4 */
801d670: e0bffc17 ldw r2,-16(fp)
801d674: 1005d0fa srai r2,r2,3
801d678: 1080020c andi r2,r2,8
801d67c: e0fffd17 ldw r3,-12(fp)
801d680: 1884b03a or r2,r3,r2
801d684: e0bffd15 stw r2,-12(fp)
result |= (status >> 1) & 0x10; /* extract out TOP/BOTTOM bit */
801d688: e0bffc17 ldw r2,-16(fp)
801d68c: 1005d07a srai r2,r2,1
801d690: 1080040c andi r2,r2,16
801d694: e0fffd17 ldw r3,-12(fp)
801d698: 1884b03a or r2,r3,r2
801d69c: e0bffd15 stw r2,-12(fp)
if(result != sectors_to_lock)
801d6a0: e0fffd17 ldw r3,-12(fp)
801d6a4: e0bffa17 ldw r2,-24(fp)
801d6a8: 18800226 beq r3,r2,801d6b4 <alt_qspi_controller_lock+0xf8>
{
return -ENOLCK;
801d6ac: 00bff484 movi r2,-46
801d6b0: 00000106 br 801d6b8 <alt_qspi_controller_lock+0xfc>
}
return 0;
801d6b4: 0005883a mov r2,zero
}
801d6b8: e037883a mov sp,fp
801d6bc: dfc00117 ldw ra,4(sp)
801d6c0: df000017 ldw fp,0(sp)
801d6c4: dec00204 addi sp,sp,8
801d6c8: f800283a ret
0801d6cc <alt_qspi_controller_get_info>:
(
alt_flash_fd *fd, /** flash device descriptor */
flash_region **info, /** pointer to flash_region will be stored here */
int *number_of_regions /** number of regions will be stored here */
)
{
801d6cc: defffb04 addi sp,sp,-20
801d6d0: df000415 stw fp,16(sp)
801d6d4: df000404 addi fp,sp,16
801d6d8: e13ffe15 stw r4,-8(fp)
801d6dc: e17ffd15 stw r5,-12(fp)
801d6e0: e1bffc15 stw r6,-16(fp)
alt_flash_dev* flash = NULL;
801d6e4: e03fff15 stw zero,-4(fp)
/* return -EINVAL if fd,info and number_of_regions are NULL */
if(NULL == fd || NULL == info || NULL == number_of_regions)
801d6e8: e0bffe17 ldw r2,-8(fp)
801d6ec: 10000426 beq r2,zero,801d700 <alt_qspi_controller_get_info+0x34>
801d6f0: e0bffd17 ldw r2,-12(fp)
801d6f4: 10000226 beq r2,zero,801d700 <alt_qspi_controller_get_info+0x34>
801d6f8: e0bffc17 ldw r2,-16(fp)
801d6fc: 1000021e bne r2,zero,801d708 <alt_qspi_controller_get_info+0x3c>
{
return -EINVAL;
801d700: 00bffa84 movi r2,-22
801d704: 00001006 br 801d748 <alt_qspi_controller_get_info+0x7c>
}
flash = (alt_flash_dev*)fd;
801d708: e0bffe17 ldw r2,-8(fp)
801d70c: e0bfff15 stw r2,-4(fp)
*number_of_regions = flash->number_of_regions;
801d710: e0bfff17 ldw r2,-4(fp)
801d714: 10c00c17 ldw r3,48(r2)
801d718: e0bffc17 ldw r2,-16(fp)
801d71c: 10c00015 stw r3,0(r2)
if (!flash->number_of_regions)
801d720: e0bfff17 ldw r2,-4(fp)
801d724: 10800c17 ldw r2,48(r2)
801d728: 1000021e bne r2,zero,801d734 <alt_qspi_controller_get_info+0x68>
{
return -EIO;
801d72c: 00bffec4 movi r2,-5
801d730: 00000506 br 801d748 <alt_qspi_controller_get_info+0x7c>
}
else
{
*info = &flash->region_info[0];
801d734: e0bfff17 ldw r2,-4(fp)
801d738: 10c00d04 addi r3,r2,52
801d73c: e0bffd17 ldw r2,-12(fp)
801d740: 10c00015 stw r3,0(r2)
}
return 0;
801d744: 0005883a mov r2,zero
}
801d748: e037883a mov sp,fp
801d74c: df000017 ldw fp,0(sp)
801d750: dec00104 addi sp,sp,4
801d754: f800283a ret
0801d758 <alt_qspi_controller_erase_block>:
* 0 -> success
* -EINVAL -> Invalid arguments
* -EIO -> write failed, sector might be protected
**/
int alt_qspi_controller_erase_block(alt_flash_dev *flash_info, int block_offset)
{
801d758: defff804 addi sp,sp,-32
801d75c: dfc00715 stw ra,28(sp)
801d760: df000615 stw fp,24(sp)
801d764: df000604 addi fp,sp,24
801d768: e13ffb15 stw r4,-20(fp)
801d76c: e17ffa15 stw r5,-24(fp)
alt_32 ret_code = 0;
801d770: e03fff15 stw zero,-4(fp)
alt_u32 mem_op_value = 0; /* value to write to EPCQ_MEM_OP register */
801d774: e03ffe15 stw zero,-8(fp)
alt_qspi_controller_dev* qspi_flash_info = NULL;
801d778: e03ffd15 stw zero,-12(fp)
alt_u32 sector_number = 0;
801d77c: e03ffc15 stw zero,-16(fp)
/* return -EINVAL if flash_info is NULL */
if(NULL == flash_info)
801d780: e0bffb17 ldw r2,-20(fp)
801d784: 1000021e bne r2,zero,801d790 <alt_qspi_controller_erase_block+0x38>
{
return -EINVAL;
801d788: 00bffa84 movi r2,-22
801d78c: 00003606 br 801d868 <alt_qspi_controller_erase_block+0x110>
}
qspi_flash_info = (alt_qspi_controller_dev*)flash_info;
801d790: e0bffb17 ldw r2,-20(fp)
801d794: e0bffd15 stw r2,-12(fp)
/*
* Sanity checks that block_offset is within the flash memory span and that the
* block offset is sector aligned.
*
*/
if((block_offset < 0)
801d798: e0bffa17 ldw r2,-24(fp)
801d79c: 10000a16 blt r2,zero,801d7c8 <alt_qspi_controller_erase_block+0x70>
|| (block_offset >= qspi_flash_info->size_in_bytes)
801d7a0: e0bffd17 ldw r2,-12(fp)
801d7a4: 10803117 ldw r2,196(r2)
801d7a8: e0fffa17 ldw r3,-24(fp)
801d7ac: 1880062e bgeu r3,r2,801d7c8 <alt_qspi_controller_erase_block+0x70>
|| (block_offset & (qspi_flash_info->sector_size - 1)) != 0)
801d7b0: e0bffd17 ldw r2,-12(fp)
801d7b4: 10803417 ldw r2,208(r2)
801d7b8: 10ffffc4 addi r3,r2,-1
801d7bc: e0bffa17 ldw r2,-24(fp)
801d7c0: 1884703a and r2,r3,r2
801d7c4: 10000226 beq r2,zero,801d7d0 <alt_qspi_controller_erase_block+0x78>
{
return -EINVAL;
801d7c8: 00bffa84 movi r2,-22
801d7cc: 00002606 br 801d868 <alt_qspi_controller_erase_block+0x110>
}
/* calculate current sector/block number */
sector_number = (block_offset/(qspi_flash_info->sector_size));
801d7d0: e0fffa17 ldw r3,-24(fp)
801d7d4: e0bffd17 ldw r2,-12(fp)
801d7d8: 10803417 ldw r2,208(r2)
801d7dc: 100b883a mov r5,r2
801d7e0: 1809883a mov r4,r3
801d7e4: 800cff80 call 800cff8 <__udivsi3>
801d7e8: e0bffc15 stw r2,-16(fp)
/* sector value should occupy bits 23:8 */
mem_op_value = (sector_number << 8) & ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_VALUE_MASK;
801d7ec: e0bffc17 ldw r2,-16(fp)
801d7f0: 1006923a slli r3,r2,8
801d7f4: 00804034 movhi r2,256
801d7f8: 10bfc004 addi r2,r2,-256
801d7fc: 1884703a and r2,r3,r2
801d800: e0bffe15 stw r2,-8(fp)
/* sector erase commands 0b10 occupies lower 2 bits */
mem_op_value |= ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_ERASE_CMD;
801d804: e0bffe17 ldw r2,-8(fp)
801d808: 10800094 ori r2,r2,2
801d80c: e0bffe15 stw r2,-8(fp)
/* write sector erase command to QSPI_MEM_OP register to erase sector "sector_number" */
IOWR_ALTERA_QSPI_CONTROLLER_MEM_OP(qspi_flash_info->csr_base, mem_op_value);
801d810: e0bffd17 ldw r2,-12(fp)
801d814: 10803017 ldw r2,192(r2)
801d818: 10800304 addi r2,r2,12
801d81c: 1007883a mov r3,r2
801d820: e0bffe17 ldw r2,-8(fp)
801d824: 18800035 stwio r2,0(r3)
/* check whether erase triggered a illegal erase interrupt */
if((IORD_ALTERA_QSPI_CONTROLLER_ISR(qspi_flash_info->csr_base) &
801d828: e0bffd17 ldw r2,-12(fp)
801d82c: 10803017 ldw r2,192(r2)
801d830: 10800404 addi r2,r2,16
801d834: 10800037 ldwio r2,0(r2)
801d838: 1080004c andi r2,r2,1
801d83c: 10800058 cmpnei r2,r2,1
801d840: 1000081e bne r2,zero,801d864 <alt_qspi_controller_erase_block+0x10c>
ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_ERASE_MASK) ==
ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_ERASE_ACTIVE)
{
/* clear register */
/* QSPI_ISR access is write one to clear (W1C) */
IOWR_ALTERA_QSPI_CONTROLLER_ISR(qspi_flash_info->csr_base,
801d844: e0bffd17 ldw r2,-12(fp)
801d848: 10803017 ldw r2,192(r2)
801d84c: 10800404 addi r2,r2,16
801d850: 1007883a mov r3,r2
801d854: 00800044 movi r2,1
801d858: 18800035 stwio r2,0(r3)
ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_ERASE_MASK );
return -EIO; /* erase failed, sector might be protected */
801d85c: 00bffec4 movi r2,-5
801d860: 00000106 br 801d868 <alt_qspi_controller_erase_block+0x110>
}
return ret_code;
801d864: e0bfff17 ldw r2,-4(fp)
}
801d868: e037883a mov sp,fp
801d86c: dfc00117 ldw ra,4(sp)
801d870: df000017 ldw fp,0(sp)
801d874: dec00204 addi sp,sp,8
801d878: f800283a ret
0801d87c <alt_qspi_controller_write_block>:
int block_offset, /** sector/block offset in byte addressing */
int data_offset, /** offset of write from base address */
const void *data, /** data to be written */
int length /** bytes of data to be written, >0 */
)
{
801d87c: defff304 addi sp,sp,-52
801d880: dfc00c15 stw ra,48(sp)
801d884: df000b15 stw fp,44(sp)
801d888: df000b04 addi fp,sp,44
801d88c: e13ff815 stw r4,-32(fp)
801d890: e17ff715 stw r5,-36(fp)
801d894: e1bff615 stw r6,-40(fp)
801d898: e1fff515 stw r7,-44(fp)
alt_u32 buffer_offset = 0; /** offset into data buffer to get write data */
801d89c: e03fff15 stw zero,-4(fp)
alt_u32 remaining_length = length; /** length left to write */
801d8a0: e0800217 ldw r2,8(fp)
801d8a4: e0bffe15 stw r2,-8(fp)
alt_u32 write_offset = data_offset; /** offset into flash to write too */
801d8a8: e0bff617 ldw r2,-40(fp)
801d8ac: e0bffd15 stw r2,-12(fp)
alt_qspi_controller_dev *qspi_flash_info = (alt_qspi_controller_dev*)flash_info;
801d8b0: e0bff817 ldw r2,-32(fp)
801d8b4: e0bffa15 stw r2,-24(fp)
/*
* Sanity checks that data offset is not larger then a sector, that block offset is
* sector aligned and within the valid flash memory range and a write doesn't spill into
* the adjacent flash sector.
*/
if(block_offset < 0
801d8b8: e0bff717 ldw r2,-36(fp)
801d8bc: 10001e16 blt r2,zero,801d938 <alt_qspi_controller_write_block+0xbc>
|| data_offset < 0
801d8c0: e0bff617 ldw r2,-40(fp)
801d8c4: 10001c16 blt r2,zero,801d938 <alt_qspi_controller_write_block+0xbc>
|| NULL == flash_info
801d8c8: e0bff817 ldw r2,-32(fp)
801d8cc: 10001a26 beq r2,zero,801d938 <alt_qspi_controller_write_block+0xbc>
|| NULL == data
801d8d0: e0bff517 ldw r2,-44(fp)
801d8d4: 10001826 beq r2,zero,801d938 <alt_qspi_controller_write_block+0xbc>
|| data_offset >= qspi_flash_info->size_in_bytes
801d8d8: e0bffa17 ldw r2,-24(fp)
801d8dc: 10803117 ldw r2,196(r2)
801d8e0: e0fff617 ldw r3,-40(fp)
801d8e4: 1880142e bgeu r3,r2,801d938 <alt_qspi_controller_write_block+0xbc>
|| block_offset >= qspi_flash_info->size_in_bytes
801d8e8: e0bffa17 ldw r2,-24(fp)
801d8ec: 10803117 ldw r2,196(r2)
801d8f0: e0fff717 ldw r3,-36(fp)
801d8f4: 1880102e bgeu r3,r2,801d938 <alt_qspi_controller_write_block+0xbc>
|| length > (qspi_flash_info->sector_size - (data_offset - block_offset))
801d8f8: e0bffa17 ldw r2,-24(fp)
801d8fc: 10803417 ldw r2,208(r2)
801d900: e13ff617 ldw r4,-40(fp)
801d904: e0fff717 ldw r3,-36(fp)
801d908: 20c7c83a sub r3,r4,r3
801d90c: 10c7c83a sub r3,r2,r3
801d910: e0800217 ldw r2,8(fp)
801d914: 18800836 bltu r3,r2,801d938 <alt_qspi_controller_write_block+0xbc>
|| length < 0
801d918: e0800217 ldw r2,8(fp)
801d91c: 10000616 blt r2,zero,801d938 <alt_qspi_controller_write_block+0xbc>
|| (block_offset & (qspi_flash_info->sector_size - 1)) != 0)
801d920: e0bffa17 ldw r2,-24(fp)
801d924: 10803417 ldw r2,208(r2)
801d928: 10ffffc4 addi r3,r2,-1
801d92c: e0bff717 ldw r2,-36(fp)
801d930: 1884703a and r2,r3,r2
801d934: 10004d26 beq r2,zero,801da6c <alt_qspi_controller_write_block+0x1f0>
{
return -EINVAL;
801d938: 00bffa84 movi r2,-22
801d93c: 00004e06 br 801da78 <alt_qspi_controller_write_block+0x1fc>
* We need to make sure that we pad the first few bytes so they're word aligned if they are
* not already.
*/
while (remaining_length > 0)
{
alt_u32 word_to_write = 0xFFFFFFFF; /** initialize word to write to blank word */
801d940: 00bfffc4 movi r2,-1
801d944: e0bff915 stw r2,-28(fp)
alt_u32 padding = 0; /** bytes to pad the next word that is written */
801d948: e03ffc15 stw zero,-16(fp)
alt_u32 bytes_to_copy = sizeof(alt_u32); /** number of bytes from source to copy */
801d94c: 00800104 movi r2,4
801d950: e0bffb15 stw r2,-20(fp)
/*
* we need to make sure the write is word aligned
* this should only be true at most 1 time
*/
if (0 != (write_offset & (sizeof(alt_u32) - 1)))
801d954: e0bffd17 ldw r2,-12(fp)
801d958: 108000cc andi r2,r2,3
801d95c: 10001526 beq r2,zero,801d9b4 <alt_qspi_controller_write_block+0x138>
{
/*
* data is not word aligned
* calculate padding bytes need to add before start of a data offset
*/
padding = write_offset & (sizeof(alt_u32) - 1);
801d960: e0bffd17 ldw r2,-12(fp)
801d964: 108000cc andi r2,r2,3
801d968: e0bffc15 stw r2,-16(fp)
/* update variables to account for padding being added */
bytes_to_copy -= padding;
801d96c: e0fffb17 ldw r3,-20(fp)
801d970: e0bffc17 ldw r2,-16(fp)
801d974: 1885c83a sub r2,r3,r2
801d978: e0bffb15 stw r2,-20(fp)
if(bytes_to_copy > remaining_length)
801d97c: e0bffb17 ldw r2,-20(fp)
801d980: e0fffe17 ldw r3,-8(fp)
801d984: 1880022e bgeu r3,r2,801d990 <alt_qspi_controller_write_block+0x114>
{
bytes_to_copy = remaining_length;
801d988: e0bffe17 ldw r2,-8(fp)
801d98c: e0bffb15 stw r2,-20(fp)
}
write_offset = write_offset - padding;
801d990: e0fffd17 ldw r3,-12(fp)
801d994: e0bffc17 ldw r2,-16(fp)
801d998: 1885c83a sub r2,r3,r2
801d99c: e0bffd15 stw r2,-12(fp)
if(0 != (write_offset & (sizeof(alt_u32) - 1)))
801d9a0: e0bffd17 ldw r2,-12(fp)
801d9a4: 108000cc andi r2,r2,3
801d9a8: 10000726 beq r2,zero,801d9c8 <alt_qspi_controller_write_block+0x14c>
{
return -EINVAL;
801d9ac: 00bffa84 movi r2,-22
801d9b0: 00003106 br 801da78 <alt_qspi_controller_write_block+0x1fc>
}
}
else
{
if(bytes_to_copy > remaining_length)
801d9b4: e0bffb17 ldw r2,-20(fp)
801d9b8: e0fffe17 ldw r3,-8(fp)
801d9bc: 1880022e bgeu r3,r2,801d9c8 <alt_qspi_controller_write_block+0x14c>
{
bytes_to_copy = remaining_length;
801d9c0: e0bffe17 ldw r2,-8(fp)
801d9c4: e0bffb15 stw r2,-20(fp)
}
}
/* prepare the word to be written */
memcpy((((void*)&word_to_write)) + padding, ((void*)data) + buffer_offset, bytes_to_copy);
801d9c8: e0fff904 addi r3,fp,-28
801d9cc: e0bffc17 ldw r2,-16(fp)
801d9d0: 1889883a add r4,r3,r2
801d9d4: e0fff517 ldw r3,-44(fp)
801d9d8: e0bfff17 ldw r2,-4(fp)
801d9dc: 1885883a add r2,r3,r2
801d9e0: e1bffb17 ldw r6,-20(fp)
801d9e4: 100b883a mov r5,r2
801d9e8: 80086b80 call 80086b8 <memcpy>
/* update offset and length variables */
buffer_offset += bytes_to_copy;
801d9ec: e0ffff17 ldw r3,-4(fp)
801d9f0: e0bffb17 ldw r2,-20(fp)
801d9f4: 1885883a add r2,r3,r2
801d9f8: e0bfff15 stw r2,-4(fp)
remaining_length -= bytes_to_copy;
801d9fc: e0fffe17 ldw r3,-8(fp)
801da00: e0bffb17 ldw r2,-20(fp)
801da04: 1885c83a sub r2,r3,r2
801da08: e0bffe15 stw r2,-8(fp)
/* write to flash 32 bits at a time */
IOWR_32DIRECT(qspi_flash_info->data_base, write_offset, word_to_write);
801da0c: e0bffa17 ldw r2,-24(fp)
801da10: 10c02e17 ldw r3,184(r2)
801da14: e0bffd17 ldw r2,-12(fp)
801da18: 1885883a add r2,r3,r2
801da1c: e0fff917 ldw r3,-28(fp)
801da20: 10c00035 stwio r3,0(r2)
/* check whether write triggered a illegal write interrupt */
if((IORD_ALTERA_QSPI_CONTROLLER_ISR(qspi_flash_info->csr_base) &
801da24: e0bffa17 ldw r2,-24(fp)
801da28: 10803017 ldw r2,192(r2)
801da2c: 10800404 addi r2,r2,16
801da30: 10800037 ldwio r2,0(r2)
801da34: 1080008c andi r2,r2,2
801da38: 10800098 cmpnei r2,r2,2
801da3c: 1000081e bne r2,zero,801da60 <alt_qspi_controller_write_block+0x1e4>
ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_WRITE_MASK) ==
ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_WRITE_ACTIVE)
{
/* clear register */
IOWR_ALTERA_QSPI_CONTROLLER_ISR(qspi_flash_info->csr_base,
801da40: e0bffa17 ldw r2,-24(fp)
801da44: 10803017 ldw r2,192(r2)
801da48: 10800404 addi r2,r2,16
801da4c: 1007883a mov r3,r2
801da50: 00800084 movi r2,2
801da54: 18800035 stwio r2,0(r3)
ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_WRITE_MASK );
return -EIO; /** write failed, sector might be protected */
801da58: 00bffec4 movi r2,-5
801da5c: 00000606 br 801da78 <alt_qspi_controller_write_block+0x1fc>
}
/* update current offset */
write_offset = write_offset + sizeof(alt_u32);
801da60: e0bffd17 ldw r2,-12(fp)
801da64: 10800104 addi r2,r2,4
801da68: e0bffd15 stw r2,-12(fp)
while (remaining_length > 0)
801da6c: e0bffe17 ldw r2,-8(fp)
801da70: 103fb31e bne r2,zero,801d940 <alt_qspi_controller_write_block+0xc4>
}
return 0;
801da74: 0005883a mov r2,zero
}
801da78: e037883a mov sp,fp
801da7c: dfc00117 ldw ra,4(sp)
801da80: df000017 ldw fp,0(sp)
801da84: dec00204 addi sp,sp,8
801da88: f800283a ret
0801da8c <alt_qspi_controller_write>:
alt_flash_dev *flash_info, /** device info */
int offset, /** offset of write from base address */
const void *src_addr, /** source buffer */
int length /** size of writing */
)
{
801da8c: defff004 addi sp,sp,-64
801da90: dfc00f15 stw ra,60(sp)
801da94: df000e15 stw fp,56(sp)
801da98: df000e04 addi fp,sp,56
801da9c: e13ff615 stw r4,-40(fp)
801daa0: e17ff515 stw r5,-44(fp)
801daa4: e1bff415 stw r6,-48(fp)
801daa8: e1fff315 stw r7,-52(fp)
alt_32 ret_code = 0;
801daac: e03fff15 stw zero,-4(fp)
alt_qspi_controller_dev *qspi_flash_info = NULL;
801dab0: e03ff915 stw zero,-28(fp)
alt_u32 write_offset = offset; /** address of next byte to write */
801dab4: e0bff517 ldw r2,-44(fp)
801dab8: e0bffe15 stw r2,-8(fp)
alt_u32 remaining_length = length; /** length of write data left to be written */
801dabc: e0bff317 ldw r2,-52(fp)
801dac0: e0bffd15 stw r2,-12(fp)
alt_u32 buffer_offset = 0; /** offset into source buffer to get write data */
801dac4: e03ffc15 stw zero,-16(fp)
alt_u32 i = 0;
801dac8: e03ffb15 stw zero,-20(fp)
/* return -EINVAL if flash_info and src_addr are NULL */
if(NULL == flash_info || NULL == src_addr)
801dacc: e0bff617 ldw r2,-40(fp)
801dad0: 10000226 beq r2,zero,801dadc <alt_qspi_controller_write+0x50>
801dad4: e0bff417 ldw r2,-48(fp)
801dad8: 1000021e bne r2,zero,801dae4 <alt_qspi_controller_write+0x58>
{
return -EINVAL;
801dadc: 00bffa84 movi r2,-22
801dae0: 00005f06 br 801dc60 <alt_qspi_controller_write+0x1d4>
}
qspi_flash_info = (alt_qspi_controller_dev*)flash_info;
801dae4: e0bff617 ldw r2,-40(fp)
801dae8: e0bff915 stw r2,-28(fp)
/* make sure the write parameters are within the bounds of the flash */
ret_code = alt_qspi_validate_read_write_arguments(qspi_flash_info, offset, length);
801daec: e0bff517 ldw r2,-44(fp)
801daf0: e0fff317 ldw r3,-52(fp)
801daf4: 180d883a mov r6,r3
801daf8: 100b883a mov r5,r2
801dafc: e13ff917 ldw r4,-28(fp)
801db00: 801df740 call 801df74 <alt_qspi_validate_read_write_arguments>
801db04: e0bfff15 stw r2,-4(fp)
if(0 != ret_code)
801db08: e0bfff17 ldw r2,-4(fp)
801db0c: 10000226 beq r2,zero,801db18 <alt_qspi_controller_write+0x8c>
{
return ret_code;
801db10: e0bfff17 ldw r2,-4(fp)
801db14: 00005206 br 801dc60 <alt_qspi_controller_write+0x1d4>
/*
* This loop erases and writes data one sector at a time. We check for write completion
* before starting the next sector.
*/
for(i = offset/qspi_flash_info->sector_size ; i < qspi_flash_info->number_of_sectors; i++)
801db18: e0fff517 ldw r3,-44(fp)
801db1c: e0bff917 ldw r2,-28(fp)
801db20: 10803417 ldw r2,208(r2)
801db24: 100b883a mov r5,r2
801db28: 1809883a mov r4,r3
801db2c: 800cff80 call 800cff8 <__udivsi3>
801db30: e0bffb15 stw r2,-20(fp)
801db34: 00004306 br 801dc44 <alt_qspi_controller_write+0x1b8>
{
alt_u32 block_offset = 0; /** block offset in byte addressing */
801db38: e03ff815 stw zero,-32(fp)
alt_u32 offset_within_current_sector = 0; /** offset into current sector to write */
801db3c: e03ffa15 stw zero,-24(fp)
alt_u32 length_to_write = 0; /** length to write to current sector */
801db40: e03ff715 stw zero,-36(fp)
if(0 >= remaining_length)
801db44: e0bffd17 ldw r2,-12(fp)
801db48: 10004326 beq r2,zero,801dc58 <alt_qspi_controller_write+0x1cc>
{
break; /* out of data to write */
}
/* calculate current sector/block offset in byte addressing */
block_offset = write_offset & ~(qspi_flash_info->sector_size - 1);
801db4c: e0bff917 ldw r2,-28(fp)
801db50: 10803417 ldw r2,208(r2)
801db54: 0085c83a sub r2,zero,r2
801db58: e0fffe17 ldw r3,-8(fp)
801db5c: 1884703a and r2,r3,r2
801db60: e0bff815 stw r2,-32(fp)
/* calculate offset into sector/block if there is one */
if(block_offset != write_offset)
801db64: e0fff817 ldw r3,-32(fp)
801db68: e0bffe17 ldw r2,-8(fp)
801db6c: 18800426 beq r3,r2,801db80 <alt_qspi_controller_write+0xf4>
{
offset_within_current_sector = write_offset - block_offset;
801db70: e0fffe17 ldw r3,-8(fp)
801db74: e0bff817 ldw r2,-32(fp)
801db78: 1885c83a sub r2,r3,r2
801db7c: e0bffa15 stw r2,-24(fp)
}
/* erase sector */
ret_code = alt_qspi_controller_erase_block(flash_info, block_offset);
801db80: e0bff817 ldw r2,-32(fp)
801db84: 100b883a mov r5,r2
801db88: e13ff617 ldw r4,-40(fp)
801db8c: 801d7580 call 801d758 <alt_qspi_controller_erase_block>
801db90: e0bfff15 stw r2,-4(fp)
if(0 != ret_code)
801db94: e0bfff17 ldw r2,-4(fp)
801db98: 10000226 beq r2,zero,801dba4 <alt_qspi_controller_write+0x118>
{
return ret_code;
801db9c: e0bfff17 ldw r2,-4(fp)
801dba0: 00002f06 br 801dc60 <alt_qspi_controller_write+0x1d4>
}
/* calculate the byte size of data to be written in a sector */
length_to_write = MIN(qspi_flash_info->sector_size - offset_within_current_sector,
801dba4: e0bff917 ldw r2,-28(fp)
801dba8: 10c03417 ldw r3,208(r2)
801dbac: e0bffa17 ldw r2,-24(fp)
801dbb0: 1887c83a sub r3,r3,r2
801dbb4: e0bffd17 ldw r2,-12(fp)
801dbb8: 1880012e bgeu r3,r2,801dbc0 <alt_qspi_controller_write+0x134>
801dbbc: 1805883a mov r2,r3
801dbc0: e0bff715 stw r2,-36(fp)
remaining_length);
/* write data to erased block */
ret_code = alt_qspi_controller_write_block(flash_info, block_offset, write_offset,
801dbc4: e13ff817 ldw r4,-32(fp)
801dbc8: e17ffe17 ldw r5,-8(fp)
801dbcc: e0fff417 ldw r3,-48(fp)
801dbd0: e0bffc17 ldw r2,-16(fp)
801dbd4: 1887883a add r3,r3,r2
801dbd8: e0bff717 ldw r2,-36(fp)
801dbdc: d8800015 stw r2,0(sp)
801dbe0: 180f883a mov r7,r3
801dbe4: 280d883a mov r6,r5
801dbe8: 200b883a mov r5,r4
801dbec: e13ff617 ldw r4,-40(fp)
801dbf0: 801d87c0 call 801d87c <alt_qspi_controller_write_block>
801dbf4: e0bfff15 stw r2,-4(fp)
src_addr + buffer_offset, length_to_write);
if(0 != ret_code)
801dbf8: e0bfff17 ldw r2,-4(fp)
801dbfc: 10000226 beq r2,zero,801dc08 <alt_qspi_controller_write+0x17c>
{
return ret_code;
801dc00: e0bfff17 ldw r2,-4(fp)
801dc04: 00001606 br 801dc60 <alt_qspi_controller_write+0x1d4>
}
/* update remaining length and buffer_offset pointer */
remaining_length -= length_to_write;
801dc08: e0fffd17 ldw r3,-12(fp)
801dc0c: e0bff717 ldw r2,-36(fp)
801dc10: 1885c83a sub r2,r3,r2
801dc14: e0bffd15 stw r2,-12(fp)
buffer_offset += length_to_write;
801dc18: e0fffc17 ldw r3,-16(fp)
801dc1c: e0bff717 ldw r2,-36(fp)
801dc20: 1885883a add r2,r3,r2
801dc24: e0bffc15 stw r2,-16(fp)
write_offset += length_to_write;
801dc28: e0fffe17 ldw r3,-8(fp)
801dc2c: e0bff717 ldw r2,-36(fp)
801dc30: 1885883a add r2,r3,r2
801dc34: e0bffe15 stw r2,-8(fp)
for(i = offset/qspi_flash_info->sector_size ; i < qspi_flash_info->number_of_sectors; i++)
801dc38: e0bffb17 ldw r2,-20(fp)
801dc3c: 10800044 addi r2,r2,1
801dc40: e0bffb15 stw r2,-20(fp)
801dc44: e0bff917 ldw r2,-28(fp)
801dc48: 10803317 ldw r2,204(r2)
801dc4c: e0fffb17 ldw r3,-20(fp)
801dc50: 18bfb936 bltu r3,r2,801db38 <alt_qspi_controller_write+0xac>
801dc54: 00000106 br 801dc5c <alt_qspi_controller_write+0x1d0>
break; /* out of data to write */
801dc58: 0001883a nop
}
return ret_code;
801dc5c: e0bfff17 ldw r2,-4(fp)
}
801dc60: e037883a mov sp,fp
801dc64: dfc00117 ldw ra,4(sp)
801dc68: df000017 ldw fp,0(sp)
801dc6c: dec00204 addi sp,sp,8
801dc70: f800283a ret
0801dc74 <alt_qspi_controller_read>:
alt_flash_dev *flash_info, /** device info */
int offset, /** offset of read from base address */
void *dest_addr, /** destination buffer */
int length /** size of read */
)
{
801dc74: defff804 addi sp,sp,-32
801dc78: dfc00715 stw ra,28(sp)
801dc7c: df000615 stw fp,24(sp)
801dc80: df000604 addi fp,sp,24
801dc84: e13ffd15 stw r4,-12(fp)
801dc88: e17ffc15 stw r5,-16(fp)
801dc8c: e1bffb15 stw r6,-20(fp)
801dc90: e1fffa15 stw r7,-24(fp)
alt_32 ret_code = 0;
801dc94: e03fff15 stw zero,-4(fp)
alt_qspi_controller_dev *qspi_flash_info = NULL;
801dc98: e03ffe15 stw zero,-8(fp)
/* return -EINVAL if flash_info and dest_addr are NULL */
if(NULL == flash_info || NULL == dest_addr)
801dc9c: e0bffd17 ldw r2,-12(fp)
801dca0: 10000226 beq r2,zero,801dcac <alt_qspi_controller_read+0x38>
801dca4: e0bffb17 ldw r2,-20(fp)
801dca8: 1000021e bne r2,zero,801dcb4 <alt_qspi_controller_read+0x40>
{
return -EINVAL;
801dcac: 00bffa84 movi r2,-22
801dcb0: 00001606 br 801dd0c <alt_qspi_controller_read+0x98>
}
qspi_flash_info = (alt_qspi_controller_dev*)flash_info;
801dcb4: e0bffd17 ldw r2,-12(fp)
801dcb8: e0bffe15 stw r2,-8(fp)
/* validate arguments */
ret_code = alt_qspi_validate_read_write_arguments(qspi_flash_info, offset, length);
801dcbc: e0bffc17 ldw r2,-16(fp)
801dcc0: e0fffa17 ldw r3,-24(fp)
801dcc4: 180d883a mov r6,r3
801dcc8: 100b883a mov r5,r2
801dccc: e13ffe17 ldw r4,-8(fp)
801dcd0: 801df740 call 801df74 <alt_qspi_validate_read_write_arguments>
801dcd4: e0bfff15 stw r2,-4(fp)
/* copy data from flash to destination address */
if(0 == ret_code)
801dcd8: e0bfff17 ldw r2,-4(fp)
801dcdc: 10000a1e bne r2,zero,801dd08 <alt_qspi_controller_read+0x94>
{
memcpy(dest_addr, (alt_u8*)qspi_flash_info->data_base + offset, length);
801dce0: e0bffe17 ldw r2,-8(fp)
801dce4: 10c02e17 ldw r3,184(r2)
801dce8: e0bffc17 ldw r2,-16(fp)
801dcec: 1885883a add r2,r3,r2
801dcf0: 1007883a mov r3,r2
801dcf4: e0bffa17 ldw r2,-24(fp)
801dcf8: 100d883a mov r6,r2
801dcfc: 180b883a mov r5,r3
801dd00: e13ffb17 ldw r4,-20(fp)
801dd04: 80086b80 call 80086b8 <memcpy>
}
return ret_code;
801dd08: e0bfff17 ldw r2,-4(fp)
}
801dd0c: e037883a mov sp,fp
801dd10: dfc00117 ldw ra,4(sp)
801dd14: df000017 ldw fp,0(sp)
801dd18: dec00204 addi sp,sp,8
801dd1c: f800283a ret
0801dd20 <altera_qspi_controller_init>:
* 0 -> success
* -EINVAL -> Invalid arguments.
* -ENODEV -> System is configured incorrectly.
**/
alt_32 altera_qspi_controller_init(alt_qspi_controller_dev *flash)
{
801dd20: defffa04 addi sp,sp,-24
801dd24: dfc00515 stw ra,20(sp)
801dd28: df000415 stw fp,16(sp)
801dd2c: df000404 addi fp,sp,16
801dd30: e13ffc15 stw r4,-16(fp)
alt_u32 silicon_id = 0;
801dd34: e03fff15 stw zero,-4(fp)
alt_u32 size_in_bytes = 0;
801dd38: e03ffd15 stw zero,-12(fp)
alt_u32 number_of_sectors = 0;
801dd3c: e03ffe15 stw zero,-8(fp)
/* return -EINVAL if flash is NULL */
if(NULL == flash)
801dd40: e0bffc17 ldw r2,-16(fp)
801dd44: 1000021e bne r2,zero,801dd50 <altera_qspi_controller_init+0x30>
{
return -EINVAL;
801dd48: 00bffa84 movi r2,-22
801dd4c: 00008406 br 801df60 <altera_qspi_controller_init+0x240>
}
/* return -ENODEV if CSR slave is not attached */
if(NULL == (void *)flash->csr_base)
801dd50: e0bffc17 ldw r2,-16(fp)
801dd54: 10803017 ldw r2,192(r2)
801dd58: 1000021e bne r2,zero,801dd64 <altera_qspi_controller_init+0x44>
{
return -ENODEV;
801dd5c: 00bffb44 movi r2,-19
801dd60: 00007f06 br 801df60 <altera_qspi_controller_init+0x240>
*
* In both cases, we can determine the number of sectors, which we can use
* to calculate a size. We compare that size to the system.h value to make sure
* the QSPI soft IP was configured correctly.
*/
if(0 == flash->is_epcs)
801dd64: e0bffc17 ldw r2,-16(fp)
801dd68: 10803217 ldw r2,200(r2)
801dd6c: 1000351e bne r2,zero,801de44 <altera_qspi_controller_init+0x124>
{
/* If we're an EPCQ or QSPI, we read QSPI_RD_RDID for the silicon ID */
silicon_id = IORD_ALTERA_QSPI_CONTROLLER_RDID(flash->csr_base);
801dd70: e0bffc17 ldw r2,-16(fp)
801dd74: 10803017 ldw r2,192(r2)
801dd78: 10800204 addi r2,r2,8
801dd7c: 10800037 ldwio r2,0(r2)
801dd80: e0bfff15 stw r2,-4(fp)
silicon_id &= ALTERA_QSPI_CONTROLLER_RDID_MASK;
801dd84: e0bfff17 ldw r2,-4(fp)
801dd88: 10803fcc andi r2,r2,255
801dd8c: e0bfff15 stw r2,-4(fp)
/* Determine which EPCQ/QSPI device so we can figure out the number of sectors */
/*EPCQ and QSPI share the same ID for the same capacity*/
switch(silicon_id)
801dd90: e0bfff17 ldw r2,-4(fp)
801dd94: 10bffac4 addi r2,r2,-21
801dd98: 10c00368 cmpgeui r3,r2,13
801dd9c: 1800271e bne r3,zero,801de3c <altera_qspi_controller_init+0x11c>
801dda0: 100690ba slli r3,r2,2
801dda4: 008200b4 movhi r2,2050
801dda8: 1885883a add r2,r3,r2
801ddac: 10b76d17 ldw r2,-8780(r2)
801ddb0: 1000683a jmp r2
801ddb4: 0801dde8 cmpgeui zero,at,1911
801ddb8: 0801ddf4 orhi zero,at,1911
801ddbc: 0801de00 call 801de0 <OSCtxSw_SWITCH_PC+0x801da0>
801ddc0: 0801de0c andi zero,at,1912
801ddc4: 0801de18 cmpnei zero,at,1912
801ddc8: 0801de3c xorhi zero,at,1912
801ddcc: 0801de3c xorhi zero,at,1912
801ddd0: 0801de3c xorhi zero,at,1912
801ddd4: 0801de3c xorhi zero,at,1912
801ddd8: 0801de3c xorhi zero,at,1912
801dddc: 0801de3c xorhi zero,at,1912
801dde0: 0801de24 muli zero,at,1912
801dde4: 0801de30 cmpltui zero,at,1912
{
case ALTERA_QSPI_CONTROLLER_RDID_QSPI16:
{
number_of_sectors = 32;
801dde8: 00800804 movi r2,32
801ddec: e0bffe15 stw r2,-8(fp)
break;
801ddf0: 00003006 br 801deb4 <altera_qspi_controller_init+0x194>
}
case ALTERA_QSPI_CONTROLLER_RDID_QSPI32:
{
number_of_sectors = 64;
801ddf4: 00801004 movi r2,64
801ddf8: e0bffe15 stw r2,-8(fp)
break;
801ddfc: 00002d06 br 801deb4 <altera_qspi_controller_init+0x194>
}
case ALTERA_QSPI_CONTROLLER_RDID_QSPI64:
{
number_of_sectors = 128;
801de00: 00802004 movi r2,128
801de04: e0bffe15 stw r2,-8(fp)
break;
801de08: 00002a06 br 801deb4 <altera_qspi_controller_init+0x194>
}
case ALTERA_QSPI_CONTROLLER_RDID_QSPI128:
{
number_of_sectors = 256;
801de0c: 00804004 movi r2,256
801de10: e0bffe15 stw r2,-8(fp)
break;
801de14: 00002706 br 801deb4 <altera_qspi_controller_init+0x194>
}
case ALTERA_QSPI_CONTROLLER_RDID_QSPI256:
{
number_of_sectors = 512;
801de18: 00808004 movi r2,512
801de1c: e0bffe15 stw r2,-8(fp)
break;
801de20: 00002406 br 801deb4 <altera_qspi_controller_init+0x194>
}
case ALTERA_QSPI_CONTROLLER_RDID_QSPI512:
{
number_of_sectors = 1024;
801de24: 00810004 movi r2,1024
801de28: e0bffe15 stw r2,-8(fp)
break;
801de2c: 00002106 br 801deb4 <altera_qspi_controller_init+0x194>
}
case ALTERA_QSPI_CONTROLLER_RDID_QSPI1024:
{
number_of_sectors = 2048;
801de30: 00820004 movi r2,2048
801de34: e0bffe15 stw r2,-8(fp)
break;
801de38: 00001e06 br 801deb4 <altera_qspi_controller_init+0x194>
}
default:
{
return -ENODEV;
801de3c: 00bffb44 movi r2,-19
801de40: 00004706 br 801df60 <altera_qspi_controller_init+0x240>
}
}
}
else {
/* If we're an EPCS, we read QSPI_RD_SID for the silicon ID */
silicon_id = IORD_ALTERA_QSPI_CONTROLLER_SID(flash->csr_base);
801de44: e0bffc17 ldw r2,-16(fp)
801de48: 10803017 ldw r2,192(r2)
801de4c: 10800104 addi r2,r2,4
801de50: 10800037 ldwio r2,0(r2)
801de54: e0bfff15 stw r2,-4(fp)
silicon_id &= ALTERA_QSPI_CONTROLLER_SID_MASK;
801de58: e0bfff17 ldw r2,-4(fp)
801de5c: 10803fcc andi r2,r2,255
801de60: e0bfff15 stw r2,-4(fp)
/* Determine which EPCS device so we can figure out various properties */
switch(silicon_id)
801de64: e0bfff17 ldw r2,-4(fp)
801de68: 108005a0 cmpeqi r2,r2,22
801de6c: 1000091e bne r2,zero,801de94 <altera_qspi_controller_init+0x174>
801de70: e0bfff17 ldw r2,-4(fp)
801de74: 10800620 cmpeqi r2,r2,24
801de78: 1000091e bne r2,zero,801dea0 <altera_qspi_controller_init+0x180>
801de7c: e0bfff17 ldw r2,-4(fp)
801de80: 10800518 cmpnei r2,r2,20
801de84: 1000091e bne r2,zero,801deac <altera_qspi_controller_init+0x18c>
{
case ALTERA_QSPI_CONTROLLER_SID_EPCS16:
{
number_of_sectors = 32;
801de88: 00800804 movi r2,32
801de8c: e0bffe15 stw r2,-8(fp)
break;
801de90: 00000806 br 801deb4 <altera_qspi_controller_init+0x194>
}
case ALTERA_QSPI_CONTROLLER_SID_EPCS64:
{
number_of_sectors = 128;
801de94: 00802004 movi r2,128
801de98: e0bffe15 stw r2,-8(fp)
break;
801de9c: 00000506 br 801deb4 <altera_qspi_controller_init+0x194>
}
case ALTERA_QSPI_CONTROLLER_SID_EPCS128:
{
number_of_sectors = 256;
801dea0: 00804004 movi r2,256
801dea4: e0bffe15 stw r2,-8(fp)
break;
801dea8: 00000206 br 801deb4 <altera_qspi_controller_init+0x194>
}
default:
{
return -ENODEV;
801deac: 00bffb44 movi r2,-19
801deb0: 00002b06 br 801df60 <altera_qspi_controller_init+0x240>
}
}
}
/* Calculate size of flash based on number of sectors */
size_in_bytes = number_of_sectors * flash->sector_size;
801deb4: e0bffc17 ldw r2,-16(fp)
801deb8: 10803417 ldw r2,208(r2)
801debc: e0fffe17 ldw r3,-8(fp)
801dec0: 1885383a mul r2,r3,r2
801dec4: e0bffd15 stw r2,-12(fp)
/*
* Make sure calculated size is the same size given in system.h
* Also check number of sectors is the same number given in system.h
* Otherwise the QSPI IP was not configured correctly
*/
if( size_in_bytes != flash->size_in_bytes ||
801dec8: e0bffc17 ldw r2,-16(fp)
801decc: 10803117 ldw r2,196(r2)
801ded0: e0fffd17 ldw r3,-12(fp)
801ded4: 1880041e bne r3,r2,801dee8 <altera_qspi_controller_init+0x1c8>
number_of_sectors != flash->number_of_sectors)
801ded8: e0bffc17 ldw r2,-16(fp)
801dedc: 10803317 ldw r2,204(r2)
if( size_in_bytes != flash->size_in_bytes ||
801dee0: e0fffe17 ldw r3,-8(fp)
801dee4: 18800426 beq r3,r2,801def8 <altera_qspi_controller_init+0x1d8>
{
flash->dev.number_of_regions = 0;
801dee8: e0bffc17 ldw r2,-16(fp)
801deec: 10000c15 stw zero,48(r2)
return -ENODEV;
801def0: 00bffb44 movi r2,-19
801def4: 00001a06 br 801df60 <altera_qspi_controller_init+0x240>
}
else
{
flash->silicon_id = silicon_id;
801def8: e0bffc17 ldw r2,-16(fp)
801defc: e0ffff17 ldw r3,-4(fp)
801df00: 10c03615 stw r3,216(r2)
flash->number_of_sectors = number_of_sectors;
801df04: e0bffc17 ldw r2,-16(fp)
801df08: e0fffe17 ldw r3,-8(fp)
801df0c: 10c03315 stw r3,204(r2)
/*
* populate fields of region_info required to conform to HAL API
* create 1 region that composed of "number_of_sectors" blocks
*/
flash->dev.number_of_regions = 1;
801df10: e0bffc17 ldw r2,-16(fp)
801df14: 00c00044 movi r3,1
801df18: 10c00c15 stw r3,48(r2)
flash->dev.region_info[0].offset = 0;
801df1c: e0bffc17 ldw r2,-16(fp)
801df20: 10000d15 stw zero,52(r2)
flash->dev.region_info[0].region_size = size_in_bytes;
801df24: e0fffd17 ldw r3,-12(fp)
801df28: e0bffc17 ldw r2,-16(fp)
801df2c: 10c00e15 stw r3,56(r2)
flash->dev.region_info[0].number_of_blocks = number_of_sectors;
801df30: e0fffe17 ldw r3,-8(fp)
801df34: e0bffc17 ldw r2,-16(fp)
801df38: 10c00f15 stw r3,60(r2)
flash->dev.region_info[0].block_size = flash->sector_size;
801df3c: e0bffc17 ldw r2,-16(fp)
801df40: 10803417 ldw r2,208(r2)
801df44: 1007883a mov r3,r2
801df48: e0bffc17 ldw r2,-16(fp)
801df4c: 10c01015 stw r3,64(r2)
/*
* Register this device as a valid flash device type
*
* Only register the device if it's configured correctly.
*/
alt_flash_device_register(&(flash->dev));
801df50: e0bffc17 ldw r2,-16(fp)
801df54: 1009883a mov r4,r2
801df58: 801d5880 call 801d588 <alt_flash_device_register>
return 0;
801df5c: 0005883a mov r2,zero
}
801df60: e037883a mov sp,fp
801df64: dfc00117 ldw ra,4(sp)
801df68: df000017 ldw fp,0(sp)
801df6c: dec00204 addi sp,sp,8
801df70: f800283a ret
0801df74 <alt_qspi_validate_read_write_arguments>:
(
alt_qspi_controller_dev *flash_info, /** device info */
alt_u32 offset, /** offset of read/write */
alt_u32 length /** length of read/write */
)
{
801df74: defff904 addi sp,sp,-28
801df78: df000615 stw fp,24(sp)
801df7c: df000604 addi fp,sp,24
801df80: e13ffc15 stw r4,-16(fp)
801df84: e17ffb15 stw r5,-20(fp)
801df88: e1bffa15 stw r6,-24(fp)
alt_qspi_controller_dev *qspi_flash_info = NULL;
801df8c: e03fff15 stw zero,-4(fp)
alt_u32 start_address = 0;
801df90: e03ffe15 stw zero,-8(fp)
alt_32 end_address = 0;
801df94: e03ffd15 stw zero,-12(fp)
/* return -EINVAL if flash_info is NULL */
if(NULL == flash_info)
801df98: e0bffc17 ldw r2,-16(fp)
801df9c: 1000021e bne r2,zero,801dfa8 <alt_qspi_validate_read_write_arguments+0x34>
{
return -EINVAL;
801dfa0: 00bffa84 movi r2,-22
801dfa4: 00001606 br 801e000 <alt_qspi_validate_read_write_arguments+0x8c>
}
qspi_flash_info = (alt_qspi_controller_dev*)flash_info;
801dfa8: e0bffc17 ldw r2,-16(fp)
801dfac: e0bfff15 stw r2,-4(fp)
start_address = qspi_flash_info->data_base + offset; /** first address of read or write */
801dfb0: e0bfff17 ldw r2,-4(fp)
801dfb4: 10802e17 ldw r2,184(r2)
801dfb8: e0fffb17 ldw r3,-20(fp)
801dfbc: 1885883a add r2,r3,r2
801dfc0: e0bffe15 stw r2,-8(fp)
end_address = start_address + length; /** last address of read or write (not inclusive) */
801dfc4: e0fffe17 ldw r3,-8(fp)
801dfc8: e0bffa17 ldw r2,-24(fp)
801dfcc: 1885883a add r2,r3,r2
801dfd0: e0bffd15 stw r2,-12(fp)
/* make sure start and end address is less then the end address of the flash */
if(
start_address >= qspi_flash_info->data_end ||
801dfd4: e0bfff17 ldw r2,-4(fp)
801dfd8: 10802f17 ldw r2,188(r2)
if(
801dfdc: e0fffe17 ldw r3,-8(fp)
801dfe0: 1880042e bgeu r3,r2,801dff4 <alt_qspi_validate_read_write_arguments+0x80>
end_address >= qspi_flash_info->data_end ||
801dfe4: e0bfff17 ldw r2,-4(fp)
801dfe8: 10802f17 ldw r2,188(r2)
801dfec: e0fffd17 ldw r3,-12(fp)
offset < 0 ||
801dff0: 18800236 bltu r3,r2,801dffc <alt_qspi_validate_read_write_arguments+0x88>
length < 0
)
{
return -EINVAL;
801dff4: 00bffa84 movi r2,-22
801dff8: 00000106 br 801e000 <alt_qspi_validate_read_write_arguments+0x8c>
}
return 0;
801dffc: 0005883a mov r2,zero
}
801e000: e037883a mov sp,fp
801e004: df000017 ldw fp,0(sp)
801e008: dec00104 addi sp,sp,4
801e00c: f800283a ret
0801e010 <alt_qspi_poll_for_write_in_progress>:
* 0 -> success
* -EINVAL -> Invalid arguments
* -ETIME -> Time out and skipping the looping after 0.7 sec.
*/
alt_32 static alt_qspi_poll_for_write_in_progress(alt_qspi_controller_dev* qspi_flash_info)
{
801e010: defffb04 addi sp,sp,-20
801e014: dfc00415 stw ra,16(sp)
801e018: df000315 stw fp,12(sp)
801e01c: df000304 addi fp,sp,12
801e020: e13ffd15 stw r4,-12(fp)
/* we'll want to implement timeout if a timeout value is specified */
#if ALTERA_QSPI_CONTROLLER_1US_TIMEOUT_VALUE > 0
alt_u32 timeout = ALTERA_QSPI_CONTROLLER_1US_TIMEOUT_VALUE;
801e024: 008002f4 movhi r2,11
801e028: 10ab9804 addi r2,r2,-20896
801e02c: e0bffe15 stw r2,-8(fp)
alt_u16 counter = 0;
801e030: e03fff8d sth zero,-2(fp)
#endif
/* return -EINVAL if qspi_flash_info is NULL */
if(NULL == qspi_flash_info)
801e034: e0bffd17 ldw r2,-12(fp)
801e038: 10000c1e bne r2,zero,801e06c <alt_qspi_poll_for_write_in_progress+0x5c>
{
return -EINVAL;
801e03c: 00bffa84 movi r2,-22
801e040: 00001106 br 801e088 <alt_qspi_poll_for_write_in_progress+0x78>
/* while Write in Progress bit is set, we wait */
while((IORD_ALTERA_QSPI_CONTROLLER_STATUS(qspi_flash_info->csr_base) &
ALTERA_QSPI_CONTROLLER_STATUS_WIP_MASK) ==
ALTERA_QSPI_CONTROLLER_STATUS_WIP_BUSY)
{
alt_busy_sleep(1); /* delay 1us */
801e044: 01000044 movi r4,1
801e048: 8036f5c0 call 8036f5c <alt_busy_sleep>
#if ALTERA_QSPI_CONTROLLER_1US_TIMEOUT_VALUE > 0
if(timeout <= counter )
801e04c: e0ffff8b ldhu r3,-2(fp)
801e050: e0bffe17 ldw r2,-8(fp)
801e054: 18800236 bltu r3,r2,801e060 <alt_qspi_poll_for_write_in_progress+0x50>
{
return -ETIME;
801e058: 00bff084 movi r2,-62
801e05c: 00000a06 br 801e088 <alt_qspi_poll_for_write_in_progress+0x78>
}
counter++;
801e060: e0bfff8b ldhu r2,-2(fp)
801e064: 10800044 addi r2,r2,1
801e068: e0bfff8d sth r2,-2(fp)
while((IORD_ALTERA_QSPI_CONTROLLER_STATUS(qspi_flash_info->csr_base) &
801e06c: e0bffd17 ldw r2,-12(fp)
801e070: 10803017 ldw r2,192(r2)
801e074: 10800037 ldwio r2,0(r2)
801e078: 1080004c andi r2,r2,1
801e07c: 10800060 cmpeqi r2,r2,1
801e080: 103ff01e bne r2,zero,801e044 <alt_qspi_poll_for_write_in_progress+0x34>
#endif
}
return 0;
801e084: 0005883a mov r2,zero
}
801e088: e037883a mov sp,fp
801e08c: dfc00117 ldw ra,4(sp)
801e090: df000017 ldw fp,0(sp)
801e094: dec00204 addi sp,sp,8
801e098: f800283a ret
0801e09c <alt_get_errno>:
{
801e09c: defffe04 addi sp,sp,-8
801e0a0: dfc00115 stw ra,4(sp)
801e0a4: df000015 stw fp,0(sp)
801e0a8: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
801e0ac: d0a02717 ldw r2,-32612(gp)
801e0b0: 10000326 beq r2,zero,801e0c0 <alt_get_errno+0x24>
801e0b4: d0a02717 ldw r2,-32612(gp)
801e0b8: 103ee83a callr r2
801e0bc: 00000106 br 801e0c4 <alt_get_errno+0x28>
801e0c0: d0a04204 addi r2,gp,-32504
}
801e0c4: e037883a mov sp,fp
801e0c8: dfc00117 ldw ra,4(sp)
801e0cc: df000017 ldw fp,0(sp)
801e0d0: dec00204 addi sp,sp,8
801e0d4: f800283a ret
0801e0d8 <alt_msgdma_write_standard_descriptor>:
*/
static int alt_msgdma_write_standard_descriptor (
alt_u32 *csr_base,
alt_u32 *descriptor_base,
alt_msgdma_standard_descriptor *descriptor)
{
801e0d8: defffc04 addi sp,sp,-16
801e0dc: df000315 stw fp,12(sp)
801e0e0: df000304 addi fp,sp,12
801e0e4: e13fff15 stw r4,-4(fp)
801e0e8: e17ffe15 stw r5,-8(fp)
801e0ec: e1bffd15 stw r6,-12(fp)
if (0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(csr_base) &
801e0f0: e0bfff17 ldw r2,-4(fp)
801e0f4: 10800037 ldwio r2,0(r2)
801e0f8: 1080010c andi r2,r2,4
801e0fc: 10000226 beq r2,zero,801e108 <alt_msgdma_write_standard_descriptor+0x30>
ALTERA_MSGDMA_CSR_DESCRIPTOR_BUFFER_FULL_MASK))
{
/*at least one descriptor buffer is full, returning so that this function
is non-blocking*/
return -ENOSPC;
801e100: 00bff904 movi r2,-28
801e104: 00001506 br 801e15c <alt_msgdma_write_standard_descriptor+0x84>
}
IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS(descriptor_base,
801e108: e0bffd17 ldw r2,-12(fp)
801e10c: 10800017 ldw r2,0(r2)
801e110: 1007883a mov r3,r2
801e114: e0bffe17 ldw r2,-8(fp)
801e118: 10c00035 stwio r3,0(r2)
(alt_u32)descriptor->read_address);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS(descriptor_base,
801e11c: e0bffe17 ldw r2,-8(fp)
801e120: 10800104 addi r2,r2,4
801e124: e0fffd17 ldw r3,-12(fp)
801e128: 18c00117 ldw r3,4(r3)
801e12c: 10c00035 stwio r3,0(r2)
( alt_u32)descriptor->write_address);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_LENGTH(descriptor_base,
801e130: e0bffe17 ldw r2,-8(fp)
801e134: 10800204 addi r2,r2,8
801e138: e0fffd17 ldw r3,-12(fp)
801e13c: 18c00217 ldw r3,8(r3)
801e140: 10c00035 stwio r3,0(r2)
descriptor->transfer_length);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_CONTROL_STANDARD(descriptor_base,
801e144: e0bffe17 ldw r2,-8(fp)
801e148: 10800304 addi r2,r2,12
801e14c: e0fffd17 ldw r3,-12(fp)
801e150: 18c00317 ldw r3,12(r3)
801e154: 10c00035 stwio r3,0(r2)
descriptor->control);
return 0;
801e158: 0005883a mov r2,zero
}
801e15c: e037883a mov sp,fp
801e160: df000017 ldw fp,0(sp)
801e164: dec00104 addi sp,sp,4
801e168: f800283a ret
0801e16c <alt_msgdma_write_extended_descriptor>:
*/
static int alt_msgdma_write_extended_descriptor (
alt_u32 *csr_base,
alt_u32 *descriptor_base,
alt_msgdma_extended_descriptor *descriptor)
{
801e16c: defffc04 addi sp,sp,-16
801e170: df000315 stw fp,12(sp)
801e174: df000304 addi fp,sp,12
801e178: e13fff15 stw r4,-4(fp)
801e17c: e17ffe15 stw r5,-8(fp)
801e180: e1bffd15 stw r6,-12(fp)
if (0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(csr_base) &
801e184: e0bfff17 ldw r2,-4(fp)
801e188: 10800037 ldwio r2,0(r2)
801e18c: 1080010c andi r2,r2,4
801e190: 10000226 beq r2,zero,801e19c <alt_msgdma_write_extended_descriptor+0x30>
ALTERA_MSGDMA_CSR_DESCRIPTOR_BUFFER_FULL_MASK))
{
/*at least one descriptor buffer is full, returning so that this function
is non-blocking*/
return -ENOSPC;
801e194: 00bff904 movi r2,-28
801e198: 00003b06 br 801e288 <alt_msgdma_write_extended_descriptor+0x11c>
}
IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS(
801e19c: e0bffd17 ldw r2,-12(fp)
801e1a0: 10800017 ldw r2,0(r2)
801e1a4: 1007883a mov r3,r2
801e1a8: e0bffe17 ldw r2,-8(fp)
801e1ac: 10c00035 stwio r3,0(r2)
descriptor_base,
(alt_u32)descriptor->read_address_low);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS(
801e1b0: e0bffe17 ldw r2,-8(fp)
801e1b4: 10800104 addi r2,r2,4
801e1b8: e0fffd17 ldw r3,-12(fp)
801e1bc: 18c00117 ldw r3,4(r3)
801e1c0: 10c00035 stwio r3,0(r2)
descriptor_base,
(alt_u32)descriptor->write_address_low);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_LENGTH(
801e1c4: e0bffe17 ldw r2,-8(fp)
801e1c8: 10800204 addi r2,r2,8
801e1cc: e0fffd17 ldw r3,-12(fp)
801e1d0: 18c00217 ldw r3,8(r3)
801e1d4: 10c00035 stwio r3,0(r2)
descriptor_base,
descriptor->transfer_length);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_SEQUENCE_NUMBER(
801e1d8: e0bffe17 ldw r2,-8(fp)
801e1dc: 10800304 addi r2,r2,12
801e1e0: e0fffd17 ldw r3,-12(fp)
801e1e4: 18c0030b ldhu r3,12(r3)
801e1e8: 18ffffcc andi r3,r3,65535
801e1ec: 10c0002d sthio r3,0(r2)
descriptor_base,
descriptor->sequence_number);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_BURST(
801e1f0: e0bffe17 ldw r2,-8(fp)
801e1f4: 10800384 addi r2,r2,14
801e1f8: e0fffd17 ldw r3,-12(fp)
801e1fc: 18c00383 ldbu r3,14(r3)
801e200: 18c03fcc andi r3,r3,255
801e204: 10c00025 stbio r3,0(r2)
descriptor_base,
descriptor->read_burst_count);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_BURST(
801e208: e0bffe17 ldw r2,-8(fp)
801e20c: 108003c4 addi r2,r2,15
801e210: e0fffd17 ldw r3,-12(fp)
801e214: 18c003c3 ldbu r3,15(r3)
801e218: 18c03fcc andi r3,r3,255
801e21c: 10c00025 stbio r3,0(r2)
descriptor_base,
descriptor->write_burst_count);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_STRIDE(
801e220: e0bffe17 ldw r2,-8(fp)
801e224: 10800404 addi r2,r2,16
801e228: e0fffd17 ldw r3,-12(fp)
801e22c: 18c0040b ldhu r3,16(r3)
801e230: 18ffffcc andi r3,r3,65535
801e234: 10c0002d sthio r3,0(r2)
descriptor_base,
descriptor->read_stride);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_STRIDE(
801e238: e0bffe17 ldw r2,-8(fp)
801e23c: 10800484 addi r2,r2,18
801e240: e0fffd17 ldw r3,-12(fp)
801e244: 18c0048b ldhu r3,18(r3)
801e248: 18ffffcc andi r3,r3,65535
801e24c: 10c0002d sthio r3,0(r2)
descriptor_base,
descriptor->write_stride);
IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS_HIGH(descriptor_base, 0);
801e250: e0bffe17 ldw r2,-8(fp)
801e254: 10800504 addi r2,r2,20
801e258: 0007883a mov r3,zero
801e25c: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS_HIGH(descriptor_base, 0);
801e260: e0bffe17 ldw r2,-8(fp)
801e264: 10800604 addi r2,r2,24
801e268: 0007883a mov r3,zero
801e26c: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_MSGDMA_DESCRIPTOR_CONTROL_ENHANCED(
801e270: e0bffe17 ldw r2,-8(fp)
801e274: 10800704 addi r2,r2,28
801e278: e0fffd17 ldw r3,-12(fp)
801e27c: 18c00717 ldw r3,28(r3)
801e280: 10c00035 stwio r3,0(r2)
descriptor_base,
descriptor->control);
return 0;
801e284: 0005883a mov r2,zero
}
801e288: e037883a mov sp,fp
801e28c: df000017 ldw fp,0(sp)
801e290: dec00104 addi sp,sp,4
801e294: f800283a ret
0801e298 <alt_msgdma_irq>:
* alt_msgdma_irq()
*
* Interrupt handler for the Modular Scatter-Gather DMA controller.
*/
static void alt_msgdma_irq(void *context)
{
801e298: defff804 addi sp,sp,-32
801e29c: dfc00715 stw ra,28(sp)
801e2a0: df000615 stw fp,24(sp)
801e2a4: df000604 addi fp,sp,24
801e2a8: e13ffa15 stw r4,-24(fp)
alt_msgdma_dev *dev = (alt_msgdma_dev *) context;
801e2ac: e0bffa17 ldw r2,-24(fp)
801e2b0: e0bfff15 stw r2,-4(fp)
alt_irq_context cpu_sr;
alt_u32 temporary_control;
/* disable global interrupt*/
if (dev->prefetcher_enable)
801e2b4: e0bfff17 ldw r2,-4(fp)
801e2b8: 10801783 ldbu r2,94(r2)
801e2bc: 10803fcc andi r2,r2,255
801e2c0: 10001126 beq r2,zero,801e308 <alt_msgdma_irq+0x70>
{
temporary_control =
IORD_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base)
801e2c4: e0bfff17 ldw r2,-4(fp)
801e2c8: 10800617 ldw r2,24(r2)
801e2cc: 10800037 ldwio r2,0(r2)
& ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_CLR_MASK;
801e2d0: 1007883a mov r3,r2
temporary_control =
801e2d4: 00bffdc4 movi r2,-9
801e2d8: 1884703a and r2,r3,r2
801e2dc: e0bffe15 stw r2,-8(fp)
IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base,
801e2e0: e0bfff17 ldw r2,-4(fp)
801e2e4: 10800617 ldw r2,24(r2)
801e2e8: e0fffe17 ldw r3,-8(fp)
801e2ec: 10c00035 stwio r3,0(r2)
temporary_control);
/* clear the IRQ status- W1C */
IOWR_ALT_MSGDMA_PREFETCHER_STATUS(dev->prefetcher_base,
801e2f0: e0bfff17 ldw r2,-4(fp)
801e2f4: 10800617 ldw r2,24(r2)
801e2f8: 10800404 addi r2,r2,16
801e2fc: 00c00044 movi r3,1
801e300: 10c00035 stwio r3,0(r2)
801e304: 00001106 br 801e34c <alt_msgdma_irq+0xb4>
ALT_MSGDMA_PREFETCHER_STATUS_IRQ_SET_MASK);
}
else
{
temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base)
801e308: e0bfff17 ldw r2,-4(fp)
801e30c: 10800317 ldw r2,12(r2)
801e310: 10800104 addi r2,r2,4
801e314: 10800037 ldwio r2,0(r2)
& (~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK);
801e318: 1007883a mov r3,r2
temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base)
801e31c: 00bffbc4 movi r2,-17
801e320: 1884703a and r2,r3,r2
801e324: e0bffe15 stw r2,-8(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, temporary_control);
801e328: e0bfff17 ldw r2,-4(fp)
801e32c: 10800317 ldw r2,12(r2)
801e330: 10800104 addi r2,r2,4
801e334: e0fffe17 ldw r3,-8(fp)
801e338: 10c00035 stwio r3,0(r2)
/* clear the IRQ status */
IOWR_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base,
801e33c: e0bfff17 ldw r2,-4(fp)
801e340: 10800317 ldw r2,12(r2)
801e344: 00c08004 movi r3,512
801e348: 10c00035 stwio r3,0(r2)
* Other interrupts are explicitly disabled if callbacks
* are registered because there is no guarantee that they are
* pre-emption-safe. This allows the driver to support
* interrupt pre-emption.
*/
if(dev->callback)
801e34c: e0bfff17 ldw r2,-4(fp)
801e350: 10800b17 ldw r2,44(r2)
801e354: 10001226 beq r2,zero,801e3a0 <alt_msgdma_irq+0x108>
NIOS2_READ_STATUS (context);
801e358: 0005303a rdctl r2,status
801e35c: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801e360: e0fffb17 ldw r3,-20(fp)
801e364: 00bfff84 movi r2,-2
801e368: 1884703a and r2,r3,r2
801e36c: 1001703a wrctl status,r2
return context;
801e370: e0bffb17 ldw r2,-20(fp)
{
cpu_sr = alt_irq_disable_all();
801e374: e0bffd15 stw r2,-12(fp)
dev->callback (dev->callback_context);
801e378: e0bfff17 ldw r2,-4(fp)
801e37c: 10800b17 ldw r2,44(r2)
801e380: e0ffff17 ldw r3,-4(fp)
801e384: 18c00c17 ldw r3,48(r3)
801e388: 1809883a mov r4,r3
801e38c: 103ee83a callr r2
801e390: e0bffd17 ldw r2,-12(fp)
801e394: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
801e398: e0bffc17 ldw r2,-16(fp)
801e39c: 1001703a wrctl status,r2
alt_irq_enable_all(cpu_sr);
}
/* enable global interrupt */
if (dev->prefetcher_enable)
801e3a0: e0bfff17 ldw r2,-4(fp)
801e3a4: 10801783 ldbu r2,94(r2)
801e3a8: 10803fcc andi r2,r2,255
801e3ac: 10000a26 beq r2,zero,801e3d8 <alt_msgdma_irq+0x140>
{
temporary_control =
IORD_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base)
801e3b0: e0bfff17 ldw r2,-4(fp)
801e3b4: 10800617 ldw r2,24(r2)
801e3b8: 10800037 ldwio r2,0(r2)
| ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_SET_MASK;
801e3bc: 10800214 ori r2,r2,8
temporary_control =
801e3c0: e0bffe15 stw r2,-8(fp)
IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base,
801e3c4: e0bfff17 ldw r2,-4(fp)
801e3c8: 10800617 ldw r2,24(r2)
801e3cc: e0fffe17 ldw r3,-8(fp)
801e3d0: 10c00035 stwio r3,0(r2)
| (ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK);
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, temporary_control);
}
return;
801e3d4: 00000c06 br 801e408 <alt_msgdma_irq+0x170>
temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base)
801e3d8: e0bfff17 ldw r2,-4(fp)
801e3dc: 10800317 ldw r2,12(r2)
801e3e0: 10800104 addi r2,r2,4
801e3e4: 10800037 ldwio r2,0(r2)
| (ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK);
801e3e8: 10800414 ori r2,r2,16
temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base)
801e3ec: e0bffe15 stw r2,-8(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, temporary_control);
801e3f0: e0bfff17 ldw r2,-4(fp)
801e3f4: 10800317 ldw r2,12(r2)
801e3f8: 10800104 addi r2,r2,4
801e3fc: e0fffe17 ldw r3,-8(fp)
801e400: 10c00035 stwio r3,0(r2)
return;
801e404: 0001883a nop
}
801e408: e037883a mov sp,fp
801e40c: dfc00117 ldw ra,4(sp)
801e410: df000017 ldw fp,0(sp)
801e414: dec00204 addi sp,sp,8
801e418: f800283a ret
0801e41c <alt_msgdma_construct_standard_descriptor>:
alt_msgdma_standard_descriptor *descriptor,
alt_u32 *read_address,
alt_u32 *write_address,
alt_u32 length,
alt_u32 control)
{
801e41c: defffb04 addi sp,sp,-20
801e420: df000415 stw fp,16(sp)
801e424: df000404 addi fp,sp,16
801e428: e13fff15 stw r4,-4(fp)
801e42c: e17ffe15 stw r5,-8(fp)
801e430: e1bffd15 stw r6,-12(fp)
801e434: e1fffc15 stw r7,-16(fp)
if(dev->max_byte < length ||
801e438: e0bfff17 ldw r2,-4(fp)
801e43c: 10c01217 ldw r3,72(r2)
801e440: e0800117 ldw r2,4(fp)
801e444: 18800436 bltu r3,r2,801e458 <alt_msgdma_construct_standard_descriptor+0x3c>
dev->enhanced_features != 0
801e448: e0bfff17 ldw r2,-4(fp)
801e44c: 10801703 ldbu r2,92(r2)
if(dev->max_byte < length ||
801e450: 10803fcc andi r2,r2,255
801e454: 10000226 beq r2,zero,801e460 <alt_msgdma_construct_standard_descriptor+0x44>
)
{
return -EINVAL;
801e458: 00bffa84 movi r2,-22
801e45c: 00000e06 br 801e498 <alt_msgdma_construct_standard_descriptor+0x7c>
}
descriptor->read_address = read_address;
801e460: e0bffe17 ldw r2,-8(fp)
801e464: e0fffd17 ldw r3,-12(fp)
801e468: 10c00015 stw r3,0(r2)
descriptor->write_address = write_address;
801e46c: e0bffe17 ldw r2,-8(fp)
801e470: e0fffc17 ldw r3,-16(fp)
801e474: 10c00115 stw r3,4(r2)
descriptor->transfer_length = length;
801e478: e0bffe17 ldw r2,-8(fp)
801e47c: e0c00117 ldw r3,4(fp)
801e480: 10c00215 stw r3,8(r2)
descriptor->control = control | ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK;
801e484: e0800217 ldw r2,8(fp)
801e488: 10e00034 orhi r3,r2,32768
801e48c: e0bffe17 ldw r2,-8(fp)
801e490: 10c00315 stw r3,12(r2)
return 0;
801e494: 0005883a mov r2,zero
}
801e498: e037883a mov sp,fp
801e49c: df000017 ldw fp,0(sp)
801e4a0: dec00104 addi sp,sp,4
801e4a4: f800283a ret
0801e4a8 <alt_msgdma_construct_extended_descriptor>:
alt_u16 sequence_number,
alt_u8 read_burst_count,
alt_u8 write_burst_count,
alt_u16 read_stride,
alt_u16 write_stride)
{
801e4a8: defff604 addi sp,sp,-40
801e4ac: df000915 stw fp,36(sp)
801e4b0: df000904 addi fp,sp,36
801e4b4: e13fff15 stw r4,-4(fp)
801e4b8: e17ffe15 stw r5,-8(fp)
801e4bc: e1bffd15 stw r6,-12(fp)
801e4c0: e1fffc15 stw r7,-16(fp)
801e4c4: e1800317 ldw r6,12(fp)
801e4c8: e1400417 ldw r5,16(fp)
801e4cc: e1000517 ldw r4,20(fp)
801e4d0: e0c00617 ldw r3,24(fp)
801e4d4: e0800717 ldw r2,28(fp)
801e4d8: e1bffb0d sth r6,-20(fp)
801e4dc: e17ffa05 stb r5,-24(fp)
801e4e0: e13ff905 stb r4,-28(fp)
801e4e4: e0fff80d sth r3,-32(fp)
801e4e8: e0bff70d sth r2,-36(fp)
if(dev->max_byte < length ||
801e4ec: e0bfff17 ldw r2,-4(fp)
801e4f0: 10c01217 ldw r3,72(r2)
801e4f4: e0800117 ldw r2,4(fp)
801e4f8: 18801936 bltu r3,r2,801e560 <alt_msgdma_construct_extended_descriptor+0xb8>
dev->max_stride < read_stride ||
801e4fc: e13fff17 ldw r4,-4(fp)
801e500: 20801317 ldw r2,76(r4)
801e504: 20c01417 ldw r3,80(r4)
801e508: e13ff80b ldhu r4,-32(fp)
801e50c: 213fffcc andi r4,r4,65535
801e510: 2015883a mov r10,r4
801e514: 0017883a mov r11,zero
if(dev->max_byte < length ||
801e518: 1ac01136 bltu r3,r11,801e560 <alt_msgdma_construct_extended_descriptor+0xb8>
801e51c: 58c0011e bne r11,r3,801e524 <alt_msgdma_construct_extended_descriptor+0x7c>
801e520: 12800f36 bltu r2,r10,801e560 <alt_msgdma_construct_extended_descriptor+0xb8>
dev->max_stride < write_stride ||
801e524: e13fff17 ldw r4,-4(fp)
801e528: 20801317 ldw r2,76(r4)
801e52c: 20c01417 ldw r3,80(r4)
801e530: e13ff70b ldhu r4,-36(fp)
801e534: 213fffcc andi r4,r4,65535
801e538: 2011883a mov r8,r4
801e53c: 0013883a mov r9,zero
dev->max_stride < read_stride ||
801e540: 1a400736 bltu r3,r9,801e560 <alt_msgdma_construct_extended_descriptor+0xb8>
801e544: 48c0011e bne r9,r3,801e54c <alt_msgdma_construct_extended_descriptor+0xa4>
801e548: 12000536 bltu r2,r8,801e560 <alt_msgdma_construct_extended_descriptor+0xb8>
dev->enhanced_features != 1
801e54c: e0bfff17 ldw r2,-4(fp)
801e550: 10801703 ldbu r2,92(r2)
dev->max_stride < write_stride ||
801e554: 10803fcc andi r2,r2,255
801e558: 10800060 cmpeqi r2,r2,1
801e55c: 1000021e bne r2,zero,801e568 <alt_msgdma_construct_extended_descriptor+0xc0>
)
{
return -EINVAL;
801e560: 00bffa84 movi r2,-22
801e564: 00002106 br 801e5ec <alt_msgdma_construct_extended_descriptor+0x144>
}
descriptor->read_address_low = read_address;
801e568: e0bffe17 ldw r2,-8(fp)
801e56c: e0fffd17 ldw r3,-12(fp)
801e570: 10c00015 stw r3,0(r2)
descriptor->write_address_low = write_address;
801e574: e0bffe17 ldw r2,-8(fp)
801e578: e0fffc17 ldw r3,-16(fp)
801e57c: 10c00115 stw r3,4(r2)
descriptor->transfer_length = length;
801e580: e0bffe17 ldw r2,-8(fp)
801e584: e0c00117 ldw r3,4(fp)
801e588: 10c00215 stw r3,8(r2)
descriptor->sequence_number = sequence_number;
801e58c: e0bffe17 ldw r2,-8(fp)
801e590: e0fffb0b ldhu r3,-20(fp)
801e594: 10c0030d sth r3,12(r2)
descriptor->read_burst_count = read_burst_count;
801e598: e0bffe17 ldw r2,-8(fp)
801e59c: e0fffa03 ldbu r3,-24(fp)
801e5a0: 10c00385 stb r3,14(r2)
descriptor->write_burst_count = write_burst_count;
801e5a4: e0bffe17 ldw r2,-8(fp)
801e5a8: e0fff903 ldbu r3,-28(fp)
801e5ac: 10c003c5 stb r3,15(r2)
descriptor->read_stride = read_stride;
801e5b0: e0bffe17 ldw r2,-8(fp)
801e5b4: e0fff80b ldhu r3,-32(fp)
801e5b8: 10c0040d sth r3,16(r2)
descriptor->write_stride = write_stride;
801e5bc: e0bffe17 ldw r2,-8(fp)
801e5c0: e0fff70b ldhu r3,-36(fp)
801e5c4: 10c0048d sth r3,18(r2)
descriptor->read_address_high = NULL;
801e5c8: e0bffe17 ldw r2,-8(fp)
801e5cc: 10000515 stw zero,20(r2)
descriptor->write_address_high = NULL;
801e5d0: e0bffe17 ldw r2,-8(fp)
801e5d4: 10000615 stw zero,24(r2)
descriptor->control = control | ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK;
801e5d8: e0800217 ldw r2,8(fp)
801e5dc: 10e00034 orhi r3,r2,32768
801e5e0: e0bffe17 ldw r2,-8(fp)
801e5e4: 10c00715 stw r3,28(r2)
return 0 ;
801e5e8: 0005883a mov r2,zero
}
801e5ec: e037883a mov sp,fp
801e5f0: df000017 ldw fp,0(sp)
801e5f4: dec00104 addi sp,sp,4
801e5f8: f800283a ret
0801e5fc <alt_msgdma_descriptor_async_transfer>:
*/
static int alt_msgdma_descriptor_async_transfer (
alt_msgdma_dev *dev,
alt_msgdma_standard_descriptor *standard_desc,
alt_msgdma_extended_descriptor *extended_desc)
{
801e5fc: deffed04 addi sp,sp,-76
801e600: dfc01215 stw ra,72(sp)
801e604: df001115 stw fp,68(sp)
801e608: df001104 addi fp,sp,68
801e60c: e13ff115 stw r4,-60(fp)
801e610: e17ff015 stw r5,-64(fp)
801e614: e1bfef15 stw r6,-68(fp)
alt_u32 control = 0;
801e618: e03ffe15 stw zero,-8(fp)
alt_irq_context context = 0;
801e61c: e03ffd15 stw zero,-12(fp)
alt_u16 counter = 0;
801e620: e03fff8d sth zero,-2(fp)
alt_u32 fifo_read_fill_level = (
IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) &
801e624: e0bff117 ldw r2,-60(fp)
801e628: 10800317 ldw r2,12(r2)
801e62c: 10800204 addi r2,r2,8
801e630: 10800037 ldwio r2,0(r2)
alt_u32 fifo_read_fill_level = (
801e634: 10bfffcc andi r2,r2,65535
801e638: e0bffc15 stw r2,-16(fp)
ALTERA_MSGDMA_CSR_READ_FILL_LEVEL_MASK) >>
ALTERA_MSGDMA_CSR_READ_FILL_LEVEL_OFFSET;
alt_u32 fifo_write_fill_level = (
IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) &
801e63c: e0bff117 ldw r2,-60(fp)
801e640: 10800317 ldw r2,12(r2)
801e644: 10800204 addi r2,r2,8
801e648: 10800037 ldwio r2,0(r2)
ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_MASK) >>
801e64c: 1004d43a srli r2,r2,16
alt_u32 fifo_write_fill_level = (
801e650: 10bfffcc andi r2,r2,65535
801e654: e0bffb15 stw r2,-20(fp)
ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_OFFSET;
/* Return with error immediately if one of read/write buffer is full */
if((dev->descriptor_fifo_depth <= fifo_write_fill_level) ||
801e658: e0bff117 ldw r2,-60(fp)
801e65c: 10800917 ldw r2,36(r2)
801e660: e0fffb17 ldw r3,-20(fp)
801e664: 1880042e bgeu r3,r2,801e678 <alt_msgdma_descriptor_async_transfer+0x7c>
(dev->descriptor_fifo_depth <= fifo_read_fill_level))
801e668: e0bff117 ldw r2,-60(fp)
801e66c: 10800917 ldw r2,36(r2)
if((dev->descriptor_fifo_depth <= fifo_write_fill_level) ||
801e670: e0fffc17 ldw r3,-16(fp)
801e674: 18800236 bltu r3,r2,801e680 <alt_msgdma_descriptor_async_transfer+0x84>
{
/*at least one write or read FIFO descriptor buffer is full,
returning so that this function is non-blocking*/
return -ENOSPC;
801e678: 00bff904 movi r2,-28
801e67c: 0000a906 br 801e924 <alt_msgdma_descriptor_async_transfer+0x328>
/*
* When running in a multi threaded environment, obtain the "regs_lock"
* semaphore. This ensures that accessing registers is thread-safe.
*/
ALT_SEM_PEND (dev->regs_lock, 0);
801e680: e0bff117 ldw r2,-60(fp)
801e684: 10801817 ldw r2,96(r2)
801e688: e0bff815 stw r2,-32(fp)
801e68c: e03ff78d sth zero,-34(fp)
801e690: e0bff78b ldhu r2,-34(fp)
801e694: e0fff2c4 addi r3,fp,-53
801e698: 180d883a mov r6,r3
801e69c: 100b883a mov r5,r2
801e6a0: e13ff817 ldw r4,-32(fp)
801e6a4: 8015a600 call 8015a60 <OSSemPend>
/* Stop the msgdma dispatcher from issuing more descriptors to the
read or write masters */
/* stop issuing more descriptors */
control = ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK;
801e6a8: 00800804 movi r2,32
801e6ac: e0bffe15 stw r2,-8(fp)
NIOS2_READ_STATUS (context);
801e6b0: 0005303a rdctl r2,status
801e6b4: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801e6b8: e0fff917 ldw r3,-28(fp)
801e6bc: 00bfff84 movi r2,-2
801e6c0: 1884703a and r2,r3,r2
801e6c4: 1001703a wrctl status,r2
return context;
801e6c8: e0bff917 ldw r2,-28(fp)
/* making sure the read-modify-write below can't be pre-empted */
context = alt_irq_disable_all();
801e6cc: e0bffd15 stw r2,-12(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, control);
801e6d0: e0bff117 ldw r2,-60(fp)
801e6d4: 10800317 ldw r2,12(r2)
801e6d8: 10800104 addi r2,r2,4
801e6dc: e0fffe17 ldw r3,-8(fp)
801e6e0: 10c00035 stwio r3,0(r2)
/*
* Clear any (previous) status register information
* that might occlude our error checking later.
*/
IOWR_ALTERA_MSGDMA_CSR_STATUS(
801e6e4: e0bff117 ldw r2,-60(fp)
801e6e8: 10800317 ldw r2,12(r2)
801e6ec: e0fff117 ldw r3,-60(fp)
801e6f0: 18c00317 ldw r3,12(r3)
801e6f4: 18c00037 ldwio r3,0(r3)
801e6f8: 10c00035 stwio r3,0(r2)
801e6fc: e0bffd17 ldw r2,-12(fp)
801e700: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
801e704: e0bffa17 ldw r2,-24(fp)
801e708: 1001703a wrctl status,r2
dev->csr_base,
IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base));
alt_irq_enable_all(context);
if (NULL != standard_desc && NULL == extended_desc)
801e70c: e0bff017 ldw r2,-64(fp)
801e710: 10001e26 beq r2,zero,801e78c <alt_msgdma_descriptor_async_transfer+0x190>
801e714: e0bfef17 ldw r2,-68(fp)
801e718: 10001c1e bne r2,zero,801e78c <alt_msgdma_descriptor_async_transfer+0x190>
{
/*writing descriptor structure to the dispatcher, wait until descriptor
write is succeed*/
while(0 != alt_msgdma_write_standard_descriptor (
801e71c: 00001106 br 801e764 <alt_msgdma_descriptor_async_transfer+0x168>
dev->csr_base, dev->descriptor_base, standard_desc))
{
alt_busy_sleep(1); /* delay 1us */
801e720: 01000044 movi r4,1
801e724: 8036f5c0 call 8036f5c <alt_busy_sleep>
if(5000 <= counter) /* time_out if waiting longer than 5 msec */
801e728: e0bfff8b ldhu r2,-2(fp)
801e72c: 1084e230 cmpltui r2,r2,5000
801e730: 1000091e bne r2,zero,801e758 <alt_msgdma_descriptor_async_transfer+0x15c>
{
alt_printf("time out after 5 msec while waiting"
801e734: 01020174 movhi r4,2053
801e738: 21254e04 addi r4,r4,-27336
801e73c: 8037a9c0 call 8037a9c <alt_printf>
/*
* Now that access to the registers is complete, release the
* registers semaphore so that other threads can access the
* registers.
*/
ALT_SEM_POST (dev->regs_lock);
801e740: e0bff117 ldw r2,-60(fp)
801e744: 10801817 ldw r2,96(r2)
801e748: 1009883a mov r4,r2
801e74c: 8015d840 call 8015d84 <OSSemPost>
return -ETIME;
801e750: 00bff084 movi r2,-62
801e754: 00007306 br 801e924 <alt_msgdma_descriptor_async_transfer+0x328>
}
counter++;
801e758: e0bfff8b ldhu r2,-2(fp)
801e75c: 10800044 addi r2,r2,1
801e760: e0bfff8d sth r2,-2(fp)
while(0 != alt_msgdma_write_standard_descriptor (
801e764: e0bff117 ldw r2,-60(fp)
801e768: 10c00317 ldw r3,12(r2)
801e76c: e0bff117 ldw r2,-60(fp)
801e770: 10800417 ldw r2,16(r2)
801e774: e1bff017 ldw r6,-64(fp)
801e778: 100b883a mov r5,r2
801e77c: 1809883a mov r4,r3
801e780: 801e0d80 call 801e0d8 <alt_msgdma_write_standard_descriptor>
801e784: 103fe61e bne r2,zero,801e720 <alt_msgdma_descriptor_async_transfer+0x124>
if (NULL != standard_desc && NULL == extended_desc)
801e788: 00002706 br 801e828 <alt_msgdma_descriptor_async_transfer+0x22c>
}
}
else if (NULL == standard_desc && NULL != extended_desc)
801e78c: e0bff017 ldw r2,-64(fp)
801e790: 10001f1e bne r2,zero,801e810 <alt_msgdma_descriptor_async_transfer+0x214>
801e794: e0bfef17 ldw r2,-68(fp)
801e798: 10001d26 beq r2,zero,801e810 <alt_msgdma_descriptor_async_transfer+0x214>
{
counter = 0; /* reset counter */
801e79c: e03fff8d sth zero,-2(fp)
/*writing descriptor structure to the dispatcher, wait until descriptor
write is succeed*/
while(0 != alt_msgdma_write_extended_descriptor (
801e7a0: 00001106 br 801e7e8 <alt_msgdma_descriptor_async_transfer+0x1ec>
dev->csr_base,
dev->descriptor_base,
extended_desc))
{
alt_busy_sleep(1); /* delay 1us */
801e7a4: 01000044 movi r4,1
801e7a8: 8036f5c0 call 8036f5c <alt_busy_sleep>
if(5000 <= counter) /* time_out if waiting longer than 5 msec */
801e7ac: e0bfff8b ldhu r2,-2(fp)
801e7b0: 1084e230 cmpltui r2,r2,5000
801e7b4: 1000091e bne r2,zero,801e7dc <alt_msgdma_descriptor_async_transfer+0x1e0>
{
alt_printf("time out after 5 msec while waiting free FIFO buffer"
801e7b8: 01020174 movhi r4,2053
801e7bc: 21256404 addi r4,r4,-27248
801e7c0: 8037a9c0 call 8037a9c <alt_printf>
/*
* Now that access to the registers is complete, release the
* registers semaphore so that other threads can access the
* registers.
*/
ALT_SEM_POST (dev->regs_lock);
801e7c4: e0bff117 ldw r2,-60(fp)
801e7c8: 10801817 ldw r2,96(r2)
801e7cc: 1009883a mov r4,r2
801e7d0: 8015d840 call 8015d84 <OSSemPost>
return -ETIME;
801e7d4: 00bff084 movi r2,-62
801e7d8: 00005206 br 801e924 <alt_msgdma_descriptor_async_transfer+0x328>
}
counter++;
801e7dc: e0bfff8b ldhu r2,-2(fp)
801e7e0: 10800044 addi r2,r2,1
801e7e4: e0bfff8d sth r2,-2(fp)
while(0 != alt_msgdma_write_extended_descriptor (
801e7e8: e0bff117 ldw r2,-60(fp)
801e7ec: 10c00317 ldw r3,12(r2)
801e7f0: e0bff117 ldw r2,-60(fp)
801e7f4: 10800417 ldw r2,16(r2)
801e7f8: e1bfef17 ldw r6,-68(fp)
801e7fc: 100b883a mov r5,r2
801e800: 1809883a mov r4,r3
801e804: 801e16c0 call 801e16c <alt_msgdma_write_extended_descriptor>
801e808: 103fe61e bne r2,zero,801e7a4 <alt_msgdma_descriptor_async_transfer+0x1a8>
else if (NULL == standard_desc && NULL != extended_desc)
801e80c: 00000606 br 801e828 <alt_msgdma_descriptor_async_transfer+0x22c>
{
/*
* Now that access to the registers is complete, release the registers
* semaphore so that other threads can access the registers.
*/
ALT_SEM_POST (dev->regs_lock);
801e810: e0bff117 ldw r2,-60(fp)
801e814: 10801817 ldw r2,96(r2)
801e818: 1009883a mov r4,r2
801e81c: 8015d840 call 8015d84 <OSSemPost>
/* operation not permitted due to descriptor type conflict */
return -EPERM;
801e820: 00bfffc4 movi r2,-1
801e824: 00003f06 br 801e924 <alt_msgdma_descriptor_async_transfer+0x328>
* If a callback routine has been previously registered which will be
* called from the msgdma ISR. Set up controller to:
* - Run
* - Stop on an error with any particular descriptor
*/
if(dev->callback)
801e828: e0bff117 ldw r2,-60(fp)
801e82c: 10800b17 ldw r2,44(r2)
801e830: 10001c26 beq r2,zero,801e8a4 <alt_msgdma_descriptor_async_transfer+0x2a8>
{
control |= (dev->control |
801e834: e0bff117 ldw r2,-60(fp)
801e838: 10c00d17 ldw r3,52(r2)
801e83c: e0bffe17 ldw r2,-8(fp)
801e840: 1884b03a or r2,r3,r2
801e844: 10800514 ori r2,r2,20
801e848: e0bffe15 stw r2,-8(fp)
ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK |
ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK );
control &= (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK);
801e84c: e0fffe17 ldw r3,-8(fp)
801e850: 00bff7c4 movi r2,-33
801e854: 1884703a and r2,r3,r2
801e858: e0bffe15 stw r2,-8(fp)
NIOS2_READ_STATUS (context);
801e85c: 0005303a rdctl r2,status
801e860: e0bff515 stw r2,-44(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801e864: e0fff517 ldw r3,-44(fp)
801e868: 00bfff84 movi r2,-2
801e86c: 1884703a and r2,r3,r2
801e870: 1001703a wrctl status,r2
return context;
801e874: e0bff517 ldw r2,-44(fp)
/* making sure the read-modify-write below can't be pre-empted */
context = alt_irq_disable_all();
801e878: e0bffd15 stw r2,-12(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, control);
801e87c: e0bff117 ldw r2,-60(fp)
801e880: 10800317 ldw r2,12(r2)
801e884: 10800104 addi r2,r2,4
801e888: e0fffe17 ldw r3,-8(fp)
801e88c: 10c00035 stwio r3,0(r2)
801e890: e0bffd17 ldw r2,-12(fp)
801e894: e0bff615 stw r2,-40(fp)
NIOS2_WRITE_STATUS (context);
801e898: e0bff617 ldw r2,-40(fp)
801e89c: 1001703a wrctl status,r2
801e8a0: 00001b06 br 801e910 <alt_msgdma_descriptor_async_transfer+0x314>
* - Stop on an error with any particular descriptor
* - Disable interrupt generation
*/
else
{
control |= (dev->control |
801e8a4: e0bff117 ldw r2,-60(fp)
801e8a8: 10c00d17 ldw r3,52(r2)
801e8ac: e0bffe17 ldw r2,-8(fp)
801e8b0: 1884b03a or r2,r3,r2
801e8b4: 10800114 ori r2,r2,4
801e8b8: e0bffe15 stw r2,-8(fp)
ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK );
control &= (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK) &
801e8bc: e0fffe17 ldw r3,-8(fp)
801e8c0: 00bff3c4 movi r2,-49
801e8c4: 1884703a and r2,r3,r2
801e8c8: e0bffe15 stw r2,-8(fp)
NIOS2_READ_STATUS (context);
801e8cc: 0005303a rdctl r2,status
801e8d0: e0bff315 stw r2,-52(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801e8d4: e0fff317 ldw r3,-52(fp)
801e8d8: 00bfff84 movi r2,-2
801e8dc: 1884703a and r2,r3,r2
801e8e0: 1001703a wrctl status,r2
return context;
801e8e4: e0bff317 ldw r2,-52(fp)
(~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK);
/* making sure the read-modify-write below can't be pre-empted */
context = alt_irq_disable_all();
801e8e8: e0bffd15 stw r2,-12(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, control);
801e8ec: e0bff117 ldw r2,-60(fp)
801e8f0: 10800317 ldw r2,12(r2)
801e8f4: 10800104 addi r2,r2,4
801e8f8: e0fffe17 ldw r3,-8(fp)
801e8fc: 10c00035 stwio r3,0(r2)
801e900: e0bffd17 ldw r2,-12(fp)
801e904: e0bff415 stw r2,-48(fp)
NIOS2_WRITE_STATUS (context);
801e908: e0bff417 ldw r2,-48(fp)
801e90c: 1001703a wrctl status,r2
/*
* Now that access to the registers is complete, release the registers
* semaphore so that other threads can access the registers.
*/
ALT_SEM_POST (dev->regs_lock);
801e910: e0bff117 ldw r2,-60(fp)
801e914: 10801817 ldw r2,96(r2)
801e918: 1009883a mov r4,r2
801e91c: 8015d840 call 8015d84 <OSSemPost>
return 0;
801e920: 0005883a mov r2,zero
}
801e924: e037883a mov sp,fp
801e928: dfc00117 ldw ra,4(sp)
801e92c: df000017 ldw fp,0(sp)
801e930: dec00204 addi sp,sp,8
801e934: f800283a ret
0801e938 <alt_msgdma_descriptor_sync_transfer>:
*/
static int alt_msgdma_descriptor_sync_transfer (
alt_msgdma_dev *dev,
alt_msgdma_standard_descriptor *standard_desc,
alt_msgdma_extended_descriptor *extended_desc)
{
801e938: deffed04 addi sp,sp,-76
801e93c: dfc01215 stw ra,72(sp)
801e940: df001115 stw fp,68(sp)
801e944: df001104 addi fp,sp,68
801e948: e13ff115 stw r4,-60(fp)
801e94c: e17ff015 stw r5,-64(fp)
801e950: e1bfef15 stw r6,-68(fp)
alt_u32 control=0;
801e954: e03ffb15 stw zero,-20(fp)
alt_irq_context context=0;
801e958: e03ffa15 stw zero,-24(fp)
alt_u32 csr_status = 0;
801e95c: e03fff15 stw zero,-4(fp)
alt_u16 counter = 0;
801e960: e03ffe8d sth zero,-6(fp)
alt_u32 fifo_read_fill_level = (
IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) &
801e964: e0bff117 ldw r2,-60(fp)
801e968: 10800317 ldw r2,12(r2)
801e96c: 10800204 addi r2,r2,8
801e970: 10800037 ldwio r2,0(r2)
alt_u32 fifo_read_fill_level = (
801e974: 10bfffcc andi r2,r2,65535
801e978: e0bffd15 stw r2,-12(fp)
ALTERA_MSGDMA_CSR_READ_FILL_LEVEL_MASK) >>
ALTERA_MSGDMA_CSR_READ_FILL_LEVEL_OFFSET;
alt_u32 fifo_write_fill_level = (
IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) &
801e97c: e0bff117 ldw r2,-60(fp)
801e980: 10800317 ldw r2,12(r2)
801e984: 10800204 addi r2,r2,8
801e988: 10800037 ldwio r2,0(r2)
ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_MASK) >>
801e98c: 1004d43a srli r2,r2,16
alt_u32 fifo_write_fill_level = (
801e990: 10bfffcc andi r2,r2,65535
801e994: e0bffc15 stw r2,-16(fp)
ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_OFFSET;
alt_u32 error = ALTERA_MSGDMA_CSR_STOPPED_ON_ERROR_MASK |
801e998: 00807804 movi r2,480
801e99c: e0bff915 stw r2,-28(fp)
ALTERA_MSGDMA_CSR_STOPPED_ON_EARLY_TERMINATION_MASK |
ALTERA_MSGDMA_CSR_STOP_STATE_MASK |
ALTERA_MSGDMA_CSR_RESET_STATE_MASK;
/* Wait for available FIFO buffer to store new descriptor*/
while ((dev->descriptor_fifo_depth <= fifo_write_fill_level) ||
801e9a0: 00001a06 br 801ea0c <alt_msgdma_descriptor_sync_transfer+0xd4>
(dev->descriptor_fifo_depth <= fifo_read_fill_level))
{
alt_busy_sleep(1); /* delay 1us */
801e9a4: 01000044 movi r4,1
801e9a8: 8036f5c0 call 8036f5c <alt_busy_sleep>
if(5000 <= counter) /* time_out if waiting longer than 5 msec */
801e9ac: e0bffe8b ldhu r2,-6(fp)
801e9b0: 1084e230 cmpltui r2,r2,5000
801e9b4: 1000051e bne r2,zero,801e9cc <alt_msgdma_descriptor_sync_transfer+0x94>
{
alt_printf("time out after 5 msec while waiting free FIFO buffer"
801e9b8: 01020174 movhi r4,2053
801e9bc: 21257a04 addi r4,r4,-27160
801e9c0: 8037a9c0 call 8037a9c <alt_printf>
" for storing descriptor\n");
return -ETIME;
801e9c4: 00bff084 movi r2,-62
801e9c8: 0000d806 br 801ed2c <alt_msgdma_descriptor_sync_transfer+0x3f4>
}
counter++;
801e9cc: e0bffe8b ldhu r2,-6(fp)
801e9d0: 10800044 addi r2,r2,1
801e9d4: e0bffe8d sth r2,-6(fp)
fifo_read_fill_level = (
IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) &
801e9d8: e0bff117 ldw r2,-60(fp)
801e9dc: 10800317 ldw r2,12(r2)
801e9e0: 10800204 addi r2,r2,8
801e9e4: 10800037 ldwio r2,0(r2)
fifo_read_fill_level = (
801e9e8: 10bfffcc andi r2,r2,65535
801e9ec: e0bffd15 stw r2,-12(fp)
ALTERA_MSGDMA_CSR_READ_FILL_LEVEL_MASK) >>
ALTERA_MSGDMA_CSR_READ_FILL_LEVEL_OFFSET;
fifo_write_fill_level = (
IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) &
801e9f0: e0bff117 ldw r2,-60(fp)
801e9f4: 10800317 ldw r2,12(r2)
801e9f8: 10800204 addi r2,r2,8
801e9fc: 10800037 ldwio r2,0(r2)
ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_MASK) >>
801ea00: 1004d43a srli r2,r2,16
fifo_write_fill_level = (
801ea04: 10bfffcc andi r2,r2,65535
801ea08: e0bffc15 stw r2,-16(fp)
while ((dev->descriptor_fifo_depth <= fifo_write_fill_level) ||
801ea0c: e0bff117 ldw r2,-60(fp)
801ea10: 10800917 ldw r2,36(r2)
801ea14: e0fffc17 ldw r3,-16(fp)
801ea18: 18bfe22e bgeu r3,r2,801e9a4 <alt_msgdma_descriptor_sync_transfer+0x6c>
(dev->descriptor_fifo_depth <= fifo_read_fill_level))
801ea1c: e0bff117 ldw r2,-60(fp)
801ea20: 10800917 ldw r2,36(r2)
while ((dev->descriptor_fifo_depth <= fifo_write_fill_level) ||
801ea24: e0fffd17 ldw r3,-12(fp)
801ea28: 18bfde2e bgeu r3,r2,801e9a4 <alt_msgdma_descriptor_sync_transfer+0x6c>
/*
* When running in a multi threaded environment, obtain the "regs_lock"
* semaphore. This ensures that accessing registers is thread-safe.
*/
ALT_SEM_PEND (dev->regs_lock, 0);
801ea2c: e0bff117 ldw r2,-60(fp)
801ea30: 10801817 ldw r2,96(r2)
801ea34: e0bff715 stw r2,-36(fp)
801ea38: e03ff68d sth zero,-38(fp)
801ea3c: e0bff68b ldhu r2,-38(fp)
801ea40: e0fff2c4 addi r3,fp,-53
801ea44: 180d883a mov r6,r3
801ea48: 100b883a mov r5,r2
801ea4c: e13ff717 ldw r4,-36(fp)
801ea50: 8015a600 call 8015a60 <OSSemPend>
NIOS2_READ_STATUS (context);
801ea54: 0005303a rdctl r2,status
801ea58: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801ea5c: e0fff817 ldw r3,-32(fp)
801ea60: 00bfff84 movi r2,-2
801ea64: 1884703a and r2,r3,r2
801ea68: 1001703a wrctl status,r2
return context;
801ea6c: e0bff817 ldw r2,-32(fp)
/* Stop the msgdma dispatcher from issuing more descriptors to the
read or write masters */
/* making sure the read-modify-write below can't be pre-empted */
context = alt_irq_disable_all();
801ea70: e0bffa15 stw r2,-24(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base,
801ea74: e0bff117 ldw r2,-60(fp)
801ea78: 10800317 ldw r2,12(r2)
801ea7c: 10800104 addi r2,r2,4
801ea80: 00c00804 movi r3,32
801ea84: 10c00035 stwio r3,0(r2)
ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK);
/*
* Clear any (previous) status register information
* that might occlude our error checking later.
*/
IOWR_ALTERA_MSGDMA_CSR_STATUS(
801ea88: e0bff117 ldw r2,-60(fp)
801ea8c: 10800317 ldw r2,12(r2)
801ea90: e0fff117 ldw r3,-60(fp)
801ea94: 18c00317 ldw r3,12(r3)
801ea98: 18c00037 ldwio r3,0(r3)
801ea9c: 10c00035 stwio r3,0(r2)
dev->csr_base,
IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base));
if (NULL != standard_desc && NULL == extended_desc)
801eaa0: e0bff017 ldw r2,-64(fp)
801eaa4: 10001f26 beq r2,zero,801eb24 <alt_msgdma_descriptor_sync_transfer+0x1ec>
801eaa8: e0bfef17 ldw r2,-68(fp)
801eaac: 10001d1e bne r2,zero,801eb24 <alt_msgdma_descriptor_sync_transfer+0x1ec>
{
counter = 0; /* reset counter */
801eab0: e03ffe8d sth zero,-6(fp)
/*writing descriptor structure to the dispatcher, wait until descriptor
write is succeed*/
while(0 != alt_msgdma_write_standard_descriptor (
801eab4: 00001106 br 801eafc <alt_msgdma_descriptor_sync_transfer+0x1c4>
dev->csr_base, dev->descriptor_base, standard_desc))
{
alt_busy_sleep(1); /* delay 1us */
801eab8: 01000044 movi r4,1
801eabc: 8036f5c0 call 8036f5c <alt_busy_sleep>
if(5000 <= counter) /* time_out if waiting longer than 5 msec */
801eac0: e0bffe8b ldhu r2,-6(fp)
801eac4: 1084e230 cmpltui r2,r2,5000
801eac8: 1000091e bne r2,zero,801eaf0 <alt_msgdma_descriptor_sync_transfer+0x1b8>
{
alt_printf("time out after 5 msec while writing standard"
801eacc: 01020174 movhi r4,2053
801ead0: 21258e04 addi r4,r4,-27080
801ead4: 8037a9c0 call 8037a9c <alt_printf>
/*
* Now that access to the registers is complete, release the
* registers semaphore so that other threads can access the
* registers.
*/
ALT_SEM_POST (dev->regs_lock);
801ead8: e0bff117 ldw r2,-60(fp)
801eadc: 10801817 ldw r2,96(r2)
801eae0: 1009883a mov r4,r2
801eae4: 8015d840 call 8015d84 <OSSemPost>
return -ETIME;
801eae8: 00bff084 movi r2,-62
801eaec: 00008f06 br 801ed2c <alt_msgdma_descriptor_sync_transfer+0x3f4>
}
counter++;
801eaf0: e0bffe8b ldhu r2,-6(fp)
801eaf4: 10800044 addi r2,r2,1
801eaf8: e0bffe8d sth r2,-6(fp)
while(0 != alt_msgdma_write_standard_descriptor (
801eafc: e0bff117 ldw r2,-60(fp)
801eb00: 10c00317 ldw r3,12(r2)
801eb04: e0bff117 ldw r2,-60(fp)
801eb08: 10800417 ldw r2,16(r2)
801eb0c: e1bff017 ldw r6,-64(fp)
801eb10: 100b883a mov r5,r2
801eb14: 1809883a mov r4,r3
801eb18: 801e0d80 call 801e0d8 <alt_msgdma_write_standard_descriptor>
801eb1c: 103fe61e bne r2,zero,801eab8 <alt_msgdma_descriptor_sync_transfer+0x180>
if (NULL != standard_desc && NULL == extended_desc)
801eb20: 00002706 br 801ebc0 <alt_msgdma_descriptor_sync_transfer+0x288>
}
}
else if (NULL == standard_desc && NULL != extended_desc)
801eb24: e0bff017 ldw r2,-64(fp)
801eb28: 10001f1e bne r2,zero,801eba8 <alt_msgdma_descriptor_sync_transfer+0x270>
801eb2c: e0bfef17 ldw r2,-68(fp)
801eb30: 10001d26 beq r2,zero,801eba8 <alt_msgdma_descriptor_sync_transfer+0x270>
{
counter = 0; /* reset counter */
801eb34: e03ffe8d sth zero,-6(fp)
/*writing descriptor structure to the dispatcher, wait until descriptor
write is succeed*/
while(0 != alt_msgdma_write_extended_descriptor (
801eb38: 00001106 br 801eb80 <alt_msgdma_descriptor_sync_transfer+0x248>
dev->csr_base, dev->descriptor_base, extended_desc))
{
alt_busy_sleep(1); /* delay 1us */
801eb3c: 01000044 movi r4,1
801eb40: 8036f5c0 call 8036f5c <alt_busy_sleep>
if(5000 <= counter) /* time_out if waiting longer than 5 msec */
801eb44: e0bffe8b ldhu r2,-6(fp)
801eb48: 1084e230 cmpltui r2,r2,5000
801eb4c: 1000091e bne r2,zero,801eb74 <alt_msgdma_descriptor_sync_transfer+0x23c>
{
alt_printf("time out after 5 msec while writing extended"
801eb50: 01020174 movhi r4,2053
801eb54: 21259f04 addi r4,r4,-27012
801eb58: 8037a9c0 call 8037a9c <alt_printf>
/*
* Now that access to the registers is complete, release the
* registers semaphore so that other threads can access the
* registers.
*/
ALT_SEM_POST (dev->regs_lock);
801eb5c: e0bff117 ldw r2,-60(fp)
801eb60: 10801817 ldw r2,96(r2)
801eb64: 1009883a mov r4,r2
801eb68: 8015d840 call 8015d84 <OSSemPost>
return -ETIME;
801eb6c: 00bff084 movi r2,-62
801eb70: 00006e06 br 801ed2c <alt_msgdma_descriptor_sync_transfer+0x3f4>
}
counter++;
801eb74: e0bffe8b ldhu r2,-6(fp)
801eb78: 10800044 addi r2,r2,1
801eb7c: e0bffe8d sth r2,-6(fp)
while(0 != alt_msgdma_write_extended_descriptor (
801eb80: e0bff117 ldw r2,-60(fp)
801eb84: 10c00317 ldw r3,12(r2)
801eb88: e0bff117 ldw r2,-60(fp)
801eb8c: 10800417 ldw r2,16(r2)
801eb90: e1bfef17 ldw r6,-68(fp)
801eb94: 100b883a mov r5,r2
801eb98: 1809883a mov r4,r3
801eb9c: 801e16c0 call 801e16c <alt_msgdma_write_extended_descriptor>
801eba0: 103fe61e bne r2,zero,801eb3c <alt_msgdma_descriptor_sync_transfer+0x204>
else if (NULL == standard_desc && NULL != extended_desc)
801eba4: 00000606 br 801ebc0 <alt_msgdma_descriptor_sync_transfer+0x288>
{
/*
* Now that access to the registers is complete, release the registers
* semaphore so that other threads can access the registers.
*/
ALT_SEM_POST (dev->regs_lock);
801eba8: e0bff117 ldw r2,-60(fp)
801ebac: 10801817 ldw r2,96(r2)
801ebb0: 1009883a mov r4,r2
801ebb4: 8015d840 call 8015d84 <OSSemPost>
/* operation not permitted due to descriptor type conflict */
return -EPERM;
801ebb8: 00bfffc4 movi r2,-1
801ebbc: 00005b06 br 801ed2c <alt_msgdma_descriptor_sync_transfer+0x3f4>
* Set up msgdma controller to:
* - Disable interrupt generation
* - Run once a valid descriptor is written to controller
* - Stop on an error with any particular descriptor
*/
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base,
801ebc0: e0bff117 ldw r2,-60(fp)
801ebc4: 10800317 ldw r2,12(r2)
801ebc8: 10800104 addi r2,r2,4
801ebcc: e0fff117 ldw r3,-60(fp)
801ebd0: 19000d17 ldw r4,52(r3)
801ebd4: 00fff2c4 movi r3,-53
801ebd8: 20c6703a and r3,r4,r3
801ebdc: 18c00114 ori r3,r3,4
801ebe0: 10c00035 stwio r3,0(r2)
801ebe4: e0bffa17 ldw r2,-24(fp)
801ebe8: e0bff515 stw r2,-44(fp)
NIOS2_WRITE_STATUS (context);
801ebec: e0bff517 ldw r2,-44(fp)
801ebf0: 1001703a wrctl status,r2
(~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK) &
(~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK)) ;
alt_irq_enable_all(context);
counter = 0; /* reset counter */
801ebf4: e03ffe8d sth zero,-6(fp)
csr_status = IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base);
801ebf8: e0bff117 ldw r2,-60(fp)
801ebfc: 10800317 ldw r2,12(r2)
801ec00: 10800037 ldwio r2,0(r2)
801ec04: e0bfff15 stw r2,-4(fp)
/* Wait for any pending transfers to complete or checking any errors or
conditions causing descriptor to stop dispatching */
while (!(csr_status & error) && (csr_status & ALTERA_MSGDMA_CSR_BUSY_MASK))
801ec08: 00001506 br 801ec60 <alt_msgdma_descriptor_sync_transfer+0x328>
{
alt_busy_sleep(1); /* delay 1us */
801ec0c: 01000044 movi r4,1
801ec10: 8036f5c0 call 8036f5c <alt_busy_sleep>
if(5000 <= counter) /* time_out if waiting longer than 5 msec */
801ec14: e0bffe8b ldhu r2,-6(fp)
801ec18: 1084e230 cmpltui r2,r2,5000
801ec1c: 1000091e bne r2,zero,801ec44 <alt_msgdma_descriptor_sync_transfer+0x30c>
{
alt_printf("time out after 5 msec while waiting for any pending"
801ec20: 01020174 movhi r4,2053
801ec24: 2125b004 addi r4,r4,-26944
801ec28: 8037a9c0 call 8037a9c <alt_printf>
/*
* Now that access to the registers is complete, release the registers
* semaphore so that other threads can access the registers.
*/
ALT_SEM_POST (dev->regs_lock);
801ec2c: e0bff117 ldw r2,-60(fp)
801ec30: 10801817 ldw r2,96(r2)
801ec34: 1009883a mov r4,r2
801ec38: 8015d840 call 8015d84 <OSSemPost>
return -ETIME;
801ec3c: 00bff084 movi r2,-62
801ec40: 00003a06 br 801ed2c <alt_msgdma_descriptor_sync_transfer+0x3f4>
}
counter++;
801ec44: e0bffe8b ldhu r2,-6(fp)
801ec48: 10800044 addi r2,r2,1
801ec4c: e0bffe8d sth r2,-6(fp)
csr_status = IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base);
801ec50: e0bff117 ldw r2,-60(fp)
801ec54: 10800317 ldw r2,12(r2)
801ec58: 10800037 ldwio r2,0(r2)
801ec5c: e0bfff15 stw r2,-4(fp)
while (!(csr_status & error) && (csr_status & ALTERA_MSGDMA_CSR_BUSY_MASK))
801ec60: e0ffff17 ldw r3,-4(fp)
801ec64: e0bff917 ldw r2,-28(fp)
801ec68: 1884703a and r2,r3,r2
801ec6c: 1000031e bne r2,zero,801ec7c <alt_msgdma_descriptor_sync_transfer+0x344>
801ec70: e0bfff17 ldw r2,-4(fp)
801ec74: 1080004c andi r2,r2,1
801ec78: 103fe41e bne r2,zero,801ec0c <alt_msgdma_descriptor_sync_transfer+0x2d4>
}
/*Errors or conditions causing the dispatcher stopping issuing read/write
commands to masters*/
if(0 != (csr_status & error))
801ec7c: e0ffff17 ldw r3,-4(fp)
801ec80: e0bff917 ldw r2,-28(fp)
801ec84: 1884703a and r2,r3,r2
801ec88: 10000626 beq r2,zero,801eca4 <alt_msgdma_descriptor_sync_transfer+0x36c>
{
/*
* Now that access to the registers is complete, release the registers
* semaphore so that other threads can access the registers.
*/
ALT_SEM_POST (dev->regs_lock);
801ec8c: e0bff117 ldw r2,-60(fp)
801ec90: 10801817 ldw r2,96(r2)
801ec94: 1009883a mov r4,r2
801ec98: 8015d840 call 8015d84 <OSSemPost>
return error;
801ec9c: e0bff917 ldw r2,-28(fp)
801eca0: 00002206 br 801ed2c <alt_msgdma_descriptor_sync_transfer+0x3f4>
}
/* Stop the msgdma dispatcher from issuing more descriptors to the
read or write masters */
/* stop issuing more descriptors */
control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base) |
801eca4: e0bff117 ldw r2,-60(fp)
801eca8: 10800317 ldw r2,12(r2)
801ecac: 10800104 addi r2,r2,4
801ecb0: 10800037 ldwio r2,0(r2)
801ecb4: 10800814 ori r2,r2,32
801ecb8: e0bffb15 stw r2,-20(fp)
NIOS2_READ_STATUS (context);
801ecbc: 0005303a rdctl r2,status
801ecc0: e0bff315 stw r2,-52(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801ecc4: e0fff317 ldw r3,-52(fp)
801ecc8: 00bfff84 movi r2,-2
801eccc: 1884703a and r2,r3,r2
801ecd0: 1001703a wrctl status,r2
return context;
801ecd4: e0bff317 ldw r2,-52(fp)
ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK;
/* making sure the read-modify-write below can't be pre-empted */
context = alt_irq_disable_all();
801ecd8: e0bffa15 stw r2,-24(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, control);
801ecdc: e0bff117 ldw r2,-60(fp)
801ece0: 10800317 ldw r2,12(r2)
801ece4: 10800104 addi r2,r2,4
801ece8: e0fffb17 ldw r3,-20(fp)
801ecec: 10c00035 stwio r3,0(r2)
/*
* Clear any (previous) status register information
* that might occlude our error checking later.
*/
IOWR_ALTERA_MSGDMA_CSR_STATUS(
801ecf0: e0bff117 ldw r2,-60(fp)
801ecf4: 10800317 ldw r2,12(r2)
801ecf8: e0fff117 ldw r3,-60(fp)
801ecfc: 18c00317 ldw r3,12(r3)
801ed00: 18c00037 ldwio r3,0(r3)
801ed04: 10c00035 stwio r3,0(r2)
801ed08: e0bffa17 ldw r2,-24(fp)
801ed0c: e0bff415 stw r2,-48(fp)
NIOS2_WRITE_STATUS (context);
801ed10: e0bff417 ldw r2,-48(fp)
801ed14: 1001703a wrctl status,r2
/*
* Now that access to the registers is complete, release the registers
* semaphore so that other threads can access the registers.
*/
ALT_SEM_POST (dev->regs_lock);
801ed18: e0bff117 ldw r2,-60(fp)
801ed1c: 10801817 ldw r2,96(r2)
801ed20: 1009883a mov r4,r2
801ed24: 8015d840 call 8015d84 <OSSemPost>
return 0;
801ed28: 0005883a mov r2,zero
}
801ed2c: e037883a mov sp,fp
801ed30: dfc00117 ldw ra,4(sp)
801ed34: df000017 ldw fp,0(sp)
801ed38: dec00204 addi sp,sp,8
801ed3c: f800283a ret
0801ed40 <alt_msgdma_construct_standard_st_to_mm_descriptor>:
*/
int alt_msgdma_construct_standard_st_to_mm_descriptor (
alt_msgdma_dev *dev,
alt_msgdma_standard_descriptor *descriptor,
alt_u32 *write_address, alt_u32 length, alt_u32 control)
{
801ed40: defff804 addi sp,sp,-32
801ed44: dfc00715 stw ra,28(sp)
801ed48: df000615 stw fp,24(sp)
801ed4c: df000604 addi fp,sp,24
801ed50: e13fff15 stw r4,-4(fp)
801ed54: e17ffe15 stw r5,-8(fp)
801ed58: e1bffd15 stw r6,-12(fp)
801ed5c: e1fffc15 stw r7,-16(fp)
return alt_msgdma_construct_standard_descriptor(dev, descriptor, NULL,
801ed60: e0800217 ldw r2,8(fp)
801ed64: d8800115 stw r2,4(sp)
801ed68: e0bffc17 ldw r2,-16(fp)
801ed6c: d8800015 stw r2,0(sp)
801ed70: e1fffd17 ldw r7,-12(fp)
801ed74: 000d883a mov r6,zero
801ed78: e17ffe17 ldw r5,-8(fp)
801ed7c: e13fff17 ldw r4,-4(fp)
801ed80: 801e41c0 call 801e41c <alt_msgdma_construct_standard_descriptor>
write_address, length, control);
}
801ed84: e037883a mov sp,fp
801ed88: dfc00117 ldw ra,4(sp)
801ed8c: df000017 ldw fp,0(sp)
801ed90: dec00204 addi sp,sp,8
801ed94: f800283a ret
0801ed98 <alt_msgdma_construct_standard_mm_to_st_descriptor>:
alt_msgdma_dev *dev,
alt_msgdma_standard_descriptor *descriptor,
alt_u32 *read_address,
alt_u32 length,
alt_u32 control)
{
801ed98: defff804 addi sp,sp,-32
801ed9c: dfc00715 stw ra,28(sp)
801eda0: df000615 stw fp,24(sp)
801eda4: df000604 addi fp,sp,24
801eda8: e13fff15 stw r4,-4(fp)
801edac: e17ffe15 stw r5,-8(fp)
801edb0: e1bffd15 stw r6,-12(fp)
801edb4: e1fffc15 stw r7,-16(fp)
return alt_msgdma_construct_standard_descriptor(dev, descriptor, read_address,
801edb8: e0800217 ldw r2,8(fp)
801edbc: d8800115 stw r2,4(sp)
801edc0: e0bffc17 ldw r2,-16(fp)
801edc4: d8800015 stw r2,0(sp)
801edc8: 000f883a mov r7,zero
801edcc: e1bffd17 ldw r6,-12(fp)
801edd0: e17ffe17 ldw r5,-8(fp)
801edd4: e13fff17 ldw r4,-4(fp)
801edd8: 801e41c0 call 801e41c <alt_msgdma_construct_standard_descriptor>
NULL, length, control);
}
801eddc: e037883a mov sp,fp
801ede0: dfc00117 ldw ra,4(sp)
801ede4: df000017 ldw fp,0(sp)
801ede8: dec00204 addi sp,sp,8
801edec: f800283a ret
0801edf0 <alt_msgdma_construct_standard_mm_to_mm_descriptor>:
alt_msgdma_standard_descriptor *descriptor,
alt_u32 *read_address,
alt_u32 *write_address,
alt_u32 length,
alt_u32 control)
{
801edf0: defff804 addi sp,sp,-32
801edf4: dfc00715 stw ra,28(sp)
801edf8: df000615 stw fp,24(sp)
801edfc: df000604 addi fp,sp,24
801ee00: e13fff15 stw r4,-4(fp)
801ee04: e17ffe15 stw r5,-8(fp)
801ee08: e1bffd15 stw r6,-12(fp)
801ee0c: e1fffc15 stw r7,-16(fp)
return alt_msgdma_construct_standard_descriptor(dev, descriptor, read_address,
801ee10: e0800317 ldw r2,12(fp)
801ee14: d8800115 stw r2,4(sp)
801ee18: e0800217 ldw r2,8(fp)
801ee1c: d8800015 stw r2,0(sp)
801ee20: e1fffc17 ldw r7,-16(fp)
801ee24: e1bffd17 ldw r6,-12(fp)
801ee28: e17ffe17 ldw r5,-8(fp)
801ee2c: e13fff17 ldw r4,-4(fp)
801ee30: 801e41c0 call 801e41c <alt_msgdma_construct_standard_descriptor>
write_address, length, control);
}
801ee34: e037883a mov sp,fp
801ee38: dfc00117 ldw ra,4(sp)
801ee3c: df000017 ldw fp,0(sp)
801ee40: dec00204 addi sp,sp,8
801ee44: f800283a ret
0801ee48 <alt_msgdma_construct_extended_st_to_mm_descriptor>:
alt_u32 length,
alt_u32 control,
alt_u16 sequence_number,
alt_u8 write_burst_count,
alt_u16 write_stride)
{
801ee48: defff004 addi sp,sp,-64
801ee4c: dfc00f15 stw ra,60(sp)
801ee50: df000e15 stw fp,56(sp)
801ee54: df000e04 addi fp,sp,56
801ee58: e13fff15 stw r4,-4(fp)
801ee5c: e17ffe15 stw r5,-8(fp)
801ee60: e1bffd15 stw r6,-12(fp)
801ee64: e1fffc15 stw r7,-16(fp)
801ee68: e1000317 ldw r4,12(fp)
801ee6c: e0c00417 ldw r3,16(fp)
801ee70: e0800517 ldw r2,20(fp)
801ee74: e13ffb0d sth r4,-20(fp)
801ee78: e0fffa05 stb r3,-24(fp)
801ee7c: e0bff90d sth r2,-28(fp)
return alt_msgdma_construct_extended_descriptor(dev, descriptor,
801ee80: e0bffb0b ldhu r2,-20(fp)
801ee84: e0fffa03 ldbu r3,-24(fp)
801ee88: e13ff90b ldhu r4,-28(fp)
801ee8c: d9000615 stw r4,24(sp)
801ee90: d8000515 stw zero,20(sp)
801ee94: d8c00415 stw r3,16(sp)
801ee98: d8000315 stw zero,12(sp)
801ee9c: d8800215 stw r2,8(sp)
801eea0: e0800217 ldw r2,8(fp)
801eea4: d8800115 stw r2,4(sp)
801eea8: e0bffc17 ldw r2,-16(fp)
801eeac: d8800015 stw r2,0(sp)
801eeb0: e1fffd17 ldw r7,-12(fp)
801eeb4: 000d883a mov r6,zero
801eeb8: e17ffe17 ldw r5,-8(fp)
801eebc: e13fff17 ldw r4,-4(fp)
801eec0: 801e4a80 call 801e4a8 <alt_msgdma_construct_extended_descriptor>
NULL, write_address, length, control, sequence_number, 0,
write_burst_count, 0, write_stride);
}
801eec4: e037883a mov sp,fp
801eec8: dfc00117 ldw ra,4(sp)
801eecc: df000017 ldw fp,0(sp)
801eed0: dec00204 addi sp,sp,8
801eed4: f800283a ret
0801eed8 <alt_msgdma_construct_extended_mm_to_st_descriptor>:
alt_u32 length,
alt_u32 control,
alt_u16 sequence_number,
alt_u8 read_burst_count,
alt_u16 read_stride)
{
801eed8: defff004 addi sp,sp,-64
801eedc: dfc00f15 stw ra,60(sp)
801eee0: df000e15 stw fp,56(sp)
801eee4: df000e04 addi fp,sp,56
801eee8: e13fff15 stw r4,-4(fp)
801eeec: e17ffe15 stw r5,-8(fp)
801eef0: e1bffd15 stw r6,-12(fp)
801eef4: e1fffc15 stw r7,-16(fp)
801eef8: e1000317 ldw r4,12(fp)
801eefc: e0c00417 ldw r3,16(fp)
801ef00: e0800517 ldw r2,20(fp)
801ef04: e13ffb0d sth r4,-20(fp)
801ef08: e0fffa05 stb r3,-24(fp)
801ef0c: e0bff90d sth r2,-28(fp)
return alt_msgdma_construct_extended_descriptor(dev, descriptor, read_address,
801ef10: e0bffb0b ldhu r2,-20(fp)
801ef14: e0fffa03 ldbu r3,-24(fp)
801ef18: e13ff90b ldhu r4,-28(fp)
801ef1c: d8000615 stw zero,24(sp)
801ef20: d9000515 stw r4,20(sp)
801ef24: d8000415 stw zero,16(sp)
801ef28: d8c00315 stw r3,12(sp)
801ef2c: d8800215 stw r2,8(sp)
801ef30: e0800217 ldw r2,8(fp)
801ef34: d8800115 stw r2,4(sp)
801ef38: e0bffc17 ldw r2,-16(fp)
801ef3c: d8800015 stw r2,0(sp)
801ef40: 000f883a mov r7,zero
801ef44: e1bffd17 ldw r6,-12(fp)
801ef48: e17ffe17 ldw r5,-8(fp)
801ef4c: e13fff17 ldw r4,-4(fp)
801ef50: 801e4a80 call 801e4a8 <alt_msgdma_construct_extended_descriptor>
NULL, length, control, sequence_number, read_burst_count, 0,
read_stride, 0);
}
801ef54: e037883a mov sp,fp
801ef58: dfc00117 ldw ra,4(sp)
801ef5c: df000017 ldw fp,0(sp)
801ef60: dec00204 addi sp,sp,8
801ef64: f800283a ret
0801ef68 <alt_msgdma_construct_extended_mm_to_mm_descriptor>:
alt_u16 sequence_number,
alt_u8 read_burst_count,
alt_u8 write_burst_count,
alt_u16 read_stride,
alt_u16 write_stride)
{
801ef68: deffee04 addi sp,sp,-72
801ef6c: dfc01115 stw ra,68(sp)
801ef70: df001015 stw fp,64(sp)
801ef74: df001004 addi fp,sp,64
801ef78: e13fff15 stw r4,-4(fp)
801ef7c: e17ffe15 stw r5,-8(fp)
801ef80: e1bffd15 stw r6,-12(fp)
801ef84: e1fffc15 stw r7,-16(fp)
801ef88: e1800417 ldw r6,16(fp)
801ef8c: e1400517 ldw r5,20(fp)
801ef90: e1000617 ldw r4,24(fp)
801ef94: e0c00717 ldw r3,28(fp)
801ef98: e0800817 ldw r2,32(fp)
801ef9c: e1bffb0d sth r6,-20(fp)
801efa0: e17ffa05 stb r5,-24(fp)
801efa4: e13ff905 stb r4,-28(fp)
801efa8: e0fff80d sth r3,-32(fp)
801efac: e0bff70d sth r2,-36(fp)
return alt_msgdma_construct_extended_descriptor(dev, descriptor,
801efb0: e0bffb0b ldhu r2,-20(fp)
801efb4: e0fffa03 ldbu r3,-24(fp)
801efb8: e13ff903 ldbu r4,-28(fp)
801efbc: e17ff80b ldhu r5,-32(fp)
801efc0: e1bff70b ldhu r6,-36(fp)
801efc4: d9800615 stw r6,24(sp)
801efc8: d9400515 stw r5,20(sp)
801efcc: d9000415 stw r4,16(sp)
801efd0: d8c00315 stw r3,12(sp)
801efd4: d8800215 stw r2,8(sp)
801efd8: e0800317 ldw r2,12(fp)
801efdc: d8800115 stw r2,4(sp)
801efe0: e0800217 ldw r2,8(fp)
801efe4: d8800015 stw r2,0(sp)
801efe8: e1fffc17 ldw r7,-16(fp)
801efec: e1bffd17 ldw r6,-12(fp)
801eff0: e17ffe17 ldw r5,-8(fp)
801eff4: e13fff17 ldw r4,-4(fp)
801eff8: 801e4a80 call 801e4a8 <alt_msgdma_construct_extended_descriptor>
read_address, write_address, length, control, sequence_number,
read_burst_count, write_burst_count, read_stride, write_stride);
}
801effc: e037883a mov sp,fp
801f000: dfc00117 ldw ra,4(sp)
801f004: df000017 ldw fp,0(sp)
801f008: dec00204 addi sp,sp,8
801f00c: f800283a ret
0801f010 <alt_msgdma_construct_prefetcher_standard_descriptor>:
alt_msgdma_prefetcher_standard_descriptor *descriptor,
alt_u32 read_address,
alt_u32 write_address,
alt_u32 length,
alt_u32 control)
{
801f010: defffb04 addi sp,sp,-20
801f014: df000415 stw fp,16(sp)
801f018: df000404 addi fp,sp,16
801f01c: e13fff15 stw r4,-4(fp)
801f020: e17ffe15 stw r5,-8(fp)
801f024: e1bffd15 stw r6,-12(fp)
801f028: e1fffc15 stw r7,-16(fp)
if(dev->max_byte < length ||
801f02c: e0bfff17 ldw r2,-4(fp)
801f030: 10c01217 ldw r3,72(r2)
801f034: e0800117 ldw r2,4(fp)
801f038: 18800436 bltu r3,r2,801f04c <alt_msgdma_construct_prefetcher_standard_descriptor+0x3c>
dev->enhanced_features != 0
801f03c: e0bfff17 ldw r2,-4(fp)
801f040: 10801703 ldbu r2,92(r2)
if(dev->max_byte < length ||
801f044: 10803fcc andi r2,r2,255
801f048: 10000226 beq r2,zero,801f054 <alt_msgdma_construct_prefetcher_standard_descriptor+0x44>
)
{
return -EINVAL;
801f04c: 00bffa84 movi r2,-22
801f050: 00001406 br 801f0a4 <alt_msgdma_construct_prefetcher_standard_descriptor+0x94>
}
descriptor->read_address = read_address;
801f054: e0bffe17 ldw r2,-8(fp)
801f058: e0fffd17 ldw r3,-12(fp)
801f05c: 10c00015 stw r3,0(r2)
descriptor->write_address = write_address;
801f060: e0bffe17 ldw r2,-8(fp)
801f064: e0fffc17 ldw r3,-16(fp)
801f068: 10c00115 stw r3,4(r2)
descriptor->transfer_length = length;
801f06c: e0bffe17 ldw r2,-8(fp)
801f070: e0c00117 ldw r3,4(fp)
801f074: 10c00215 stw r3,8(r2)
/* have descriptor point to itself for park_mode */
descriptor->next_desc_ptr = (alt_u32)descriptor;
801f078: e0fffe17 ldw r3,-8(fp)
801f07c: e0bffe17 ldw r2,-8(fp)
801f080: 10c00315 stw r3,12(r2)
/* clear control own_by_hw bit field (SW owns this descriptor)*/
descriptor->control = (control
& ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK)
| ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK;
801f084: e0c00217 ldw r3,8(fp)
801f088: 00900034 movhi r2,16384
801f08c: 10bfffc4 addi r2,r2,-1
801f090: 1884703a and r2,r3,r2
801f094: 10e00034 orhi r3,r2,32768
descriptor->control = (control
801f098: e0bffe17 ldw r2,-8(fp)
801f09c: 10c00715 stw r3,28(r2)
return 0;
801f0a0: 0005883a mov r2,zero
}
801f0a4: e037883a mov sp,fp
801f0a8: df000017 ldw fp,0(sp)
801f0ac: dec00104 addi sp,sp,4
801f0b0: f800283a ret
0801f0b4 <alt_msgdma_construct_prefetcher_extended_descriptor>:
alt_u16 sequence_number,
alt_u8 read_burst_count,
alt_u8 write_burst_count,
alt_u16 read_stride,
alt_u16 write_stride)
{
801f0b4: defff404 addi sp,sp,-48
801f0b8: df000b15 stw fp,44(sp)
801f0bc: df000b04 addi fp,sp,44
801f0c0: e13ffd15 stw r4,-12(fp)
801f0c4: e17ffc15 stw r5,-16(fp)
801f0c8: e1bffb15 stw r6,-20(fp)
801f0cc: e1fffa15 stw r7,-24(fp)
801f0d0: e1800517 ldw r6,20(fp)
801f0d4: e1400617 ldw r5,24(fp)
801f0d8: e1000717 ldw r4,28(fp)
801f0dc: e0c00817 ldw r3,32(fp)
801f0e0: e0800917 ldw r2,36(fp)
801f0e4: e1bff90d sth r6,-28(fp)
801f0e8: e17ff805 stb r5,-32(fp)
801f0ec: e13ff705 stb r4,-36(fp)
801f0f0: e0fff60d sth r3,-40(fp)
801f0f4: e0bff50d sth r2,-44(fp)
msgdma_addr64 node_addr;
if(dev->max_byte < length ||
801f0f8: e0bffd17 ldw r2,-12(fp)
801f0fc: 10c01217 ldw r3,72(r2)
801f100: e0800317 ldw r2,12(fp)
801f104: 18801936 bltu r3,r2,801f16c <alt_msgdma_construct_prefetcher_extended_descriptor+0xb8>
dev->max_stride < read_stride ||
801f108: e13ffd17 ldw r4,-12(fp)
801f10c: 20801317 ldw r2,76(r4)
801f110: 20c01417 ldw r3,80(r4)
801f114: e13ff60b ldhu r4,-40(fp)
801f118: 213fffcc andi r4,r4,65535
801f11c: 2015883a mov r10,r4
801f120: 0017883a mov r11,zero
if(dev->max_byte < length ||
801f124: 1ac01136 bltu r3,r11,801f16c <alt_msgdma_construct_prefetcher_extended_descriptor+0xb8>
801f128: 58c0011e bne r11,r3,801f130 <alt_msgdma_construct_prefetcher_extended_descriptor+0x7c>
801f12c: 12800f36 bltu r2,r10,801f16c <alt_msgdma_construct_prefetcher_extended_descriptor+0xb8>
dev->max_stride < write_stride ||
801f130: e13ffd17 ldw r4,-12(fp)
801f134: 20801317 ldw r2,76(r4)
801f138: 20c01417 ldw r3,80(r4)
801f13c: e13ff50b ldhu r4,-44(fp)
801f140: 213fffcc andi r4,r4,65535
801f144: 2011883a mov r8,r4
801f148: 0013883a mov r9,zero
dev->max_stride < read_stride ||
801f14c: 1a400736 bltu r3,r9,801f16c <alt_msgdma_construct_prefetcher_extended_descriptor+0xb8>
801f150: 48c0011e bne r9,r3,801f158 <alt_msgdma_construct_prefetcher_extended_descriptor+0xa4>
801f154: 12000536 bltu r2,r8,801f16c <alt_msgdma_construct_prefetcher_extended_descriptor+0xb8>
dev->enhanced_features != 1
801f158: e0bffd17 ldw r2,-12(fp)
801f15c: 10801703 ldbu r2,92(r2)
dev->max_stride < write_stride ||
801f160: 10803fcc andi r2,r2,255
801f164: 10800060 cmpeqi r2,r2,1
801f168: 1000021e bne r2,zero,801f174 <alt_msgdma_construct_prefetcher_extended_descriptor+0xc0>
)
{
return -EINVAL;
801f16c: 00bffa84 movi r2,-22
801f170: 00003106 br 801f238 <alt_msgdma_construct_prefetcher_extended_descriptor+0x184>
}
descriptor->read_address_high = read_address_high;
801f174: e0bffc17 ldw r2,-16(fp)
801f178: e0fffb17 ldw r3,-20(fp)
801f17c: 10c00915 stw r3,36(r2)
descriptor->read_address_low = read_address_low;
801f180: e0bffc17 ldw r2,-16(fp)
801f184: e0fffa17 ldw r3,-24(fp)
801f188: 10c00015 stw r3,0(r2)
descriptor->write_address_high = write_address_high;
801f18c: e0bffc17 ldw r2,-16(fp)
801f190: e0c00117 ldw r3,4(fp)
801f194: 10c00a15 stw r3,40(r2)
descriptor->write_address_low = write_address_low;
801f198: e0bffc17 ldw r2,-16(fp)
801f19c: e0c00217 ldw r3,8(fp)
801f1a0: 10c00115 stw r3,4(r2)
descriptor->transfer_length = length;
801f1a4: e0bffc17 ldw r2,-16(fp)
801f1a8: e0c00317 ldw r3,12(fp)
801f1ac: 10c00215 stw r3,8(r2)
descriptor->sequence_number = sequence_number;
801f1b0: e0bffc17 ldw r2,-16(fp)
801f1b4: e0fff90b ldhu r3,-28(fp)
801f1b8: 10c0070d sth r3,28(r2)
descriptor->read_burst_count = read_burst_count;
801f1bc: e0bffc17 ldw r2,-16(fp)
801f1c0: e0fff803 ldbu r3,-32(fp)
801f1c4: 10c00785 stb r3,30(r2)
descriptor->write_burst_count = write_burst_count;
801f1c8: e0bffc17 ldw r2,-16(fp)
801f1cc: e0fff703 ldbu r3,-36(fp)
801f1d0: 10c007c5 stb r3,31(r2)
descriptor->read_stride = read_stride;
801f1d4: e0bffc17 ldw r2,-16(fp)
801f1d8: e0fff60b ldhu r3,-40(fp)
801f1dc: 10c0080d sth r3,32(r2)
descriptor->write_stride = write_stride;
801f1e0: e0bffc17 ldw r2,-16(fp)
801f1e4: e0fff50b ldhu r3,-44(fp)
801f1e8: 10c0088d sth r3,34(r2)
/* have descriptor point to itself */
node_addr.u64 = (uintptr_t)descriptor;
801f1ec: e0bffc17 ldw r2,-16(fp)
801f1f0: 1019883a mov r12,r2
801f1f4: 001b883a mov r13,zero
801f1f8: e33ffe15 stw r12,-8(fp)
801f1fc: e37fff15 stw r13,-4(fp)
descriptor->next_desc_ptr_low = node_addr.u32[0];
801f200: e0fffe17 ldw r3,-8(fp)
801f204: e0bffc17 ldw r2,-16(fp)
801f208: 10c00315 stw r3,12(r2)
descriptor->next_desc_ptr_high = node_addr.u32[1];
801f20c: e0ffff17 ldw r3,-4(fp)
801f210: e0bffc17 ldw r2,-16(fp)
801f214: 10c00b15 stw r3,44(r2)
/* clear control own_by_hw bit field (SW still owns this descriptor). */
descriptor->control = (control
& ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK)
| ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK;
801f218: e0c00417 ldw r3,16(fp)
801f21c: 00900034 movhi r2,16384
801f220: 10bfffc4 addi r2,r2,-1
801f224: 1884703a and r2,r3,r2
801f228: 10e00034 orhi r3,r2,32768
descriptor->control = (control
801f22c: e0bffc17 ldw r2,-16(fp)
801f230: 10c00f15 stw r3,60(r2)
return 0 ;
801f234: 0005883a mov r2,zero
}
801f238: e037883a mov sp,fp
801f23c: df000017 ldw fp,0(sp)
801f240: dec00104 addi sp,sp,4
801f244: f800283a ret
0801f248 <alt_msgdma_construct_prefetcher_standard_mm_to_mm_descriptor>:
alt_msgdma_prefetcher_standard_descriptor *descriptor,
alt_u32 read_address,
alt_u32 write_address,
alt_u32 length,
alt_u32 control)
{
801f248: defff804 addi sp,sp,-32
801f24c: dfc00715 stw ra,28(sp)
801f250: df000615 stw fp,24(sp)
801f254: df000604 addi fp,sp,24
801f258: e13fff15 stw r4,-4(fp)
801f25c: e17ffe15 stw r5,-8(fp)
801f260: e1bffd15 stw r6,-12(fp)
801f264: e1fffc15 stw r7,-16(fp)
return alt_msgdma_construct_prefetcher_standard_descriptor(dev, descriptor,
801f268: e0800317 ldw r2,12(fp)
801f26c: d8800115 stw r2,4(sp)
801f270: e0800217 ldw r2,8(fp)
801f274: d8800015 stw r2,0(sp)
801f278: e1fffc17 ldw r7,-16(fp)
801f27c: e1bffd17 ldw r6,-12(fp)
801f280: e17ffe17 ldw r5,-8(fp)
801f284: e13fff17 ldw r4,-4(fp)
801f288: 801f0100 call 801f010 <alt_msgdma_construct_prefetcher_standard_descriptor>
read_address, write_address, length, control);
}
801f28c: e037883a mov sp,fp
801f290: dfc00117 ldw ra,4(sp)
801f294: df000017 ldw fp,0(sp)
801f298: dec00204 addi sp,sp,8
801f29c: f800283a ret
0801f2a0 <alt_msgdma_construct_prefetcher_standard_st_to_mm_descriptor>:
alt_msgdma_dev *dev,
alt_msgdma_prefetcher_standard_descriptor *descriptor,
alt_u32 write_address,
alt_u32 length,
alt_u32 control)
{
801f2a0: defff804 addi sp,sp,-32
801f2a4: dfc00715 stw ra,28(sp)
801f2a8: df000615 stw fp,24(sp)
801f2ac: df000604 addi fp,sp,24
801f2b0: e13fff15 stw r4,-4(fp)
801f2b4: e17ffe15 stw r5,-8(fp)
801f2b8: e1bffd15 stw r6,-12(fp)
801f2bc: e1fffc15 stw r7,-16(fp)
return alt_msgdma_construct_prefetcher_standard_descriptor(dev, descriptor,
801f2c0: e0800217 ldw r2,8(fp)
801f2c4: d8800115 stw r2,4(sp)
801f2c8: e0bffc17 ldw r2,-16(fp)
801f2cc: d8800015 stw r2,0(sp)
801f2d0: e1fffd17 ldw r7,-12(fp)
801f2d4: 000d883a mov r6,zero
801f2d8: e17ffe17 ldw r5,-8(fp)
801f2dc: e13fff17 ldw r4,-4(fp)
801f2e0: 801f0100 call 801f010 <alt_msgdma_construct_prefetcher_standard_descriptor>
0, write_address, length, control);
}
801f2e4: e037883a mov sp,fp
801f2e8: dfc00117 ldw ra,4(sp)
801f2ec: df000017 ldw fp,0(sp)
801f2f0: dec00204 addi sp,sp,8
801f2f4: f800283a ret
0801f2f8 <alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor>:
alt_msgdma_dev *dev,
alt_msgdma_prefetcher_standard_descriptor *descriptor,
alt_u32 read_address,
alt_u32 length,
alt_u32 control)
{
801f2f8: defff804 addi sp,sp,-32
801f2fc: dfc00715 stw ra,28(sp)
801f300: df000615 stw fp,24(sp)
801f304: df000604 addi fp,sp,24
801f308: e13fff15 stw r4,-4(fp)
801f30c: e17ffe15 stw r5,-8(fp)
801f310: e1bffd15 stw r6,-12(fp)
801f314: e1fffc15 stw r7,-16(fp)
return alt_msgdma_construct_prefetcher_standard_descriptor(dev, descriptor,
801f318: e0800217 ldw r2,8(fp)
801f31c: d8800115 stw r2,4(sp)
801f320: e0bffc17 ldw r2,-16(fp)
801f324: d8800015 stw r2,0(sp)
801f328: 000f883a mov r7,zero
801f32c: e1bffd17 ldw r6,-12(fp)
801f330: e17ffe17 ldw r5,-8(fp)
801f334: e13fff17 ldw r4,-4(fp)
801f338: 801f0100 call 801f010 <alt_msgdma_construct_prefetcher_standard_descriptor>
read_address, 0, length, control);
}
801f33c: e037883a mov sp,fp
801f340: dfc00117 ldw ra,4(sp)
801f344: df000017 ldw fp,0(sp)
801f348: dec00204 addi sp,sp,8
801f34c: f800283a ret
0801f350 <alt_msgdma_construct_prefetcher_extended_st_to_mm_descriptor>:
alt_u32 length,
alt_u32 control,
alt_u16 sequence_number,
alt_u8 write_burst_count,
alt_u16 write_stride)
{
801f350: deffee04 addi sp,sp,-72
801f354: dfc01115 stw ra,68(sp)
801f358: df001015 stw fp,64(sp)
801f35c: df001004 addi fp,sp,64
801f360: e13fff15 stw r4,-4(fp)
801f364: e17ffe15 stw r5,-8(fp)
801f368: e1bffd15 stw r6,-12(fp)
801f36c: e1fffc15 stw r7,-16(fp)
801f370: e1000417 ldw r4,16(fp)
801f374: e0c00517 ldw r3,20(fp)
801f378: e0800617 ldw r2,24(fp)
801f37c: e13ffb0d sth r4,-20(fp)
801f380: e0fffa05 stb r3,-24(fp)
801f384: e0bff90d sth r2,-28(fp)
return alt_msgdma_construct_prefetcher_extended_descriptor(dev, descriptor,
801f388: e0bffb0b ldhu r2,-20(fp)
801f38c: e0fffa03 ldbu r3,-24(fp)
801f390: e13ff90b ldhu r4,-28(fp)
801f394: d9000815 stw r4,32(sp)
801f398: d8000715 stw zero,28(sp)
801f39c: d8c00615 stw r3,24(sp)
801f3a0: d8000515 stw zero,20(sp)
801f3a4: d8800415 stw r2,16(sp)
801f3a8: e0800317 ldw r2,12(fp)
801f3ac: d8800315 stw r2,12(sp)
801f3b0: e0800217 ldw r2,8(fp)
801f3b4: d8800215 stw r2,8(sp)
801f3b8: e0bffc17 ldw r2,-16(fp)
801f3bc: d8800115 stw r2,4(sp)
801f3c0: e0bffd17 ldw r2,-12(fp)
801f3c4: d8800015 stw r2,0(sp)
801f3c8: 000f883a mov r7,zero
801f3cc: 000d883a mov r6,zero
801f3d0: e17ffe17 ldw r5,-8(fp)
801f3d4: e13fff17 ldw r4,-4(fp)
801f3d8: 801f0b40 call 801f0b4 <alt_msgdma_construct_prefetcher_extended_descriptor>
0, 0, write_address_high, write_address_low, length, control,
sequence_number, 0, write_burst_count, 0, write_stride);
}
801f3dc: e037883a mov sp,fp
801f3e0: dfc00117 ldw ra,4(sp)
801f3e4: df000017 ldw fp,0(sp)
801f3e8: dec00204 addi sp,sp,8
801f3ec: f800283a ret
0801f3f0 <alt_msgdma_construct_prefetcher_extended_mm_to_st_descriptor>:
alt_u32 length,
alt_u32 control,
alt_u16 sequence_number,
alt_u8 read_burst_count,
alt_u16 read_stride)
{
801f3f0: deffee04 addi sp,sp,-72
801f3f4: dfc01115 stw ra,68(sp)
801f3f8: df001015 stw fp,64(sp)
801f3fc: df001004 addi fp,sp,64
801f400: e13fff15 stw r4,-4(fp)
801f404: e17ffe15 stw r5,-8(fp)
801f408: e1bffd15 stw r6,-12(fp)
801f40c: e1fffc15 stw r7,-16(fp)
801f410: e1000417 ldw r4,16(fp)
801f414: e0c00517 ldw r3,20(fp)
801f418: e0800617 ldw r2,24(fp)
801f41c: e13ffb0d sth r4,-20(fp)
801f420: e0fffa05 stb r3,-24(fp)
801f424: e0bff90d sth r2,-28(fp)
return alt_msgdma_construct_prefetcher_extended_descriptor(dev, descriptor,
801f428: e0bffb0b ldhu r2,-20(fp)
801f42c: e0fffa03 ldbu r3,-24(fp)
801f430: e13ff90b ldhu r4,-28(fp)
801f434: d8000815 stw zero,32(sp)
801f438: d9000715 stw r4,28(sp)
801f43c: d8000615 stw zero,24(sp)
801f440: d8c00515 stw r3,20(sp)
801f444: d8800415 stw r2,16(sp)
801f448: e0800317 ldw r2,12(fp)
801f44c: d8800315 stw r2,12(sp)
801f450: e0800217 ldw r2,8(fp)
801f454: d8800215 stw r2,8(sp)
801f458: d8000115 stw zero,4(sp)
801f45c: d8000015 stw zero,0(sp)
801f460: e1fffc17 ldw r7,-16(fp)
801f464: e1bffd17 ldw r6,-12(fp)
801f468: e17ffe17 ldw r5,-8(fp)
801f46c: e13fff17 ldw r4,-4(fp)
801f470: 801f0b40 call 801f0b4 <alt_msgdma_construct_prefetcher_extended_descriptor>
read_address_high, read_address_low, 0, 0, length, control,
sequence_number, read_burst_count, 0, read_stride, 0);
}
801f474: e037883a mov sp,fp
801f478: dfc00117 ldw ra,4(sp)
801f47c: df000017 ldw fp,0(sp)
801f480: dec00204 addi sp,sp,8
801f484: f800283a ret
0801f488 <alt_msgdma_construct_prefetcher_extended_mm_to_mm_descriptor>:
alt_u16 sequence_number,
alt_u8 read_burst_count,
alt_u8 write_burst_count,
alt_u16 read_stride,
alt_u16 write_stride)
{
801f488: deffec04 addi sp,sp,-80
801f48c: dfc01315 stw ra,76(sp)
801f490: df001215 stw fp,72(sp)
801f494: df001204 addi fp,sp,72
801f498: e13fff15 stw r4,-4(fp)
801f49c: e17ffe15 stw r5,-8(fp)
801f4a0: e1bffd15 stw r6,-12(fp)
801f4a4: e1fffc15 stw r7,-16(fp)
801f4a8: e1800617 ldw r6,24(fp)
801f4ac: e1400717 ldw r5,28(fp)
801f4b0: e1000817 ldw r4,32(fp)
801f4b4: e0c00917 ldw r3,36(fp)
801f4b8: e0800a17 ldw r2,40(fp)
801f4bc: e1bffb0d sth r6,-20(fp)
801f4c0: e17ffa05 stb r5,-24(fp)
801f4c4: e13ff905 stb r4,-28(fp)
801f4c8: e0fff80d sth r3,-32(fp)
801f4cc: e0bff70d sth r2,-36(fp)
return alt_msgdma_construct_prefetcher_extended_descriptor(dev, descriptor,
801f4d0: e0bffb0b ldhu r2,-20(fp)
801f4d4: e0fffa03 ldbu r3,-24(fp)
801f4d8: e13ff903 ldbu r4,-28(fp)
801f4dc: e17ff80b ldhu r5,-32(fp)
801f4e0: e1bff70b ldhu r6,-36(fp)
801f4e4: d9800815 stw r6,32(sp)
801f4e8: d9400715 stw r5,28(sp)
801f4ec: d9000615 stw r4,24(sp)
801f4f0: d8c00515 stw r3,20(sp)
801f4f4: d8800415 stw r2,16(sp)
801f4f8: e0800517 ldw r2,20(fp)
801f4fc: d8800315 stw r2,12(sp)
801f500: e0800417 ldw r2,16(fp)
801f504: d8800215 stw r2,8(sp)
801f508: e0800317 ldw r2,12(fp)
801f50c: d8800115 stw r2,4(sp)
801f510: e0800217 ldw r2,8(fp)
801f514: d8800015 stw r2,0(sp)
801f518: e1fffc17 ldw r7,-16(fp)
801f51c: e1bffd17 ldw r6,-12(fp)
801f520: e17ffe17 ldw r5,-8(fp)
801f524: e13fff17 ldw r4,-4(fp)
801f528: 801f0b40 call 801f0b4 <alt_msgdma_construct_prefetcher_extended_descriptor>
read_address_high, read_address_low, write_address_high,
write_address_low, length, control, sequence_number,
read_burst_count, write_burst_count, read_stride, write_stride);
}
801f52c: e037883a mov sp,fp
801f530: dfc00117 ldw ra,4(sp)
801f534: df000017 ldw fp,0(sp)
801f538: dec00204 addi sp,sp,8
801f53c: f800283a ret
0801f540 <alt_msgdma_prefetcher_add_standard_desc_to_list>:
* descriptor.next_ptr not pointing back to itslef)
*/
int alt_msgdma_prefetcher_add_standard_desc_to_list (
alt_msgdma_prefetcher_standard_descriptor** list,
alt_msgdma_prefetcher_standard_descriptor* descriptor)
{
801f540: defffc04 addi sp,sp,-16
801f544: df000315 stw fp,12(sp)
801f548: df000304 addi fp,sp,12
801f54c: e13ffe15 stw r4,-8(fp)
801f550: e17ffd15 stw r5,-12(fp)
alt_msgdma_prefetcher_standard_descriptor *last_descr_ptr;
if (descriptor == NULL)
801f554: e0bffd17 ldw r2,-12(fp)
801f558: 1000021e bne r2,zero,801f564 <alt_msgdma_prefetcher_add_standard_desc_to_list+0x24>
{
return -EINVAL; /* this descriptor cannot be NULL */
801f55c: 00bffa84 movi r2,-22
801f560: 00002f06 br 801f620 <alt_msgdma_prefetcher_add_standard_desc_to_list+0xe0>
}
if (descriptor->next_desc_ptr != (alt_u32)descriptor)
801f564: e0bffd17 ldw r2,-12(fp)
801f568: 10c00317 ldw r3,12(r2)
801f56c: e0bffd17 ldw r2,-12(fp)
801f570: 18800226 beq r3,r2,801f57c <alt_msgdma_prefetcher_add_standard_desc_to_list+0x3c>
{
return -EINVAL; /* descriptor.next_ptr must point to itself */
801f574: 00bffa84 movi r2,-22
801f578: 00002906 br 801f620 <alt_msgdma_prefetcher_add_standard_desc_to_list+0xe0>
}
if (*list == NULL)
801f57c: e0bffe17 ldw r2,-8(fp)
801f580: 10800017 ldw r2,0(r2)
801f584: 1000051e bne r2,zero,801f59c <alt_msgdma_prefetcher_add_standard_desc_to_list+0x5c>
{
*list = descriptor; /* make this root-node if list is empty */
801f588: e0bffe17 ldw r2,-8(fp)
801f58c: e0fffd17 ldw r3,-12(fp)
801f590: 10c00015 stw r3,0(r2)
return 0; /* successfully added */
801f594: 0005883a mov r2,zero
801f598: 00002106 br 801f620 <alt_msgdma_prefetcher_add_standard_desc_to_list+0xe0>
}
if (*list == descriptor)
801f59c: e0bffe17 ldw r2,-8(fp)
801f5a0: 10800017 ldw r2,0(r2)
801f5a4: e0fffd17 ldw r3,-12(fp)
801f5a8: 1880021e bne r3,r2,801f5b4 <alt_msgdma_prefetcher_add_standard_desc_to_list+0x74>
{
return -EINVAL; /* this descriptor cannot already be root-node */
801f5ac: 00bffa84 movi r2,-22
801f5b0: 00001b06 br 801f620 <alt_msgdma_prefetcher_add_standard_desc_to_list+0xe0>
}
/* get to last node in the list */
last_descr_ptr = *list; /* start at list root-node */
801f5b4: e0bffe17 ldw r2,-8(fp)
801f5b8: 10800017 ldw r2,0(r2)
801f5bc: e0bfff15 stw r2,-4(fp)
/* traverse list until you get the last node */
while (last_descr_ptr->next_desc_ptr != (alt_u32)*list)
801f5c0: 00000906 br 801f5e8 <alt_msgdma_prefetcher_add_standard_desc_to_list+0xa8>
{
if (last_descr_ptr->next_desc_ptr == (alt_u32)descriptor)
801f5c4: e0bfff17 ldw r2,-4(fp)
801f5c8: 10c00317 ldw r3,12(r2)
801f5cc: e0bffd17 ldw r2,-12(fp)
801f5d0: 1880021e bne r3,r2,801f5dc <alt_msgdma_prefetcher_add_standard_desc_to_list+0x9c>
{
return -EINVAL; /* descriptor cannot already be in the list */
801f5d4: 00bffa84 movi r2,-22
801f5d8: 00001106 br 801f620 <alt_msgdma_prefetcher_add_standard_desc_to_list+0xe0>
}
last_descr_ptr =
(alt_msgdma_prefetcher_standard_descriptor*)(last_descr_ptr->next_desc_ptr);
801f5dc: e0bfff17 ldw r2,-4(fp)
801f5e0: 10800317 ldw r2,12(r2)
last_descr_ptr =
801f5e4: e0bfff15 stw r2,-4(fp)
while (last_descr_ptr->next_desc_ptr != (alt_u32)*list)
801f5e8: e0bfff17 ldw r2,-4(fp)
801f5ec: 10800317 ldw r2,12(r2)
801f5f0: e0fffe17 ldw r3,-8(fp)
801f5f4: 18c00017 ldw r3,0(r3)
801f5f8: 10fff21e bne r2,r3,801f5c4 <alt_msgdma_prefetcher_add_standard_desc_to_list+0x84>
}
/* add this descriptor to end of list */
last_descr_ptr->next_desc_ptr = (alt_u32)((uintptr_t)descriptor);
801f5fc: e0fffd17 ldw r3,-12(fp)
801f600: e0bfff17 ldw r2,-4(fp)
801f604: 10c00315 stw r3,12(r2)
/* ensure new last pointer points the start of the list */
descriptor->next_desc_ptr = (alt_u32)((uintptr_t)*list);
801f608: e0bffe17 ldw r2,-8(fp)
801f60c: 10800017 ldw r2,0(r2)
801f610: 1007883a mov r3,r2
801f614: e0bffd17 ldw r2,-12(fp)
801f618: 10c00315 stw r3,12(r2)
return 0; /* successfully added */
801f61c: 0005883a mov r2,zero
}
801f620: e037883a mov sp,fp
801f624: df000017 ldw fp,0(sp)
801f628: dec00104 addi sp,sp,4
801f62c: f800283a ret
0801f630 <alt_msgdma_prefetcher_add_extended_desc_to_list>:
int alt_msgdma_prefetcher_add_extended_desc_to_list (
alt_msgdma_prefetcher_extended_descriptor** list,
alt_msgdma_prefetcher_extended_descriptor* descriptor)
{
801f630: defff804 addi sp,sp,-32
801f634: df000715 stw fp,28(sp)
801f638: df000704 addi fp,sp,28
801f63c: e13ffa15 stw r4,-24(fp)
801f640: e17ff915 stw r5,-28(fp)
alt_msgdma_prefetcher_extended_descriptor *last_descr_ptr;
msgdma_addr64 root_node_addr, next_node_addr;
if (descriptor == NULL)
801f644: e13ff917 ldw r4,-28(fp)
801f648: 2000021e bne r4,zero,801f654 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x24>
{
return -EINVAL; /* this descriptor cannot be NULL */
801f64c: 00bffa84 movi r2,-22
801f650: 00005906 br 801f7b8 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x188>
}
next_node_addr.u64 = (uintptr_t)descriptor;
801f654: e13ff917 ldw r4,-28(fp)
801f658: 2015883a mov r10,r4
801f65c: 0017883a mov r11,zero
801f660: e2bffb15 stw r10,-20(fp)
801f664: e2fffc15 stw r11,-16(fp)
if( (descriptor->next_desc_ptr_low != next_node_addr.u32[0]) ||
801f668: e13ff917 ldw r4,-28(fp)
801f66c: 21400317 ldw r5,12(r4)
801f670: e13ffb17 ldw r4,-20(fp)
801f674: 2900041e bne r5,r4,801f688 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x58>
(descriptor->next_desc_ptr_high != next_node_addr.u32[1]))
801f678: e13ff917 ldw r4,-28(fp)
801f67c: 21400b17 ldw r5,44(r4)
801f680: e13ffc17 ldw r4,-16(fp)
if( (descriptor->next_desc_ptr_low != next_node_addr.u32[0]) ||
801f684: 29000226 beq r5,r4,801f690 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x60>
{
return -EINVAL; /* descriptor.next_ptr must point to itself */
801f688: 00bffa84 movi r2,-22
801f68c: 00004a06 br 801f7b8 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x188>
}
if (*list == NULL)
801f690: e13ffa17 ldw r4,-24(fp)
801f694: 21000017 ldw r4,0(r4)
801f698: 2000051e bne r4,zero,801f6b0 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x80>
{
*list = descriptor; /* make this the root-node if list is empty */
801f69c: e0bffa17 ldw r2,-24(fp)
801f6a0: e0fff917 ldw r3,-28(fp)
801f6a4: 10c00015 stw r3,0(r2)
return 0;
801f6a8: 0005883a mov r2,zero
801f6ac: 00004206 br 801f7b8 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x188>
}
if (*list == descriptor)
801f6b0: e13ffa17 ldw r4,-24(fp)
801f6b4: 21000017 ldw r4,0(r4)
801f6b8: e17ff917 ldw r5,-28(fp)
801f6bc: 2900021e bne r5,r4,801f6c8 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x98>
{
return -EINVAL; /* this descriptor cannot already be root-node */
801f6c0: 00bffa84 movi r2,-22
801f6c4: 00003c06 br 801f7b8 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x188>
}
/* get to last node in the list */
last_descr_ptr = *list; /* start at list root-node */
801f6c8: e13ffa17 ldw r4,-24(fp)
801f6cc: 21000017 ldw r4,0(r4)
801f6d0: e13fff15 stw r4,-4(fp)
/* the last nodes next ptr should point to the root node*/
root_node_addr.u64 = (uintptr_t)*list;
801f6d4: e13ffa17 ldw r4,-24(fp)
801f6d8: 21000017 ldw r4,0(r4)
801f6dc: 2011883a mov r8,r4
801f6e0: 0013883a mov r9,zero
801f6e4: e23ffd15 stw r8,-12(fp)
801f6e8: e27ffe15 stw r9,-8(fp)
/* traverse list until you get the last node */
while ((last_descr_ptr->next_desc_ptr_low != root_node_addr.u32[0])
801f6ec: 00001806 br 801f750 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x120>
|| (last_descr_ptr->next_desc_ptr_high != root_node_addr.u32[1]))
{
/* first check if descriptor already in the list */
next_node_addr.u64 = (uintptr_t)descriptor;
801f6f0: e13ff917 ldw r4,-28(fp)
801f6f4: 200d883a mov r6,r4
801f6f8: 000f883a mov r7,zero
801f6fc: e1bffb15 stw r6,-20(fp)
801f700: e1fffc15 stw r7,-16(fp)
if ((last_descr_ptr->next_desc_ptr_low == next_node_addr.u32[0])
801f704: e13fff17 ldw r4,-4(fp)
801f708: 21400317 ldw r5,12(r4)
801f70c: e13ffb17 ldw r4,-20(fp)
801f710: 2900061e bne r5,r4,801f72c <alt_msgdma_prefetcher_add_extended_desc_to_list+0xfc>
&& (last_descr_ptr->next_desc_ptr_high == next_node_addr.u32[1]))
801f714: e13fff17 ldw r4,-4(fp)
801f718: 21400b17 ldw r5,44(r4)
801f71c: e13ffc17 ldw r4,-16(fp)
801f720: 2900021e bne r5,r4,801f72c <alt_msgdma_prefetcher_add_extended_desc_to_list+0xfc>
{
return -EINVAL; /* descriptor cannot already be in the list */
801f724: 00bffa84 movi r2,-22
801f728: 00002306 br 801f7b8 <alt_msgdma_prefetcher_add_extended_desc_to_list+0x188>
}
/* go to next node in list, using 64 bit address */
next_node_addr.u32[0] = last_descr_ptr->next_desc_ptr_low;
801f72c: e13fff17 ldw r4,-4(fp)
801f730: 21000317 ldw r4,12(r4)
801f734: e13ffb15 stw r4,-20(fp)
next_node_addr.u32[1] = last_descr_ptr->next_desc_ptr_high;
801f738: e13fff17 ldw r4,-4(fp)
801f73c: 21000b17 ldw r4,44(r4)
801f740: e13ffc15 stw r4,-16(fp)
last_descr_ptr =
(alt_msgdma_prefetcher_extended_descriptor*)((uintptr_t)next_node_addr.u64);
801f744: e13ffb17 ldw r4,-20(fp)
801f748: e17ffc17 ldw r5,-16(fp)
last_descr_ptr =
801f74c: e13fff15 stw r4,-4(fp)
while ((last_descr_ptr->next_desc_ptr_low != root_node_addr.u32[0])
801f750: e13fff17 ldw r4,-4(fp)
801f754: 21400317 ldw r5,12(r4)
801f758: e13ffd17 ldw r4,-12(fp)
801f75c: 293fe41e bne r5,r4,801f6f0 <alt_msgdma_prefetcher_add_extended_desc_to_list+0xc0>
|| (last_descr_ptr->next_desc_ptr_high != root_node_addr.u32[1]))
801f760: e13fff17 ldw r4,-4(fp)
801f764: 21400b17 ldw r5,44(r4)
801f768: e13ffe17 ldw r4,-8(fp)
801f76c: 293fe01e bne r5,r4,801f6f0 <alt_msgdma_prefetcher_add_extended_desc_to_list+0xc0>
}
/* add this descriptor to end of list */
next_node_addr.u64 = (uintptr_t)descriptor;
801f770: e13ff917 ldw r4,-28(fp)
801f774: 2005883a mov r2,r4
801f778: 0007883a mov r3,zero
801f77c: e0bffb15 stw r2,-20(fp)
801f780: e0fffc15 stw r3,-16(fp)
last_descr_ptr->next_desc_ptr_low = next_node_addr.u32[0];
801f784: e0fffb17 ldw r3,-20(fp)
801f788: e0bfff17 ldw r2,-4(fp)
801f78c: 10c00315 stw r3,12(r2)
last_descr_ptr->next_desc_ptr_high = next_node_addr.u32[1];
801f790: e0fffc17 ldw r3,-16(fp)
801f794: e0bfff17 ldw r2,-4(fp)
801f798: 10c00b15 stw r3,44(r2)
/* ensure new last pointer points the beginning of the list */
descriptor->next_desc_ptr_low = root_node_addr.u32[0];
801f79c: e0fffd17 ldw r3,-12(fp)
801f7a0: e0bff917 ldw r2,-28(fp)
801f7a4: 10c00315 stw r3,12(r2)
descriptor->next_desc_ptr_high = root_node_addr.u32[1];
801f7a8: e0fffe17 ldw r3,-8(fp)
801f7ac: e0bff917 ldw r2,-28(fp)
801f7b0: 10c00b15 stw r3,44(r2)
return 0;
801f7b4: 0005883a mov r2,zero
}
801f7b8: e037883a mov sp,fp
801f7bc: df000017 ldw fp,0(sp)
801f7c0: dec00104 addi sp,sp,4
801f7c4: f800283a ret
0801f7c8 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits>:
*/
int alt_msgdma_prefetcher_set_std_list_own_by_hw_bits (
alt_msgdma_prefetcher_standard_descriptor *list,
alt_u8 last_desc_owned_by_sw,
alt_u8 dcache_flush_desc_list)
{
801f7c8: defff804 addi sp,sp,-32
801f7cc: dfc00715 stw ra,28(sp)
801f7d0: df000615 stw fp,24(sp)
801f7d4: df000604 addi fp,sp,24
801f7d8: e13ffc15 stw r4,-16(fp)
801f7dc: 2805883a mov r2,r5
801f7e0: 3007883a mov r3,r6
801f7e4: e0bffb05 stb r2,-20(fp)
801f7e8: 1805883a mov r2,r3
801f7ec: e0bffa05 stb r2,-24(fp)
alt_u32 descriptor_control_field = 0;
801f7f0: e03ffd15 stw zero,-12(fp)
alt_msgdma_prefetcher_standard_descriptor *last_descr_ptr;
alt_u32 descriptor_count = 0;
801f7f4: e03ffe15 stw zero,-8(fp)
if (list == NULL)
801f7f8: e0bffc17 ldw r2,-16(fp)
801f7fc: 1000021e bne r2,zero,801f808 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits+0x40>
{
return -EINVAL; /* this list cannot be empty */
801f800: 00bffa84 movi r2,-22
801f804: 00002f06 br 801f8c4 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits+0xfc>
}
/* update all nodes in the list */
last_descr_ptr = list; /* start at list root-node */
801f808: e0bffc17 ldw r2,-16(fp)
801f80c: e0bfff15 stw r2,-4(fp)
/* traverse list to update all of the nodes */
while (last_descr_ptr->next_desc_ptr != (alt_u32)list)
801f810: 00000d06 br 801f848 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits+0x80>
{
/* get current value */
descriptor_control_field = last_descr_ptr->control;
801f814: e0bfff17 ldw r2,-4(fp)
801f818: 10800717 ldw r2,28(r2)
801f81c: e0bffd15 stw r2,-12(fp)
/* update own_by_hw bit only */
last_descr_ptr->control = descriptor_control_field
| ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK;
801f820: e0bffd17 ldw r2,-12(fp)
801f824: 10d00034 orhi r3,r2,16384
last_descr_ptr->control = descriptor_control_field
801f828: e0bfff17 ldw r2,-4(fp)
801f82c: 10c00715 stw r3,28(r2)
/* go to next node in list */
last_descr_ptr =
(alt_msgdma_prefetcher_standard_descriptor*)(last_descr_ptr->next_desc_ptr);
801f830: e0bfff17 ldw r2,-4(fp)
801f834: 10800317 ldw r2,12(r2)
last_descr_ptr =
801f838: e0bfff15 stw r2,-4(fp)
descriptor_count++;
801f83c: e0bffe17 ldw r2,-8(fp)
801f840: 10800044 addi r2,r2,1
801f844: e0bffe15 stw r2,-8(fp)
while (last_descr_ptr->next_desc_ptr != (alt_u32)list)
801f848: e0bfff17 ldw r2,-4(fp)
801f84c: 10c00317 ldw r3,12(r2)
801f850: e0bffc17 ldw r2,-16(fp)
801f854: 18bfef1e bne r3,r2,801f814 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits+0x4c>
}
/* update the last node in the list, currently last_descr_ptr after while loop */
descriptor_control_field = last_descr_ptr->control; /* get current value */
801f858: e0bfff17 ldw r2,-4(fp)
801f85c: 10800717 ldw r2,28(r2)
801f860: e0bffd15 stw r2,-12(fp)
/* update own_by_hw bit only */
if (last_desc_owned_by_sw)
801f864: e0bffb03 ldbu r2,-20(fp)
801f868: 10000726 beq r2,zero,801f888 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits+0xc0>
{
last_descr_ptr->control = descriptor_control_field
& ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK;
801f86c: e0fffd17 ldw r3,-12(fp)
801f870: 00b00034 movhi r2,49152
801f874: 10bfffc4 addi r2,r2,-1
801f878: 1886703a and r3,r3,r2
last_descr_ptr->control = descriptor_control_field
801f87c: e0bfff17 ldw r2,-4(fp)
801f880: 10c00715 stw r3,28(r2)
801f884: 00000406 br 801f898 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits+0xd0>
}
else {
last_descr_ptr->control = descriptor_control_field
| ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK;
801f888: e0bffd17 ldw r2,-12(fp)
801f88c: 10d00034 orhi r3,r2,16384
last_descr_ptr->control = descriptor_control_field
801f890: e0bfff17 ldw r2,-4(fp)
801f894: 10c00715 stw r3,28(r2)
}
descriptor_count++;
801f898: e0bffe17 ldw r2,-8(fp)
801f89c: 10800044 addi r2,r2,1
801f8a0: e0bffe15 stw r2,-8(fp)
if (dcache_flush_desc_list)
801f8a4: e0bffa03 ldbu r2,-24(fp)
801f8a8: 10000526 beq r2,zero,801f8c0 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits+0xf8>
{
alt_dcache_flush(list,sizeof(alt_msgdma_prefetcher_standard_descriptor) * descriptor_count);
801f8ac: e0bffe17 ldw r2,-8(fp)
801f8b0: 1004917a slli r2,r2,5
801f8b4: 100b883a mov r5,r2
801f8b8: e13ffc17 ldw r4,-16(fp)
801f8bc: 80371c00 call 80371c0 <alt_dcache_flush>
}
return 0;
801f8c0: 0005883a mov r2,zero
}
801f8c4: e037883a mov sp,fp
801f8c8: dfc00117 ldw ra,4(sp)
801f8cc: df000017 ldw fp,0(sp)
801f8d0: dec00204 addi sp,sp,8
801f8d4: f800283a ret
0801f8d8 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits>:
*/
int alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits (
alt_msgdma_prefetcher_extended_descriptor *list,
alt_u8 last_desc_owned_by_sw,
alt_u8 dcache_flush_desc_list)
{
801f8d8: defff404 addi sp,sp,-48
801f8dc: dfc00b15 stw ra,44(sp)
801f8e0: df000a15 stw fp,40(sp)
801f8e4: df000a04 addi fp,sp,40
801f8e8: e13ff815 stw r4,-32(fp)
801f8ec: 2809883a mov r4,r5
801f8f0: 300b883a mov r5,r6
801f8f4: e13ff705 stb r4,-36(fp)
801f8f8: 2809883a mov r4,r5
801f8fc: e13ff605 stb r4,-40(fp)
alt_u32 descriptor_control_field = 0;
801f900: e03ffd15 stw zero,-12(fp)
msgdma_addr64 root_node_addr, next_node_addr;
alt_msgdma_prefetcher_extended_descriptor *last_descr_ptr;
alt_u32 descriptor_count = 0;
801f904: e03ffe15 stw zero,-8(fp)
if (list == NULL)
801f908: e13ff817 ldw r4,-32(fp)
801f90c: 2000021e bne r4,zero,801f918 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits+0x40>
{
return -EINVAL; /* this list cannot be empty */
801f910: 00bffa84 movi r2,-22
801f914: 00003e06 br 801fa10 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits+0x138>
}
/* update all nodes in the list */
last_descr_ptr = list; /* start at list root-node */
801f918: e13ff817 ldw r4,-32(fp)
801f91c: e13fff15 stw r4,-4(fp)
/* the last nodes next ptr should point to the root node*/
root_node_addr.u64 = (uintptr_t)list;
801f920: e13ff817 ldw r4,-32(fp)
801f924: 2005883a mov r2,r4
801f928: 0007883a mov r3,zero
801f92c: e0bffb15 stw r2,-20(fp)
801f930: e0fffc15 stw r3,-16(fp)
/* traverse list until you get the last node */
while ((last_descr_ptr->next_desc_ptr_low != root_node_addr.u32[0])
801f934: 00001306 br 801f984 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits+0xac>
|| (last_descr_ptr->next_desc_ptr_high != root_node_addr.u32[1]))
{
/* start with current value */
descriptor_control_field = last_descr_ptr->control;
801f938: e0bfff17 ldw r2,-4(fp)
801f93c: 10800f17 ldw r2,60(r2)
801f940: e0bffd15 stw r2,-12(fp)
/* update own_by_hw bit only */
last_descr_ptr->control = descriptor_control_field
| ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK;
801f944: e0bffd17 ldw r2,-12(fp)
801f948: 10d00034 orhi r3,r2,16384
last_descr_ptr->control = descriptor_control_field
801f94c: e0bfff17 ldw r2,-4(fp)
801f950: 10c00f15 stw r3,60(r2)
/* go to next node in list, using 64 bit address */
next_node_addr.u32[0] = last_descr_ptr->next_desc_ptr_low;
801f954: e0bfff17 ldw r2,-4(fp)
801f958: 10800317 ldw r2,12(r2)
801f95c: e0bff915 stw r2,-28(fp)
next_node_addr.u32[1] = last_descr_ptr->next_desc_ptr_high;
801f960: e0bfff17 ldw r2,-4(fp)
801f964: 10800b17 ldw r2,44(r2)
801f968: e0bffa15 stw r2,-24(fp)
last_descr_ptr =
(alt_msgdma_prefetcher_extended_descriptor*)((uintptr_t)next_node_addr.u64);
801f96c: e0bff917 ldw r2,-28(fp)
801f970: e0fffa17 ldw r3,-24(fp)
last_descr_ptr =
801f974: e0bfff15 stw r2,-4(fp)
descriptor_count++;
801f978: e0bffe17 ldw r2,-8(fp)
801f97c: 10800044 addi r2,r2,1
801f980: e0bffe15 stw r2,-8(fp)
while ((last_descr_ptr->next_desc_ptr_low != root_node_addr.u32[0])
801f984: e0bfff17 ldw r2,-4(fp)
801f988: 10c00317 ldw r3,12(r2)
801f98c: e0bffb17 ldw r2,-20(fp)
801f990: 18bfe91e bne r3,r2,801f938 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits+0x60>
|| (last_descr_ptr->next_desc_ptr_high != root_node_addr.u32[1]))
801f994: e0bfff17 ldw r2,-4(fp)
801f998: 10c00b17 ldw r3,44(r2)
801f99c: e0bffc17 ldw r2,-16(fp)
801f9a0: 18bfe51e bne r3,r2,801f938 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits+0x60>
}
/* update the last node in the list, currently last_descr_ptr after while loop */
descriptor_control_field = last_descr_ptr->control; /* start with current value */
801f9a4: e0bfff17 ldw r2,-4(fp)
801f9a8: 10800f17 ldw r2,60(r2)
801f9ac: e0bffd15 stw r2,-12(fp)
/* update own_by_hw bit only */
if (last_desc_owned_by_sw)
801f9b0: e0bff703 ldbu r2,-36(fp)
801f9b4: 10000726 beq r2,zero,801f9d4 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits+0xfc>
{
last_descr_ptr->control = descriptor_control_field
& ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK;
801f9b8: e0fffd17 ldw r3,-12(fp)
801f9bc: 00b00034 movhi r2,49152
801f9c0: 10bfffc4 addi r2,r2,-1
801f9c4: 1886703a and r3,r3,r2
last_descr_ptr->control = descriptor_control_field
801f9c8: e0bfff17 ldw r2,-4(fp)
801f9cc: 10c00f15 stw r3,60(r2)
801f9d0: 00000406 br 801f9e4 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits+0x10c>
}
else {
last_descr_ptr->control = descriptor_control_field
| ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK;
801f9d4: e0bffd17 ldw r2,-12(fp)
801f9d8: 10d00034 orhi r3,r2,16384
last_descr_ptr->control = descriptor_control_field
801f9dc: e0bfff17 ldw r2,-4(fp)
801f9e0: 10c00f15 stw r3,60(r2)
}
descriptor_count++;
801f9e4: e0bffe17 ldw r2,-8(fp)
801f9e8: 10800044 addi r2,r2,1
801f9ec: e0bffe15 stw r2,-8(fp)
if (dcache_flush_desc_list)
801f9f0: e0bff603 ldbu r2,-40(fp)
801f9f4: 10000526 beq r2,zero,801fa0c <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits+0x134>
{
alt_dcache_flush(list,sizeof(alt_msgdma_prefetcher_extended_descriptor) * descriptor_count);
801f9f8: e0bffe17 ldw r2,-8(fp)
801f9fc: 100491ba slli r2,r2,6
801fa00: 100b883a mov r5,r2
801fa04: e13ff817 ldw r4,-32(fp)
801fa08: 80371c00 call 80371c0 <alt_dcache_flush>
}
return 0;
801fa0c: 0005883a mov r2,zero
}
801fa10: e037883a mov sp,fp
801fa14: dfc00117 ldw ra,4(sp)
801fa18: df000017 ldw fp,0(sp)
801fa1c: dec00204 addi sp,sp,8
801fa20: f800283a ret
0801fa24 <alt_msgdma_start_prefetcher_with_list_addr>:
int alt_msgdma_start_prefetcher_with_list_addr (
alt_msgdma_dev *dev,
alt_u64 list_addr,
alt_u8 park_mode_en,
alt_u8 poll_en)
{
801fa24: deffeb04 addi sp,sp,-84
801fa28: dfc01415 stw ra,80(sp)
801fa2c: df001315 stw fp,76(sp)
801fa30: df001304 addi fp,sp,76
801fa34: e13ff115 stw r4,-60(fp)
801fa38: e17fef15 stw r5,-68(fp)
801fa3c: e1bff015 stw r6,-64(fp)
801fa40: 3807883a mov r3,r7
801fa44: e0800217 ldw r2,8(fp)
801fa48: e0ffee05 stb r3,-72(fp)
801fa4c: e0bfed05 stb r2,-76(fp)
alt_u32 prefetcher_ctl = 0;
801fa50: e03fff15 stw zero,-4(fp)
alt_u32 dispatcher_ctl = 0;
801fa54: e03ffe15 stw zero,-8(fp)
alt_irq_context context = 0;
801fa58: e03ffd15 stw zero,-12(fp)
/* use helper struct to get easy access to hi/low address */
msgdma_addr64 root_node_addr;
root_node_addr.u64 = list_addr;
801fa5c: e0bfef17 ldw r2,-68(fp)
801fa60: e0bff315 stw r2,-52(fp)
801fa64: e0bff017 ldw r2,-64(fp)
801fa68: e0bff415 stw r2,-48(fp)
/*
* When running in a multi threaded environment, obtain the "regs_lock"
* semaphore. This ensures that accessing registers is thread-safe.
*/
ALT_SEM_PEND (dev->regs_lock, 0);
801fa6c: e0bff117 ldw r2,-60(fp)
801fa70: 10801817 ldw r2,96(r2)
801fa74: e0bffc15 stw r2,-16(fp)
801fa78: e03ffb8d sth zero,-18(fp)
801fa7c: e0bffb8b ldhu r2,-18(fp)
801fa80: e0fff2c4 addi r3,fp,-53
801fa84: 180d883a mov r6,r3
801fa88: 100b883a mov r5,r2
801fa8c: e13ffc17 ldw r4,-16(fp)
801fa90: 8015a600 call 8015a60 <OSSemPend>
/* case where prefetcher already started, return busy error */
prefetcher_ctl = IORD_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base);
801fa94: e0bff117 ldw r2,-60(fp)
801fa98: 10800617 ldw r2,24(r2)
801fa9c: 10800037 ldwio r2,0(r2)
801faa0: e0bfff15 stw r2,-4(fp)
if(ALT_MSGDMA_PREFETCHER_CTRL_RUN_GET(prefetcher_ctl)){
801faa4: e0bfff17 ldw r2,-4(fp)
801faa8: 1080004c andi r2,r2,1
801faac: 10000626 beq r2,zero,801fac8 <alt_msgdma_start_prefetcher_with_list_addr+0xa4>
/* release the registers semaphore */
ALT_SEM_POST (dev->regs_lock);
801fab0: e0bff117 ldw r2,-60(fp)
801fab4: 10801817 ldw r2,96(r2)
801fab8: 1009883a mov r4,r2
801fabc: 8015d840 call 8015d84 <OSSemPost>
return -EBUSY;
801fac0: 00bffc04 movi r2,-16
801fac4: 00009606 br 801fd20 <alt_msgdma_start_prefetcher_with_list_addr+0x2fc>
}
/* Stop the msgdma dispatcher from issuing more descriptors to the
read or write masters */
/* stop issuing more descriptors */
dispatcher_ctl = ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK;
801fac8: 00800804 movi r2,32
801facc: e0bffe15 stw r2,-8(fp)
NIOS2_READ_STATUS (context);
801fad0: 0005303a rdctl r2,status
801fad4: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801fad8: e0fff917 ldw r3,-28(fp)
801fadc: 00bfff84 movi r2,-2
801fae0: 1884703a and r2,r3,r2
801fae4: 1001703a wrctl status,r2
return context;
801fae8: e0bff917 ldw r2,-28(fp)
/* making sure the read-modify-write below can't be pre-empted */
context = alt_irq_disable_all();
801faec: e0bffd15 stw r2,-12(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, dispatcher_ctl);
801faf0: e0bff117 ldw r2,-60(fp)
801faf4: 10800317 ldw r2,12(r2)
801faf8: 10800104 addi r2,r2,4
801fafc: e0fffe17 ldw r3,-8(fp)
801fb00: 10c00035 stwio r3,0(r2)
/*
* Clear any (previous) status register information
* that might occlude our error checking later.
*/
IOWR_ALTERA_MSGDMA_CSR_STATUS( dev->csr_base,
801fb04: e0bff117 ldw r2,-60(fp)
801fb08: 10800317 ldw r2,12(r2)
801fb0c: e0fff117 ldw r3,-60(fp)
801fb10: 18c00317 ldw r3,12(r3)
801fb14: 18c00037 ldwio r3,0(r3)
801fb18: 10c00035 stwio r3,0(r2)
801fb1c: e0bffd17 ldw r2,-12(fp)
801fb20: e0bffa15 stw r2,-24(fp)
NIOS2_WRITE_STATUS (context);
801fb24: e0bffa17 ldw r2,-24(fp)
801fb28: 1001703a wrctl status,r2
* If a callback routine has been previously registered which will be
* called from the msgdma ISR. Set up dispatcher to:
* - Run
* - Stop on an error with any particular descriptor
*/
if(dev->callback)
801fb2c: e0bff117 ldw r2,-60(fp)
801fb30: 10800b17 ldw r2,44(r2)
801fb34: 10002326 beq r2,zero,801fbc4 <alt_msgdma_start_prefetcher_with_list_addr+0x1a0>
{
dispatcher_ctl |= (dev->control | ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK
801fb38: e0bff117 ldw r2,-60(fp)
801fb3c: 10c00d17 ldw r3,52(r2)
801fb40: e0bffe17 ldw r2,-8(fp)
801fb44: 1884b03a or r2,r3,r2
801fb48: 10800514 ori r2,r2,20
801fb4c: e0bffe15 stw r2,-8(fp)
| ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK );
dispatcher_ctl &= (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK);
801fb50: e0fffe17 ldw r3,-8(fp)
801fb54: 00bff7c4 movi r2,-33
801fb58: 1884703a and r2,r3,r2
801fb5c: e0bffe15 stw r2,-8(fp)
prefetcher_ctl |= ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_SET_MASK;
801fb60: e0bfff17 ldw r2,-4(fp)
801fb64: 10800214 ori r2,r2,8
801fb68: e0bfff15 stw r2,-4(fp)
NIOS2_READ_STATUS (context);
801fb6c: 0005303a rdctl r2,status
801fb70: e0bff715 stw r2,-36(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801fb74: e0fff717 ldw r3,-36(fp)
801fb78: 00bfff84 movi r2,-2
801fb7c: 1884703a and r2,r3,r2
801fb80: 1001703a wrctl status,r2
return context;
801fb84: e0bff717 ldw r2,-36(fp)
/* making sure the read-modify-write below can't be pre-empted */
context = alt_irq_disable_all();
801fb88: e0bffd15 stw r2,-12(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, dispatcher_ctl);
801fb8c: e0bff117 ldw r2,-60(fp)
801fb90: 10800317 ldw r2,12(r2)
801fb94: 10800104 addi r2,r2,4
801fb98: e0fffe17 ldw r3,-8(fp)
801fb9c: 10c00035 stwio r3,0(r2)
IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, prefetcher_ctl);
801fba0: e0bff117 ldw r2,-60(fp)
801fba4: 10800617 ldw r2,24(r2)
801fba8: e0ffff17 ldw r3,-4(fp)
801fbac: 10c00035 stwio r3,0(r2)
801fbb0: e0bffd17 ldw r2,-12(fp)
801fbb4: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context);
801fbb8: e0bff817 ldw r2,-32(fp)
801fbbc: 1001703a wrctl status,r2
801fbc0: 00002306 br 801fc50 <alt_msgdma_start_prefetcher_with_list_addr+0x22c>
* - Stop on an error with any particular descriptor
* - Disable interrupt generation
*/
else
{
dispatcher_ctl |= (dev->control | ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK);
801fbc4: e0bff117 ldw r2,-60(fp)
801fbc8: 10c00d17 ldw r3,52(r2)
801fbcc: e0bffe17 ldw r2,-8(fp)
801fbd0: 1884b03a or r2,r3,r2
801fbd4: 10800114 ori r2,r2,4
801fbd8: e0bffe15 stw r2,-8(fp)
dispatcher_ctl &= (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK)
801fbdc: e0fffe17 ldw r3,-8(fp)
801fbe0: 00bff3c4 movi r2,-49
801fbe4: 1884703a and r2,r3,r2
801fbe8: e0bffe15 stw r2,-8(fp)
& (~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK);
prefetcher_ctl &= ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_CLR_MASK;
801fbec: e0ffff17 ldw r3,-4(fp)
801fbf0: 00bffdc4 movi r2,-9
801fbf4: 1884703a and r2,r3,r2
801fbf8: e0bfff15 stw r2,-4(fp)
NIOS2_READ_STATUS (context);
801fbfc: 0005303a rdctl r2,status
801fc00: e0bff515 stw r2,-44(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
801fc04: e0fff517 ldw r3,-44(fp)
801fc08: 00bfff84 movi r2,-2
801fc0c: 1884703a and r2,r3,r2
801fc10: 1001703a wrctl status,r2
return context;
801fc14: e0bff517 ldw r2,-44(fp)
/* making sure the read-modify-write below can't be pre-empted */
context = alt_irq_disable_all();
801fc18: e0bffd15 stw r2,-12(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, dispatcher_ctl);
801fc1c: e0bff117 ldw r2,-60(fp)
801fc20: 10800317 ldw r2,12(r2)
801fc24: 10800104 addi r2,r2,4
801fc28: e0fffe17 ldw r3,-8(fp)
801fc2c: 10c00035 stwio r3,0(r2)
IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, prefetcher_ctl);
801fc30: e0bff117 ldw r2,-60(fp)
801fc34: 10800617 ldw r2,24(r2)
801fc38: e0ffff17 ldw r3,-4(fp)
801fc3c: 10c00035 stwio r3,0(r2)
801fc40: e0bffd17 ldw r2,-12(fp)
801fc44: e0bff615 stw r2,-40(fp)
NIOS2_WRITE_STATUS (context);
801fc48: e0bff617 ldw r2,-40(fp)
801fc4c: 1001703a wrctl status,r2
alt_irq_enable_all(context);
}
/* set next descriptor registers to point to the list root-node */
IOWR_ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW(dev->prefetcher_base,
801fc50: e0bff117 ldw r2,-60(fp)
801fc54: 10800617 ldw r2,24(r2)
801fc58: 10800104 addi r2,r2,4
801fc5c: e0fff317 ldw r3,-52(fp)
801fc60: 10c00035 stwio r3,0(r2)
root_node_addr.u32[0]);
IOWR_ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH(dev->prefetcher_base,
801fc64: e0bff117 ldw r2,-60(fp)
801fc68: 10800617 ldw r2,24(r2)
801fc6c: 10800204 addi r2,r2,8
801fc70: e0fff417 ldw r3,-48(fp)
801fc74: 10c00035 stwio r3,0(r2)
root_node_addr.u32[1]);
/* set park-mode */
if (park_mode_en){
801fc78: e0bfee03 ldbu r2,-72(fp)
801fc7c: 10000426 beq r2,zero,801fc90 <alt_msgdma_start_prefetcher_with_list_addr+0x26c>
prefetcher_ctl |= ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_SET_MASK;
801fc80: e0bfff17 ldw r2,-4(fp)
801fc84: 10800414 ori r2,r2,16
801fc88: e0bfff15 stw r2,-4(fp)
801fc8c: 00000406 br 801fca0 <alt_msgdma_start_prefetcher_with_list_addr+0x27c>
}
else {
prefetcher_ctl &= ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_CLR_MASK;
801fc90: e0ffff17 ldw r3,-4(fp)
801fc94: 00bffbc4 movi r2,-17
801fc98: 1884703a and r2,r3,r2
801fc9c: e0bfff15 stw r2,-4(fp)
}
/* set poll-en */
if (poll_en){
801fca0: e0bfed03 ldbu r2,-76(fp)
801fca4: 10000e26 beq r2,zero,801fce0 <alt_msgdma_start_prefetcher_with_list_addr+0x2bc>
prefetcher_ctl |= ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_MASK;
801fca8: e0bfff17 ldw r2,-4(fp)
801fcac: 10800094 ori r2,r2,2
801fcb0: e0bfff15 stw r2,-4(fp)
if(IORD_ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLLING_FREQ(
801fcb4: e0bff117 ldw r2,-60(fp)
801fcb8: 10800617 ldw r2,24(r2)
801fcbc: 10800304 addi r2,r2,12
801fcc0: 10800037 ldwio r2,0(r2)
801fcc4: 10000a1e bne r2,zero,801fcf0 <alt_msgdma_start_prefetcher_with_list_addr+0x2cc>
dev->prefetcher_base) == 0){
/* set poll frequency to some non-zero default value */
IOWR_ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLLING_FREQ(
801fcc8: e0bff117 ldw r2,-60(fp)
801fccc: 10800617 ldw r2,24(r2)
801fcd0: 10800304 addi r2,r2,12
801fcd4: 00c03fc4 movi r3,255
801fcd8: 10c00035 stwio r3,0(r2)
801fcdc: 00000406 br 801fcf0 <alt_msgdma_start_prefetcher_with_list_addr+0x2cc>
dev->prefetcher_base, 0xFF);
}
}
else {
prefetcher_ctl &= ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_CLR_MASK;
801fce0: e0ffff17 ldw r3,-4(fp)
801fce4: 00bfff44 movi r2,-3
801fce8: 1884703a and r2,r3,r2
801fcec: e0bfff15 stw r2,-4(fp)
}
/* set the prefetcher run bit */
prefetcher_ctl |= ALT_MSGDMA_PREFETCHER_CTRL_RUN_SET_MASK;
801fcf0: e0bfff17 ldw r2,-4(fp)
801fcf4: 10800054 ori r2,r2,1
801fcf8: e0bfff15 stw r2,-4(fp)
/* start the dma since run bit is set */
IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, prefetcher_ctl);
801fcfc: e0bff117 ldw r2,-60(fp)
801fd00: 10800617 ldw r2,24(r2)
801fd04: e0ffff17 ldw r3,-4(fp)
801fd08: 10c00035 stwio r3,0(r2)
/*
* Now that access to the registers is complete, release the registers
* semaphore so that other threads can access the registers.
*/
ALT_SEM_POST (dev->regs_lock);
801fd0c: e0bff117 ldw r2,-60(fp)
801fd10: 10801817 ldw r2,96(r2)
801fd14: 1009883a mov r4,r2
801fd18: 8015d840 call 8015d84 <OSSemPost>
return 0;
801fd1c: 0005883a mov r2,zero
}
801fd20: e037883a mov sp,fp
801fd24: dfc00117 ldw ra,4(sp)
801fd28: df000017 ldw fp,0(sp)
801fd2c: dec00204 addi sp,sp,8
801fd30: f800283a ret
0801fd34 <alt_msgdma_start_prefetcher_with_std_desc_list>:
alt_msgdma_prefetcher_standard_descriptor *list,
alt_u8 park_mode_en,
alt_u8 poll_en,
alt_u8 last_desc_owned_by_sw,
alt_u8 dcache_flush_desc_list)
{
801fd34: defff504 addi sp,sp,-44
801fd38: dfc00a15 stw ra,40(sp)
801fd3c: df000915 stw fp,36(sp)
801fd40: dc400815 stw r17,32(sp)
801fd44: dc000715 stw r16,28(sp)
801fd48: df000904 addi fp,sp,36
801fd4c: e13ffd15 stw r4,-12(fp)
801fd50: e17ffc15 stw r5,-16(fp)
801fd54: 3009883a mov r4,r6
801fd58: 380b883a mov r5,r7
801fd5c: e0c00217 ldw r3,8(fp)
801fd60: e0800317 ldw r2,12(fp)
801fd64: e13ffb05 stb r4,-20(fp)
801fd68: 2809883a mov r4,r5
801fd6c: e13ffa05 stb r4,-24(fp)
801fd70: e0fff905 stb r3,-28(fp)
801fd74: e0bff805 stb r2,-32(fp)
if (alt_msgdma_prefetcher_set_std_list_own_by_hw_bits(list,last_desc_owned_by_sw,dcache_flush_desc_list) != 0)
801fd78: e0bff903 ldbu r2,-28(fp)
801fd7c: e0fff803 ldbu r3,-32(fp)
801fd80: 180d883a mov r6,r3
801fd84: 100b883a mov r5,r2
801fd88: e13ffc17 ldw r4,-16(fp)
801fd8c: 801f7c80 call 801f7c8 <alt_msgdma_prefetcher_set_std_list_own_by_hw_bits>
801fd90: 10000226 beq r2,zero,801fd9c <alt_msgdma_start_prefetcher_with_std_desc_list+0x68>
{
return -EINVAL;
801fd94: 00bffa84 movi r2,-22
801fd98: 00000b06 br 801fdc8 <alt_msgdma_start_prefetcher_with_std_desc_list+0x94>
}
return alt_msgdma_start_prefetcher_with_list_addr (dev, (uintptr_t)list,
801fd9c: e0bffc17 ldw r2,-16(fp)
801fda0: 1021883a mov r16,r2
801fda4: 0023883a mov r17,zero
801fda8: e0fffb03 ldbu r3,-20(fp)
801fdac: e0bffa03 ldbu r2,-24(fp)
801fdb0: d8800015 stw r2,0(sp)
801fdb4: 180f883a mov r7,r3
801fdb8: 800b883a mov r5,r16
801fdbc: 880d883a mov r6,r17
801fdc0: e13ffd17 ldw r4,-12(fp)
801fdc4: 801fa240 call 801fa24 <alt_msgdma_start_prefetcher_with_list_addr>
park_mode_en, poll_en);
}
801fdc8: e6fffe04 addi sp,fp,-8
801fdcc: dfc00317 ldw ra,12(sp)
801fdd0: df000217 ldw fp,8(sp)
801fdd4: dc400117 ldw r17,4(sp)
801fdd8: dc000017 ldw r16,0(sp)
801fddc: dec00404 addi sp,sp,16
801fde0: f800283a ret
0801fde4 <alt_msgdma_start_prefetcher_with_extd_desc_list>:
alt_msgdma_prefetcher_extended_descriptor *list,
alt_u8 park_mode_en,
alt_u8 poll_en,
alt_u8 last_desc_owned_by_sw,
alt_u8 dcache_flush_desc_list)
{
801fde4: defff504 addi sp,sp,-44
801fde8: dfc00a15 stw ra,40(sp)
801fdec: df000915 stw fp,36(sp)
801fdf0: dc400815 stw r17,32(sp)
801fdf4: dc000715 stw r16,28(sp)
801fdf8: df000904 addi fp,sp,36
801fdfc: e13ffd15 stw r4,-12(fp)
801fe00: e17ffc15 stw r5,-16(fp)
801fe04: 3009883a mov r4,r6
801fe08: 380b883a mov r5,r7
801fe0c: e0c00217 ldw r3,8(fp)
801fe10: e0800317 ldw r2,12(fp)
801fe14: e13ffb05 stb r4,-20(fp)
801fe18: 2809883a mov r4,r5
801fe1c: e13ffa05 stb r4,-24(fp)
801fe20: e0fff905 stb r3,-28(fp)
801fe24: e0bff805 stb r2,-32(fp)
if (alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits(list,last_desc_owned_by_sw,dcache_flush_desc_list) != 0)
801fe28: e0bff903 ldbu r2,-28(fp)
801fe2c: e0fff803 ldbu r3,-32(fp)
801fe30: 180d883a mov r6,r3
801fe34: 100b883a mov r5,r2
801fe38: e13ffc17 ldw r4,-16(fp)
801fe3c: 801f8d80 call 801f8d8 <alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits>
801fe40: 10000226 beq r2,zero,801fe4c <alt_msgdma_start_prefetcher_with_extd_desc_list+0x68>
{
return -EINVAL;
801fe44: 00bffa84 movi r2,-22
801fe48: 00000b06 br 801fe78 <alt_msgdma_start_prefetcher_with_extd_desc_list+0x94>
}
return alt_msgdma_start_prefetcher_with_list_addr (dev, (uintptr_t)list,
801fe4c: e0bffc17 ldw r2,-16(fp)
801fe50: 1021883a mov r16,r2
801fe54: 0023883a mov r17,zero
801fe58: e0fffb03 ldbu r3,-20(fp)
801fe5c: e0bffa03 ldbu r2,-24(fp)
801fe60: d8800015 stw r2,0(sp)
801fe64: 180f883a mov r7,r3
801fe68: 800b883a mov r5,r16
801fe6c: 880d883a mov r6,r17
801fe70: e13ffd17 ldw r4,-12(fp)
801fe74: 801fa240 call 801fa24 <alt_msgdma_start_prefetcher_with_list_addr>
park_mode_en, poll_en);
}
801fe78: e6fffe04 addi sp,fp,-8
801fe7c: dfc00317 ldw ra,12(sp)
801fe80: df000217 ldw fp,8(sp)
801fe84: dc400117 ldw r17,4(sp)
801fe88: dc000017 ldw r16,0(sp)
801fe8c: dec00404 addi sp,sp,16
801fe90: f800283a ret
0801fe94 <alt_msgdma_open>:
* Returns:
* - Pointer to msgdma device instance structure, or null if the device
* could not be opened.
*/
alt_msgdma_dev* alt_msgdma_open (const char* name)
{
801fe94: defffc04 addi sp,sp,-16
801fe98: dfc00315 stw ra,12(sp)
801fe9c: df000215 stw fp,8(sp)
801fea0: df000204 addi fp,sp,8
801fea4: e13ffe15 stw r4,-8(fp)
alt_msgdma_dev* dev = NULL;
801fea8: e03fff15 stw zero,-4(fp)
dev = (alt_msgdma_dev*) alt_find_dev (name, &alt_msgdma_list);
801feac: d1600b04 addi r5,gp,-32724
801feb0: e13ffe17 ldw r4,-8(fp)
801feb4: 80374040 call 8037404 <alt_find_dev>
801feb8: e0bfff15 stw r2,-4(fp)
if (NULL == dev)
801febc: e0bfff17 ldw r2,-4(fp)
801fec0: 1000041e bne r2,zero,801fed4 <alt_msgdma_open+0x40>
{
ALT_ERRNO = ENODEV;
801fec4: 801e09c0 call 801e09c <alt_get_errno>
801fec8: 1007883a mov r3,r2
801fecc: 008004c4 movi r2,19
801fed0: 18800015 stw r2,0(r3)
}
return dev;
801fed4: e0bfff17 ldw r2,-4(fp)
}
801fed8: e037883a mov sp,fp
801fedc: dfc00117 ldw ra,4(sp)
801fee0: df000017 ldw fp,0(sp)
801fee4: dec00204 addi sp,sp,8
801fee8: f800283a ret
0801feec <alt_msgdma_init>:
* This routine disables interrupts, descriptor processing,
* registers a specific instance of the device with the HAL,
* and installs an interrupt handler for the device.
*/
void alt_msgdma_init (alt_msgdma_dev *dev, alt_u32 ic_id, alt_u32 irq)
{
801feec: defff604 addi sp,sp,-40
801fef0: dfc00915 stw ra,36(sp)
801fef4: df000815 stw fp,32(sp)
801fef8: df000804 addi fp,sp,32
801fefc: e13ffb15 stw r4,-20(fp)
801ff00: e17ffa15 stw r5,-24(fp)
801ff04: e1bff915 stw r6,-28(fp)
extern alt_llist alt_msgdma_list;
alt_u32 temporary_control;
int error;
if (dev->prefetcher_enable)
801ff08: e0bffb17 ldw r2,-20(fp)
801ff0c: 10801783 ldbu r2,94(r2)
801ff10: 10803fcc andi r2,r2,255
801ff14: 10000a26 beq r2,zero,801ff40 <alt_msgdma_init+0x54>
{
/* start prefetcher reset sequence */
IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base,
801ff18: e0bffb17 ldw r2,-20(fp)
801ff1c: 10800617 ldw r2,24(r2)
801ff20: 00c00104 movi r3,4
801ff24: 10c00035 stwio r3,0(r2)
ALT_MSGDMA_PREFETCHER_CTRL_RESET_SET_MASK);
/* wait until hw clears the bit */
while(ALT_MSGDMA_PREFETCHER_CTRL_RESET_GET(
801ff28: 0001883a nop
801ff2c: e0bffb17 ldw r2,-20(fp)
801ff30: 10800617 ldw r2,24(r2)
801ff34: 10800037 ldwio r2,0(r2)
801ff38: 1080010c andi r2,r2,4
801ff3c: 103ffb1e bne r2,zero,801ff2c <alt_msgdma_init+0x40>
}
/* Reset the registers and FIFOs of the dispatcher and master modules */
/* set the reset bit, no need to read the control register first since
this write is going to clear it out */
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, ALTERA_MSGDMA_CSR_RESET_MASK);
801ff40: e0bffb17 ldw r2,-20(fp)
801ff44: 10800317 ldw r2,12(r2)
801ff48: 10800104 addi r2,r2,4
801ff4c: 00c00084 movi r3,2
801ff50: 10c00035 stwio r3,0(r2)
while(0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)
801ff54: 0001883a nop
801ff58: e0bffb17 ldw r2,-20(fp)
801ff5c: 10800317 ldw r2,12(r2)
801ff60: 10800037 ldwio r2,0(r2)
& ALTERA_MSGDMA_CSR_RESET_STATE_MASK));
801ff64: 1080100c andi r2,r2,64
while(0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)
801ff68: 103ffb1e bne r2,zero,801ff58 <alt_msgdma_init+0x6c>
* Disable interrupts, halt descriptor processing,
* and clear status register content
*/
/* disable global interrupt */
temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base)
801ff6c: e0bffb17 ldw r2,-20(fp)
801ff70: 10800317 ldw r2,12(r2)
801ff74: 10800104 addi r2,r2,4
801ff78: 10800037 ldwio r2,0(r2)
& (~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK);
801ff7c: 1007883a mov r3,r2
temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base)
801ff80: 00bffbc4 movi r2,-17
801ff84: 1884703a and r2,r3,r2
801ff88: e0bfff15 stw r2,-4(fp)
/* stopping descriptor */
temporary_control |= ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK;
801ff8c: e0bfff17 ldw r2,-4(fp)
801ff90: 10800814 ori r2,r2,32
801ff94: e0bfff15 stw r2,-4(fp)
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, temporary_control);
801ff98: e0bffb17 ldw r2,-20(fp)
801ff9c: 10800317 ldw r2,12(r2)
801ffa0: 10800104 addi r2,r2,4
801ffa4: e0ffff17 ldw r3,-4(fp)
801ffa8: 10c00035 stwio r3,0(r2)
/* clear the CSR status register */
IOWR_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base,
801ffac: e0bffb17 ldw r2,-20(fp)
801ffb0: 10800317 ldw r2,12(r2)
801ffb4: e0fffb17 ldw r3,-20(fp)
801ffb8: 18c00317 ldw r3,12(r3)
801ffbc: 18c00037 ldwio r3,0(r3)
801ffc0: 10c00035 stwio r3,0(r2)
IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base));
if (dev->prefetcher_enable)
801ffc4: e0bffb17 ldw r2,-20(fp)
801ffc8: 10801783 ldbu r2,94(r2)
801ffcc: 10803fcc andi r2,r2,255
801ffd0: 10000826 beq r2,zero,801fff4 <alt_msgdma_init+0x108>
{
/* clear all status bits that are set, since theyre W1C */
IOWR_ALT_MSGDMA_PREFETCHER_STATUS(dev->prefetcher_base,
801ffd4: e0bffb17 ldw r2,-20(fp)
801ffd8: 10800617 ldw r2,24(r2)
801ffdc: 10800404 addi r2,r2,16
801ffe0: e0fffb17 ldw r3,-20(fp)
801ffe4: 18c00617 ldw r3,24(r3)
801ffe8: 18c00404 addi r3,r3,16
801ffec: 18c00037 ldwio r3,0(r3)
801fff0: 10c00035 stwio r3,0(r2)
IORD_ALT_MSGDMA_PREFETCHER_STATUS(dev->prefetcher_base));
}
/* Register this instance of the msgdma controller with HAL */
alt_dev_llist_insert((alt_dev_llist*) dev, &alt_msgdma_list);
801fff4: d1600b04 addi r5,gp,-32724
801fff8: e13ffb17 ldw r4,-20(fp)
801fffc: 80372a00 call 80372a0 <alt_dev_llist_insert>
/*
* Creating semaphores used to protect access to the registers
* when running in a multi-threaded environment.
*/
error = ALT_SEM_CREATE (&dev->regs_lock, 1);
8020000: e0bffb17 ldw r2,-20(fp)
8020004: 10801804 addi r2,r2,96
8020008: e0bffd15 stw r2,-12(fp)
802000c: 00800044 movi r2,1
8020010: e0bffc8d sth r2,-14(fp)
*sem = OSSemCreate (value);
8020014: e0bffc8b ldhu r2,-14(fp)
8020018: 1009883a mov r4,r2
802001c: 80157740 call 8015774 <OSSemCreate>
8020020: 1007883a mov r3,r2
8020024: e0bffd17 ldw r2,-12(fp)
8020028: 10c00015 stw r3,0(r2)
return *sem ? 0 : -1;
802002c: e0bffd17 ldw r2,-12(fp)
8020030: 10800017 ldw r2,0(r2)
8020034: 10000226 beq r2,zero,8020040 <alt_msgdma_init+0x154>
8020038: 0005883a mov r2,zero
802003c: 00000106 br 8020044 <alt_msgdma_init+0x158>
8020040: 00bfffc4 movi r2,-1
8020044: e0bffe15 stw r2,-8(fp)
if (!error)
8020048: e0bffe17 ldw r2,-8(fp)
802004c: 1000081e bne r2,zero,8020070 <alt_msgdma_init+0x184>
{
/* Install IRQ handler */
alt_ic_isr_register(ic_id, irq, alt_msgdma_irq, dev, 0x0);
8020050: d8000015 stw zero,0(sp)
8020054: e1fffb17 ldw r7,-20(fp)
8020058: 018200b4 movhi r6,2050
802005c: 31b8a604 addi r6,r6,-7528
8020060: e17ff917 ldw r5,-28(fp)
8020064: e13ffa17 ldw r4,-24(fp)
8020068: 80374940 call 8037494 <alt_ic_isr_register>
else
{
alt_printf("failed to create semaphores\n");
}
return;
802006c: 00000406 br 8020080 <alt_msgdma_init+0x194>
alt_printf("failed to create semaphores\n");
8020070: 01020174 movhi r4,2053
8020074: 2125c204 addi r4,r4,-26872
8020078: 8037a9c0 call 8037a9c <alt_printf>
return;
802007c: 0001883a nop
}
8020080: e037883a mov sp,fp
8020084: dfc00117 ldw ra,4(sp)
8020088: df000017 ldw fp,0(sp)
802008c: dec00204 addi sp,sp,8
8020090: f800283a ret
08020094 <alt_msgdma_register_callback>:
void alt_msgdma_register_callback(
alt_msgdma_dev *dev,
alt_msgdma_callback callback,
alt_u32 control,
void *context)
{
8020094: defffb04 addi sp,sp,-20
8020098: df000415 stw fp,16(sp)
802009c: df000404 addi fp,sp,16
80200a0: e13fff15 stw r4,-4(fp)
80200a4: e17ffe15 stw r5,-8(fp)
80200a8: e1bffd15 stw r6,-12(fp)
80200ac: e1fffc15 stw r7,-16(fp)
dev->callback = callback;
80200b0: e0bfff17 ldw r2,-4(fp)
80200b4: e0fffe17 ldw r3,-8(fp)
80200b8: 10c00b15 stw r3,44(r2)
dev->callback_context = context;
80200bc: e0bfff17 ldw r2,-4(fp)
80200c0: e0fffc17 ldw r3,-16(fp)
80200c4: 10c00c15 stw r3,48(r2)
dev->control = control;
80200c8: e0bfff17 ldw r2,-4(fp)
80200cc: e0fffd17 ldw r3,-12(fp)
80200d0: 10c00d15 stw r3,52(r2)
return ;
80200d4: 0001883a nop
}
80200d8: e037883a mov sp,fp
80200dc: df000017 ldw fp,0(sp)
80200e0: dec00104 addi sp,sp,4
80200e4: f800283a ret
080200e8 <alt_msgdma_standard_descriptor_async_transfer>:
* -ETIME -> Time out and skipping the looping after 5 msec.
*/
int alt_msgdma_standard_descriptor_async_transfer(
alt_msgdma_dev *dev,
alt_msgdma_standard_descriptor *desc)
{
80200e8: defffc04 addi sp,sp,-16
80200ec: dfc00315 stw ra,12(sp)
80200f0: df000215 stw fp,8(sp)
80200f4: df000204 addi fp,sp,8
80200f8: e13fff15 stw r4,-4(fp)
80200fc: e17ffe15 stw r5,-8(fp)
/*
* Error detection/handling should be performed at the application
* or callback level as appropriate.
*/
return alt_msgdma_descriptor_async_transfer(dev, desc, NULL);
8020100: 000d883a mov r6,zero
8020104: e17ffe17 ldw r5,-8(fp)
8020108: e13fff17 ldw r4,-4(fp)
802010c: 801e5fc0 call 801e5fc <alt_msgdma_descriptor_async_transfer>
}
8020110: e037883a mov sp,fp
8020114: dfc00117 ldw ra,4(sp)
8020118: df000017 ldw fp,0(sp)
802011c: dec00204 addi sp,sp,8
8020120: f800283a ret
08020124 <alt_msgdma_extended_descriptor_async_transfer>:
* -ETIME -> Time out and skipping the looping after 5 msec.
*/
int alt_msgdma_extended_descriptor_async_transfer(
alt_msgdma_dev *dev,
alt_msgdma_extended_descriptor *desc)
{
8020124: defffc04 addi sp,sp,-16
8020128: dfc00315 stw ra,12(sp)
802012c: df000215 stw fp,8(sp)
8020130: df000204 addi fp,sp,8
8020134: e13fff15 stw r4,-4(fp)
8020138: e17ffe15 stw r5,-8(fp)
/*
* Error detection/handling should be performed at the application
* or callback level as appropriate.
*/
return alt_msgdma_descriptor_async_transfer(dev, NULL, desc);
802013c: e1bffe17 ldw r6,-8(fp)
8020140: 000b883a mov r5,zero
8020144: e13fff17 ldw r4,-4(fp)
8020148: 801e5fc0 call 801e5fc <alt_msgdma_descriptor_async_transfer>
}
802014c: e037883a mov sp,fp
8020150: dfc00117 ldw ra,4(sp)
8020154: df000017 ldw fp,0(sp)
8020158: dec00204 addi sp,sp,8
802015c: f800283a ret
08020160 <alt_msgdma_standard_descriptor_sync_transfer>:
* return -ETIME (Time out and skipping the looping after 5 msec)
*/
int alt_msgdma_standard_descriptor_sync_transfer(
alt_msgdma_dev *dev,
alt_msgdma_standard_descriptor *desc)
{
8020160: defffc04 addi sp,sp,-16
8020164: dfc00315 stw ra,12(sp)
8020168: df000215 stw fp,8(sp)
802016c: df000204 addi fp,sp,8
8020170: e13fff15 stw r4,-4(fp)
8020174: e17ffe15 stw r5,-8(fp)
return alt_msgdma_descriptor_sync_transfer(dev, desc, NULL);
8020178: 000d883a mov r6,zero
802017c: e17ffe17 ldw r5,-8(fp)
8020180: e13fff17 ldw r4,-4(fp)
8020184: 801e9380 call 801e938 <alt_msgdma_descriptor_sync_transfer>
}
8020188: e037883a mov sp,fp
802018c: dfc00117 ldw ra,4(sp)
8020190: df000017 ldw fp,0(sp)
8020194: dec00204 addi sp,sp,8
8020198: f800283a ret
0802019c <alt_msgdma_extended_descriptor_sync_transfer>:
* return -ETIME (Time out and skipping the looping after 5 msec)
*/
int alt_msgdma_extended_descriptor_sync_transfer(
alt_msgdma_dev *dev,
alt_msgdma_extended_descriptor *desc)
{
802019c: defffc04 addi sp,sp,-16
80201a0: dfc00315 stw ra,12(sp)
80201a4: df000215 stw fp,8(sp)
80201a8: df000204 addi fp,sp,8
80201ac: e13fff15 stw r4,-4(fp)
80201b0: e17ffe15 stw r5,-8(fp)
return alt_msgdma_descriptor_sync_transfer(dev, NULL, desc);
80201b4: e1bffe17 ldw r6,-8(fp)
80201b8: 000b883a mov r5,zero
80201bc: e13fff17 ldw r4,-4(fp)
80201c0: 801e9380 call 801e938 <alt_msgdma_descriptor_sync_transfer>
}
80201c4: e037883a mov sp,fp
80201c8: dfc00117 ldw ra,4(sp)
80201cc: df000017 ldw fp,0(sp)
80201d0: dec00204 addi sp,sp,8
80201d4: f800283a ret
080201d8 <alt_flash_device_register>:
{
80201d8: defffd04 addi sp,sp,-12
80201dc: dfc00215 stw ra,8(sp)
80201e0: df000115 stw fp,4(sp)
80201e4: df000104 addi fp,sp,4
80201e8: e13fff15 stw r4,-4(fp)
return alt_dev_llist_insert ((alt_dev_llist*) fd, &alt_flash_dev_list);
80201ec: d1600404 addi r5,gp,-32752
80201f0: e13fff17 ldw r4,-4(fp)
80201f4: 80372a00 call 80372a0 <alt_dev_llist_insert>
}
80201f8: e037883a mov sp,fp
80201fc: dfc00117 ldw ra,4(sp)
8020200: df000017 ldw fp,0(sp)
8020204: dec00204 addi sp,sp,8
8020208: f800283a ret
0802020c <alt_onchip_flash_read>:
alt_flash_dev *flash_info,
int offset,
void *dest_addr,
int length
)
{
802020c: defff704 addi sp,sp,-36
8020210: dfc00815 stw ra,32(sp)
8020214: df000715 stw fp,28(sp)
8020218: df000704 addi fp,sp,28
802021c: e13ffc15 stw r4,-16(fp)
8020220: e17ffb15 stw r5,-20(fp)
8020224: e1bffa15 stw r6,-24(fp)
8020228: e1fff915 stw r7,-28(fp)
int ret_code = 0;
802022c: e03fff15 stw zero,-4(fp)
alt_onchip_flash_dev* flash = (alt_onchip_flash_dev*)flash_info;
8020230: e0bffc17 ldw r2,-16(fp)
8020234: e0bffe15 stw r2,-8(fp)
/* Make sure the input parameters is not outside of this device's range. */
if ((offset >= flash->dev.length) || ((offset+length) > flash->dev.length)) {
8020238: e0bffe17 ldw r2,-8(fp)
802023c: 10800b17 ldw r2,44(r2)
8020240: e0fffb17 ldw r3,-20(fp)
8020244: 1880060e bge r3,r2,8020260 <alt_onchip_flash_read+0x54>
8020248: e0fffb17 ldw r3,-20(fp)
802024c: e0bff917 ldw r2,-28(fp)
8020250: 1885883a add r2,r3,r2
8020254: e0fffe17 ldw r3,-8(fp)
8020258: 18c00b17 ldw r3,44(r3)
802025c: 1880020e bge r3,r2,8020268 <alt_onchip_flash_read+0x5c>
return -EFAULT;
8020260: 00bffc84 movi r2,-14
8020264: 00001706 br 80202c4 <alt_onchip_flash_read+0xb8>
}
memcpy(dest_addr, (alt_u8*)flash->dev.base_addr+offset, length);
8020268: e0bffe17 ldw r2,-8(fp)
802026c: 10c00a17 ldw r3,40(r2)
8020270: e0bffb17 ldw r2,-20(fp)
8020274: 1885883a add r2,r3,r2
8020278: e0fff917 ldw r3,-28(fp)
802027c: 180d883a mov r6,r3
8020280: 100b883a mov r5,r2
8020284: e13ffa17 ldw r4,-24(fp)
8020288: 80086b80 call 80086b8 <memcpy>
if (NULL != flash->csr_base) {
802028c: e0bffe17 ldw r2,-8(fp)
8020290: 10802f17 ldw r2,188(r2)
8020294: 10000a26 beq r2,zero,80202c0 <alt_onchip_flash_read+0xb4>
int read_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_READ_MSK;
8020298: e0bffe17 ldw r2,-8(fp)
802029c: 10802f17 ldw r2,188(r2)
80202a0: 10800037 ldwio r2,0(r2)
80202a4: 1080010c andi r2,r2,4
80202a8: e0bffd15 stw r2,-12(fp)
if (read_status != ALTERA_ONCHIP_FLASH_STATUS_READ_PASSED) {
80202ac: e0bffd17 ldw r2,-12(fp)
80202b0: 10800120 cmpeqi r2,r2,4
80202b4: 1000021e bne r2,zero,80202c0 <alt_onchip_flash_read+0xb4>
/* Read failed. Return error.*/
ret_code = -EIO;
80202b8: 00bffec4 movi r2,-5
80202bc: e0bfff15 stw r2,-4(fp)
}
}
return ret_code;
80202c0: e0bfff17 ldw r2,-4(fp)
}
80202c4: e037883a mov sp,fp
80202c8: dfc00117 ldw ra,4(sp)
80202cc: df000017 ldw fp,0(sp)
80202d0: dec00204 addi sp,sp,8
80202d4: f800283a ret
080202d8 <alt_onchip_flash_get_info>:
(
alt_flash_fd *fd,
flash_region **info,
int *number_of_regions
)
{
80202d8: defffa04 addi sp,sp,-24
80202dc: df000515 stw fp,20(sp)
80202e0: df000504 addi fp,sp,20
80202e4: e13ffd15 stw r4,-12(fp)
80202e8: e17ffc15 stw r5,-16(fp)
80202ec: e1bffb15 stw r6,-20(fp)
int ret_code = 0;
80202f0: e03fff15 stw zero,-4(fp)
alt_flash_dev* flash = (alt_flash_dev*)fd;
80202f4: e0bffd17 ldw r2,-12(fp)
80202f8: e0bffe15 stw r2,-8(fp)
if (NULL != number_of_regions)
80202fc: e0bffb17 ldw r2,-20(fp)
8020300: 10000426 beq r2,zero,8020314 <alt_onchip_flash_get_info+0x3c>
{
/* Pass the number of region to user */
*number_of_regions = flash->number_of_regions;
8020304: e0bffe17 ldw r2,-8(fp)
8020308: 10c00c17 ldw r3,48(r2)
802030c: e0bffb17 ldw r2,-20(fp)
8020310: 10c00015 stw r3,0(r2)
}
if (!flash->number_of_regions)
8020314: e0bffe17 ldw r2,-8(fp)
8020318: 10800c17 ldw r2,48(r2)
802031c: 1000031e bne r2,zero,802032c <alt_onchip_flash_get_info+0x54>
{
ret_code = -ENOMEM;
8020320: 00bffd04 movi r2,-12
8020324: e0bfff15 stw r2,-4(fp)
8020328: 00000d06 br 8020360 <alt_onchip_flash_get_info+0x88>
}
else if (flash->number_of_regions > ALT_MAX_NUMBER_OF_FLASH_REGIONS)
802032c: e0bffe17 ldw r2,-8(fp)
8020330: 10800c17 ldw r2,48(r2)
8020334: 10800250 cmplti r2,r2,9
8020338: 1000031e bne r2,zero,8020348 <alt_onchip_flash_get_info+0x70>
{
ret_code = -EFAULT;
802033c: 00bffc84 movi r2,-14
8020340: e0bfff15 stw r2,-4(fp)
8020344: 00000606 br 8020360 <alt_onchip_flash_get_info+0x88>
}
else
{
if (NULL != info)
8020348: e0bffc17 ldw r2,-16(fp)
802034c: 10000426 beq r2,zero,8020360 <alt_onchip_flash_get_info+0x88>
{
/* Pass the table of erase blocks to user */
*info = &flash->region_info[0];
8020350: e0bffe17 ldw r2,-8(fp)
8020354: 10c00d04 addi r3,r2,52
8020358: e0bffc17 ldw r2,-16(fp)
802035c: 10c00015 stw r3,0(r2)
}
}
return ret_code;
8020360: e0bfff17 ldw r2,-4(fp)
}
8020364: e037883a mov sp,fp
8020368: df000017 ldw fp,0(sp)
802036c: dec00104 addi sp,sp,4
8020370: f800283a ret
08020374 <alt_onchip_flash_erase_block>:
int alt_onchip_flash_erase_block
(
alt_flash_dev *flash_info,
int block_offset
)
{
8020374: defff904 addi sp,sp,-28
8020378: dfc00615 stw ra,24(sp)
802037c: df000515 stw fp,20(sp)
8020380: df000504 addi fp,sp,20
8020384: e13ffc15 stw r4,-16(fp)
8020388: e17ffb15 stw r5,-20(fp)
int ret_code = 0;
802038c: e03fff15 stw zero,-4(fp)
alt_onchip_flash_dev *flash = (alt_onchip_flash_dev*)flash_info;
8020390: e0bffc17 ldw r2,-16(fp)
8020394: e0bffe15 stw r2,-8(fp)
int page_address;
/* Make sure the input parameters is not outside of this device's range. */
if (block_offset >= flash->dev.length) {
8020398: e0bffe17 ldw r2,-8(fp)
802039c: 10800b17 ldw r2,44(r2)
80203a0: e0fffb17 ldw r3,-20(fp)
80203a4: 18800216 blt r3,r2,80203b0 <alt_onchip_flash_erase_block+0x3c>
return -EFAULT;
80203a8: 00bffc84 movi r2,-14
80203ac: 00004606 br 80204c8 <alt_onchip_flash_erase_block+0x154>
}
/* Make sure IP support write and erase operation */
if ((flash->csr_base == NULL) || (flash->is_read_only)) {
80203b0: e0bffe17 ldw r2,-8(fp)
80203b4: 10802f17 ldw r2,188(r2)
80203b8: 10000326 beq r2,zero,80203c8 <alt_onchip_flash_erase_block+0x54>
80203bc: e0bffe17 ldw r2,-8(fp)
80203c0: 10802e17 ldw r2,184(r2)
80203c4: 10000226 beq r2,zero,80203d0 <alt_onchip_flash_erase_block+0x5c>
return -ENODEV;
80203c8: 00bffb44 movi r2,-19
80203cc: 00003e06 br 80204c8 <alt_onchip_flash_erase_block+0x154>
}
/* The block_offset must be page size aligned */
if ((block_offset & (flash->page_size - 1)) != 0)
80203d0: e0bffe17 ldw r2,-8(fp)
80203d4: 10803f17 ldw r2,252(r2)
80203d8: 10ffffc4 addi r3,r2,-1
80203dc: e0bffb17 ldw r2,-20(fp)
80203e0: 1884703a and r2,r3,r2
80203e4: 10000226 beq r2,zero,80203f0 <alt_onchip_flash_erase_block+0x7c>
{
/* The address is not aligned */
return -EINVAL;
80203e8: 00bffa84 movi r2,-22
80203ec: 00003606 br 80204c8 <alt_onchip_flash_erase_block+0x154>
}
/* Wait until flash controller idle */
ret_code = alt_onchip_flash_poll_for_status_to_go_idle(flash);
80203f0: e13ffe17 ldw r4,-8(fp)
80203f4: 8020f200 call 8020f20 <alt_onchip_flash_poll_for_status_to_go_idle>
80203f8: e0bfff15 stw r2,-4(fp)
if (ret_code != 0)
80203fc: e0bfff17 ldw r2,-4(fp)
8020400: 10000226 beq r2,zero,802040c <alt_onchip_flash_erase_block+0x98>
{
return ret_code;
8020404: e0bfff17 ldw r2,-4(fp)
8020408: 00002f06 br 80204c8 <alt_onchip_flash_erase_block+0x154>
}
/* Enable write and erase operation */
ALTERA_ONCHIP_FLASH_ENABLE_WRITE_AND_ERASE_OPERATION(flash->csr_base);
802040c: e0bffe17 ldw r2,-8(fp)
8020410: 10802f17 ldw r2,188(r2)
8020414: 10c00104 addi r3,r2,4
8020418: e0bffe17 ldw r2,-8(fp)
802041c: 10802f17 ldw r2,188(r2)
8020420: 10800104 addi r2,r2,4
8020424: 10800037 ldwio r2,0(r2)
8020428: 113c002c andhi r4,r2,61440
802042c: 00802034 movhi r2,128
8020430: 10bfffc4 addi r2,r2,-1
8020434: 2084b03a or r2,r4,r2
8020438: 18800035 stwio r2,0(r3)
/* Calculate Page erase address, it is 32bit word addressing*/
page_address = block_offset / 4;
802043c: e0bffb17 ldw r2,-20(fp)
8020440: 1000010e bge r2,zero,8020448 <alt_onchip_flash_erase_block+0xd4>
8020444: 108000c4 addi r2,r2,3
8020448: 1005d0ba srai r2,r2,2
802044c: e0bffd15 stw r2,-12(fp)
/* Perform Page erase operation */
ALTERA_ONCHIP_FLASH_PAGE_ERASE(flash->csr_base, page_address);
8020450: e0bffe17 ldw r2,-8(fp)
8020454: 10802f17 ldw r2,188(r2)
8020458: 10800104 addi r2,r2,4
802045c: e0fffe17 ldw r3,-8(fp)
8020460: 18c02f17 ldw r3,188(r3)
8020464: 18c00104 addi r3,r3,4
8020468: 18c00037 ldwio r3,0(r3)
802046c: 193c002c andhi r4,r3,61440
8020470: e0fffd17 ldw r3,-12(fp)
8020474: 18c01c34 orhi r3,r3,112
8020478: 20c6b03a or r3,r4,r3
802047c: 10c00035 stwio r3,0(r2)
/* Wait until flash controller idle */
ret_code = alt_onchip_flash_poll_for_status_to_go_idle(flash);
8020480: e13ffe17 ldw r4,-8(fp)
8020484: 8020f200 call 8020f20 <alt_onchip_flash_poll_for_status_to_go_idle>
8020488: e0bfff15 stw r2,-4(fp)
/* Wait until flash controller indicate erase passed */
ret_code = alt_onchip_flash_poll_for_status_erase_passed(flash);
802048c: e13ffe17 ldw r4,-8(fp)
8020490: 8020fb00 call 8020fb0 <alt_onchip_flash_poll_for_status_erase_passed>
8020494: e0bfff15 stw r2,-4(fp)
/* Disable write and erase operation */
ALTERA_ONCHIP_FLASH_DISABLE_WRITE_AND_ERASE_OPERATION(flash->csr_base);
8020498: e0bffe17 ldw r2,-8(fp)
802049c: 10802f17 ldw r2,188(r2)
80204a0: 10c00104 addi r3,r2,4
80204a4: e0bffe17 ldw r2,-8(fp)
80204a8: 10802f17 ldw r2,188(r2)
80204ac: 10800104 addi r2,r2,4
80204b0: 11000037 ldwio r4,0(r2)
80204b4: 00840034 movhi r2,4096
80204b8: 10bfffc4 addi r2,r2,-1
80204bc: 2084b03a or r2,r4,r2
80204c0: 18800035 stwio r2,0(r3)
return ret_code;
80204c4: e0bfff17 ldw r2,-4(fp)
}
80204c8: e037883a mov sp,fp
80204cc: dfc00117 ldw ra,4(sp)
80204d0: df000017 ldw fp,0(sp)
80204d4: dec00204 addi sp,sp,8
80204d8: f800283a ret
080204dc <alt_onchip_flash_write_block>:
int block_offset,
int data_offset,
const void *data,
int length
)
{
80204dc: defff204 addi sp,sp,-56
80204e0: dfc00d15 stw ra,52(sp)
80204e4: df000c15 stw fp,48(sp)
80204e8: df000c04 addi fp,sp,48
80204ec: e13ff715 stw r4,-36(fp)
80204f0: e17ff615 stw r5,-40(fp)
80204f4: e1bff515 stw r6,-44(fp)
80204f8: e1fff415 stw r7,-48(fp)
int ret_code = 0;
80204fc: e03fff15 stw zero,-4(fp)
alt_onchip_flash_dev *flash = (alt_onchip_flash_dev*)flash_info;
8020500: e0bff717 ldw r2,-36(fp)
8020504: e0bffb15 stw r2,-20(fp)
int buffer_offset = 0;
8020508: e03ffe15 stw zero,-8(fp)
int length_of_current_write;
int current_data_offset = data_offset;
802050c: e0bff517 ldw r2,-44(fp)
8020510: e0bffd15 stw r2,-12(fp)
int next_data_offset;
alt_u32 chunk_of_data;
/* Make sure the input parameters is not outside of this device's range. */
if (
(block_offset >= flash->dev.length) ||
8020514: e0bffb17 ldw r2,-20(fp)
8020518: 10800b17 ldw r2,44(r2)
if (
802051c: e0fff617 ldw r3,-40(fp)
8020520: 18800a0e bge r3,r2,802054c <alt_onchip_flash_write_block+0x70>
(data_offset >= flash->dev.length) ||
8020524: e0bffb17 ldw r2,-20(fp)
8020528: 10800b17 ldw r2,44(r2)
(block_offset >= flash->dev.length) ||
802052c: e0fff517 ldw r3,-44(fp)
8020530: 1880060e bge r3,r2,802054c <alt_onchip_flash_write_block+0x70>
(length > (flash->dev.length - data_offset))
8020534: e0bffb17 ldw r2,-20(fp)
8020538: 10c00b17 ldw r3,44(r2)
802053c: e0bff517 ldw r2,-44(fp)
8020540: 1887c83a sub r3,r3,r2
(data_offset >= flash->dev.length) ||
8020544: e0800217 ldw r2,8(fp)
8020548: 1880020e bge r3,r2,8020554 <alt_onchip_flash_write_block+0x78>
) {
return -EFAULT;
802054c: 00bffc84 movi r2,-14
8020550: 00009306 br 80207a0 <alt_onchip_flash_write_block+0x2c4>
}
/* Make sure IP support support write and erase operation */
if ((flash->csr_base == NULL) || (flash->is_read_only != 0)) {
8020554: e0bffb17 ldw r2,-20(fp)
8020558: 10802f17 ldw r2,188(r2)
802055c: 10000326 beq r2,zero,802056c <alt_onchip_flash_write_block+0x90>
8020560: e0bffb17 ldw r2,-20(fp)
8020564: 10802e17 ldw r2,184(r2)
8020568: 10000226 beq r2,zero,8020574 <alt_onchip_flash_write_block+0x98>
return -ENODEV;
802056c: 00bffb44 movi r2,-19
8020570: 00008b06 br 80207a0 <alt_onchip_flash_write_block+0x2c4>
}
/* Wait until flash controller idle */
ret_code = alt_onchip_flash_poll_for_status_to_go_idle(flash);
8020574: e13ffb17 ldw r4,-20(fp)
8020578: 8020f200 call 8020f20 <alt_onchip_flash_poll_for_status_to_go_idle>
802057c: e0bfff15 stw r2,-4(fp)
if (ret_code != 0)
8020580: e0bfff17 ldw r2,-4(fp)
8020584: 10000226 beq r2,zero,8020590 <alt_onchip_flash_write_block+0xb4>
{
return ret_code;
8020588: e0bfff17 ldw r2,-4(fp)
802058c: 00008406 br 80207a0 <alt_onchip_flash_write_block+0x2c4>
}
/* Enable write and erase operation */
ALTERA_ONCHIP_FLASH_ENABLE_WRITE_AND_ERASE_OPERATION(flash->csr_base);
8020590: e0bffb17 ldw r2,-20(fp)
8020594: 10802f17 ldw r2,188(r2)
8020598: 10c00104 addi r3,r2,4
802059c: e0bffb17 ldw r2,-20(fp)
80205a0: 10802f17 ldw r2,188(r2)
80205a4: 10800104 addi r2,r2,4
80205a8: 10800037 ldwio r2,0(r2)
80205ac: 113c002c andhi r4,r2,61440
80205b0: 00802034 movhi r2,128
80205b4: 10bfffc4 addi r2,r2,-1
80205b8: 2084b03a or r2,r4,r2
80205bc: 18800035 stwio r2,0(r3)
/* Check data length */
while (length)
80205c0: 00006506 br 8020758 <alt_onchip_flash_write_block+0x27c>
{
/* Minimum write size to onchip flash is 32 bits of data */
chunk_of_data = 0xFFFFFFFF;
80205c4: 00bfffc4 movi r2,-1
80205c8: e0bff815 stw r2,-32(fp)
/* The start of data_offset must be 4 bytes (32 bits) aligned */
if ((current_data_offset & (ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE - 1)) == 0)
80205cc: e0bffd17 ldw r2,-12(fp)
80205d0: 108000cc andi r2,r2,3
80205d4: 10001e1e bne r2,zero,8020650 <alt_onchip_flash_write_block+0x174>
{
/* The address is 4-byte aligned here */
next_data_offset = (current_data_offset + ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE) & ~(ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE - 1);
80205d8: e0bffd17 ldw r2,-12(fp)
80205dc: 10c00104 addi r3,r2,4
80205e0: 00bfff04 movi r2,-4
80205e4: 1884703a and r2,r3,r2
80205e8: e0bffc15 stw r2,-16(fp)
length_of_current_write = MIN(length, next_data_offset - current_data_offset);
80205ec: e0fffc17 ldw r3,-16(fp)
80205f0: e0bffd17 ldw r2,-12(fp)
80205f4: 1887c83a sub r3,r3,r2
80205f8: e0800217 ldw r2,8(fp)
80205fc: 1880010e bge r3,r2,8020604 <alt_onchip_flash_write_block+0x128>
8020600: 1805883a mov r2,r3
8020604: e0bffa15 stw r2,-24(fp)
/* Prepare the 4 bytes chunk of data to be written */
memcpy(&chunk_of_data, &((alt_u8*)data)[buffer_offset], length_of_current_write);
8020608: e0bffe17 ldw r2,-8(fp)
802060c: e0fff417 ldw r3,-48(fp)
8020610: 1887883a add r3,r3,r2
8020614: e13ffa17 ldw r4,-24(fp)
8020618: e0bff804 addi r2,fp,-32
802061c: 200d883a mov r6,r4
8020620: 180b883a mov r5,r3
8020624: 1009883a mov r4,r2
8020628: 80086b80 call 80086b8 <memcpy>
buffer_offset += length_of_current_write;
802062c: e0fffe17 ldw r3,-8(fp)
8020630: e0bffa17 ldw r2,-24(fp)
8020634: 1885883a add r2,r3,r2
8020638: e0bffe15 stw r2,-8(fp)
length -= length_of_current_write;
802063c: e0c00217 ldw r3,8(fp)
8020640: e0bffa17 ldw r2,-24(fp)
8020644: 1885c83a sub r2,r3,r2
8020648: e0800215 stw r2,8(fp)
802064c: 00003006 br 8020710 <alt_onchip_flash_write_block+0x234>
} else {
/* Calculate how many padding bytes need to be added before the start of a data offset */
int padding = current_data_offset & (ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE - 1);
8020650: e0bffd17 ldw r2,-12(fp)
8020654: 108000cc andi r2,r2,3
8020658: e0bff915 stw r2,-28(fp)
/* Calculate new 4-byte aligned data offset */
current_data_offset = current_data_offset - padding;
802065c: e0fffd17 ldw r3,-12(fp)
8020660: e0bff917 ldw r2,-28(fp)
8020664: 1885c83a sub r2,r3,r2
8020668: e0bffd15 stw r2,-12(fp)
next_data_offset = (current_data_offset + ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE) & ~(ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE - 1);
802066c: e0bffd17 ldw r2,-12(fp)
8020670: 10c00104 addi r3,r2,4
8020674: 00bfff04 movi r2,-4
8020678: 1884703a and r2,r3,r2
802067c: e0bffc15 stw r2,-16(fp)
length_of_current_write = MIN(length + padding, next_data_offset - current_data_offset);
8020680: e0fffc17 ldw r3,-16(fp)
8020684: e0bffd17 ldw r2,-12(fp)
8020688: 1889c83a sub r4,r3,r2
802068c: e0c00217 ldw r3,8(fp)
8020690: e0bff917 ldw r2,-28(fp)
8020694: 1887883a add r3,r3,r2
8020698: 2005883a mov r2,r4
802069c: 1880010e bge r3,r2,80206a4 <alt_onchip_flash_write_block+0x1c8>
80206a0: 1805883a mov r2,r3
80206a4: e0bffa15 stw r2,-24(fp)
/* Prepare the 4 bytes chunk of data to be written */
memcpy((void *)(((int)&chunk_of_data) + (int)padding), &((alt_u8*)data)[buffer_offset], length_of_current_write - padding);
80206a8: e0fff804 addi r3,fp,-32
80206ac: e0bff917 ldw r2,-28(fp)
80206b0: 1885883a add r2,r3,r2
80206b4: 100f883a mov r7,r2
80206b8: e0bffe17 ldw r2,-8(fp)
80206bc: e0fff417 ldw r3,-48(fp)
80206c0: 1889883a add r4,r3,r2
80206c4: e0fffa17 ldw r3,-24(fp)
80206c8: e0bff917 ldw r2,-28(fp)
80206cc: 1885c83a sub r2,r3,r2
80206d0: 100d883a mov r6,r2
80206d4: 200b883a mov r5,r4
80206d8: 3809883a mov r4,r7
80206dc: 80086b80 call 80086b8 <memcpy>
buffer_offset += length_of_current_write - padding;
80206e0: e0fffa17 ldw r3,-24(fp)
80206e4: e0bff917 ldw r2,-28(fp)
80206e8: 1885c83a sub r2,r3,r2
80206ec: e0fffe17 ldw r3,-8(fp)
80206f0: 1885883a add r2,r3,r2
80206f4: e0bffe15 stw r2,-8(fp)
length -= length_of_current_write - padding;
80206f8: e0fffa17 ldw r3,-24(fp)
80206fc: e0bff917 ldw r2,-28(fp)
8020700: 1885c83a sub r2,r3,r2
8020704: e0c00217 ldw r3,8(fp)
8020708: 1885c83a sub r2,r3,r2
802070c: e0800215 stw r2,8(fp)
}
/* Writing to flash via IO 32 bits at a time */
IOWR_32DIRECT(flash->dev.base_addr, current_data_offset, chunk_of_data);
8020710: e0bffb17 ldw r2,-20(fp)
8020714: 10c00a17 ldw r3,40(r2)
8020718: e0bffd17 ldw r2,-12(fp)
802071c: 1885883a add r2,r3,r2
8020720: e0fff817 ldw r3,-32(fp)
8020724: 10c00035 stwio r3,0(r2)
/* Wait until flash controller idle */
ret_code = alt_onchip_flash_poll_for_status_to_go_idle(flash);
8020728: e13ffb17 ldw r4,-20(fp)
802072c: 8020f200 call 8020f20 <alt_onchip_flash_poll_for_status_to_go_idle>
8020730: e0bfff15 stw r2,-4(fp)
if (ret_code != 0)
8020734: e0bfff17 ldw r2,-4(fp)
8020738: 10000a1e bne r2,zero,8020764 <alt_onchip_flash_write_block+0x288>
{
break;
}
/* Wait until flash controller indicate write passed */
ret_code = alt_onchip_flash_poll_for_status_write_passed(flash);
802073c: e13ffb17 ldw r4,-20(fp)
8020740: 80210440 call 8021044 <alt_onchip_flash_poll_for_status_write_passed>
8020744: e0bfff15 stw r2,-4(fp)
if (ret_code != 0)
8020748: e0bfff17 ldw r2,-4(fp)
802074c: 1000071e bne r2,zero,802076c <alt_onchip_flash_write_block+0x290>
{
break;
}
/* Prepare to write next 4 bytes */
current_data_offset = next_data_offset;
8020750: e0bffc17 ldw r2,-16(fp)
8020754: e0bffd15 stw r2,-12(fp)
while (length)
8020758: e0800217 ldw r2,8(fp)
802075c: 103f991e bne r2,zero,80205c4 <alt_onchip_flash_write_block+0xe8>
8020760: 00000306 br 8020770 <alt_onchip_flash_write_block+0x294>
break;
8020764: 0001883a nop
8020768: 00000106 br 8020770 <alt_onchip_flash_write_block+0x294>
break;
802076c: 0001883a nop
}
/* Disable write and erase operation */
ALTERA_ONCHIP_FLASH_DISABLE_WRITE_AND_ERASE_OPERATION(flash->csr_base);
8020770: e0bffb17 ldw r2,-20(fp)
8020774: 10802f17 ldw r2,188(r2)
8020778: 10c00104 addi r3,r2,4
802077c: e0bffb17 ldw r2,-20(fp)
8020780: 10802f17 ldw r2,188(r2)
8020784: 10800104 addi r2,r2,4
8020788: 11000037 ldwio r4,0(r2)
802078c: 00840034 movhi r2,4096
8020790: 10bfffc4 addi r2,r2,-1
8020794: 2084b03a or r2,r4,r2
8020798: 18800035 stwio r2,0(r3)
return ret_code;
802079c: e0bfff17 ldw r2,-4(fp)
}
80207a0: e037883a mov sp,fp
80207a4: dfc00117 ldw ra,4(sp)
80207a8: df000017 ldw fp,0(sp)
80207ac: dec00204 addi sp,sp,8
80207b0: f800283a ret
080207b4 <alt_onchip_flash_write>:
alt_flash_dev *flash_info,
int offset,
const void *src_addr,
int length
)
{
80207b4: defff104 addi sp,sp,-60
80207b8: dfc00e15 stw ra,56(sp)
80207bc: df000d15 stw fp,52(sp)
80207c0: df000d04 addi fp,sp,52
80207c4: e13ff715 stw r4,-36(fp)
80207c8: e17ff615 stw r5,-40(fp)
80207cc: e1bff515 stw r6,-44(fp)
80207d0: e1fff415 stw r7,-48(fp)
int ret_code = 0;
80207d4: e03fff15 stw zero,-4(fp)
int i,j;
int data_to_write;
int current_offset;
int full_length = length;
80207d8: e0bff417 ldw r2,-48(fp)
80207dc: e0bffb15 stw r2,-20(fp)
int start_offset = offset;
80207e0: e0bff617 ldw r2,-40(fp)
80207e4: e0bffa15 stw r2,-24(fp)
alt_onchip_flash_dev* flash = (alt_onchip_flash_dev*)flash_info;
80207e8: e0bff717 ldw r2,-36(fp)
80207ec: e0bff915 stw r2,-28(fp)
/* Make sure the input parameters is not outside of this device's range. */
if ((offset >= flash->dev.length) || (length > (flash->dev.length - offset)))
80207f0: e0bff917 ldw r2,-28(fp)
80207f4: 10800b17 ldw r2,44(r2)
80207f8: e0fff617 ldw r3,-40(fp)
80207fc: 1880060e bge r3,r2,8020818 <alt_onchip_flash_write+0x64>
8020800: e0bff917 ldw r2,-28(fp)
8020804: 10c00b17 ldw r3,44(r2)
8020808: e0bff617 ldw r2,-40(fp)
802080c: 1887c83a sub r3,r3,r2
8020810: e0bff417 ldw r2,-48(fp)
8020814: 1880020e bge r3,r2,8020820 <alt_onchip_flash_write+0x6c>
{
return -EFAULT;
8020818: 00bffc84 movi r2,-14
802081c: 00009306 br 8020a6c <alt_onchip_flash_write+0x2b8>
}
/*
* First and foremost which sectors are affected?
*/
for(i=0;i<flash->dev.number_of_regions;i++)
8020820: e03ffe15 stw zero,-8(fp)
8020824: 00008206 br 8020a30 <alt_onchip_flash_write+0x27c>
{
/* Is it in this erase block region?*/
if((offset >= flash->dev.region_info[i].offset) &&
8020828: e0fff917 ldw r3,-28(fp)
802082c: e0bffe17 ldw r2,-8(fp)
8020830: 1004913a slli r2,r2,4
8020834: 1885883a add r2,r3,r2
8020838: 10800d17 ldw r2,52(r2)
802083c: e0fff617 ldw r3,-40(fp)
8020840: 18807816 blt r3,r2,8020a24 <alt_onchip_flash_write+0x270>
(offset < (flash->dev.region_info[i].offset +
8020844: e0fff917 ldw r3,-28(fp)
8020848: e0bffe17 ldw r2,-8(fp)
802084c: 1004913a slli r2,r2,4
8020850: 1885883a add r2,r3,r2
8020854: 10c00d17 ldw r3,52(r2)
flash->dev.region_info[i].region_size)))
8020858: e13ff917 ldw r4,-28(fp)
802085c: e0bffe17 ldw r2,-8(fp)
8020860: 1004913a slli r2,r2,4
8020864: 2085883a add r2,r4,r2
8020868: 10800e17 ldw r2,56(r2)
(offset < (flash->dev.region_info[i].offset +
802086c: 1885883a add r2,r3,r2
if((offset >= flash->dev.region_info[i].offset) &&
8020870: e0fff617 ldw r3,-40(fp)
8020874: 18806b0e bge r3,r2,8020a24 <alt_onchip_flash_write+0x270>
{
current_offset = flash->dev.region_info[i].offset;
8020878: e0fff917 ldw r3,-28(fp)
802087c: e0bffe17 ldw r2,-8(fp)
8020880: 1004913a slli r2,r2,4
8020884: 1885883a add r2,r3,r2
8020888: 10800d17 ldw r2,52(r2)
802088c: e0bffc15 stw r2,-16(fp)
for(j=0;j<flash->dev.region_info[i].number_of_blocks;j++)
8020890: e03ffd15 stw zero,-12(fp)
8020894: 00005c06 br 8020a08 <alt_onchip_flash_write+0x254>
{
if ((offset >= current_offset ) &&
8020898: e0fff617 ldw r3,-40(fp)
802089c: e0bffc17 ldw r2,-16(fp)
80208a0: 18804d16 blt r3,r2,80209d8 <alt_onchip_flash_write+0x224>
(offset < (current_offset +
flash->dev.region_info[i].block_size)))
80208a4: e0fff917 ldw r3,-28(fp)
80208a8: e0bffe17 ldw r2,-8(fp)
80208ac: 10800104 addi r2,r2,4
80208b0: 1004913a slli r2,r2,4
80208b4: 1885883a add r2,r3,r2
80208b8: 10c00017 ldw r3,0(r2)
(offset < (current_offset +
80208bc: e0bffc17 ldw r2,-16(fp)
80208c0: 1885883a add r2,r3,r2
if ((offset >= current_offset ) &&
80208c4: e0fff617 ldw r3,-40(fp)
80208c8: 1880430e bge r3,r2,80209d8 <alt_onchip_flash_write+0x224>
{
/*
* Check if the contents of the block are different
* from the data we wish to put there
*/
data_to_write = (current_offset + flash->dev.region_info[i].block_size - offset);
80208cc: e0fff917 ldw r3,-28(fp)
80208d0: e0bffe17 ldw r2,-8(fp)
80208d4: 10800104 addi r2,r2,4
80208d8: 1004913a slli r2,r2,4
80208dc: 1885883a add r2,r3,r2
80208e0: 10c00017 ldw r3,0(r2)
80208e4: e0bffc17 ldw r2,-16(fp)
80208e8: 1887883a add r3,r3,r2
80208ec: e0bff617 ldw r2,-40(fp)
80208f0: 1885c83a sub r2,r3,r2
80208f4: e0bff815 stw r2,-32(fp)
data_to_write = MIN(data_to_write, length);
80208f8: e0fff817 ldw r3,-32(fp)
80208fc: e0bff417 ldw r2,-48(fp)
8020900: 1880010e bge r3,r2,8020908 <alt_onchip_flash_write+0x154>
8020904: 1805883a mov r2,r3
8020908: e0bff815 stw r2,-32(fp)
if(memcmp(src_addr, (alt_u8*)flash->dev.base_addr+offset, data_to_write))
802090c: e0bff917 ldw r2,-28(fp)
8020910: 10c00a17 ldw r3,40(r2)
8020914: e0bff617 ldw r2,-40(fp)
8020918: 1885883a add r2,r3,r2
802091c: e0fff817 ldw r3,-32(fp)
8020920: 180d883a mov r6,r3
8020924: 100b883a mov r5,r2
8020928: e13ff517 ldw r4,-44(fp)
802092c: 8042cb80 call 8042cb8 <memcmp>
8020930: 10001326 beq r2,zero,8020980 <alt_onchip_flash_write+0x1cc>
{
ret_code = (*flash->dev.erase_block)(&flash->dev, current_offset);
8020934: e0bff917 ldw r2,-28(fp)
8020938: 10800817 ldw r2,32(r2)
802093c: e0fff917 ldw r3,-28(fp)
8020940: e17ffc17 ldw r5,-16(fp)
8020944: 1809883a mov r4,r3
8020948: 103ee83a callr r2
802094c: e0bfff15 stw r2,-4(fp)
if (!ret_code)
8020950: e0bfff17 ldw r2,-4(fp)
8020954: 10000a1e bne r2,zero,8020980 <alt_onchip_flash_write+0x1cc>
{
ret_code = (*flash->dev.write_block)(
8020958: e0bff917 ldw r2,-28(fp)
802095c: 10800917 ldw r2,36(r2)
8020960: e13ff917 ldw r4,-28(fp)
8020964: e0fff817 ldw r3,-32(fp)
8020968: d8c00015 stw r3,0(sp)
802096c: e1fff517 ldw r7,-44(fp)
8020970: e1bff617 ldw r6,-40(fp)
8020974: e17ffc17 ldw r5,-16(fp)
8020978: 103ee83a callr r2
802097c: e0bfff15 stw r2,-4(fp)
data_to_write);
}
}
/* Was this the last block? */
if ((length == data_to_write) || ret_code)
8020980: e0fff417 ldw r3,-48(fp)
8020984: e0bff817 ldw r2,-32(fp)
8020988: 18802e26 beq r3,r2,8020a44 <alt_onchip_flash_write+0x290>
802098c: e0bfff17 ldw r2,-4(fp)
8020990: 10002c1e bne r2,zero,8020a44 <alt_onchip_flash_write+0x290>
{
goto finished;
}
length -= data_to_write;
8020994: e0fff417 ldw r3,-48(fp)
8020998: e0bff817 ldw r2,-32(fp)
802099c: 1885c83a sub r2,r3,r2
80209a0: e0bff415 stw r2,-48(fp)
offset = current_offset + flash->dev.region_info[i].block_size;
80209a4: e0fff917 ldw r3,-28(fp)
80209a8: e0bffe17 ldw r2,-8(fp)
80209ac: 10800104 addi r2,r2,4
80209b0: 1004913a slli r2,r2,4
80209b4: 1885883a add r2,r3,r2
80209b8: 10800017 ldw r2,0(r2)
80209bc: e0fffc17 ldw r3,-16(fp)
80209c0: 1885883a add r2,r3,r2
80209c4: e0bff615 stw r2,-40(fp)
src_addr = (alt_u8*)src_addr + data_to_write;
80209c8: e0bff817 ldw r2,-32(fp)
80209cc: e0fff517 ldw r3,-44(fp)
80209d0: 1885883a add r2,r3,r2
80209d4: e0bff515 stw r2,-44(fp)
}
current_offset += flash->dev.region_info[i].block_size;
80209d8: e0fff917 ldw r3,-28(fp)
80209dc: e0bffe17 ldw r2,-8(fp)
80209e0: 10800104 addi r2,r2,4
80209e4: 1004913a slli r2,r2,4
80209e8: 1885883a add r2,r3,r2
80209ec: 10800017 ldw r2,0(r2)
80209f0: e0fffc17 ldw r3,-16(fp)
80209f4: 1885883a add r2,r3,r2
80209f8: e0bffc15 stw r2,-16(fp)
for(j=0;j<flash->dev.region_info[i].number_of_blocks;j++)
80209fc: e0bffd17 ldw r2,-12(fp)
8020a00: 10800044 addi r2,r2,1
8020a04: e0bffd15 stw r2,-12(fp)
8020a08: e0fff917 ldw r3,-28(fp)
8020a0c: e0bffe17 ldw r2,-8(fp)
8020a10: 1004913a slli r2,r2,4
8020a14: 1885883a add r2,r3,r2
8020a18: 10800f17 ldw r2,60(r2)
8020a1c: e0fffd17 ldw r3,-12(fp)
8020a20: 18bf9d16 blt r3,r2,8020898 <alt_onchip_flash_write+0xe4>
for(i=0;i<flash->dev.number_of_regions;i++)
8020a24: e0bffe17 ldw r2,-8(fp)
8020a28: 10800044 addi r2,r2,1
8020a2c: e0bffe15 stw r2,-8(fp)
8020a30: e0bff917 ldw r2,-28(fp)
8020a34: 10800c17 ldw r2,48(r2)
8020a38: e0fffe17 ldw r3,-8(fp)
8020a3c: 18bf7a16 blt r3,r2,8020828 <alt_onchip_flash_write+0x74>
}
}
}
finished:
8020a40: 00000106 br 8020a48 <alt_onchip_flash_write+0x294>
goto finished;
8020a44: 0001883a nop
alt_dcache_flush((alt_u8*)flash->dev.base_addr+start_offset, full_length);
8020a48: e0bff917 ldw r2,-28(fp)
8020a4c: 10c00a17 ldw r3,40(r2)
8020a50: e0bffa17 ldw r2,-24(fp)
8020a54: 1885883a add r2,r3,r2
8020a58: e0fffb17 ldw r3,-20(fp)
8020a5c: 180b883a mov r5,r3
8020a60: 1009883a mov r4,r2
8020a64: 80371c00 call 80371c0 <alt_dcache_flush>
return ret_code;
8020a68: e0bfff17 ldw r2,-4(fp)
}
8020a6c: e037883a mov sp,fp
8020a70: dfc00117 ldw ra,4(sp)
8020a74: df000017 ldw fp,0(sp)
8020a78: dec00204 addi sp,sp,8
8020a7c: f800283a ret
08020a80 <altera_onchip_flash_init>:
**/
void altera_onchip_flash_init
(
alt_onchip_flash_dev *flash
)
{
8020a80: defff504 addi sp,sp,-44
8020a84: dfc00a15 stw ra,40(sp)
8020a88: df000915 stw fp,36(sp)
8020a8c: dc000815 stw r16,32(sp)
8020a90: df000904 addi fp,sp,36
8020a94: e13ff715 stw r4,-36(fp)
/* A region is a sector of the onchip flash */
int number_of_regions;
flash_region* region_info;
int sector1_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_AVAILABLE;
8020a98: e03ffd15 stw zero,-12(fp)
int sector2_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_AVAILABLE;
8020a9c: e03ffc15 stw zero,-16(fp)
int sector3_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_AVAILABLE;
8020aa0: e03ffb15 stw zero,-20(fp)
int sector4_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_AVAILABLE;
8020aa4: e03ffa15 stw zero,-24(fp)
int sector5_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_AVAILABLE;
8020aa8: e03ff915 stw zero,-28(fp)
/* Set up flash_region data structures. */
number_of_regions = 0;
8020aac: e03ffe15 stw zero,-8(fp)
region_info = &flash->dev.region_info[0];
8020ab0: e0bff717 ldw r2,-36(fp)
8020ab4: 10800d04 addi r2,r2,52
8020ab8: e0bff815 stw r2,-32(fp)
if (flash->csr_base != NULL) {
8020abc: e0bff717 ldw r2,-36(fp)
8020ac0: 10802f17 ldw r2,188(r2)
8020ac4: 10001926 beq r2,zero,8020b2c <altera_onchip_flash_init+0xac>
sector1_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_MSK;
8020ac8: e0bff717 ldw r2,-36(fp)
8020acc: 10802f17 ldw r2,188(r2)
8020ad0: 10800037 ldwio r2,0(r2)
8020ad4: 1080080c andi r2,r2,32
8020ad8: e0bffd15 stw r2,-12(fp)
sector2_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_MSK;
8020adc: e0bff717 ldw r2,-36(fp)
8020ae0: 10802f17 ldw r2,188(r2)
8020ae4: 10800037 ldwio r2,0(r2)
8020ae8: 1080100c andi r2,r2,64
8020aec: e0bffc15 stw r2,-16(fp)
sector3_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_MSK;
8020af0: e0bff717 ldw r2,-36(fp)
8020af4: 10802f17 ldw r2,188(r2)
8020af8: 10800037 ldwio r2,0(r2)
8020afc: 1080200c andi r2,r2,128
8020b00: e0bffb15 stw r2,-20(fp)
sector4_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_MSK;
8020b04: e0bff717 ldw r2,-36(fp)
8020b08: 10802f17 ldw r2,188(r2)
8020b0c: 10800037 ldwio r2,0(r2)
8020b10: 1080400c andi r2,r2,256
8020b14: e0bffa15 stw r2,-24(fp)
sector5_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_MSK;
8020b18: e0bff717 ldw r2,-36(fp)
8020b1c: 10802f17 ldw r2,188(r2)
8020b20: 10800037 ldwio r2,0(r2)
8020b24: 1080800c andi r2,r2,512
8020b28: e0bff915 stw r2,-28(fp)
}
if ((flash->sector1_enabled == 1) && (sector1_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_UNAVAILABLE)) {
8020b2c: e0bff717 ldw r2,-36(fp)
8020b30: 10803017 ldw r2,192(r2)
8020b34: 10800058 cmpnei r2,r2,1
8020b38: 10002c1e bne r2,zero,8020bec <altera_onchip_flash_init+0x16c>
8020b3c: e0bffd17 ldw r2,-12(fp)
8020b40: 10800820 cmpeqi r2,r2,32
8020b44: 1000291e bne r2,zero,8020bec <altera_onchip_flash_init+0x16c>
region_info[number_of_regions].offset = flash->sector1_start_addr;
8020b48: e0bffe17 ldw r2,-8(fp)
8020b4c: 1004913a slli r2,r2,4
8020b50: e0fff817 ldw r3,-32(fp)
8020b54: 1885883a add r2,r3,r2
8020b58: e0fff717 ldw r3,-36(fp)
8020b5c: 18c03117 ldw r3,196(r3)
8020b60: 10c00015 stw r3,0(r2)
region_info[number_of_regions].region_size = flash->sector1_end_addr - flash->sector1_start_addr + 1;
8020b64: e0bff717 ldw r2,-36(fp)
8020b68: 10c03217 ldw r3,200(r2)
8020b6c: e0bff717 ldw r2,-36(fp)
8020b70: 10803117 ldw r2,196(r2)
8020b74: 1887c83a sub r3,r3,r2
8020b78: e0bffe17 ldw r2,-8(fp)
8020b7c: 1004913a slli r2,r2,4
8020b80: e13ff817 ldw r4,-32(fp)
8020b84: 2085883a add r2,r4,r2
8020b88: 18c00044 addi r3,r3,1
8020b8c: 10c00115 stw r3,4(r2)
region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size;
8020b90: e0fff717 ldw r3,-36(fp)
8020b94: e0bffe17 ldw r2,-8(fp)
8020b98: 1004913a slli r2,r2,4
8020b9c: 1885883a add r2,r3,r2
8020ba0: 11000e17 ldw r4,56(r2)
8020ba4: e0bff717 ldw r2,-36(fp)
8020ba8: 11403f17 ldw r5,252(r2)
8020bac: e0bffe17 ldw r2,-8(fp)
8020bb0: 1004913a slli r2,r2,4
8020bb4: e0fff817 ldw r3,-32(fp)
8020bb8: 18a1883a add r16,r3,r2
8020bbc: 800cf000 call 800cf00 <__divsi3>
8020bc0: 80800215 stw r2,8(r16)
region_info[number_of_regions].block_size = flash->page_size;
8020bc4: e0bffe17 ldw r2,-8(fp)
8020bc8: 1004913a slli r2,r2,4
8020bcc: e0fff817 ldw r3,-32(fp)
8020bd0: 1885883a add r2,r3,r2
8020bd4: e0fff717 ldw r3,-36(fp)
8020bd8: 18c03f17 ldw r3,252(r3)
8020bdc: 10c00315 stw r3,12(r2)
number_of_regions++;
8020be0: e0bffe17 ldw r2,-8(fp)
8020be4: 10800044 addi r2,r2,1
8020be8: e0bffe15 stw r2,-8(fp)
}
if ((flash->sector2_enabled == 1) && (sector2_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_UNAVAILABLE)) {
8020bec: e0bff717 ldw r2,-36(fp)
8020bf0: 10803317 ldw r2,204(r2)
8020bf4: 10800058 cmpnei r2,r2,1
8020bf8: 10002c1e bne r2,zero,8020cac <altera_onchip_flash_init+0x22c>
8020bfc: e0bffc17 ldw r2,-16(fp)
8020c00: 10801020 cmpeqi r2,r2,64
8020c04: 1000291e bne r2,zero,8020cac <altera_onchip_flash_init+0x22c>
region_info[number_of_regions].offset = flash->sector2_start_addr;
8020c08: e0bffe17 ldw r2,-8(fp)
8020c0c: 1004913a slli r2,r2,4
8020c10: e0fff817 ldw r3,-32(fp)
8020c14: 1885883a add r2,r3,r2
8020c18: e0fff717 ldw r3,-36(fp)
8020c1c: 18c03417 ldw r3,208(r3)
8020c20: 10c00015 stw r3,0(r2)
region_info[number_of_regions].region_size = flash->sector2_end_addr - flash->sector2_start_addr + 1;
8020c24: e0bff717 ldw r2,-36(fp)
8020c28: 10c03517 ldw r3,212(r2)
8020c2c: e0bff717 ldw r2,-36(fp)
8020c30: 10803417 ldw r2,208(r2)
8020c34: 1887c83a sub r3,r3,r2
8020c38: e0bffe17 ldw r2,-8(fp)
8020c3c: 1004913a slli r2,r2,4
8020c40: e13ff817 ldw r4,-32(fp)
8020c44: 2085883a add r2,r4,r2
8020c48: 18c00044 addi r3,r3,1
8020c4c: 10c00115 stw r3,4(r2)
region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size;
8020c50: e0fff717 ldw r3,-36(fp)
8020c54: e0bffe17 ldw r2,-8(fp)
8020c58: 1004913a slli r2,r2,4
8020c5c: 1885883a add r2,r3,r2
8020c60: 11000e17 ldw r4,56(r2)
8020c64: e0bff717 ldw r2,-36(fp)
8020c68: 11403f17 ldw r5,252(r2)
8020c6c: e0bffe17 ldw r2,-8(fp)
8020c70: 1004913a slli r2,r2,4
8020c74: e0fff817 ldw r3,-32(fp)
8020c78: 18a1883a add r16,r3,r2
8020c7c: 800cf000 call 800cf00 <__divsi3>
8020c80: 80800215 stw r2,8(r16)
region_info[number_of_regions].block_size = flash->page_size;
8020c84: e0bffe17 ldw r2,-8(fp)
8020c88: 1004913a slli r2,r2,4
8020c8c: e0fff817 ldw r3,-32(fp)
8020c90: 1885883a add r2,r3,r2
8020c94: e0fff717 ldw r3,-36(fp)
8020c98: 18c03f17 ldw r3,252(r3)
8020c9c: 10c00315 stw r3,12(r2)
number_of_regions++;
8020ca0: e0bffe17 ldw r2,-8(fp)
8020ca4: 10800044 addi r2,r2,1
8020ca8: e0bffe15 stw r2,-8(fp)
}
if ((flash->sector3_enabled == 1) && (sector3_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_UNAVAILABLE)) {
8020cac: e0bff717 ldw r2,-36(fp)
8020cb0: 10803617 ldw r2,216(r2)
8020cb4: 10800058 cmpnei r2,r2,1
8020cb8: 10002c1e bne r2,zero,8020d6c <altera_onchip_flash_init+0x2ec>
8020cbc: e0bffb17 ldw r2,-20(fp)
8020cc0: 10802020 cmpeqi r2,r2,128
8020cc4: 1000291e bne r2,zero,8020d6c <altera_onchip_flash_init+0x2ec>
region_info[number_of_regions].offset = flash->sector3_start_addr;
8020cc8: e0bffe17 ldw r2,-8(fp)
8020ccc: 1004913a slli r2,r2,4
8020cd0: e0fff817 ldw r3,-32(fp)
8020cd4: 1885883a add r2,r3,r2
8020cd8: e0fff717 ldw r3,-36(fp)
8020cdc: 18c03717 ldw r3,220(r3)
8020ce0: 10c00015 stw r3,0(r2)
region_info[number_of_regions].region_size = flash->sector3_end_addr - flash->sector3_start_addr + 1;
8020ce4: e0bff717 ldw r2,-36(fp)
8020ce8: 10c03817 ldw r3,224(r2)
8020cec: e0bff717 ldw r2,-36(fp)
8020cf0: 10803717 ldw r2,220(r2)
8020cf4: 1887c83a sub r3,r3,r2
8020cf8: e0bffe17 ldw r2,-8(fp)
8020cfc: 1004913a slli r2,r2,4
8020d00: e13ff817 ldw r4,-32(fp)
8020d04: 2085883a add r2,r4,r2
8020d08: 18c00044 addi r3,r3,1
8020d0c: 10c00115 stw r3,4(r2)
region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size;
8020d10: e0fff717 ldw r3,-36(fp)
8020d14: e0bffe17 ldw r2,-8(fp)
8020d18: 1004913a slli r2,r2,4
8020d1c: 1885883a add r2,r3,r2
8020d20: 11000e17 ldw r4,56(r2)
8020d24: e0bff717 ldw r2,-36(fp)
8020d28: 11403f17 ldw r5,252(r2)
8020d2c: e0bffe17 ldw r2,-8(fp)
8020d30: 1004913a slli r2,r2,4
8020d34: e0fff817 ldw r3,-32(fp)
8020d38: 18a1883a add r16,r3,r2
8020d3c: 800cf000 call 800cf00 <__divsi3>
8020d40: 80800215 stw r2,8(r16)
region_info[number_of_regions].block_size = flash->page_size;
8020d44: e0bffe17 ldw r2,-8(fp)
8020d48: 1004913a slli r2,r2,4
8020d4c: e0fff817 ldw r3,-32(fp)
8020d50: 1885883a add r2,r3,r2
8020d54: e0fff717 ldw r3,-36(fp)
8020d58: 18c03f17 ldw r3,252(r3)
8020d5c: 10c00315 stw r3,12(r2)
number_of_regions++;
8020d60: e0bffe17 ldw r2,-8(fp)
8020d64: 10800044 addi r2,r2,1
8020d68: e0bffe15 stw r2,-8(fp)
}
if ((flash->sector4_enabled == 1) && (sector4_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_UNAVAILABLE)) {
8020d6c: e0bff717 ldw r2,-36(fp)
8020d70: 10803917 ldw r2,228(r2)
8020d74: 10800058 cmpnei r2,r2,1
8020d78: 10002c1e bne r2,zero,8020e2c <altera_onchip_flash_init+0x3ac>
8020d7c: e0bffa17 ldw r2,-24(fp)
8020d80: 10804020 cmpeqi r2,r2,256
8020d84: 1000291e bne r2,zero,8020e2c <altera_onchip_flash_init+0x3ac>
region_info[number_of_regions].offset = flash->sector4_start_addr;
8020d88: e0bffe17 ldw r2,-8(fp)
8020d8c: 1004913a slli r2,r2,4
8020d90: e0fff817 ldw r3,-32(fp)
8020d94: 1885883a add r2,r3,r2
8020d98: e0fff717 ldw r3,-36(fp)
8020d9c: 18c03a17 ldw r3,232(r3)
8020da0: 10c00015 stw r3,0(r2)
region_info[number_of_regions].region_size = flash->sector4_end_addr - flash->sector4_start_addr + 1;
8020da4: e0bff717 ldw r2,-36(fp)
8020da8: 10c03b17 ldw r3,236(r2)
8020dac: e0bff717 ldw r2,-36(fp)
8020db0: 10803a17 ldw r2,232(r2)
8020db4: 1887c83a sub r3,r3,r2
8020db8: e0bffe17 ldw r2,-8(fp)
8020dbc: 1004913a slli r2,r2,4
8020dc0: e13ff817 ldw r4,-32(fp)
8020dc4: 2085883a add r2,r4,r2
8020dc8: 18c00044 addi r3,r3,1
8020dcc: 10c00115 stw r3,4(r2)
region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size;
8020dd0: e0fff717 ldw r3,-36(fp)
8020dd4: e0bffe17 ldw r2,-8(fp)
8020dd8: 1004913a slli r2,r2,4
8020ddc: 1885883a add r2,r3,r2
8020de0: 11000e17 ldw r4,56(r2)
8020de4: e0bff717 ldw r2,-36(fp)
8020de8: 11403f17 ldw r5,252(r2)
8020dec: e0bffe17 ldw r2,-8(fp)
8020df0: 1004913a slli r2,r2,4
8020df4: e0fff817 ldw r3,-32(fp)
8020df8: 18a1883a add r16,r3,r2
8020dfc: 800cf000 call 800cf00 <__divsi3>
8020e00: 80800215 stw r2,8(r16)
region_info[number_of_regions].block_size = flash->page_size;
8020e04: e0bffe17 ldw r2,-8(fp)
8020e08: 1004913a slli r2,r2,4
8020e0c: e0fff817 ldw r3,-32(fp)
8020e10: 1885883a add r2,r3,r2
8020e14: e0fff717 ldw r3,-36(fp)
8020e18: 18c03f17 ldw r3,252(r3)
8020e1c: 10c00315 stw r3,12(r2)
number_of_regions++;
8020e20: e0bffe17 ldw r2,-8(fp)
8020e24: 10800044 addi r2,r2,1
8020e28: e0bffe15 stw r2,-8(fp)
}
if ((flash->sector5_enabled == 1) && (sector5_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_UNAVAILABLE)) {
8020e2c: e0bff717 ldw r2,-36(fp)
8020e30: 10803c17 ldw r2,240(r2)
8020e34: 10800058 cmpnei r2,r2,1
8020e38: 10002c1e bne r2,zero,8020eec <altera_onchip_flash_init+0x46c>
8020e3c: e0bff917 ldw r2,-28(fp)
8020e40: 10808020 cmpeqi r2,r2,512
8020e44: 1000291e bne r2,zero,8020eec <altera_onchip_flash_init+0x46c>
region_info[number_of_regions].offset = flash->sector5_start_addr;
8020e48: e0bffe17 ldw r2,-8(fp)
8020e4c: 1004913a slli r2,r2,4
8020e50: e0fff817 ldw r3,-32(fp)
8020e54: 1885883a add r2,r3,r2
8020e58: e0fff717 ldw r3,-36(fp)
8020e5c: 18c03d17 ldw r3,244(r3)
8020e60: 10c00015 stw r3,0(r2)
region_info[number_of_regions].region_size = flash->sector5_end_addr - flash->sector5_start_addr + 1;
8020e64: e0bff717 ldw r2,-36(fp)
8020e68: 10c03e17 ldw r3,248(r2)
8020e6c: e0bff717 ldw r2,-36(fp)
8020e70: 10803d17 ldw r2,244(r2)
8020e74: 1887c83a sub r3,r3,r2
8020e78: e0bffe17 ldw r2,-8(fp)
8020e7c: 1004913a slli r2,r2,4
8020e80: e13ff817 ldw r4,-32(fp)
8020e84: 2085883a add r2,r4,r2
8020e88: 18c00044 addi r3,r3,1
8020e8c: 10c00115 stw r3,4(r2)
region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size;
8020e90: e0fff717 ldw r3,-36(fp)
8020e94: e0bffe17 ldw r2,-8(fp)
8020e98: 1004913a slli r2,r2,4
8020e9c: 1885883a add r2,r3,r2
8020ea0: 11000e17 ldw r4,56(r2)
8020ea4: e0bff717 ldw r2,-36(fp)
8020ea8: 11403f17 ldw r5,252(r2)
8020eac: e0bffe17 ldw r2,-8(fp)
8020eb0: 1004913a slli r2,r2,4
8020eb4: e0fff817 ldw r3,-32(fp)
8020eb8: 18a1883a add r16,r3,r2
8020ebc: 800cf000 call 800cf00 <__divsi3>
8020ec0: 80800215 stw r2,8(r16)
region_info[number_of_regions].block_size = flash->page_size;
8020ec4: e0bffe17 ldw r2,-8(fp)
8020ec8: 1004913a slli r2,r2,4
8020ecc: e0fff817 ldw r3,-32(fp)
8020ed0: 1885883a add r2,r3,r2
8020ed4: e0fff717 ldw r3,-36(fp)
8020ed8: 18c03f17 ldw r3,252(r3)
8020edc: 10c00315 stw r3,12(r2)
number_of_regions++;
8020ee0: e0bffe17 ldw r2,-8(fp)
8020ee4: 10800044 addi r2,r2,1
8020ee8: e0bffe15 stw r2,-8(fp)
}
/* Update number of regions. */
flash->dev.number_of_regions = number_of_regions;
8020eec: e0bff717 ldw r2,-36(fp)
8020ef0: e0fffe17 ldw r3,-8(fp)
8020ef4: 10c00c15 stw r3,48(r2)
/*
* Register this device as a valid flash device type
*/
alt_flash_device_register(&(flash->dev));
8020ef8: e0bff717 ldw r2,-36(fp)
8020efc: 1009883a mov r4,r2
8020f00: 80201d80 call 80201d8 <alt_flash_device_register>
}
8020f04: 0001883a nop
8020f08: e6ffff04 addi sp,fp,-4
8020f0c: dfc00217 ldw ra,8(sp)
8020f10: df000117 ldw fp,4(sp)
8020f14: dc000017 ldw r16,0(sp)
8020f18: dec00304 addi sp,sp,12
8020f1c: f800283a ret
08020f20 <alt_onchip_flash_poll_for_status_to_go_idle>:
**/
int alt_onchip_flash_poll_for_status_to_go_idle
(
alt_onchip_flash_dev *flash
)
{
8020f20: defffa04 addi sp,sp,-24
8020f24: dfc00515 stw ra,20(sp)
8020f28: df000415 stw fp,16(sp)
8020f2c: df000404 addi fp,sp,16
8020f30: e13ffc15 stw r4,-16(fp)
int ret_code = 0;
8020f34: e03fff15 stw zero,-4(fp)
int timeout = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE;
8020f38: 008002f4 movhi r2,11
8020f3c: 10ab9804 addi r2,r2,-20896
8020f40: e0bffd15 stw r2,-12(fp)
int count_down = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE;
8020f44: 008002f4 movhi r2,11
8020f48: 10ab9804 addi r2,r2,-20896
8020f4c: e0bffe15 stw r2,-8(fp)
while (
8020f50: 00000c06 br 8020f84 <alt_onchip_flash_poll_for_status_to_go_idle+0x64>
(IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) &
ALTERA_ONCHIP_FLASH_STATUS_BUSY_MSK
) != ALTERA_ONCHIP_FLASH_STATUS_BUSY_IDLE
) {
alt_busy_sleep(1); /* delay 1us */
8020f54: 01000044 movi r4,1
8020f58: 8036f5c0 call 8036f5c <alt_busy_sleep>
/* If timeout value is zero, it will never timeout. */
if (timeout != 0) {
8020f5c: e0bffd17 ldw r2,-12(fp)
8020f60: 10000826 beq r2,zero,8020f84 <alt_onchip_flash_poll_for_status_to_go_idle+0x64>
count_down--;
8020f64: e0bffe17 ldw r2,-8(fp)
8020f68: 10bfffc4 addi r2,r2,-1
8020f6c: e0bffe15 stw r2,-8(fp)
if (count_down == 0) {
8020f70: e0bffe17 ldw r2,-8(fp)
8020f74: 1000031e bne r2,zero,8020f84 <alt_onchip_flash_poll_for_status_to_go_idle+0x64>
/* Timeout */
ret_code = -ETIMEDOUT;
8020f78: 00bfe304 movi r2,-116
8020f7c: e0bfff15 stw r2,-4(fp)
break;
8020f80: 00000506 br 8020f98 <alt_onchip_flash_poll_for_status_to_go_idle+0x78>
(IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) &
8020f84: e0bffc17 ldw r2,-16(fp)
8020f88: 10802f17 ldw r2,188(r2)
8020f8c: 10800037 ldwio r2,0(r2)
8020f90: 108000cc andi r2,r2,3
while (
8020f94: 103fef1e bne r2,zero,8020f54 <alt_onchip_flash_poll_for_status_to_go_idle+0x34>
}
}
}
return ret_code;
8020f98: e0bfff17 ldw r2,-4(fp)
}
8020f9c: e037883a mov sp,fp
8020fa0: dfc00117 ldw ra,4(sp)
8020fa4: df000017 ldw fp,0(sp)
8020fa8: dec00204 addi sp,sp,8
8020fac: f800283a ret
08020fb0 <alt_onchip_flash_poll_for_status_erase_passed>:
**/
int alt_onchip_flash_poll_for_status_erase_passed
(
alt_onchip_flash_dev *flash
)
{
8020fb0: defffa04 addi sp,sp,-24
8020fb4: dfc00515 stw ra,20(sp)
8020fb8: df000415 stw fp,16(sp)
8020fbc: df000404 addi fp,sp,16
8020fc0: e13ffc15 stw r4,-16(fp)
int ret_code = 0;
8020fc4: e03fff15 stw zero,-4(fp)
int timeout = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE;
8020fc8: 008002f4 movhi r2,11
8020fcc: 10ab9804 addi r2,r2,-20896
8020fd0: e0bffd15 stw r2,-12(fp)
int count_down = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE;
8020fd4: 008002f4 movhi r2,11
8020fd8: 10ab9804 addi r2,r2,-20896
8020fdc: e0bffe15 stw r2,-8(fp)
while (
8020fe0: 00000c06 br 8021014 <alt_onchip_flash_poll_for_status_erase_passed+0x64>
(IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) &
ALTERA_ONCHIP_FLASH_STATUS_ERASE_MSK
) != ALTERA_ONCHIP_FLASH_STATUS_ERASE_PASSED
) {
alt_busy_sleep(1); /* delay 1us */
8020fe4: 01000044 movi r4,1
8020fe8: 8036f5c0 call 8036f5c <alt_busy_sleep>
/* If timeout value is zero, it will never timeout. */
if (timeout != 0) {
8020fec: e0bffd17 ldw r2,-12(fp)
8020ff0: 10000826 beq r2,zero,8021014 <alt_onchip_flash_poll_for_status_erase_passed+0x64>
count_down--;
8020ff4: e0bffe17 ldw r2,-8(fp)
8020ff8: 10bfffc4 addi r2,r2,-1
8020ffc: e0bffe15 stw r2,-8(fp)
if (count_down == 0) {
8021000: e0bffe17 ldw r2,-8(fp)
8021004: 1000031e bne r2,zero,8021014 <alt_onchip_flash_poll_for_status_erase_passed+0x64>
/* Timeout */
ret_code = -ETIMEDOUT;
8021008: 00bfe304 movi r2,-116
802100c: e0bfff15 stw r2,-4(fp)
break;
8021010: 00000606 br 802102c <alt_onchip_flash_poll_for_status_erase_passed+0x7c>
(IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) &
8021014: e0bffc17 ldw r2,-16(fp)
8021018: 10802f17 ldw r2,188(r2)
802101c: 10800037 ldwio r2,0(r2)
8021020: 1080040c andi r2,r2,16
while (
8021024: 10800418 cmpnei r2,r2,16
8021028: 103fee1e bne r2,zero,8020fe4 <alt_onchip_flash_poll_for_status_erase_passed+0x34>
}
}
}
return ret_code;
802102c: e0bfff17 ldw r2,-4(fp)
}
8021030: e037883a mov sp,fp
8021034: dfc00117 ldw ra,4(sp)
8021038: df000017 ldw fp,0(sp)
802103c: dec00204 addi sp,sp,8
8021040: f800283a ret
08021044 <alt_onchip_flash_poll_for_status_write_passed>:
**/
int alt_onchip_flash_poll_for_status_write_passed
(
alt_onchip_flash_dev *flash
)
{
8021044: defffa04 addi sp,sp,-24
8021048: dfc00515 stw ra,20(sp)
802104c: df000415 stw fp,16(sp)
8021050: df000404 addi fp,sp,16
8021054: e13ffc15 stw r4,-16(fp)
int ret_code = 0;
8021058: e03fff15 stw zero,-4(fp)
int timeout = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE;
802105c: 008002f4 movhi r2,11
8021060: 10ab9804 addi r2,r2,-20896
8021064: e0bffd15 stw r2,-12(fp)
int count_down = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE;
8021068: 008002f4 movhi r2,11
802106c: 10ab9804 addi r2,r2,-20896
8021070: e0bffe15 stw r2,-8(fp)
while (
8021074: 00000c06 br 80210a8 <alt_onchip_flash_poll_for_status_write_passed+0x64>
(IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) &
ALTERA_ONCHIP_FLASH_STATUS_WRITE_MSK
) != ALTERA_ONCHIP_FLASH_STATUS_WRITE_PASSED
) {
alt_busy_sleep(1); /* delay 1us */
8021078: 01000044 movi r4,1
802107c: 8036f5c0 call 8036f5c <alt_busy_sleep>
/* If timeout value is zero, it will never timeout. */
if (timeout != 0) {
8021080: e0bffd17 ldw r2,-12(fp)
8021084: 10000826 beq r2,zero,80210a8 <alt_onchip_flash_poll_for_status_write_passed+0x64>
count_down--;
8021088: e0bffe17 ldw r2,-8(fp)
802108c: 10bfffc4 addi r2,r2,-1
8021090: e0bffe15 stw r2,-8(fp)
if (count_down == 0) {
8021094: e0bffe17 ldw r2,-8(fp)
8021098: 1000031e bne r2,zero,80210a8 <alt_onchip_flash_poll_for_status_write_passed+0x64>
/* Timeout */
ret_code = -ETIMEDOUT;
802109c: 00bfe304 movi r2,-116
80210a0: e0bfff15 stw r2,-4(fp)
break;
80210a4: 00000606 br 80210c0 <alt_onchip_flash_poll_for_status_write_passed+0x7c>
(IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) &
80210a8: e0bffc17 ldw r2,-16(fp)
80210ac: 10802f17 ldw r2,188(r2)
80210b0: 10800037 ldwio r2,0(r2)
80210b4: 1080020c andi r2,r2,8
while (
80210b8: 10800218 cmpnei r2,r2,8
80210bc: 103fee1e bne r2,zero,8021078 <alt_onchip_flash_poll_for_status_write_passed+0x34>
}
}
}
return ret_code;
80210c0: e0bfff17 ldw r2,-4(fp)
}
80210c4: e037883a mov sp,fp
80210c8: dfc00117 ldw ra,4(sp)
80210cc: df000017 ldw fp,0(sp)
80210d0: dec00204 addi sp,sp,8
80210d4: f800283a ret
080210d8 <altera_eth_tse_init>:
* @Return ENP_HARDWARE on error, otherwise return SUCCESS
*/
error_t altera_eth_tse_init(
alt_iniche_dev *p_dev)
{
80210d8: defffa04 addi sp,sp,-24
80210dc: dfc00515 stw ra,20(sp)
80210e0: df000415 stw fp,16(sp)
80210e4: df000404 addi fp,sp,16
80210e8: e13ffc15 stw r4,-16(fp)
int i;
alt_tse_iniche_dev_driver_data *p_driver_data = 0;
80210ec: e03ffe15 stw zero,-8(fp)
alt_tse_system_info *psys_info = 0;
80210f0: e03ffd15 stw zero,-12(fp)
dprintf("altera_eth_tse_init %d\n", p_dev->if_num);
80210f4: e0bffc17 ldw r2,-16(fp)
80210f8: 10800517 ldw r2,20(r2)
80210fc: 100b883a mov r5,r2
8021100: 01020174 movhi r4,2053
8021104: 2125ca04 addi r4,r4,-26840
8021108: 8002c780 call 8002c78 <printf>
/* Get the pointer to the alt_tse_iniche_dev_driver_data structure from the global array */
for(i = 0; i < number_of_tse_mac; i++) {
802110c: e03fff15 stw zero,-4(fp)
8021110: 00001006 br 8021154 <altera_eth_tse_init+0x7c>
if(tse_iniche_dev_driver_data[i].p_dev == p_dev) {
8021114: e0bfff17 ldw r2,-4(fp)
8021118: 10c00324 muli r3,r2,12
802111c: 008201b4 movhi r2,2054
8021120: 1885883a add r2,r3,r2
8021124: 10b5b617 ldw r2,-10536(r2)
8021128: e0fffc17 ldw r3,-16(fp)
802112c: 1880061e bne r3,r2,8021148 <altera_eth_tse_init+0x70>
p_driver_data = &tse_iniche_dev_driver_data[i];
8021130: e0bfff17 ldw r2,-4(fp)
8021134: 10c00324 muli r3,r2,12
8021138: 008201b4 movhi r2,2054
802113c: 10b5b604 addi r2,r2,-10536
8021140: 1885883a add r2,r3,r2
8021144: e0bffe15 stw r2,-8(fp)
for(i = 0; i < number_of_tse_mac; i++) {
8021148: e0bfff17 ldw r2,-4(fp)
802114c: 10800044 addi r2,r2,1
8021150: e0bfff15 stw r2,-4(fp)
8021154: d0a05c03 ldbu r2,-32400(gp)
8021158: 10803fcc andi r2,r2,255
802115c: e0ffff17 ldw r3,-4(fp)
8021160: 18bfec16 blt r3,r2,8021114 <altera_eth_tse_init+0x3c>
}
}
/* If pointer could not found */
if(p_driver_data == 0) {
8021164: e0bffe17 ldw r2,-8(fp)
8021168: 1000021e bne r2,zero,8021174 <altera_eth_tse_init+0x9c>
return ENP_HARDWARE;
802116c: 00bff744 movi r2,-35
8021170: 00002606 br 802120c <altera_eth_tse_init+0x134>
}
/* Get the pointer to the alt_tse_system_info structure from the global array */
for(i = 0; i < max_mac_system; i++) {
8021174: e03fff15 stw zero,-4(fp)
8021178: 00001106 br 80211c0 <altera_eth_tse_init+0xe8>
if(tse_mac_device[i].tse_mac_base == p_driver_data->hw_mac_base_addr) {
802117c: e0bfff17 ldw r2,-4(fp)
8021180: 10c01324 muli r3,r2,76
8021184: 00820174 movhi r2,2053
8021188: 1885883a add r2,r3,r2
802118c: 10ee5417 ldw r3,-18096(r2)
8021190: e0bffe17 ldw r2,-8(fp)
8021194: 10800117 ldw r2,4(r2)
8021198: 1880061e bne r3,r2,80211b4 <altera_eth_tse_init+0xdc>
psys_info = &tse_mac_device[i];
802119c: e0bfff17 ldw r2,-4(fp)
80211a0: 10c01324 muli r3,r2,76
80211a4: 00820174 movhi r2,2053
80211a8: 10ae5404 addi r2,r2,-18096
80211ac: 1885883a add r2,r3,r2
80211b0: e0bffd15 stw r2,-12(fp)
for(i = 0; i < max_mac_system; i++) {
80211b4: e0bfff17 ldw r2,-4(fp)
80211b8: 10800044 addi r2,r2,1
80211bc: e0bfff15 stw r2,-4(fp)
80211c0: d0a00a03 ldbu r2,-32728(gp)
80211c4: 10803fcc andi r2,r2,255
80211c8: e0ffff17 ldw r3,-4(fp)
80211cc: 18bfeb16 blt r3,r2,802117c <altera_eth_tse_init+0xa4>
}
}
/* If pointer could not found */
if(psys_info == 0) {
80211d0: e0bffd17 ldw r2,-12(fp)
80211d4: 1000021e bne r2,zero,80211e0 <altera_eth_tse_init+0x108>
return ENP_HARDWARE;
80211d8: 00bff744 movi r2,-35
80211dc: 00000b06 br 802120c <altera_eth_tse_init+0x134>
}
prep_tse_mac(p_dev->if_num, psys_info + p_driver_data->hw_channel_number);
80211e0: e0bffc17 ldw r2,-16(fp)
80211e4: 11000517 ldw r4,20(r2)
80211e8: e0bffe17 ldw r2,-8(fp)
80211ec: 10800203 ldbu r2,8(r2)
80211f0: 10803fcc andi r2,r2,255
80211f4: 10801324 muli r2,r2,76
80211f8: e0fffd17 ldw r3,-12(fp)
80211fc: 1885883a add r2,r3,r2
8021200: 100b883a mov r5,r2
8021204: 80212200 call 8021220 <prep_tse_mac>
return SUCCESS;
8021208: 0005883a mov r2,zero
}
802120c: e037883a mov sp,fp
8021210: dfc00117 ldw ra,4(sp)
8021214: df000017 ldw fp,0(sp)
8021218: dec00204 addi sp,sp,8
802121c: f800283a ret
08021220 <prep_tse_mac>:
* @Param index index of the NET structure associated with TSE instance
* @Param psys_info pointer to the TSE hardware info structure
* @Return next index of NET
*/
int prep_tse_mac(int index, alt_tse_system_info *psys_info)
{
8021220: defffb04 addi sp,sp,-20
8021224: dfc00415 stw ra,16(sp)
8021228: df000315 stw fp,12(sp)
802122c: df000304 addi fp,sp,12
8021230: e13ffe15 stw r4,-8(fp)
8021234: e17ffd15 stw r5,-12(fp)
NET ifp;
dprintf("prep_tse_mac %d\n", index);
8021238: e17ffe17 ldw r5,-8(fp)
802123c: 01020174 movhi r4,2053
8021240: 2125d004 addi r4,r4,-26816
8021244: 8002c780 call 8002c78 <printf>
{
tse[index].sem = 0; /*Tx IDLE*/
8021248: e0bffe17 ldw r2,-8(fp)
802124c: 10c02924 muli r3,r2,164
8021250: 008201b4 movhi r2,2054
8021254: 1885883a add r2,r3,r2
8021258: 1035cd15 stw zero,-10444(r2)
tse[index].tse = (void *)psys_info;
802125c: e0bffe17 ldw r2,-8(fp)
8021260: 11002924 muli r4,r2,164
8021264: e0fffd17 ldw r3,-12(fp)
8021268: 008201b4 movhi r2,2054
802126c: 2085883a add r2,r4,r2
8021270: 10f5ea15 stw r3,-10328(r2)
ifp = nets[index];
8021274: e0bffe17 ldw r2,-8(fp)
8021278: 100690ba slli r3,r2,2
802127c: 008201b4 movhi r2,2054
8021280: 1885883a add r2,r3,r2
8021284: 10b77017 ldw r2,-8768(r2)
8021288: e0bfff15 stw r2,-4(fp)
ifp->n_mib->ifAdminStatus = ALTERA_TSE_ADMIN_STATUS_DOWN; /* status = down */
802128c: e0bfff17 ldw r2,-4(fp)
8021290: 10802717 ldw r2,156(r2)
8021294: 00c00084 movi r3,2
8021298: 10c00615 stw r3,24(r2)
ifp->n_mib->ifOperStatus = ALTERA_TSE_ADMIN_STATUS_DOWN;
802129c: e0bfff17 ldw r2,-4(fp)
80212a0: 10802717 ldw r2,156(r2)
80212a4: 00c00084 movi r3,2
80212a8: 10c00715 stw r3,28(r2)
ifp->n_mib->ifLastChange = cticks * (100/TPS);
80212ac: e0bfff17 ldw r2,-4(fp)
80212b0: 10802717 ldw r2,156(r2)
80212b4: d0e07d17 ldw r3,-32268(gp)
80212b8: 10c00815 stw r3,32(r2)
ifp->n_mib->ifPhysAddress = (u_char*)tse[index].mac_addr;
80212bc: e0bfff17 ldw r2,-4(fp)
80212c0: 10c02717 ldw r3,156(r2)
80212c4: e0bffe17 ldw r2,-8(fp)
80212c8: 10802924 muli r2,r2,164
80212cc: 11000604 addi r4,r2,24
80212d0: 008201b4 movhi r2,2054
80212d4: 10b5c204 addi r2,r2,-10488
80212d8: 2085883a add r2,r4,r2
80212dc: 18800515 stw r2,20(r3)
ifp->n_mib->ifDescr = "Altera TSE MAC ethernet";
80212e0: e0bfff17 ldw r2,-4(fp)
80212e4: 10c02717 ldw r3,156(r2)
80212e8: 00820174 movhi r2,2053
80212ec: 10a5d504 addi r2,r2,-26796
80212f0: 18800115 stw r2,4(r3)
ifp->n_lnh = ETHHDR_SIZE; /* ethernet header size. was:14 */
80212f4: e0bfff17 ldw r2,-4(fp)
80212f8: 00c00404 movi r3,16
80212fc: 10c00815 stw r3,32(r2)
ifp->n_hal = ALTERA_TSE_HAL_ADDR_LEN; /* hardware address length */
8021300: e0bfff17 ldw r2,-4(fp)
8021304: 00c00184 movi r3,6
8021308: 10c01115 stw r3,68(r2)
ifp->n_mib->ifType = ETHERNET; /* device type */
802130c: e0bfff17 ldw r2,-4(fp)
8021310: 10802717 ldw r2,156(r2)
8021314: 00c00184 movi r3,6
8021318: 10c00215 stw r3,8(r2)
ifp->n_mtu = ALTERA_TSE_MAX_MTU_SIZE; /* max frame size */
802131c: e0bfff17 ldw r2,-4(fp)
8021320: 00c17a84 movi r3,1514
8021324: 10c00915 stw r3,36(r2)
/* install our hardware driver routines */
ifp->n_init = tse_mac_init;
8021328: e0ffff17 ldw r3,-4(fp)
802132c: 008200b4 movhi r2,2050
8021330: 10853104 addi r2,r2,5316
8021334: 18800215 stw r2,8(r3)
ifp->pkt_send = NULL;
8021338: e0bfff17 ldw r2,-4(fp)
802133c: 10000415 stw zero,16(r2)
ifp->raw_send = tse_mac_raw_send;
8021340: e0ffff17 ldw r3,-4(fp)
8021344: 008200b4 movhi r2,2050
8021348: 10881204 addi r2,r2,8264
802134c: 18800315 stw r2,12(r3)
ifp->n_close = tse_mac_close;
8021350: e0ffff17 ldw r3,-4(fp)
8021354: 008200b4 movhi r2,2050
8021358: 108a6104 addi r2,r2,10628
802135c: 18800515 stw r2,20(r3)
ifp->n_stats = (void(*)(void *, int))tse_mac_stats;
8021360: e0ffff17 ldw r3,-4(fp)
8021364: 008200b4 movhi r2,2050
8021368: 108a5104 addi r2,r2,10564
802136c: 18800715 stw r2,28(r3)
#ifdef IP_V6
ifp->n_flags |= (NF_NBPROT | NF_IPV6);
#else
ifp->n_flags |= NF_NBPROT;
8021370: e0bfff17 ldw r2,-4(fp)
8021374: 10802a17 ldw r2,168(r2)
8021378: 10c00214 ori r3,r2,8
802137c: e0bfff17 ldw r2,-4(fp)
8021380: 10c02a15 stw r3,168(r2)
#endif
nets[index]->n_mib->ifPhysAddress = (u_char*)tse[index].mac_addr; /* ptr to MAC address */
8021384: e0bffe17 ldw r2,-8(fp)
8021388: 100690ba slli r3,r2,2
802138c: 008201b4 movhi r2,2054
8021390: 1885883a add r2,r3,r2
8021394: 10b77017 ldw r2,-8768(r2)
8021398: 10c02717 ldw r3,156(r2)
802139c: e0bffe17 ldw r2,-8(fp)
80213a0: 10802924 muli r2,r2,164
80213a4: 11000604 addi r4,r2,24
80213a8: 008201b4 movhi r2,2054
80213ac: 10b5c204 addi r2,r2,-10488
80213b0: 2085883a add r2,r4,r2
80213b4: 18800515 stw r2,20(r3)
#ifdef ALT_INICHE
/* get the MAC address. */
get_mac_addr(ifp, (unsigned char *)tse[index].mac_addr);
80213b8: e0bffe17 ldw r2,-8(fp)
80213bc: 10802924 muli r2,r2,164
80213c0: 10c00604 addi r3,r2,24
80213c4: 008201b4 movhi r2,2054
80213c8: 10b5c204 addi r2,r2,-10488
80213cc: 1885883a add r2,r3,r2
80213d0: 100b883a mov r5,r2
80213d4: e13fff17 ldw r4,-4(fp)
80213d8: 80011e80 call 80011e8 <get_mac_addr>
#endif /* ALT_INICHE */
/* set cross-pointers between iface and tse structs */
tse[index].index = index;
80213dc: e0bffe17 ldw r2,-8(fp)
80213e0: 11002924 muli r4,r2,164
80213e4: e0fffe17 ldw r3,-8(fp)
80213e8: 008201b4 movhi r2,2054
80213ec: 2085883a add r2,r4,r2
80213f0: 10f5c215 stw r3,-10488(r2)
tse[index].netp = ifp;
80213f4: e0bffe17 ldw r2,-8(fp)
80213f8: 11002924 muli r4,r2,164
80213fc: e0ffff17 ldw r3,-4(fp)
8021400: 008201b4 movhi r2,2054
8021404: 2085883a add r2,r4,r2
8021408: 10f5ca15 stw r3,-10456(r2)
ifp->n_local = (void*)(&tse[index]);
802140c: e0bffe17 ldw r2,-8(fp)
8021410: 10c02924 muli r3,r2,164
8021414: 008201b4 movhi r2,2054
8021418: 10b5c204 addi r2,r2,-10488
802141c: 1887883a add r3,r3,r2
8021420: e0bfff17 ldw r2,-4(fp)
8021424: 10c02815 stw r3,160(r2)
index++;
8021428: e0bffe17 ldw r2,-8(fp)
802142c: 10800044 addi r2,r2,1
8021430: e0bffe15 stw r2,-8(fp)
}
return index;
8021434: e0bffe17 ldw r2,-8(fp)
}
8021438: e037883a mov sp,fp
802143c: dfc00117 ldw ra,4(sp)
8021440: df000017 ldw fp,0(sp)
8021444: dec00204 addi sp,sp,8
8021448: f800283a ret
0802144c <msgdma_reset>:
//temporary code for msgdma hw workaround
void msgdma_reset(alt_msgdma_dev * dev)
{
802144c: defffe04 addi sp,sp,-8
8021450: df000115 stw fp,4(sp)
8021454: df000104 addi fp,sp,4
8021458: e13fff15 stw r4,-4(fp)
/* start prefetcher reset sequence */
IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base,
802145c: e0bfff17 ldw r2,-4(fp)
8021460: 10800617 ldw r2,24(r2)
8021464: 00c00104 movi r3,4
8021468: 10c00035 stwio r3,0(r2)
ALT_MSGDMA_PREFETCHER_CTRL_RESET_SET_MASK);
/* wait until hw clears the bit */
while(ALT_MSGDMA_PREFETCHER_CTRL_RESET_GET(
802146c: 0001883a nop
8021470: e0bfff17 ldw r2,-4(fp)
8021474: 10800617 ldw r2,24(r2)
8021478: 10800037 ldwio r2,0(r2)
802147c: 1080010c andi r2,r2,4
8021480: 103ffb1e bne r2,zero,8021470 <msgdma_reset+0x24>
*/
/* Reset the registers and FIFOs of the dispatcher and master modules */
/* set the reset bit, no need to read the control register first since
this write is going to clear it out */
IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, ALTERA_MSGDMA_CSR_RESET_MASK);
8021484: e0bfff17 ldw r2,-4(fp)
8021488: 10800317 ldw r2,12(r2)
802148c: 10800104 addi r2,r2,4
8021490: 00c00084 movi r3,2
8021494: 10c00035 stwio r3,0(r2)
while(0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)
8021498: 0001883a nop
802149c: e0bfff17 ldw r2,-4(fp)
80214a0: 10800317 ldw r2,12(r2)
80214a4: 10800037 ldwio r2,0(r2)
& ALTERA_MSGDMA_CSR_RESET_STATE_MASK));
80214a8: 1080100c andi r2,r2,64
while(0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)
80214ac: 103ffb1e bne r2,zero,802149c <msgdma_reset+0x50>
}
80214b0: 0001883a nop
80214b4: e037883a mov sp,fp
80214b8: df000017 ldw fp,0(sp)
80214bc: dec00104 addi sp,sp,4
80214c0: f800283a ret
080214c4 <tse_mac_init>:
* @API TYPE: Internal
* @Param iface index of the NET structure associated with TSE instance
* @Return 0 if ok, else -1 if error
*/
int tse_mac_init(int iface)
{
80214c4: defff104 addi sp,sp,-60
80214c8: dfc00e15 stw ra,56(sp)
80214cc: df000d15 stw fp,52(sp)
80214d0: df000d04 addi fp,sp,52
80214d4: e13ff415 stw r4,-48(fp)
int dat;
int speed, duplex, result, x;
int status = SUCCESS;
80214d8: e03ffd15 stw zero,-12(fp)
alt_msgdma_dev *msgdma_tx_dev;
alt_msgdma_dev *msgdma_rx_dev;
alt_tse_system_info* tse_hw = (alt_tse_system_info *) tse[iface].tse;
80214dc: e0bff417 ldw r2,-48(fp)
80214e0: 10c02924 muli r3,r2,164
80214e4: 008201b4 movhi r2,2054
80214e8: 1885883a add r2,r3,r2
80214ec: 10b5ea17 ldw r2,-10328(r2)
80214f0: e0bffa15 stw r2,-24(fp)
dprintf("tse_mac_init %d\n", iface);
80214f4: e17ff417 ldw r5,-48(fp)
80214f8: 01020174 movhi r4,2053
80214fc: 2125db04 addi r4,r4,-26772
8021500: 8002c780 call 8002c78 <printf>
if (tse_hw->ext_desc_mem == 1) {
8021504: e0bffa17 ldw r2,-24(fp)
8021508: 10800883 ldbu r2,34(r2)
802150c: 10803fcc andi r2,r2,255
8021510: 10800058 cmpnei r2,r2,1
8021514: 10001b1e bne r2,zero,8021584 <tse_mac_init+0xc0>
tse[iface].rxdesc[0] = (alt_msgdma_prefetcher_standard_descriptor *) tse_hw->desc_mem_base;
8021518: e0bffa17 ldw r2,-24(fp)
802151c: 10800917 ldw r2,36(r2)
8021520: 1009883a mov r4,r2
8021524: e0bff417 ldw r2,-48(fp)
8021528: 10c02924 muli r3,r2,164
802152c: 008201b4 movhi r2,2054
8021530: 1885883a add r2,r3,r2
8021534: 1135d315 stw r4,-10420(r2)
tse[iface].rxdesc[1] = (alt_msgdma_prefetcher_standard_descriptor *)
(tse_hw->desc_mem_base + ((1+ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE)*(sizeof(alt_msgdma_prefetcher_standard_descriptor))));
8021538: e0bffa17 ldw r2,-24(fp)
802153c: 10800917 ldw r2,36(r2)
8021540: 10805004 addi r2,r2,320
tse[iface].rxdesc[1] = (alt_msgdma_prefetcher_standard_descriptor *)
8021544: 1009883a mov r4,r2
8021548: e0bff417 ldw r2,-48(fp)
802154c: 10c02924 muli r3,r2,164
8021550: 008201b4 movhi r2,2054
8021554: 1885883a add r2,r3,r2
8021558: 1135d415 stw r4,-10416(r2)
tse[iface].txdesc = (alt_msgdma_prefetcher_standard_descriptor *)
(tse_hw->desc_mem_base + ((1+ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE+1+ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE)*(sizeof(alt_msgdma_prefetcher_standard_descriptor))));
802155c: e0bffa17 ldw r2,-24(fp)
8021560: 10800917 ldw r2,36(r2)
8021564: 1080a004 addi r2,r2,640
tse[iface].txdesc = (alt_msgdma_prefetcher_standard_descriptor *)
8021568: 1009883a mov r4,r2
802156c: e0bff417 ldw r2,-48(fp)
8021570: 10c02924 muli r3,r2,164
8021574: 008201b4 movhi r2,2054
8021578: 1885883a add r2,r3,r2
802157c: 1135d015 stw r4,-10432(r2)
8021580: 00005106 br 80216c8 <tse_mac_init+0x204>
}
else {
tse[iface].rxdesc[0] = (alt_msgdma_prefetcher_standard_descriptor *)alt_uncached_malloc((1+ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE)*(sizeof(alt_msgdma_prefetcher_standard_descriptor)));
8021584: 01005004 movi r4,320
8021588: 80380a40 call 80380a4 <alt_uncached_malloc>
802158c: 1009883a mov r4,r2
8021590: e0bff417 ldw r2,-48(fp)
8021594: 10c02924 muli r3,r2,164
8021598: 008201b4 movhi r2,2054
802159c: 1885883a add r2,r3,r2
80215a0: 1135d315 stw r4,-10420(r2)
while ((((alt_u32)tse[iface].rxdesc[0]) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0)
80215a4: 00000b06 br 80215d4 <tse_mac_init+0x110>
tse[iface].rxdesc[0]++; //boundary
80215a8: e0bff417 ldw r2,-48(fp)
80215ac: 10c02924 muli r3,r2,164
80215b0: 008201b4 movhi r2,2054
80215b4: 1885883a add r2,r3,r2
80215b8: 10b5d317 ldw r2,-10420(r2)
80215bc: 10c00804 addi r3,r2,32
80215c0: e0bff417 ldw r2,-48(fp)
80215c4: 11002924 muli r4,r2,164
80215c8: 008201b4 movhi r2,2054
80215cc: 2085883a add r2,r4,r2
80215d0: 10f5d315 stw r3,-10420(r2)
while ((((alt_u32)tse[iface].rxdesc[0]) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0)
80215d4: e0bff417 ldw r2,-48(fp)
80215d8: 10c02924 muli r3,r2,164
80215dc: 008201b4 movhi r2,2054
80215e0: 1885883a add r2,r3,r2
80215e4: 10b5d317 ldw r2,-10420(r2)
80215e8: 108007cc andi r2,r2,31
80215ec: 103fee1e bne r2,zero,80215a8 <tse_mac_init+0xe4>
tse[iface].rxdesc[1] = (alt_msgdma_prefetcher_standard_descriptor *)alt_uncached_malloc((1+ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE)*(sizeof(alt_msgdma_prefetcher_standard_descriptor)));
80215f0: 01005004 movi r4,320
80215f4: 80380a40 call 80380a4 <alt_uncached_malloc>
80215f8: 1009883a mov r4,r2
80215fc: e0bff417 ldw r2,-48(fp)
8021600: 10c02924 muli r3,r2,164
8021604: 008201b4 movhi r2,2054
8021608: 1885883a add r2,r3,r2
802160c: 1135d415 stw r4,-10416(r2)
while ((((alt_u32)tse[iface].rxdesc[1]) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0)
8021610: 00000b06 br 8021640 <tse_mac_init+0x17c>
tse[iface].rxdesc[1]++; //boundary
8021614: e0bff417 ldw r2,-48(fp)
8021618: 10c02924 muli r3,r2,164
802161c: 008201b4 movhi r2,2054
8021620: 1885883a add r2,r3,r2
8021624: 10b5d417 ldw r2,-10416(r2)
8021628: 10c00804 addi r3,r2,32
802162c: e0bff417 ldw r2,-48(fp)
8021630: 11002924 muli r4,r2,164
8021634: 008201b4 movhi r2,2054
8021638: 2085883a add r2,r4,r2
802163c: 10f5d415 stw r3,-10416(r2)
while ((((alt_u32)tse[iface].rxdesc[1]) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0)
8021640: e0bff417 ldw r2,-48(fp)
8021644: 10c02924 muli r3,r2,164
8021648: 008201b4 movhi r2,2054
802164c: 1885883a add r2,r3,r2
8021650: 10b5d417 ldw r2,-10416(r2)
8021654: 108007cc andi r2,r2,31
8021658: 103fee1e bne r2,zero,8021614 <tse_mac_init+0x150>
tse[iface].txdesc = (alt_msgdma_prefetcher_standard_descriptor *)alt_uncached_malloc((1+ALTERA_TSE_MSGDMA_TX_DESC_CHAIN_SIZE)*(sizeof(alt_msgdma_prefetcher_standard_descriptor)));
802165c: 01001804 movi r4,96
8021660: 80380a40 call 80380a4 <alt_uncached_malloc>
8021664: 1009883a mov r4,r2
8021668: e0bff417 ldw r2,-48(fp)
802166c: 10c02924 muli r3,r2,164
8021670: 008201b4 movhi r2,2054
8021674: 1885883a add r2,r3,r2
8021678: 1135d015 stw r4,-10432(r2)
while ((((alt_u32)tse[iface].txdesc) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0)
802167c: 00000b06 br 80216ac <tse_mac_init+0x1e8>
tse[iface].txdesc++; //boundary
8021680: e0bff417 ldw r2,-48(fp)
8021684: 10c02924 muli r3,r2,164
8021688: 008201b4 movhi r2,2054
802168c: 1885883a add r2,r3,r2
8021690: 10b5d017 ldw r2,-10432(r2)
8021694: 10c00804 addi r3,r2,32
8021698: e0bff417 ldw r2,-48(fp)
802169c: 11002924 muli r4,r2,164
80216a0: 008201b4 movhi r2,2054
80216a4: 2085883a add r2,r4,r2
80216a8: 10f5d015 stw r3,-10432(r2)
while ((((alt_u32)tse[iface].txdesc) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0)
80216ac: e0bff417 ldw r2,-48(fp)
80216b0: 10c02924 muli r3,r2,164
80216b4: 008201b4 movhi r2,2054
80216b8: 1885883a add r2,r3,r2
80216bc: 10b5d017 ldw r2,-10432(r2)
80216c0: 108007cc andi r2,r2,31
80216c4: 103fee1e bne r2,zero,8021680 <tse_mac_init+0x1bc>
}
/* Get the Rx and Tx MSGDMA addresses */
msgdma_tx_dev = alt_msgdma_open(tse_hw->tse_msgdma_tx);
80216c8: e0bffa17 ldw r2,-24(fp)
80216cc: 10800617 ldw r2,24(r2)
80216d0: 1009883a mov r4,r2
80216d4: 801fe940 call 801fe94 <alt_msgdma_open>
80216d8: e0bff915 stw r2,-28(fp)
if(!msgdma_tx_dev) {
80216dc: e0bff917 ldw r2,-28(fp)
80216e0: 1000051e bne r2,zero,80216f8 <tse_mac_init+0x234>
dprintf("[altera_eth_tse_init] Error opening TX MSGDMA\n");
80216e4: 01020174 movhi r4,2053
80216e8: 2125e004 addi r4,r4,-26752
80216ec: 8002d9c0 call 8002d9c <puts>
return ENP_RESOURCE;
80216f0: 00bffa84 movi r2,-22
80216f4: 00020706 br 8021f14 <tse_mac_init+0xa50>
}
msgdma_rx_dev = alt_msgdma_open(tse_hw->tse_msgdma_rx);
80216f8: e0bffa17 ldw r2,-24(fp)
80216fc: 10800717 ldw r2,28(r2)
8021700: 1009883a mov r4,r2
8021704: 801fe940 call 801fe94 <alt_msgdma_open>
8021708: e0bff815 stw r2,-32(fp)
if(!msgdma_rx_dev) {
802170c: e0bff817 ldw r2,-32(fp)
8021710: 1000051e bne r2,zero,8021728 <tse_mac_init+0x264>
dprintf("[altera_eth_tse_init] Error opening RX MSGDMA\n");
8021714: 01020174 movhi r4,2053
8021718: 2125ec04 addi r4,r4,-26704
802171c: 8002d9c0 call 8002d9c <puts>
return ENP_RESOURCE;
8021720: 00bffa84 movi r2,-22
8021724: 0001fb06 br 8021f14 <tse_mac_init+0xa50>
}
/* Initialize mtip_mac_trans_info structure with values from <system.h>*/
tse_mac_initTransInfo2(&tse[iface].mi, (int)tse_hw->tse_mac_base,
8021728: e0bff417 ldw r2,-48(fp)
802172c: 10802924 muli r2,r2,164
8021730: 10c00104 addi r3,r2,4
8021734: 008201b4 movhi r2,2054
8021738: 10b5c204 addi r2,r2,-10488
802173c: 1887883a add r3,r3,r2
8021740: e0bffa17 ldw r2,-24(fp)
8021744: 10800017 ldw r2,0(r2)
8021748: e13ff917 ldw r4,-28(fp)
802174c: e17ff817 ldw r5,-32(fp)
8021750: d8000015 stw zero,0(sp)
8021754: 280f883a mov r7,r5
8021758: 200d883a mov r6,r4
802175c: 100b883a mov r5,r2
8021760: 1809883a mov r4,r3
8021764: 8017b500 call 8017b50 <tse_mac_initTransInfo2>
(unsigned int)msgdma_tx_dev,
(unsigned int)msgdma_rx_dev,
0);
/* reset the PHY if necessary */
result = getPHYSpeed(tse[iface].mi.base);
8021768: e0bff417 ldw r2,-48(fp)
802176c: 10c02924 muli r3,r2,164
8021770: 008201b4 movhi r2,2054
8021774: 1885883a add r2,r3,r2
8021778: 10b5c317 ldw r2,-10484(r2)
802177c: 1009883a mov r4,r2
8021780: 8018e540 call 8018e54 <getPHYSpeed>
8021784: e0bff715 stw r2,-36(fp)
speed = (result >> 1) & 0x07;
8021788: e0bff717 ldw r2,-36(fp)
802178c: 1005d07a srai r2,r2,1
8021790: 108001cc andi r2,r2,7
8021794: e0bff615 stw r2,-40(fp)
duplex = result & 0x01;
8021798: e0bff717 ldw r2,-36(fp)
802179c: 1080004c andi r2,r2,1
80217a0: e0bff515 stw r2,-44(fp)
/* reset the mac */
IOWR_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base,
80217a4: e0bff417 ldw r2,-48(fp)
80217a8: 10c02924 muli r3,r2,164
80217ac: 008201b4 movhi r2,2054
80217b0: 1885883a add r2,r3,r2
80217b4: 10b5c317 ldw r2,-10484(r2)
80217b8: 10800204 addi r2,r2,8
80217bc: 00c800c4 movi r3,8195
80217c0: 10c00035 stwio r3,0(r2)
mmac_cc_SW_RESET_mask |
mmac_cc_TX_ENA_mask |
mmac_cc_RX_ENA_mask);
x=0;
80217c4: e03ffe15 stw zero,-8(fp)
while(IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base) &
80217c8: 00000506 br 80217e0 <tse_mac_init+0x31c>
ALTERA_TSEMAC_CMD_SW_RESET_MSK) {
if( x++ > 10000 ) {
80217cc: e0bffe17 ldw r2,-8(fp)
80217d0: 10c00044 addi r3,r2,1
80217d4: e0fffe15 stw r3,-8(fp)
80217d8: 1089c450 cmplti r2,r2,10001
80217dc: 10000a26 beq r2,zero,8021808 <tse_mac_init+0x344>
while(IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base) &
80217e0: e0bff417 ldw r2,-48(fp)
80217e4: 10c02924 muli r3,r2,164
80217e8: 008201b4 movhi r2,2054
80217ec: 1885883a add r2,r3,r2
80217f0: 10b5c317 ldw r2,-10484(r2)
80217f4: 10800204 addi r2,r2,8
80217f8: 10800037 ldwio r2,0(r2)
80217fc: 1088000c andi r2,r2,8192
8021800: 103ff21e bne r2,zero,80217cc <tse_mac_init+0x308>
8021804: 00000106 br 802180c <tse_mac_init+0x348>
break;
8021808: 0001883a nop
}
}
if(x >= 10000) {
802180c: e0bffe17 ldw r2,-8(fp)
8021810: 1089c410 cmplti r2,r2,10000
8021814: 1000031e bne r2,zero,8021824 <tse_mac_init+0x360>
dprintf("TSEMAC SW reset bit never cleared!\n");
8021818: 01020174 movhi r4,2053
802181c: 2125f804 addi r4,r4,-26656
8021820: 8002d9c0 call 8002d9c <puts>
}
dat = IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base);
8021824: e0bff417 ldw r2,-48(fp)
8021828: 10c02924 muli r3,r2,164
802182c: 008201b4 movhi r2,2054
8021830: 1885883a add r2,r3,r2
8021834: 10b5c317 ldw r2,-10484(r2)
8021838: 10800204 addi r2,r2,8
802183c: 10800037 ldwio r2,0(r2)
8021840: e0bfff15 stw r2,-4(fp)
if( (dat & 0x03) != 0 ) {
8021844: e0bfff17 ldw r2,-4(fp)
8021848: 108000cc andi r2,r2,3
802184c: 10000526 beq r2,zero,8021864 <tse_mac_init+0x3a0>
dprintf("WARN: RX/TX not disabled after reset... missing PHY clock? CMD_CONFIG=0x%08x\n", dat);
8021850: e17fff17 ldw r5,-4(fp)
8021854: 01020174 movhi r4,2053
8021858: 21260104 addi r4,r4,-26620
802185c: 8002c780 call 8002c78 <printf>
8021860: 00000506 br 8021878 <tse_mac_init+0x3b4>
}
else {
dprintf("OK, x=%d, CMD_CONFIG=0x%08x\n", x, dat);
8021864: e1bfff17 ldw r6,-4(fp)
8021868: e17ffe17 ldw r5,-8(fp)
802186c: 01020174 movhi r4,2053
8021870: 21261504 addi r4,r4,-26540
8021874: 8002c780 call 8002c78 <printf>
/* Hack code to determine the Channel number <- Someone please fix this ugly code in the future */
extern alt_u8 mac_group_count;
extern alt_tse_mac_group *pmac_groups[TSE_MAX_MAC_IN_SYSTEM];
if(tse_hw->use_shared_fifo == 1) {
8021878: e0bffa17 ldw r2,-24(fp)
802187c: 10800a03 ldbu r2,40(r2)
8021880: 10803fcc andi r2,r2,255
8021884: 10800058 cmpnei r2,r2,1
8021888: 10002c1e bne r2,zero,802193c <tse_mac_init+0x478>
int channel_loop = 0;
802188c: e03ffc15 stw zero,-16(fp)
int mac_loop = 0;
8021890: e03ffb15 stw zero,-20(fp)
for (channel_loop = 0; channel_loop < mac_group_count; channel_loop ++) {
8021894: e03ffc15 stw zero,-16(fp)
8021898: 00002406 br 802192c <tse_mac_init+0x468>
for (mac_loop = 0; mac_loop < pmac_groups[channel_loop]->channel; mac_loop ++) {
802189c: e03ffb15 stw zero,-20(fp)
80218a0: 00001606 br 80218fc <tse_mac_init+0x438>
if (pmac_groups[channel_loop]->pmac_info[mac_loop]->psys_info == tse_hw) {
80218a4: e0bffc17 ldw r2,-16(fp)
80218a8: 100690ba slli r3,r2,2
80218ac: 008201b4 movhi r2,2054
80218b0: 1885883a add r2,r3,r2
80218b4: 10f5aa17 ldw r3,-10584(r2)
80218b8: e0bffb17 ldw r2,-20(fp)
80218bc: 10800044 addi r2,r2,1
80218c0: 100490ba slli r2,r2,2
80218c4: 1885883a add r2,r3,r2
80218c8: 10800017 ldw r2,0(r2)
80218cc: 10800217 ldw r2,8(r2)
80218d0: e0fffa17 ldw r3,-24(fp)
80218d4: 1880061e bne r3,r2,80218f0 <tse_mac_init+0x42c>
tse[iface].channel = mac_loop;
80218d8: e0bff417 ldw r2,-48(fp)
80218dc: 11002924 muli r4,r2,164
80218e0: e0fffb17 ldw r3,-20(fp)
80218e4: 008201b4 movhi r2,2054
80218e8: 2085883a add r2,r4,r2
80218ec: 10f5ce15 stw r3,-10440(r2)
for (mac_loop = 0; mac_loop < pmac_groups[channel_loop]->channel; mac_loop ++) {
80218f0: e0bffb17 ldw r2,-20(fp)
80218f4: 10800044 addi r2,r2,1
80218f8: e0bffb15 stw r2,-20(fp)
80218fc: e0bffc17 ldw r2,-16(fp)
8021900: 100690ba slli r3,r2,2
8021904: 008201b4 movhi r2,2054
8021908: 1885883a add r2,r3,r2
802190c: 10b5aa17 ldw r2,-10584(r2)
8021910: 10800003 ldbu r2,0(r2)
8021914: 10803fcc andi r2,r2,255
8021918: e0fffb17 ldw r3,-20(fp)
802191c: 18bfe116 blt r3,r2,80218a4 <tse_mac_init+0x3e0>
for (channel_loop = 0; channel_loop < mac_group_count; channel_loop ++) {
8021920: e0bffc17 ldw r2,-16(fp)
8021924: 10800044 addi r2,r2,1
8021928: e0bffc15 stw r2,-16(fp)
802192c: d0a05b43 ldbu r2,-32403(gp)
8021930: 10803fcc andi r2,r2,255
8021934: e0fffc17 ldw r3,-16(fp)
8021938: 18bfd816 blt r3,r2,802189c <tse_mac_init+0x3d8>
}
}
}
/* End of Hack code */
if(tse_hw->use_shared_fifo == 1) {
802193c: e0bffa17 ldw r2,-24(fp)
8021940: 10800a03 ldbu r2,40(r2)
8021944: 10803fcc andi r2,r2,255
8021948: 10800058 cmpnei r2,r2,1
802194c: 10000f1e bne r2,zero,802198c <tse_mac_init+0x4c8>
IOWR_ALTERA_MULTI_CHAN_FIFO_SEC_FULL_THRESHOLD(tse_hw->tse_shared_fifo_rx_ctrl_base,tse_hw->tse_shared_fifo_rx_depth);
8021950: e0bffa17 ldw r2,-24(fp)
8021954: 10800e17 ldw r2,56(r2)
8021958: 1007883a mov r3,r2
802195c: e0bffa17 ldw r2,-24(fp)
8021960: 10801017 ldw r2,64(r2)
8021964: 18800035 stwio r2,0(r3)
IOWR_ALTERA_MULTI_CHAN_FIFO_ALMOST_FULL_THRESHOLD(tse_hw->tse_shared_fifo_rx_ctrl_base,((tse_hw->tse_shared_fifo_rx_depth) - 140));
8021968: e0bffa17 ldw r2,-24(fp)
802196c: 10800e17 ldw r2,56(r2)
8021970: 10800204 addi r2,r2,8
8021974: 1007883a mov r3,r2
8021978: e0bffa17 ldw r2,-24(fp)
802197c: 10801017 ldw r2,64(r2)
8021980: 10bfdd04 addi r2,r2,-140
8021984: 18800035 stwio r2,0(r3)
8021988: 00004c06 br 8021abc <tse_mac_init+0x5f8>
}
else {
/* Initialize MAC registers */
IOWR_ALTERA_TSEMAC_FRM_LENGTH(tse[iface].mi.base, ALTERA_TSE_MAC_MAX_FRAME_LENGTH);
802198c: e0bff417 ldw r2,-48(fp)
8021990: 10c02924 muli r3,r2,164
8021994: 008201b4 movhi r2,2054
8021998: 1885883a add r2,r3,r2
802199c: 10b5c317 ldw r2,-10484(r2)
80219a0: 10800504 addi r2,r2,20
80219a4: 00c17b84 movi r3,1518
80219a8: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(tse[iface].mi.base, 8);
80219ac: e0bff417 ldw r2,-48(fp)
80219b0: 10c02924 muli r3,r2,164
80219b4: 008201b4 movhi r2,2054
80219b8: 1885883a add r2,r3,r2
80219bc: 10b5c317 ldw r2,-10484(r2)
80219c0: 10800b04 addi r2,r2,44
80219c4: 00c00204 movi r3,8
80219c8: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(tse[iface].mi.base, 8);
80219cc: e0bff417 ldw r2,-48(fp)
80219d0: 10c02924 muli r3,r2,164
80219d4: 008201b4 movhi r2,2054
80219d8: 1885883a add r2,r3,r2
80219dc: 10b5c317 ldw r2,-10484(r2)
80219e0: 10800c04 addi r2,r2,48
80219e4: 00c00204 movi r3,8
80219e8: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(tse[iface].mi.base, 8);
80219ec: e0bff417 ldw r2,-48(fp)
80219f0: 10c02924 muli r3,r2,164
80219f4: 008201b4 movhi r2,2054
80219f8: 1885883a add r2,r3,r2
80219fc: 10b5c317 ldw r2,-10484(r2)
8021a00: 10800d04 addi r2,r2,52
8021a04: 00c00204 movi r3,8
8021a08: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(tse[iface].mi.base, 3);
8021a0c: e0bff417 ldw r2,-48(fp)
8021a10: 10c02924 muli r3,r2,164
8021a14: 008201b4 movhi r2,2054
8021a18: 1885883a add r2,r3,r2
8021a1c: 10b5c317 ldw r2,-10484(r2)
8021a20: 10800e04 addi r2,r2,56
8021a24: 00c000c4 movi r3,3
8021a28: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(tse[iface].mi.base, tse_hw->tse_tx_depth - 16); //1024/4;
8021a2c: e0bff417 ldw r2,-48(fp)
8021a30: 10c02924 muli r3,r2,164
8021a34: 008201b4 movhi r2,2054
8021a38: 1885883a add r2,r3,r2
8021a3c: 10b5c317 ldw r2,-10484(r2)
8021a40: 10800904 addi r2,r2,36
8021a44: e0fffa17 ldw r3,-24(fp)
8021a48: 18c00117 ldw r3,4(r3)
8021a4c: 18fffc04 addi r3,r3,-16
8021a50: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(tse[iface].mi.base, 0); //32/4; // start transmit when there are 48 bytes
8021a54: e0bff417 ldw r2,-48(fp)
8021a58: 10c02924 muli r3,r2,164
8021a5c: 008201b4 movhi r2,2054
8021a60: 1885883a add r2,r3,r2
8021a64: 10b5c317 ldw r2,-10484(r2)
8021a68: 10800a04 addi r2,r2,40
8021a6c: 0007883a mov r3,zero
8021a70: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(tse[iface].mi.base, tse_hw->tse_rx_depth - 16); //4000/4);
8021a74: e0bff417 ldw r2,-48(fp)
8021a78: 10c02924 muli r3,r2,164
8021a7c: 008201b4 movhi r2,2054
8021a80: 1885883a add r2,r3,r2
8021a84: 10b5c317 ldw r2,-10484(r2)
8021a88: 10800704 addi r2,r2,28
8021a8c: e0fffa17 ldw r3,-24(fp)
8021a90: 18c00217 ldw r3,8(r3)
8021a94: 18fffc04 addi r3,r3,-16
8021a98: 10c00035 stwio r3,0(r2)
IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(tse[iface].mi.base, 0);
8021a9c: e0bff417 ldw r2,-48(fp)
8021aa0: 10c02924 muli r3,r2,164
8021aa4: 008201b4 movhi r2,2054
8021aa8: 1885883a add r2,r3,r2
8021aac: 10b5c317 ldw r2,-10484(r2)
8021ab0: 10800804 addi r2,r2,32
8021ab4: 0007883a mov r3,zero
8021ab8: 10c00035 stwio r3,0(r2)
tse[iface].rxShift16OK = 0;
}
} /* if(ETHHDR_BIAS == 0) */
if(ETHHDR_BIAS == 2) {
IOWR_ALTERA_TSEMAC_TX_CMD_STAT(tse[iface].mi.base,ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_MSK);
8021abc: e0bff417 ldw r2,-48(fp)
8021ac0: 10c02924 muli r3,r2,164
8021ac4: 008201b4 movhi r2,2054
8021ac8: 1885883a add r2,r3,r2
8021acc: 10b5c317 ldw r2,-10484(r2)
8021ad0: 10803a04 addi r2,r2,232
8021ad4: 00c00134 movhi r3,4
8021ad8: 10c00035 stwio r3,0(r2)
/*
* check if the MAC supports the 16-bit shift option allowing us
* to send BIASed frames without copying. Used by the send function later.
*/
if(IORD_ALTERA_TSEMAC_TX_CMD_STAT(tse[iface].mi.base) &
8021adc: e0bff417 ldw r2,-48(fp)
8021ae0: 10c02924 muli r3,r2,164
8021ae4: 008201b4 movhi r2,2054
8021ae8: 1885883a add r2,r3,r2
8021aec: 10b5c317 ldw r2,-10484(r2)
8021af0: 10803a04 addi r2,r2,232
8021af4: 10800037 ldwio r2,0(r2)
8021af8: 1080012c andhi r2,r2,4
8021afc: 10001826 beq r2,zero,8021b60 <tse_mac_init+0x69c>
ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_MSK) {
tse[iface].txShift16OK = 1;
8021b00: e0bff417 ldw r2,-48(fp)
8021b04: 11002924 muli r4,r2,164
8021b08: 00c00044 movi r3,1
8021b0c: 008201b4 movhi r2,2054
8021b10: 2085883a add r2,r4,r2
8021b14: 10f5cb15 stw r3,-10452(r2)
dprintf("[tse_mac_init] Error: Incompatible %d value with TX_CMD_STAT register return TxShift16 value. \n",ETHHDR_BIAS);
return ENP_LOGIC;
}
/* Enable RX shift 16 for alignment of all received frames on 16-bit start address */
IOWR_ALTERA_TSEMAC_RX_CMD_STAT(tse[iface].mi.base,ALTERA_TSEMAC_RX_CMD_STAT_RXSHIFT16_MSK);
8021b18: e0bff417 ldw r2,-48(fp)
8021b1c: 10c02924 muli r3,r2,164
8021b20: 008201b4 movhi r2,2054
8021b24: 1885883a add r2,r3,r2
8021b28: 10b5c317 ldw r2,-10484(r2)
8021b2c: 10803b04 addi r2,r2,236
8021b30: 00c08034 movhi r3,512
8021b34: 10c00035 stwio r3,0(r2)
/* check if the MAC supports the 16-bit shift option at the RX CMD STATUS Register */
if(IORD_ALTERA_TSEMAC_RX_CMD_STAT(tse[iface].mi.base) & ALTERA_TSEMAC_RX_CMD_STAT_RXSHIFT16_MSK)
8021b38: e0bff417 ldw r2,-48(fp)
8021b3c: 10c02924 muli r3,r2,164
8021b40: 008201b4 movhi r2,2054
8021b44: 1885883a add r2,r3,r2
8021b48: 10b5c317 ldw r2,-10484(r2)
8021b4c: 10803b04 addi r2,r2,236
8021b50: 10800037 ldwio r2,0(r2)
8021b54: 1080802c andhi r2,r2,512
8021b58: 10001926 beq r2,zero,8021bc0 <tse_mac_init+0x6fc>
8021b5c: 00000b06 br 8021b8c <tse_mac_init+0x6c8>
tse[iface].txShift16OK = 0;
8021b60: e0bff417 ldw r2,-48(fp)
8021b64: 10c02924 muli r3,r2,164
8021b68: 008201b4 movhi r2,2054
8021b6c: 1885883a add r2,r3,r2
8021b70: 1035cb15 stw zero,-10452(r2)
dprintf("[tse_mac_init] Error: Incompatible %d value with TX_CMD_STAT register return TxShift16 value. \n",ETHHDR_BIAS);
8021b74: 01400084 movi r5,2
8021b78: 01020174 movhi r4,2053
8021b7c: 21261d04 addi r4,r4,-26508
8021b80: 8002c780 call 8002c78 <printf>
return ENP_LOGIC;
8021b84: 00bffd44 movi r2,-11
8021b88: 0000e206 br 8021f14 <tse_mac_init+0xa50>
{
tse[iface].rxShift16OK = 1;
8021b8c: e0bff417 ldw r2,-48(fp)
8021b90: 11002924 muli r4,r2,164
8021b94: 00c00044 movi r3,1
8021b98: 008201b4 movhi r2,2054
8021b9c: 2085883a add r2,r4,r2
8021ba0: 10f5cc15 stw r3,-10448(r2)
return ENP_LOGIC;
}
} /* if(ETHHDR_BIAS == 2) */
/* enable MAC */
dat = ALTERA_TSEMAC_CMD_TX_ENA_MSK |
8021ba4: 00810034 movhi r2,1024
8021ba8: 108080c4 addi r2,r2,515
8021bac: e0bfff15 stw r2,-4(fp)
ALTERA_TSEMAC_CMD_TX_ADDR_INS_MSK |
ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK; /* automatically discard frames with CRC errors */
/* 1000 Mbps */
if(speed == 0x01) {
8021bb0: e0bff617 ldw r2,-40(fp)
8021bb4: 10800058 cmpnei r2,r2,1
8021bb8: 1000151e bne r2,zero,8021c10 <tse_mac_init+0x74c>
8021bbc: 00000b06 br 8021bec <tse_mac_init+0x728>
tse[iface].rxShift16OK = 0;
8021bc0: e0bff417 ldw r2,-48(fp)
8021bc4: 10c02924 muli r3,r2,164
8021bc8: 008201b4 movhi r2,2054
8021bcc: 1885883a add r2,r3,r2
8021bd0: 1035cc15 stw zero,-10448(r2)
dprintf("[tse_mac_init] Error: Incompatible %d value with RX_CMD_STAT register return RxShift16 value. \n",ETHHDR_BIAS);
8021bd4: 01400084 movi r5,2
8021bd8: 01020174 movhi r4,2053
8021bdc: 21263504 addi r4,r4,-26412
8021be0: 8002c780 call 8002c78 <printf>
return ENP_LOGIC;
8021be4: 00bffd44 movi r2,-11
8021be8: 0000ca06 br 8021f14 <tse_mac_init+0xa50>
dat |= ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8021bec: e0bfff17 ldw r2,-4(fp)
8021bf0: 10800214 ori r2,r2,8
8021bf4: e0bfff15 stw r2,-4(fp)
dat &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK;
8021bf8: e0ffff17 ldw r3,-4(fp)
8021bfc: 00bf8034 movhi r2,65024
8021c00: 10bfffc4 addi r2,r2,-1
8021c04: 1884703a and r2,r3,r2
8021c08: e0bfff15 stw r2,-4(fp)
8021c0c: 00002106 br 8021c94 <tse_mac_init+0x7d0>
}
/* 100 Mbps */
else if(speed == 0x02) {
8021c10: e0bff617 ldw r2,-40(fp)
8021c14: 10800098 cmpnei r2,r2,2
8021c18: 10000a1e bne r2,zero,8021c44 <tse_mac_init+0x780>
dat &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8021c1c: e0ffff17 ldw r3,-4(fp)
8021c20: 00bffdc4 movi r2,-9
8021c24: 1884703a and r2,r3,r2
8021c28: e0bfff15 stw r2,-4(fp)
dat &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK;
8021c2c: e0ffff17 ldw r3,-4(fp)
8021c30: 00bf8034 movhi r2,65024
8021c34: 10bfffc4 addi r2,r2,-1
8021c38: 1884703a and r2,r3,r2
8021c3c: e0bfff15 stw r2,-4(fp)
8021c40: 00001406 br 8021c94 <tse_mac_init+0x7d0>
}
/* 10 Mbps */
else if(speed == 0x04) {
8021c44: e0bff617 ldw r2,-40(fp)
8021c48: 10800118 cmpnei r2,r2,4
8021c4c: 1000081e bne r2,zero,8021c70 <tse_mac_init+0x7ac>
dat &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8021c50: e0ffff17 ldw r3,-4(fp)
8021c54: 00bffdc4 movi r2,-9
8021c58: 1884703a and r2,r3,r2
8021c5c: e0bfff15 stw r2,-4(fp)
dat |= ALTERA_TSEMAC_CMD_ENA_10_MSK;
8021c60: e0bfff17 ldw r2,-4(fp)
8021c64: 10808034 orhi r2,r2,512
8021c68: e0bfff15 stw r2,-4(fp)
8021c6c: 00000906 br 8021c94 <tse_mac_init+0x7d0>
}
/* default to 100 Mbps if returned invalid speed */
else {
dat &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK;
8021c70: e0ffff17 ldw r3,-4(fp)
8021c74: 00bffdc4 movi r2,-9
8021c78: 1884703a and r2,r3,r2
8021c7c: e0bfff15 stw r2,-4(fp)
dat &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK;
8021c80: e0ffff17 ldw r3,-4(fp)
8021c84: 00bf8034 movhi r2,65024
8021c88: 10bfffc4 addi r2,r2,-1
8021c8c: 1884703a and r2,r3,r2
8021c90: e0bfff15 stw r2,-4(fp)
}
/* Half Duplex */
if(duplex == TSE_PHY_DUPLEX_HALF) {
8021c94: e0bff517 ldw r2,-44(fp)
8021c98: 1000041e bne r2,zero,8021cac <tse_mac_init+0x7e8>
dat |= ALTERA_TSEMAC_CMD_HD_ENA_MSK;
8021c9c: e0bfff17 ldw r2,-4(fp)
8021ca0: 10810014 ori r2,r2,1024
8021ca4: e0bfff15 stw r2,-4(fp)
8021ca8: 00000406 br 8021cbc <tse_mac_init+0x7f8>
}
/* Full Duplex */
else {
dat &= ~ALTERA_TSEMAC_CMD_HD_ENA_MSK;
8021cac: e0ffff17 ldw r3,-4(fp)
8021cb0: 00beffc4 movi r2,-1025
8021cb4: 1884703a and r2,r3,r2
8021cb8: e0bfff15 stw r2,-4(fp)
}
IOWR_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base, dat);
8021cbc: e0bff417 ldw r2,-48(fp)
8021cc0: 10c02924 muli r3,r2,164
8021cc4: 008201b4 movhi r2,2054
8021cc8: 1885883a add r2,r3,r2
8021ccc: 10b5c317 ldw r2,-10484(r2)
8021cd0: 10800204 addi r2,r2,8
8021cd4: e0ffff17 ldw r3,-4(fp)
8021cd8: 10c00035 stwio r3,0(r2)
dprintf("\nMAC post-initialization: CMD_CONFIG=0x%08x\n",
IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base));
8021cdc: e0bff417 ldw r2,-48(fp)
8021ce0: 10c02924 muli r3,r2,164
8021ce4: 008201b4 movhi r2,2054
8021ce8: 1885883a add r2,r3,r2
8021cec: 10b5c317 ldw r2,-10484(r2)
dprintf("\nMAC post-initialization: CMD_CONFIG=0x%08x\n",
8021cf0: 10800204 addi r2,r2,8
8021cf4: 10800037 ldwio r2,0(r2)
8021cf8: 100b883a mov r5,r2
8021cfc: 01020174 movhi r4,2053
8021d00: 21264d04 addi r4,r4,-26316
8021d04: 8002c780 call 8002c78 <printf>
#ifdef ALT_INICHE
/* Set the MAC address */
IOWR_ALTERA_TSEMAC_MAC_0(tse[iface].mi.base,
8021d08: e0bff417 ldw r2,-48(fp)
8021d0c: 10c02924 muli r3,r2,164
8021d10: 008201b4 movhi r2,2054
8021d14: 1885883a add r2,r3,r2
8021d18: 10b5c317 ldw r2,-10484(r2)
8021d1c: 10c00304 addi r3,r2,12
8021d20: e0bff417 ldw r2,-48(fp)
8021d24: 11002924 muli r4,r2,164
8021d28: 008201b4 movhi r2,2054
8021d2c: 2085883a add r2,r4,r2
8021d30: 10b5c803 ldbu r2,-10464(r2)
8021d34: 11003fcc andi r4,r2,255
8021d38: e0bff417 ldw r2,-48(fp)
8021d3c: 11402924 muli r5,r2,164
8021d40: 008201b4 movhi r2,2054
8021d44: 2885883a add r2,r5,r2
8021d48: 10b5c843 ldbu r2,-10463(r2)
8021d4c: 10803fcc andi r2,r2,255
8021d50: 1004923a slli r2,r2,8
8021d54: 2088b03a or r4,r4,r2
8021d58: e0bff417 ldw r2,-48(fp)
8021d5c: 11402924 muli r5,r2,164
8021d60: 008201b4 movhi r2,2054
8021d64: 2885883a add r2,r5,r2
8021d68: 10b5c883 ldbu r2,-10462(r2)
8021d6c: 10803fcc andi r2,r2,255
8021d70: 1004943a slli r2,r2,16
8021d74: 2088b03a or r4,r4,r2
8021d78: e0bff417 ldw r2,-48(fp)
8021d7c: 11402924 muli r5,r2,164
8021d80: 008201b4 movhi r2,2054
8021d84: 2885883a add r2,r5,r2
8021d88: 10b5c8c3 ldbu r2,-10461(r2)
8021d8c: 10803fcc andi r2,r2,255
8021d90: 1004963a slli r2,r2,24
8021d94: 2084b03a or r2,r4,r2
8021d98: 18800035 stwio r2,0(r3)
((int)((unsigned char) tse[iface].mac_addr[0]) |
(int)((unsigned char) tse[iface].mac_addr[1] << 8) |
(int)((unsigned char) tse[iface].mac_addr[2] << 16) |
(int)((unsigned char) tse[iface].mac_addr[3] << 24)));
IOWR_ALTERA_TSEMAC_MAC_1(tse[iface].mi.base,
8021d9c: e0bff417 ldw r2,-48(fp)
8021da0: 10c02924 muli r3,r2,164
8021da4: 008201b4 movhi r2,2054
8021da8: 1885883a add r2,r3,r2
8021dac: 10b5c317 ldw r2,-10484(r2)
8021db0: 10c00404 addi r3,r2,16
8021db4: e0bff417 ldw r2,-48(fp)
8021db8: 11002924 muli r4,r2,164
8021dbc: 008201b4 movhi r2,2054
8021dc0: 2085883a add r2,r4,r2
8021dc4: 10b5c903 ldbu r2,-10460(r2)
8021dc8: 11003fcc andi r4,r2,255
8021dcc: e0bff417 ldw r2,-48(fp)
8021dd0: 11402924 muli r5,r2,164
8021dd4: 008201b4 movhi r2,2054
8021dd8: 2885883a add r2,r5,r2
8021ddc: 10b5c943 ldbu r2,-10459(r2)
8021de0: 10803fcc andi r2,r2,255
8021de4: 1004923a slli r2,r2,8
8021de8: 2084b03a or r2,r4,r2
8021dec: 10bfffcc andi r2,r2,65535
8021df0: 18800035 stwio r2,0(r3)
tse[iface].mac_addr[5] = 0xBA;
#endif /* not ALT_INICHE */
/* status = UP */
nets[iface]->n_mib->ifAdminStatus = ALTERA_TSE_ADMIN_STATUS_UP;
8021df4: e0bff417 ldw r2,-48(fp)
8021df8: 100690ba slli r3,r2,2
8021dfc: 008201b4 movhi r2,2054
8021e00: 1885883a add r2,r3,r2
8021e04: 10b77017 ldw r2,-8768(r2)
8021e08: 10802717 ldw r2,156(r2)
8021e0c: 00c00044 movi r3,1
8021e10: 10c00615 stw r3,24(r2)
nets[iface]->n_mib->ifOperStatus = ALTERA_TSE_ADMIN_STATUS_UP;
8021e14: e0bff417 ldw r2,-48(fp)
8021e18: 100690ba slli r3,r2,2
8021e1c: 008201b4 movhi r2,2054
8021e20: 1885883a add r2,r3,r2
8021e24: 10b77017 ldw r2,-8768(r2)
8021e28: 10802717 ldw r2,156(r2)
8021e2c: 00c00044 movi r3,1
8021e30: 10c00715 stw r3,28(r2)
/* Install MSGDMA (RX) interrupt handler */
alt_msgdma_register_callback(
8021e34: e0bff417 ldw r2,-48(fp)
8021e38: 10c02924 muli r3,r2,164
8021e3c: 008201b4 movhi r2,2054
8021e40: 1885883a add r2,r3,r2
8021e44: 1135c517 ldw r4,-10476(r2)
tse[iface].mi.rx_msgdma,
(alt_msgdma_callback)&tse_msgdmaRx_isr,
0,
(void*)(&tse[iface]));
8021e48: e0bff417 ldw r2,-48(fp)
8021e4c: 10c02924 muli r3,r2,164
8021e50: 008201b4 movhi r2,2054
8021e54: 10b5c204 addi r2,r2,-10488
8021e58: 1885883a add r2,r3,r2
alt_msgdma_register_callback(
8021e5c: 100f883a mov r7,r2
8021e60: 000d883a mov r6,zero
8021e64: 014200b4 movhi r5,2050
8021e68: 29488404 addi r5,r5,8720
8021e6c: 80200940 call 8020094 <alt_msgdma_register_callback>
/* Install MSGDMA (TX) interrupt handler */
alt_msgdma_register_callback(
8021e70: e0bff417 ldw r2,-48(fp)
8021e74: 10c02924 muli r3,r2,164
8021e78: 008201b4 movhi r2,2054
8021e7c: 1885883a add r2,r3,r2
8021e80: 1135c417 ldw r4,-10480(r2)
tse[iface].mi.tx_msgdma,
(alt_msgdma_callback)&tse_msgdmaTx_isr,
0,
(void*)(&tse[iface]));
8021e84: e0bff417 ldw r2,-48(fp)
8021e88: 10c02924 muli r3,r2,164
8021e8c: 008201b4 movhi r2,2054
8021e90: 10b5c204 addi r2,r2,-10488
8021e94: 1885883a add r2,r3,r2
alt_msgdma_register_callback(
8021e98: 100f883a mov r7,r2
8021e9c: 000d883a mov r6,zero
8021ea0: 014200b4 movhi r5,2050
8021ea4: 2948ea04 addi r5,r5,9128
8021ea8: 80200940 call 8020094 <alt_msgdma_register_callback>
status = tse_msgdma_read_init(&tse[iface]);
8021eac: e0bff417 ldw r2,-48(fp)
8021eb0: 10c02924 muli r3,r2,164
8021eb4: 008201b4 movhi r2,2054
8021eb8: 10b5c204 addi r2,r2,-10488
8021ebc: 1885883a add r2,r3,r2
8021ec0: 1009883a mov r4,r2
8021ec4: 80224080 call 8022408 <tse_msgdma_read_init>
8021ec8: e0bffd15 stw r2,-12(fp)
if (status == 0 ) status = tse_msgdma_write_init(&tse[iface],0,0);
8021ecc: e0bffd17 ldw r2,-12(fp)
8021ed0: 10000a1e bne r2,zero,8021efc <tse_mac_init+0xa38>
8021ed4: e0bff417 ldw r2,-48(fp)
8021ed8: 10c02924 muli r3,r2,164
8021edc: 008201b4 movhi r2,2054
8021ee0: 10b5c204 addi r2,r2,-10488
8021ee4: 1885883a add r2,r3,r2
8021ee8: 000d883a mov r6,zero
8021eec: 000b883a mov r5,zero
8021ef0: 1009883a mov r4,r2
8021ef4: 8021f280 call 8021f28 <tse_msgdma_write_init>
8021ef8: e0bffd15 stw r2,-12(fp)
if (status!=0) dprintf("TSE_MAC_INIT error\n");
8021efc: e0bffd17 ldw r2,-12(fp)
8021f00: 10000326 beq r2,zero,8021f10 <tse_mac_init+0xa4c>
8021f04: 01020174 movhi r4,2053
8021f08: 21265904 addi r4,r4,-26268
8021f0c: 8002d9c0 call 8002d9c <puts>
return status;
8021f10: e0bffd17 ldw r2,-12(fp)
}
8021f14: e037883a mov sp,fp
8021f18: dfc00117 ldw ra,4(sp)
8021f1c: df000017 ldw fp,0(sp)
8021f20: dec00204 addi sp,sp,8
8021f24: f800283a ret
08021f28 <tse_msgdma_write_init>:
*
* @API TYPE - Internal
* @return SUCCESS on success
*/
int tse_msgdma_write_init(ins_tse_info* tse_ptr,unsigned int * ActualData,unsigned int len)
{
8021f28: defff704 addi sp,sp,-36
8021f2c: dfc00815 stw ra,32(sp)
8021f30: df000715 stw fp,28(sp)
8021f34: df000704 addi fp,sp,28
8021f38: e13ffc15 stw r4,-16(fp)
8021f3c: e17ffb15 stw r5,-20(fp)
8021f40: e1bffa15 stw r6,-24(fp)
alt_u32 control = 0;
8021f44: e03fff15 stw zero,-4(fp)
int desc_index;
int rc;
tse_ptr->txdesc_list = NULL;
8021f48: e0bffc17 ldw r2,-16(fp)
8021f4c: 10000d15 stw zero,52(r2)
for(desc_index = 0; desc_index < (ALTERA_TSE_MSGDMA_TX_DESC_CHAIN_SIZE); desc_index++)
8021f50: e03ffe15 stw zero,-8(fp)
8021f54: 00003306 br 8022024 <tse_msgdma_write_init+0xfc>
{
/* trigger interrupt when transfer complete */
control = ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GENERATE_SOP_MASK | ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GENERATE_EOP_MASK;
8021f58: 0080c004 movi r2,768
8021f5c: e0bfff15 stw r2,-4(fp)
if (desc_index >= ( ALTERA_TSE_MSGDMA_TX_DESC_CHAIN_SIZE - 2)) control |= ALTERA_MSGDMA_DESCRIPTOR_CONTROL_TRANSFER_COMPLETE_IRQ_MASK;
8021f60: e0bffe17 ldw r2,-8(fp)
8021f64: 10000416 blt r2,zero,8021f78 <tse_msgdma_write_init+0x50>
8021f68: e0bfff17 ldw r2,-4(fp)
8021f6c: 10900014 ori r2,r2,16384
8021f70: e0bfff15 stw r2,-4(fp)
8021f74: 00000306 br 8021f84 <tse_msgdma_write_init+0x5c>
else control |= ALTERA_MSGDMA_DESCRIPTOR_CONTROL_EARLY_DONE_ENABLE_MASK;
8021f78: e0bfff17 ldw r2,-4(fp)
8021f7c: 10804034 orhi r2,r2,256
8021f80: e0bfff15 stw r2,-4(fp)
rc=alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor(
8021f84: e0bffc17 ldw r2,-16(fp)
8021f88: 11000217 ldw r4,8(r2)
tse_ptr->mi.tx_msgdma,
(alt_msgdma_prefetcher_standard_descriptor *) &tse_ptr->txdesc[desc_index],
8021f8c: e0bffc17 ldw r2,-16(fp)
8021f90: 10c00e17 ldw r3,56(r2)
8021f94: e0bffe17 ldw r2,-8(fp)
8021f98: 1004917a slli r2,r2,5
rc=alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor(
8021f9c: 1887883a add r3,r3,r2
8021fa0: e17ffb17 ldw r5,-20(fp)
8021fa4: e0bfff17 ldw r2,-4(fp)
8021fa8: d8800015 stw r2,0(sp)
8021fac: e1fffa17 ldw r7,-24(fp)
8021fb0: 280d883a mov r6,r5
8021fb4: 180b883a mov r5,r3
8021fb8: 801f2f80 call 801f2f8 <alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor>
8021fbc: e0bffd15 stw r2,-12(fp)
(int)ActualData,
len,
control);
if (rc!=0) return -1;
8021fc0: e0bffd17 ldw r2,-12(fp)
8021fc4: 10000226 beq r2,zero,8021fd0 <tse_msgdma_write_init+0xa8>
8021fc8: 00bfffc4 movi r2,-1
8021fcc: 00001906 br 8022034 <tse_msgdma_write_init+0x10c>
if (desc_index==0) tse_ptr->txdesc_list = NULL;
8021fd0: e0bffe17 ldw r2,-8(fp)
8021fd4: 1000021e bne r2,zero,8021fe0 <tse_msgdma_write_init+0xb8>
8021fd8: e0bffc17 ldw r2,-16(fp)
8021fdc: 10000d15 stw zero,52(r2)
rc=alt_msgdma_prefetcher_add_standard_desc_to_list(
8021fe0: e0bffc17 ldw r2,-16(fp)
8021fe4: 11000d04 addi r4,r2,52
&tse_ptr->txdesc_list,
&tse_ptr->txdesc[desc_index] );
8021fe8: e0bffc17 ldw r2,-16(fp)
8021fec: 10c00e17 ldw r3,56(r2)
8021ff0: e0bffe17 ldw r2,-8(fp)
8021ff4: 1004917a slli r2,r2,5
rc=alt_msgdma_prefetcher_add_standard_desc_to_list(
8021ff8: 1885883a add r2,r3,r2
8021ffc: 100b883a mov r5,r2
8022000: 801f5400 call 801f540 <alt_msgdma_prefetcher_add_standard_desc_to_list>
8022004: e0bffd15 stw r2,-12(fp)
if (rc!=0) return -1;
8022008: e0bffd17 ldw r2,-12(fp)
802200c: 10000226 beq r2,zero,8022018 <tse_msgdma_write_init+0xf0>
8022010: 00bfffc4 movi r2,-1
8022014: 00000706 br 8022034 <tse_msgdma_write_init+0x10c>
for(desc_index = 0; desc_index < (ALTERA_TSE_MSGDMA_TX_DESC_CHAIN_SIZE); desc_index++)
8022018: e0bffe17 ldw r2,-8(fp)
802201c: 10800044 addi r2,r2,1
8022020: e0bffe15 stw r2,-8(fp)
8022024: e0bffe17 ldw r2,-8(fp)
8022028: 10800090 cmplti r2,r2,2
802202c: 103fca1e bne r2,zero,8021f58 <tse_msgdma_write_init+0x30>
}
return 0;
8022030: 0005883a mov r2,zero
}
8022034: e037883a mov sp,fp
8022038: dfc00117 ldw ra,4(sp)
802203c: df000017 ldw fp,0(sp)
8022040: dec00204 addi sp,sp,8
8022044: f800283a ret
08022048 <tse_mac_raw_send>:
* @param data - pointer to the data payload
* @param data_bytes - number of bytes of the data payload to be sent to the MAC
* @return SUCCESS if success, else a negative value
*/
int tse_mac_raw_send(NET net, char * data, unsigned int data_bytes)
{
8022048: defff104 addi sp,sp,-60
802204c: dfc00e15 stw ra,56(sp)
8022050: df000d15 stw fp,52(sp)
8022054: df000d04 addi fp,sp,52
8022058: e13ff515 stw r4,-44(fp)
802205c: e17ff415 stw r5,-48(fp)
8022060: e1bff315 stw r6,-52(fp)
unsigned int len = data_bytes;
8022064: e0bff317 ldw r2,-52(fp)
8022068: e0bfff15 stw r2,-4(fp)
int rc;
ins_tse_info* tse_ptr = (ins_tse_info*) net->n_local;
802206c: e0bff517 ldw r2,-44(fp)
8022070: 10802817 ldw r2,160(r2)
8022074: e0bffe15 stw r2,-8(fp)
NIOS2_READ_STATUS (context);
8022078: 0005303a rdctl r2,status
802207c: e0bff915 stw r2,-28(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8022080: e0fff917 ldw r3,-28(fp)
8022084: 00bfff84 movi r2,-2
8022088: 1884703a and r2,r3,r2
802208c: 1001703a wrctl status,r2
return context;
8022090: e0bff917 ldw r2,-28(fp)
tse_mac_trans_info *mi;
unsigned int* ActualData;
int cpu_sr;
OS_ENTER_CRITICAL();
8022094: e0bffd15 stw r2,-12(fp)
mi = &tse_ptr->mi;
8022098: e0bffe17 ldw r2,-8(fp)
802209c: 10800104 addi r2,r2,4
80220a0: e0bffc15 stw r2,-16(fp)
if(tse_ptr->sem!=0) /* Tx is busy*/
80220a4: e0bffe17 ldw r2,-8(fp)
80220a8: 10800b17 ldw r2,44(r2)
80220ac: 10000926 beq r2,zero,80220d4 <tse_mac_raw_send+0x8c>
{
dprintf("raw_send CALLED AGAIN!!!\n");
80220b0: 01020174 movhi r4,2053
80220b4: 21265e04 addi r4,r4,-26248
80220b8: 8002d9c0 call 8002d9c <puts>
80220bc: e0bffd17 ldw r2,-12(fp)
80220c0: e0bff815 stw r2,-32(fp)
NIOS2_WRITE_STATUS (context);
80220c4: e0bff817 ldw r2,-32(fp)
80220c8: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return ENP_RESOURCE;
80220cc: 00bffa84 movi r2,-22
80220d0: 00004a06 br 80221fc <tse_mac_raw_send+0x1b4>
}
tse_ptr->sem = 1;
80220d4: e0bffe17 ldw r2,-8(fp)
80220d8: 00c00044 movi r3,1
80220dc: 10c00b15 stw r3,44(r2)
// clear bit-31 before passing it to MSGDMA Driver
ActualData = (unsigned int*)alt_remap_cached ((volatile void*) data, 4);
80220e0: 01400104 movi r5,4
80220e4: e13ff417 ldw r4,-48(fp)
80220e8: 8037e880 call 8037e88 <alt_remap_cached>
80220ec: e0bffb15 stw r2,-20(fp)
dprintf("tse_msgdma_write_init bad return\n");
OS_EXIT_CRITICAL();
return -1;
}
#else
tse_ptr->txdesc[0].read_address = (alt_u32)ActualData;
80220f0: e0bffe17 ldw r2,-8(fp)
80220f4: 10800e17 ldw r2,56(r2)
80220f8: e0fffb17 ldw r3,-20(fp)
80220fc: 10c00015 stw r3,0(r2)
tse_ptr->txdesc[0].transfer_length = len;
8022100: e0bffe17 ldw r2,-8(fp)
8022104: 10800e17 ldw r2,56(r2)
8022108: e0ffff17 ldw r3,-4(fp)
802210c: 10c00215 stw r3,8(r2)
tse_ptr->txdesc[0].control = (tse_ptr->txdesc[0].control
8022110: e0bffe17 ldw r2,-8(fp)
8022114: 10800e17 ldw r2,56(r2)
8022118: 10c00717 ldw r3,28(r2)
& ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK)
| ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK;
802211c: 00900034 movhi r2,16384
8022120: 10bfffc4 addi r2,r2,-1
8022124: 1886703a and r3,r3,r2
tse_ptr->txdesc[0].control = (tse_ptr->txdesc[0].control
8022128: e0bffe17 ldw r2,-8(fp)
802212c: 10800e17 ldw r2,56(r2)
| ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK;
8022130: 18e00034 orhi r3,r3,32768
tse_ptr->txdesc[0].control = (tse_ptr->txdesc[0].control
8022134: 10c00715 stw r3,28(r2)
#endif
alt_dcache_flush(ActualData,len);
8022138: e17fff17 ldw r5,-4(fp)
802213c: e13ffb17 ldw r4,-20(fp)
8022140: 80371c00 call 80371c0 <alt_dcache_flush>
rc = tse_mac_aTxWrite(mi,tse_ptr->txdesc);
8022144: e0bffe17 ldw r2,-8(fp)
8022148: 10800e17 ldw r2,56(r2)
802214c: 100b883a mov r5,r2
8022150: e13ffc17 ldw r4,-16(fp)
8022154: 8017ce80 call 8017ce8 <tse_mac_aTxWrite>
8022158: e0bffa15 stw r2,-24(fp)
if(rc < 0) /* MSGDMA not available */
802215c: e0bffa17 ldw r2,-24(fp)
8022160: 1000120e bge r2,zero,80221ac <tse_mac_raw_send+0x164>
{
dprintf("raw_send() MSGDMA not available, ret=%d, len=%d\n",rc, len);
8022164: e1bfff17 ldw r6,-4(fp)
8022168: e17ffa17 ldw r5,-24(fp)
802216c: 01020174 movhi r4,2053
8022170: 21266504 addi r4,r4,-26220
8022174: 8002c780 call 8002c78 <printf>
net->n_mib->ifOutDiscards++;
8022178: e0bff517 ldw r2,-44(fp)
802217c: 10802717 ldw r2,156(r2)
8022180: 10c01217 ldw r3,72(r2)
8022184: 18c00044 addi r3,r3,1
8022188: 10c01215 stw r3,72(r2)
tse_ptr->sem = 0;
802218c: e0bffe17 ldw r2,-8(fp)
8022190: 10000b15 stw zero,44(r2)
8022194: e0bffd17 ldw r2,-12(fp)
8022198: e0bff715 stw r2,-36(fp)
802219c: e0bff717 ldw r2,-36(fp)
80221a0: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return SEND_DROPPED; /* ENP_RESOURCE and SEND_DROPPED have the same value! */
80221a4: 00bffa84 movi r2,-22
80221a8: 00001406 br 80221fc <tse_mac_raw_send+0x1b4>
}
else /* = 0, success */
{
net->n_mib->ifOutOctets += data_bytes;
80221ac: e0bff517 ldw r2,-44(fp)
80221b0: 10802717 ldw r2,156(r2)
80221b4: 11000f17 ldw r4,60(r2)
80221b8: e0bff517 ldw r2,-44(fp)
80221bc: 10802717 ldw r2,156(r2)
80221c0: e0fff317 ldw r3,-52(fp)
80221c4: 20c7883a add r3,r4,r3
80221c8: 10c00f15 stw r3,60(r2)
/* we dont know whether it was unicast or not, we count both in <ifOutUcastPkts> */
net->n_mib->ifOutUcastPkts++;
80221cc: e0bff517 ldw r2,-44(fp)
80221d0: 10802717 ldw r2,156(r2)
80221d4: 10c01017 ldw r3,64(r2)
80221d8: 18c00044 addi r3,r3,1
80221dc: 10c01015 stw r3,64(r2)
tse_ptr->sem = 0;
80221e0: e0bffe17 ldw r2,-8(fp)
80221e4: 10000b15 stw zero,44(r2)
80221e8: e0bffd17 ldw r2,-12(fp)
80221ec: e0bff615 stw r2,-40(fp)
80221f0: e0bff617 ldw r2,-40(fp)
80221f4: 1001703a wrctl status,r2
OS_EXIT_CRITICAL();
return SUCCESS; /*success */
80221f8: 0005883a mov r2,zero
}
}
80221fc: e037883a mov sp,fp
8022200: dfc00117 ldw ra,4(sp)
8022204: df000017 ldw fp,0(sp)
8022208: dec00204 addi sp,sp,8
802220c: f800283a ret
08022210 <tse_msgdmaRx_isr>:
* @API TYPE - callback
* @param context - context of the TSE MAC instance
* @param intnum - temporary storage
*/
void tse_msgdmaRx_isr(void * context)
{
8022210: defff804 addi sp,sp,-32
8022214: dfc00715 stw ra,28(sp)
8022218: df000615 stw fp,24(sp)
802221c: df000604 addi fp,sp,24
8022220: e13ffa15 stw r4,-24(fp)
ins_tse_info* tse_ptr = (ins_tse_info *) context;
8022224: e0bffa17 ldw r2,-24(fp)
8022228: e0bffe15 stw r2,-8(fp)
alt_u32 msgdma_status;
alt_u32 i,control;
/* Capture current rcv queue length */
int initial_rcvdq_len = rcvdq.q_len;
802222c: 008201b4 movhi r2,2054
8022230: 10b6ad17 ldw r2,-9548(r2)
8022234: e0bffd15 stw r2,-12(fp)
/* reenable global interrupts so we don't miss one that occurs during the
processing of this ISR */
IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(tse_ptr->mi.rx_msgdma->prefetcher_base,
8022238: e0bffe17 ldw r2,-8(fp)
802223c: 10800317 ldw r2,12(r2)
8022240: 10800617 ldw r2,24(r2)
8022244: e0fffe17 ldw r3,-8(fp)
8022248: 18c00317 ldw r3,12(r3)
802224c: 18c00617 ldw r3,24(r3)
8022250: 18c00037 ldwio r3,0(r3)
8022254: 18c00214 ori r3,r3,8
8022258: 10c00035 stwio r3,0(r2)
IORD_ALT_MSGDMA_PREFETCHER_CONTROL(tse_ptr->mi.rx_msgdma->prefetcher_base)
| ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_SET_MASK);
msgdma_status = IORD_ALTERA_MSGDMA_CSR_STATUS(tse_ptr->mi.rx_msgdma->csr_base);
802225c: e0bffe17 ldw r2,-8(fp)
8022260: 10800317 ldw r2,12(r2)
8022264: 10800317 ldw r2,12(r2)
8022268: 10800037 ldwio r2,0(r2)
802226c: e0bffc15 stw r2,-16(fp)
if ((msgdma_status & ALTERA_MSGDMA_CSR_STOPPED_ON_ERROR_MASK)==0)
8022270: e0bffc17 ldw r2,-16(fp)
8022274: 1080200c andi r2,r2,128
8022278: 1000421e bne r2,zero,8022384 <tse_msgdmaRx_isr+0x174>
{
/* Handle received packet */
tse_mac_rcv(tse_ptr);
802227c: e13ffe17 ldw r4,-8(fp)
8022280: 80227f80 call 80227f8 <tse_mac_rcv>
/* read the control field of the last descriptor in the chain */
control = IORD_32DIRECT(&tse_ptr->rxdesc[tse_ptr->rx_chain][ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE-2],0x1c);
8022284: e0bffe17 ldw r2,-8(fp)
8022288: 10801317 ldw r2,76(r2)
802228c: e0fffe17 ldw r3,-8(fp)
8022290: 10800444 addi r2,r2,17
8022294: 100490ba slli r2,r2,2
8022298: 1885883a add r2,r3,r2
802229c: 10800017 ldw r2,0(r2)
80222a0: 10803804 addi r2,r2,224
80222a4: 10800704 addi r2,r2,28
80222a8: 10800037 ldwio r2,0(r2)
80222ac: e0bffb15 stw r2,-20(fp)
//if the chain is completed then start a new chain
if ((control & ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK)==0)
80222b0: e0bffb17 ldw r2,-20(fp)
80222b4: 1090002c andhi r2,r2,16384
80222b8: 10002a1e bne r2,zero,8022364 <tse_msgdmaRx_isr+0x154>
{
/* process any unprocessed descriptors */
for (i=(tse_ptr->rx_descriptor_index);i<(ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE-1);i++)
80222bc: e0bffe17 ldw r2,-8(fp)
80222c0: 10801417 ldw r2,80(r2)
80222c4: e0bfff15 stw r2,-4(fp)
80222c8: 00000506 br 80222e0 <tse_msgdmaRx_isr+0xd0>
{
tse_mac_rcv(tse_ptr);
80222cc: e13ffe17 ldw r4,-8(fp)
80222d0: 80227f80 call 80227f8 <tse_mac_rcv>
for (i=(tse_ptr->rx_descriptor_index);i<(ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE-1);i++)
80222d4: e0bfff17 ldw r2,-4(fp)
80222d8: 10800044 addi r2,r2,1
80222dc: e0bfff15 stw r2,-4(fp)
80222e0: e0bfff17 ldw r2,-4(fp)
80222e4: 10800230 cmpltui r2,r2,8
80222e8: 103ff81e bne r2,zero,80222cc <tse_msgdmaRx_isr+0xbc>
}
/* cancel any pending ints */
/* the chain could have been completed and int generated during the processing of this ISR */
/* But we are handling that in this ISR, so cancel any pending interrupt */
IOWR_ALT_MSGDMA_PREFETCHER_STATUS(tse_ptr->mi.rx_msgdma->prefetcher_base,1);
80222ec: e0bffe17 ldw r2,-8(fp)
80222f0: 10800317 ldw r2,12(r2)
80222f4: 10800617 ldw r2,24(r2)
80222f8: 10800404 addi r2,r2,16
80222fc: 00c00044 movi r3,1
8022300: 10c00035 stwio r3,0(r2)
/* switch chains */
tse_ptr->rx_descriptor_index = 0;
8022304: e0bffe17 ldw r2,-8(fp)
8022308: 10001415 stw zero,80(r2)
if (tse->rx_chain == 0) tse->rx_chain=1; else tse->rx_chain=0;
802230c: 008201b4 movhi r2,2054
8022310: 10b5d517 ldw r2,-10412(r2)
8022314: 1000041e bne r2,zero,8022328 <tse_msgdmaRx_isr+0x118>
8022318: 00c00044 movi r3,1
802231c: 008201b4 movhi r2,2054
8022320: 10f5d515 stw r3,-10412(r2)
8022324: 00000206 br 8022330 <tse_msgdmaRx_isr+0x120>
8022328: 008201b4 movhi r2,2054
802232c: 1035d515 stw zero,-10412(r2)
/* start new chain */
tse_mac_aRxRead(&tse_ptr->mi, tse_ptr->rxdesc_list[tse->rx_chain]);
8022330: e0bffe17 ldw r2,-8(fp)
8022334: 11000104 addi r4,r2,4
8022338: 008201b4 movhi r2,2054
802233c: 10b5d517 ldw r2,-10412(r2)
8022340: e0fffe17 ldw r3,-8(fp)
8022344: 108003c4 addi r2,r2,15
8022348: 100490ba slli r2,r2,2
802234c: 1885883a add r2,r3,r2
8022350: 10800017 ldw r2,0(r2)
8022354: 100b883a mov r5,r2
8022358: 8017c780 call 8017c78 <tse_mac_aRxRead>
/* allocate storage for the non active chain */
allocate_rx_descriptor_chain(tse_ptr);
802235c: e13ffe17 ldw r4,-8(fp)
8022360: 80226c00 call 80226c0 <allocate_rx_descriptor_chain>
}
/* Wake up Niche stack if there are new packets are on queue */
if ((rcvdq.q_len) > initial_rcvdq_len) {
8022364: 008201b4 movhi r2,2054
8022368: 10b6ad17 ldw r2,-9548(r2)
802236c: e0fffd17 ldw r3,-12(fp)
8022370: 1880070e bge r3,r2,8022390 <tse_msgdmaRx_isr+0x180>
SignalPktDemux();
8022374: d0a08017 ldw r2,-32256(gp)
8022378: 1009883a mov r4,r2
802237c: 8015d840 call 8015d84 <OSSemPost>
}
} /* if (no error) */
else { dprintf("RX ERROR\n"); }
}
8022380: 00000306 br 8022390 <tse_msgdmaRx_isr+0x180>
else { dprintf("RX ERROR\n"); }
8022384: 01020174 movhi r4,2053
8022388: 21267204 addi r4,r4,-26168
802238c: 8002d9c0 call 8002d9c <puts>
}
8022390: 0001883a nop
8022394: e037883a mov sp,fp
8022398: dfc00117 ldw ra,4(sp)
802239c: df000017 ldw fp,0(sp)
80223a0: dec00204 addi sp,sp,8
80223a4: f800283a ret
080223a8 <tse_msgdmaTx_isr>:
*
* @API TYPE - callback
* @param context - context of the TSE MAC instance
*/
void tse_msgdmaTx_isr(void * context)
{
80223a8: defffb04 addi sp,sp,-20
80223ac: dfc00415 stw ra,16(sp)
80223b0: df000315 stw fp,12(sp)
80223b4: df000304 addi fp,sp,12
80223b8: e13ffd15 stw r4,-12(fp)
ins_tse_info* tse_ptr = (ins_tse_info *) context;
80223bc: e0bffd17 ldw r2,-12(fp)
80223c0: e0bfff15 stw r2,-4(fp)
* IO read to peripheral that generated the IRQ is done after IO write
* to negate the interrupt request. This ensures at the IO write reaches
* the peripheral (through any high-latency hardware in the system)
* before the ISR exits.
*/
msgdma_status = IORD_ALTERA_MSGDMA_CSR_STATUS(tse_ptr->mi.tx_msgdma->csr_base);
80223c4: e0bfff17 ldw r2,-4(fp)
80223c8: 10800217 ldw r2,8(r2)
80223cc: 10800317 ldw r2,12(r2)
80223d0: 10800037 ldwio r2,0(r2)
80223d4: e0bffe15 stw r2,-8(fp)
if ((msgdma_status & ALTERA_MSGDMA_CSR_STOPPED_ON_ERROR_MASK)!=0)
80223d8: e0bffe17 ldw r2,-8(fp)
80223dc: 1080200c andi r2,r2,128
80223e0: 10000326 beq r2,zero,80223f0 <tse_msgdmaTx_isr+0x48>
dprintf("TX STOPPED\n");
80223e4: 01020174 movhi r4,2053
80223e8: 21267504 addi r4,r4,-26156
80223ec: 8002d9c0 call 8002d9c <puts>
}
80223f0: 0001883a nop
80223f4: e037883a mov sp,fp
80223f8: dfc00117 ldw ra,4(sp)
80223fc: df000017 ldw fp,0(sp)
8022400: dec00204 addi sp,sp,8
8022404: f800283a ret
08022408 <tse_msgdma_read_init>:
*
* @API TYPE - Internal
* @return SUCCESS on success
*/
int tse_msgdma_read_init(ins_tse_info* tse_ptr)
{
8022408: defff604 addi sp,sp,-40
802240c: dfc00915 stw ra,36(sp)
8022410: df000815 stw fp,32(sp)
8022414: df000804 addi fp,sp,32
8022418: e13ff915 stw r4,-28(fp)
alt_u32 *uncached_packet_payload;
alt_u32 control = 0;
802241c: e03ffb15 stw zero,-20(fp)
int desc_index;
int chain_index;
int rc;
int max_transfer_size=0xffff;
8022420: 00bfffd4 movui r2,65535
8022424: e0bffc15 stw r2,-16(fp)
if (tse_ptr->mi.rx_msgdma->max_byte < max_transfer_size) { max_transfer_size = tse_ptr->mi.rx_msgdma->max_byte; }
8022428: e0bff917 ldw r2,-28(fp)
802242c: 10800317 ldw r2,12(r2)
8022430: 10c01217 ldw r3,72(r2)
8022434: e0bffc17 ldw r2,-16(fp)
8022438: 1880042e bgeu r3,r2,802244c <tse_msgdma_read_init+0x44>
802243c: e0bff917 ldw r2,-28(fp)
8022440: 10800317 ldw r2,12(r2)
8022444: 10801217 ldw r2,72(r2)
8022448: e0bffc15 stw r2,-16(fp)
for (chain_index=0;chain_index<2;chain_index++)
802244c: e03ffd15 stw zero,-12(fp)
8022450: 00007f06 br 8022650 <tse_msgdma_read_init+0x248>
{
tse_ptr->rxdesc_list[chain_index] = NULL;
8022454: e0fff917 ldw r3,-28(fp)
8022458: e0bffd17 ldw r2,-12(fp)
802245c: 108003c4 addi r2,r2,15
8022460: 100490ba slli r2,r2,2
8022464: 1885883a add r2,r3,r2
8022468: 10000015 stw zero,0(r2)
for(desc_index = 0; desc_index < ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE; desc_index++)
802246c: e03ffe15 stw zero,-8(fp)
8022470: 00007106 br 8022638 <tse_msgdma_read_init+0x230>
{
uncached_packet_payload = NULL;
8022474: e03fff15 stw zero,-4(fp)
if ((desc_index < (ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE-1))) {
8022478: e0bffe17 ldw r2,-8(fp)
802247c: 10800208 cmpgei r2,r2,8
8022480: 1000321e bne r2,zero,802254c <tse_msgdma_read_init+0x144>
tse_ptr->pkt_array_rx[chain_index][desc_index] = pk_alloc(ALTERA_TSE_PKT_INIT_LEN);
8022484: 01017e04 movi r4,1528
8022488: 80284340 call 8028434 <pk_alloc>
802248c: 100b883a mov r5,r2
8022490: e0fff917 ldw r3,-28(fp)
8022494: e0bffd17 ldw r2,-12(fp)
8022498: 11000264 muli r4,r2,9
802249c: e0bffe17 ldw r2,-8(fp)
80224a0: 2085883a add r2,r4,r2
80224a4: 10800584 addi r2,r2,22
80224a8: 100490ba slli r2,r2,2
80224ac: 1885883a add r2,r3,r2
80224b0: 11400015 stw r5,0(r2)
if (!tse_ptr->pkt_array_rx[chain_index][desc_index]) /* couldn't get a free buffer for rx */
80224b4: e0fff917 ldw r3,-28(fp)
80224b8: e0bffd17 ldw r2,-12(fp)
80224bc: 11000264 muli r4,r2,9
80224c0: e0bffe17 ldw r2,-8(fp)
80224c4: 2085883a add r2,r4,r2
80224c8: 10800584 addi r2,r2,22
80224cc: 100490ba slli r2,r2,2
80224d0: 1885883a add r2,r3,r2
80224d4: 10800017 ldw r2,0(r2)
80224d8: 10000b1e bne r2,zero,8022508 <tse_msgdma_read_init+0x100>
{
dprintf("[tse_msgdma_read_init] Fatal error: No free packet buffers for RX\n");
80224dc: 01020174 movhi r4,2053
80224e0: 21267804 addi r4,r4,-26144
80224e4: 8002d9c0 call 8002d9c <puts>
tse_ptr->netp->n_mib->ifInDiscards++;
80224e8: e0bff917 ldw r2,-28(fp)
80224ec: 10800817 ldw r2,32(r2)
80224f0: 10802717 ldw r2,156(r2)
80224f4: 10c00c17 ldw r3,48(r2)
80224f8: 18c00044 addi r3,r3,1
80224fc: 10c00c15 stw r3,48(r2)
return ENP_NOBUFFER;
8022500: 00bffac4 movi r2,-21
8022504: 00006906 br 80226ac <tse_msgdma_read_init+0x2a4>
}
// ensure bit-31 of tse_ptr->pkt_array_rx[desc_index]->nb_buff is clear before passing
// to MSGDMA Driver
uncached_packet_payload = (alt_u32 *)alt_remap_cached ((volatile void*) tse_ptr->pkt_array_rx[chain_index][desc_index]->nb_buff, 4);
8022508: e0fff917 ldw r3,-28(fp)
802250c: e0bffd17 ldw r2,-12(fp)
8022510: 11000264 muli r4,r2,9
8022514: e0bffe17 ldw r2,-8(fp)
8022518: 2085883a add r2,r4,r2
802251c: 10800584 addi r2,r2,22
8022520: 100490ba slli r2,r2,2
8022524: 1885883a add r2,r3,r2
8022528: 10800017 ldw r2,0(r2)
802252c: 10800117 ldw r2,4(r2)
8022530: 01400104 movi r5,4
8022534: 1009883a mov r4,r2
8022538: 8037e880 call 8037e88 <alt_remap_cached>
802253c: e0bfff15 stw r2,-4(fp)
alt_dcache_flush((void *) uncached_packet_payload, ALTERA_TSE_PKT_INIT_LEN);
8022540: 01417e04 movi r5,1528
8022544: e13fff17 ldw r4,-4(fp)
8022548: 80371c00 call 80371c0 <alt_dcache_flush>
}
/* trigger interrupt when transfer complete */
control = ALTERA_MSGDMA_DESCRIPTOR_CONTROL_TRANSFER_COMPLETE_IRQ_MASK |
802254c: 00803ff4 movhi r2,255
8022550: 10940004 addi r2,r2,20480
8022554: e0bffb15 stw r2,-20(fp)
ALTERA_MSGDMA_DESCRIPTOR_CONTROL_ERROR_IRQ_MASK | ALTERA_MSGDMA_DESCRIPTOR_CONTROL_END_ON_EOP_MASK;
rc=alt_msgdma_construct_prefetcher_standard_st_to_mm_descriptor(
8022558: e0bff917 ldw r2,-28(fp)
802255c: 11000317 ldw r4,12(r2)
tse_ptr->mi.rx_msgdma,
(alt_msgdma_prefetcher_standard_descriptor *) &tse_ptr->rxdesc[chain_index][desc_index],
8022560: e0fff917 ldw r3,-28(fp)
8022564: e0bffd17 ldw r2,-12(fp)
8022568: 10800444 addi r2,r2,17
802256c: 100490ba slli r2,r2,2
8022570: 1885883a add r2,r3,r2
8022574: 10c00017 ldw r3,0(r2)
8022578: e0bffe17 ldw r2,-8(fp)
802257c: 1004917a slli r2,r2,5
rc=alt_msgdma_construct_prefetcher_standard_st_to_mm_descriptor(
8022580: 1887883a add r3,r3,r2
8022584: e17fff17 ldw r5,-4(fp)
8022588: e1bffc17 ldw r6,-16(fp)
802258c: e0bffb17 ldw r2,-20(fp)
8022590: d8800015 stw r2,0(sp)
8022594: 300f883a mov r7,r6
8022598: 280d883a mov r6,r5
802259c: 180b883a mov r5,r3
80225a0: 801f2a00 call 801f2a0 <alt_msgdma_construct_prefetcher_standard_st_to_mm_descriptor>
80225a4: e0bffa15 stw r2,-24(fp)
(alt_u32)uncached_packet_payload,
max_transfer_size,
control);
if (rc!=0) return -1;
80225a8: e0bffa17 ldw r2,-24(fp)
80225ac: 10000226 beq r2,zero,80225b8 <tse_msgdma_read_init+0x1b0>
80225b0: 00bfffc4 movi r2,-1
80225b4: 00003d06 br 80226ac <tse_msgdma_read_init+0x2a4>
if (desc_index==0) tse_ptr->rxdesc_list[chain_index] = NULL;
80225b8: e0bffe17 ldw r2,-8(fp)
80225bc: 1000061e bne r2,zero,80225d8 <tse_msgdma_read_init+0x1d0>
80225c0: e0fff917 ldw r3,-28(fp)
80225c4: e0bffd17 ldw r2,-12(fp)
80225c8: 108003c4 addi r2,r2,15
80225cc: 100490ba slli r2,r2,2
80225d0: 1885883a add r2,r3,r2
80225d4: 10000015 stw zero,0(r2)
rc=alt_msgdma_prefetcher_add_standard_desc_to_list(
80225d8: e0bffd17 ldw r2,-12(fp)
80225dc: 108003c4 addi r2,r2,15
80225e0: 100490ba slli r2,r2,2
80225e4: e0fff917 ldw r3,-28(fp)
80225e8: 1889883a add r4,r3,r2
&tse_ptr->rxdesc_list[chain_index],
&tse_ptr->rxdesc[chain_index][desc_index] );
80225ec: e0fff917 ldw r3,-28(fp)
80225f0: e0bffd17 ldw r2,-12(fp)
80225f4: 10800444 addi r2,r2,17
80225f8: 100490ba slli r2,r2,2
80225fc: 1885883a add r2,r3,r2
8022600: 10c00017 ldw r3,0(r2)
8022604: e0bffe17 ldw r2,-8(fp)
8022608: 1004917a slli r2,r2,5
rc=alt_msgdma_prefetcher_add_standard_desc_to_list(
802260c: 1885883a add r2,r3,r2
8022610: 100b883a mov r5,r2
8022614: 801f5400 call 801f540 <alt_msgdma_prefetcher_add_standard_desc_to_list>
8022618: e0bffa15 stw r2,-24(fp)
if (rc!=0) return -1;
802261c: e0bffa17 ldw r2,-24(fp)
8022620: 10000226 beq r2,zero,802262c <tse_msgdma_read_init+0x224>
8022624: 00bfffc4 movi r2,-1
8022628: 00002006 br 80226ac <tse_msgdma_read_init+0x2a4>
for(desc_index = 0; desc_index < ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE; desc_index++)
802262c: e0bffe17 ldw r2,-8(fp)
8022630: 10800044 addi r2,r2,1
8022634: e0bffe15 stw r2,-8(fp)
8022638: e0bffe17 ldw r2,-8(fp)
802263c: 10800250 cmplti r2,r2,9
8022640: 103f8c1e bne r2,zero,8022474 <tse_msgdma_read_init+0x6c>
for (chain_index=0;chain_index<2;chain_index++)
8022644: e0bffd17 ldw r2,-12(fp)
8022648: 10800044 addi r2,r2,1
802264c: e0bffd15 stw r2,-12(fp)
8022650: e0bffd17 ldw r2,-12(fp)
8022654: 10800090 cmplti r2,r2,2
8022658: 103f7e1e bne r2,zero,8022454 <tse_msgdma_read_init+0x4c>
}
}
dprintf("[tse_msgdma_read_init] RX descriptor chain desc (%d depth) created\n", desc_index);
802265c: e17ffe17 ldw r5,-8(fp)
8022660: 01020174 movhi r4,2053
8022664: 21268904 addi r4,r4,-26076
8022668: 8002c780 call 8002c78 <printf>
tse_ptr->rx_descriptor_index=0; //for processing completed rx descriptors
802266c: e0bff917 ldw r2,-28(fp)
8022670: 10001415 stw zero,80(r2)
tse_ptr->rx_chain=0;
8022674: e0bff917 ldw r2,-28(fp)
8022678: 10001315 stw zero,76(r2)
tse_mac_aRxRead( &tse_ptr->mi, tse_ptr->rxdesc_list[tse_ptr->rx_chain]);
802267c: e0bff917 ldw r2,-28(fp)
8022680: 11000104 addi r4,r2,4
8022684: e0bff917 ldw r2,-28(fp)
8022688: 10801317 ldw r2,76(r2)
802268c: e0fff917 ldw r3,-28(fp)
8022690: 108003c4 addi r2,r2,15
8022694: 100490ba slli r2,r2,2
8022698: 1885883a add r2,r3,r2
802269c: 10800017 ldw r2,0(r2)
80226a0: 100b883a mov r5,r2
80226a4: 8017c780 call 8017c78 <tse_mac_aRxRead>
return SUCCESS;
80226a8: 0005883a mov r2,zero
}
80226ac: e037883a mov sp,fp
80226b0: dfc00117 ldw ra,4(sp)
80226b4: df000017 ldw fp,0(sp)
80226b8: dec00204 addi sp,sp,8
80226bc: f800283a ret
080226c0 <allocate_rx_descriptor_chain>:
/* allocate the storage for the non active rx descriptor chain
update the write pointers in each descriptor to point
to the allocated storage. */
int allocate_rx_descriptor_chain(ins_tse_info* tse_ptr)
{
80226c0: defff904 addi sp,sp,-28
80226c4: dfc00615 stw ra,24(sp)
80226c8: df000515 stw fp,20(sp)
80226cc: df000504 addi fp,sp,20
80226d0: e13ffb15 stw r4,-20(fp)
PACKET replacement_pkt;
alt_u32 *uncached_packet_payload;
alt_msgdma_prefetcher_standard_descriptor *rxDesc;
int i;
for (i=0;i<(ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE-1);i++)
80226d4: e03fff15 stw zero,-4(fp)
80226d8: 00003e06 br 80227d4 <allocate_rx_descriptor_chain+0x114>
{
replacement_pkt = pk_alloc(ALTERA_TSE_PKT_INIT_LEN);
80226dc: 01017e04 movi r4,1528
80226e0: 80284340 call 8028434 <pk_alloc>
80226e4: e0bffe15 stw r2,-8(fp)
if (!replacement_pkt) { /* couldn't get a free buffer for rx */
80226e8: e0bffe17 ldw r2,-8(fp)
80226ec: 1000051e bne r2,zero,8022704 <allocate_rx_descriptor_chain+0x44>
dprintf("No free buffers for rx\n");
80226f0: 01020174 movhi r4,2053
80226f4: 21269a04 addi r4,r4,-26008
80226f8: 8002d9c0 call 8002d9c <puts>
return 1;
80226fc: 00800044 movi r2,1
8022700: 00003806 br 80227e4 <allocate_rx_descriptor_chain+0x124>
}
else
{
rxDesc = &tse_ptr->rxdesc[!tse_ptr->rx_chain][i];
8022704: e0bffb17 ldw r2,-20(fp)
8022708: 10801317 ldw r2,76(r2)
802270c: 1005003a cmpeq r2,r2,zero
8022710: 10803fcc andi r2,r2,255
8022714: e0fffb17 ldw r3,-20(fp)
8022718: 10800444 addi r2,r2,17
802271c: 100490ba slli r2,r2,2
8022720: 1885883a add r2,r3,r2
8022724: 10c00017 ldw r3,0(r2)
8022728: e0bfff17 ldw r2,-4(fp)
802272c: 1004917a slli r2,r2,5
8022730: 1885883a add r2,r3,r2
8022734: e0bffd15 stw r2,-12(fp)
tse_ptr->pkt_array_rx[!tse_ptr->rx_chain][i] = replacement_pkt;
8022738: e0bffb17 ldw r2,-20(fp)
802273c: 10801317 ldw r2,76(r2)
8022740: 1005003a cmpeq r2,r2,zero
8022744: 10803fcc andi r2,r2,255
8022748: e0fffb17 ldw r3,-20(fp)
802274c: 11000264 muli r4,r2,9
8022750: e0bfff17 ldw r2,-4(fp)
8022754: 2085883a add r2,r4,r2
8022758: 10800584 addi r2,r2,22
802275c: 100490ba slli r2,r2,2
8022760: 1885883a add r2,r3,r2
8022764: e0fffe17 ldw r3,-8(fp)
8022768: 10c00015 stw r3,0(r2)
uncached_packet_payload = (alt_u32 *)alt_remap_cached(tse_ptr->pkt_array_rx[!tse_ptr->rx_chain][i]->nb_buff, 4);
802276c: e0bffb17 ldw r2,-20(fp)
8022770: 10801317 ldw r2,76(r2)
8022774: 1005003a cmpeq r2,r2,zero
8022778: 10803fcc andi r2,r2,255
802277c: e0fffb17 ldw r3,-20(fp)
8022780: 11000264 muli r4,r2,9
8022784: e0bfff17 ldw r2,-4(fp)
8022788: 2085883a add r2,r4,r2
802278c: 10800584 addi r2,r2,22
8022790: 100490ba slli r2,r2,2
8022794: 1885883a add r2,r3,r2
8022798: 10800017 ldw r2,0(r2)
802279c: 10800117 ldw r2,4(r2)
80227a0: 01400104 movi r5,4
80227a4: 1009883a mov r4,r2
80227a8: 8037e880 call 8037e88 <alt_remap_cached>
80227ac: e0bffc15 stw r2,-16(fp)
alt_dcache_flush((void *) uncached_packet_payload, ALTERA_TSE_PKT_INIT_LEN);
80227b0: 01417e04 movi r5,1528
80227b4: e13ffc17 ldw r4,-16(fp)
80227b8: 80371c00 call 80371c0 <alt_dcache_flush>
rxDesc->write_address = (alt_u32)(uncached_packet_payload);
80227bc: e0fffc17 ldw r3,-16(fp)
80227c0: e0bffd17 ldw r2,-12(fp)
80227c4: 10c00115 stw r3,4(r2)
for (i=0;i<(ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE-1);i++)
80227c8: e0bfff17 ldw r2,-4(fp)
80227cc: 10800044 addi r2,r2,1
80227d0: e0bfff15 stw r2,-4(fp)
80227d4: e0bfff17 ldw r2,-4(fp)
80227d8: 10800210 cmplti r2,r2,8
80227dc: 103fbf1e bne r2,zero,80226dc <allocate_rx_descriptor_chain+0x1c>
}
}
return 0;
80227e0: 0005883a mov r2,zero
}
80227e4: e037883a mov sp,fp
80227e8: dfc00117 ldw ra,4(sp)
80227ec: df000017 ldw fp,0(sp)
80227f0: dec00204 addi sp,sp,8
80227f4: f800283a ret
080227f8 <tse_mac_rcv>:
* @API TYPE - callback internal function
* @return SUCCESS on success
*/
void tse_mac_rcv(ins_tse_info* tse_ptr)
{
80227f8: defffa04 addi sp,sp,-24
80227fc: dfc00515 stw ra,20(sp)
8022800: df000415 stw fp,16(sp)
8022804: df000404 addi fp,sp,16
8022808: e13ffc15 stw r4,-16(fp)
struct ethhdr * eth;
int pklen;
PACKET rx_packet;
/* Correct frame length to actual (this is different from TX side) */
pklen = IORD_32DIRECT(&tse_ptr->rxdesc[tse_ptr->rx_chain][tse_ptr->rx_descriptor_index].bytes_transfered,0) - 2;
802280c: e0bffc17 ldw r2,-16(fp)
8022810: 10801317 ldw r2,76(r2)
8022814: e0fffc17 ldw r3,-16(fp)
8022818: 10800444 addi r2,r2,17
802281c: 100490ba slli r2,r2,2
8022820: 1885883a add r2,r3,r2
8022824: 10c00017 ldw r3,0(r2)
8022828: e0bffc17 ldw r2,-16(fp)
802282c: 10801417 ldw r2,80(r2)
8022830: 1004917a slli r2,r2,5
8022834: 1885883a add r2,r3,r2
8022838: 10800404 addi r2,r2,16
802283c: 10800037 ldwio r2,0(r2)
8022840: 10bfff84 addi r2,r2,-2
8022844: e0bfff15 stw r2,-4(fp)
tse_ptr->netp->n_mib->ifInOctets += (u_long)pklen;
8022848: e0bffc17 ldw r2,-16(fp)
802284c: 10800817 ldw r2,32(r2)
8022850: 10802717 ldw r2,156(r2)
8022854: 11000917 ldw r4,36(r2)
8022858: e0ffff17 ldw r3,-4(fp)
802285c: e0bffc17 ldw r2,-16(fp)
8022860: 10800817 ldw r2,32(r2)
8022864: 10802717 ldw r2,156(r2)
8022868: 20c7883a add r3,r4,r3
802286c: 10c00915 stw r3,36(r2)
rx_packet = tse_ptr->pkt_array_rx[tse_ptr->rx_chain][tse_ptr->rx_descriptor_index];
8022870: e0bffc17 ldw r2,-16(fp)
8022874: 11001317 ldw r4,76(r2)
8022878: e0bffc17 ldw r2,-16(fp)
802287c: 10801417 ldw r2,80(r2)
8022880: e0fffc17 ldw r3,-16(fp)
8022884: 21000264 muli r4,r4,9
8022888: 2085883a add r2,r4,r2
802288c: 10800584 addi r2,r2,22
8022890: 100490ba slli r2,r2,2
8022894: 1885883a add r2,r3,r2
8022898: 10800017 ldw r2,0(r2)
802289c: e0bffe15 stw r2,-8(fp)
rx_packet->nb_prot = rx_packet->nb_buff + ETHHDR_SIZE;
80228a0: e0bffe17 ldw r2,-8(fp)
80228a4: 10800117 ldw r2,4(r2)
80228a8: 10c00404 addi r3,r2,16
80228ac: e0bffe17 ldw r2,-8(fp)
80228b0: 10c00315 stw r3,12(r2)
rx_packet->nb_plen = pklen - 14;
80228b4: e0bfff17 ldw r2,-4(fp)
80228b8: 10bffc84 addi r2,r2,-14
80228bc: 1007883a mov r3,r2
80228c0: e0bffe17 ldw r2,-8(fp)
80228c4: 10c00415 stw r3,16(r2)
rx_packet->nb_tstamp = cticks;
80228c8: d0a07d17 ldw r2,-32268(gp)
80228cc: 1007883a mov r3,r2
80228d0: e0bffe17 ldw r2,-8(fp)
80228d4: 10c00515 stw r3,20(r2)
rx_packet->net = tse_ptr->netp;
80228d8: e0bffc17 ldw r2,-16(fp)
80228dc: 10c00817 ldw r3,32(r2)
80228e0: e0bffe17 ldw r2,-8(fp)
80228e4: 10c00615 stw r3,24(r2)
// set packet type for demux routine
eth = (struct ethhdr *)(rx_packet->nb_buff + ETHHDR_BIAS);
80228e8: e0bffe17 ldw r2,-8(fp)
80228ec: 10800117 ldw r2,4(r2)
80228f0: 10800084 addi r2,r2,2
80228f4: e0bffd15 stw r2,-12(fp)
rx_packet->type = eth->e_type;
80228f8: e0bffd17 ldw r2,-12(fp)
80228fc: 10c0030b ldhu r3,12(r2)
8022900: e0bffe17 ldw r2,-8(fp)
8022904: 10c0080d sth r3,32(r2)
putq(&rcvdq, rx_packet);
8022908: e17ffe17 ldw r5,-8(fp)
802290c: 010201b4 movhi r4,2054
8022910: 2136ab04 addi r4,r4,-9556
8022914: 80289900 call 8028990 <putq>
tse_ptr->rx_descriptor_index++;
8022918: e0bffc17 ldw r2,-16(fp)
802291c: 10801417 ldw r2,80(r2)
8022920: 10c00044 addi r3,r2,1
8022924: e0bffc17 ldw r2,-16(fp)
8022928: 10c01415 stw r3,80(r2)
}
802292c: 0001883a nop
8022930: e037883a mov sp,fp
8022934: dfc00117 ldw ra,4(sp)
8022938: df000017 ldw fp,0(sp)
802293c: dec00204 addi sp,sp,8
8022940: f800283a ret
08022944 <tse_mac_stats>:
int tse_mac_stats(void * pio, int iface)
{
8022944: defffc04 addi sp,sp,-16
8022948: dfc00315 stw ra,12(sp)
802294c: df000215 stw fp,8(sp)
8022950: df000204 addi fp,sp,8
8022954: e13fff15 stw r4,-4(fp)
8022958: e17ffe15 stw r5,-8(fp)
ns_printf(pio, "tse_mac_stats(), stats will be added later!\n");
802295c: 01420174 movhi r5,2053
8022960: 2966a004 addi r5,r5,-25984
8022964: e13fff17 ldw r4,-4(fp)
8022968: 80273900 call 8027390 <ns_printf>
return SUCCESS;
802296c: 0005883a mov r2,zero
}
8022970: e037883a mov sp,fp
8022974: dfc00117 ldw ra,4(sp)
8022978: df000017 ldw fp,0(sp)
802297c: dec00204 addi sp,sp,8
8022980: f800283a ret
08022984 <tse_mac_close>:
* @API TYPE - Public
* @param iface index of the NET interface associated with the TSE MAC.
* @return SUCCESS
*/
int tse_mac_close(int iface)
{
8022984: defffc04 addi sp,sp,-16
8022988: dfc00315 stw ra,12(sp)
802298c: df000215 stw fp,8(sp)
8022990: df000204 addi fp,sp,8
8022994: e13ffe15 stw r4,-8(fp)
int state;
/* status = down */
nets[iface]->n_mib->ifAdminStatus = ALTERA_TSE_ADMIN_STATUS_DOWN;
8022998: e0bffe17 ldw r2,-8(fp)
802299c: 100690ba slli r3,r2,2
80229a0: 008201b4 movhi r2,2054
80229a4: 1885883a add r2,r3,r2
80229a8: 10b77017 ldw r2,-8768(r2)
80229ac: 10802717 ldw r2,156(r2)
80229b0: 00c00084 movi r3,2
80229b4: 10c00615 stw r3,24(r2)
/* disable the interrupt in the OS*/
alt_msgdma_register_callback(tse[iface].mi.rx_msgdma, 0, 0, 0);
80229b8: e0bffe17 ldw r2,-8(fp)
80229bc: 10c02924 muli r3,r2,164
80229c0: 008201b4 movhi r2,2054
80229c4: 1885883a add r2,r3,r2
80229c8: 10b5c517 ldw r2,-10476(r2)
80229cc: 000f883a mov r7,zero
80229d0: 000d883a mov r6,zero
80229d4: 000b883a mov r5,zero
80229d8: 1009883a mov r4,r2
80229dc: 80200940 call 8020094 <alt_msgdma_register_callback>
/* Disable Receive path on the device*/
state = IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base);
80229e0: e0bffe17 ldw r2,-8(fp)
80229e4: 10c02924 muli r3,r2,164
80229e8: 008201b4 movhi r2,2054
80229ec: 1885883a add r2,r3,r2
80229f0: 10b5c317 ldw r2,-10484(r2)
80229f4: 10800204 addi r2,r2,8
80229f8: 10800037 ldwio r2,0(r2)
80229fc: e0bfff15 stw r2,-4(fp)
IOWR_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base,state & ~ALTERA_TSEMAC_CMD_RX_ENA_MSK);
8022a00: e0bffe17 ldw r2,-8(fp)
8022a04: 10c02924 muli r3,r2,164
8022a08: 008201b4 movhi r2,2054
8022a0c: 1885883a add r2,r3,r2
8022a10: 10b5c317 ldw r2,-10484(r2)
8022a14: 10800204 addi r2,r2,8
8022a18: e13fff17 ldw r4,-4(fp)
8022a1c: 00ffff44 movi r3,-3
8022a20: 20c6703a and r3,r4,r3
8022a24: 10c00035 stwio r3,0(r2)
/* status = down */
nets[iface]->n_mib->ifOperStatus = ALTERA_TSE_ADMIN_STATUS_DOWN;
8022a28: e0bffe17 ldw r2,-8(fp)
8022a2c: 100690ba slli r3,r2,2
8022a30: 008201b4 movhi r2,2054
8022a34: 1885883a add r2,r3,r2
8022a38: 10b77017 ldw r2,-8768(r2)
8022a3c: 10802717 ldw r2,156(r2)
8022a40: 00c00084 movi r3,2
8022a44: 10c00715 stw r3,28(r2)
return SUCCESS;
8022a48: 0005883a mov r2,zero
}
8022a4c: e037883a mov sp,fp
8022a50: dfc00117 ldw ra,4(sp)
8022a54: df000017 ldw fp,0(sp)
8022a58: dec00204 addi sp,sp,8
8022a5c: f800283a ret
08022a60 <close>:
* (for files and device drivers) or the InterNiche soclose() function for
* sockets.
*/
int close (int fd)
{
8022a60: defffd04 addi sp,sp,-12
8022a64: dfc00215 stw ra,8(sp)
8022a68: df000115 stw fp,4(sp)
8022a6c: df000104 addi fp,sp,4
8022a70: e13fff15 stw r4,-4(fp)
return (fd < ALT_MAX_FD) ? alt_close (fd) : t_socketclose ((long) fd);
8022a74: e0bfff17 ldw r2,-4(fp)
8022a78: 10800408 cmpgei r2,r2,16
8022a7c: 1000031e bne r2,zero,8022a8c <close+0x2c>
8022a80: e13fff17 ldw r4,-4(fp)
8022a84: 80370f00 call 80370f0 <alt_close>
8022a88: 00000206 br 8022a94 <close+0x34>
8022a8c: e13fff17 ldw r4,-4(fp)
8022a90: 802ce700 call 802ce70 <t_socketclose>
}
8022a94: e037883a mov sp,fp
8022a98: dfc00117 ldw ra,4(sp)
8022a9c: df000017 ldw fp,0(sp)
8022aa0: dec00204 addi sp,sp,8
8022aa4: f800283a ret
08022aa8 <iniche_devices_init>:
* total number of interfaces after initialization.
*/
int iniche_devices_init(
int if_count)
{
8022aa8: defff504 addi sp,sp,-44
8022aac: dfc00a15 stw ra,40(sp)
8022ab0: df000915 stw fp,36(sp)
8022ab4: df000904 addi fp,sp,36
8022ab8: e13ff815 stw r4,-32(fp)
netmask,
gw;
int use_dhcp;
/* Get the InterNiche device list. */
p_dev = (alt_iniche_dev *) (alt_iniche_dev_list.next);
8022abc: d0a00f17 ldw r2,-32708(gp)
8022ac0: e0bfff15 stw r2,-4(fp)
p_dev_list_end = (alt_iniche_dev *) (&(alt_iniche_dev_list.next));
8022ac4: d0a00f04 addi r2,gp,-32708
8022ac8: e0bffe15 stw r2,-8(fp)
/* Initialize each InterNiche device. */
while (p_dev != p_dev_list_end)
8022acc: 00003606 br 8022ba8 <iniche_devices_init+0x100>
{
/* Initialize the InterNiche device data record. */
p_dev->p_driver_data = p_dev;
8022ad0: e0bfff17 ldw r2,-4(fp)
8022ad4: e0ffff17 ldw r3,-4(fp)
8022ad8: 10c00415 stw r3,16(r2)
p_dev->if_num = if_count;
8022adc: e0bfff17 ldw r2,-4(fp)
8022ae0: e0fff817 ldw r3,-32(fp)
8022ae4: 10c00515 stw r3,20(r2)
p_dev->p_net = nets[p_dev->if_num];
8022ae8: e0bfff17 ldw r2,-4(fp)
8022aec: 10800517 ldw r2,20(r2)
8022af0: 100690ba slli r3,r2,2
8022af4: 008201b4 movhi r2,2054
8022af8: 1885883a add r2,r3,r2
8022afc: 10f77017 ldw r3,-8768(r2)
8022b00: e0bfff17 ldw r2,-4(fp)
8022b04: 10c00615 stw r3,24(r2)
/* Perform device specific initialization. */
(*(p_dev->init_func))(p_dev);
8022b08: e0bfff17 ldw r2,-4(fp)
8022b0c: 10800317 ldw r2,12(r2)
8022b10: e13fff17 ldw r4,-4(fp)
8022b14: 103ee83a callr r2
/* Get the interface IP address. */
p_net = p_dev->p_net;
8022b18: e0bfff17 ldw r2,-4(fp)
8022b1c: 10800617 ldw r2,24(r2)
8022b20: e0bffd15 stw r2,-12(fp)
if (get_ip_addr(p_dev, &ipaddr, &netmask, &gw, &use_dhcp))
8022b24: e17ffa04 addi r5,fp,-24
8022b28: e13ffb04 addi r4,fp,-20
8022b2c: e0fffc04 addi r3,fp,-16
8022b30: e0bff904 addi r2,fp,-28
8022b34: d8800015 stw r2,0(sp)
8022b38: 280f883a mov r7,r5
8022b3c: 200d883a mov r6,r4
8022b40: 180b883a mov r5,r3
8022b44: e13fff17 ldw r4,-4(fp)
8022b48: 800123c0 call 800123c <get_ip_addr>
8022b4c: 10001026 beq r2,zero,8022b90 <iniche_devices_init+0xe8>
*/
if (use_dhcp) {
p_net->n_flags |= NF_DHCPC;
}
#endif
p_net->n_ipaddr = ipaddr;
8022b50: e0fffc17 ldw r3,-16(fp)
8022b54: e0bffd17 ldw r2,-12(fp)
8022b58: 10c00a15 stw r3,40(r2)
p_net->snmask = netmask;
8022b5c: e0fffb17 ldw r3,-20(fp)
8022b60: e0bffd17 ldw r2,-12(fp)
8022b64: 10c00c15 stw r3,48(r2)
p_net->n_defgw = gw;
8022b68: e0fffa17 ldw r3,-24(fp)
8022b6c: e0bffd17 ldw r2,-12(fp)
8022b70: 10c00d15 stw r3,52(r2)
#ifdef IP_MULTICAST
p_net->n_mcastlist = mcastlist;
8022b74: e0fffd17 ldw r3,-12(fp)
8022b78: 00820134 movhi r2,2052
8022b7c: 10a28e04 addi r2,r2,-30152
8022b80: 18802b15 stw r2,172(r3)
#if defined (IGMP_V1) || defined (IGMP_V2)
p_net->igmp_oper_mode = IGMP_MODE_DEFAULT;
8022b84: e0bffd17 ldw r2,-12(fp)
8022b88: 00c00084 movi r3,2
8022b8c: 10c02f05 stb r3,188(r2)
#endif /* IGMPv1 or IGMPv2 */
#endif /* IP_MULTICAST */
}
/* Initialize next device. */
if_count++;
8022b90: e0bff817 ldw r2,-32(fp)
8022b94: 10800044 addi r2,r2,1
8022b98: e0bff815 stw r2,-32(fp)
p_dev = (alt_iniche_dev *) p_dev->llist.next;
8022b9c: e0bfff17 ldw r2,-4(fp)
8022ba0: 10800017 ldw r2,0(r2)
8022ba4: e0bfff15 stw r2,-4(fp)
while (p_dev != p_dev_list_end)
8022ba8: e0ffff17 ldw r3,-4(fp)
8022bac: e0bffe17 ldw r2,-8(fp)
8022bb0: 18bfc71e bne r3,r2,8022ad0 <iniche_devices_init+0x28>
}
return (if_count);
8022bb4: e0bff817 ldw r2,-32(fp)
}
8022bb8: e037883a mov sp,fp
8022bbc: dfc00117 ldw ra,4(sp)
8022bc0: df000017 ldw fp,0(sp)
8022bc4: dec00204 addi sp,sp,8
8022bc8: f800283a ret
08022bcc <read>:
* (for files and device drivers) or the InterNiche recvfrom() function for
* sockets.
*/
int read (int fd, void *ptr, size_t len)
{
8022bcc: defff904 addi sp,sp,-28
8022bd0: dfc00615 stw ra,24(sp)
8022bd4: df000515 stw fp,20(sp)
8022bd8: df000504 addi fp,sp,20
8022bdc: e13fff15 stw r4,-4(fp)
8022be0: e17ffe15 stw r5,-8(fp)
8022be4: e1bffd15 stw r6,-12(fp)
return (fd < ALT_MAX_FD) ? alt_read (fd, ptr, len)
: recvfrom(fd, ptr, len, 0, NULL, NULL);
8022be8: e0bfff17 ldw r2,-4(fp)
8022bec: 10800408 cmpgei r2,r2,16
8022bf0: 1000051e bne r2,zero,8022c08 <read+0x3c>
return (fd < ALT_MAX_FD) ? alt_read (fd, ptr, len)
8022bf4: e1bffd17 ldw r6,-12(fp)
8022bf8: e17ffe17 ldw r5,-8(fp)
8022bfc: e13fff17 ldw r4,-4(fp)
8022c00: 8037d340 call 8037d34 <alt_read>
: recvfrom(fd, ptr, len, 0, NULL, NULL);
8022c04: 00000806 br 8022c28 <read+0x5c>
8022c08: e0bffd17 ldw r2,-12(fp)
8022c0c: d8000115 stw zero,4(sp)
8022c10: d8000015 stw zero,0(sp)
8022c14: 000f883a mov r7,zero
8022c18: 100d883a mov r6,r2
8022c1c: e17ffe17 ldw r5,-8(fp)
8022c20: e13fff17 ldw r4,-4(fp)
8022c24: 80269300 call 8026930 <bsd_recvfrom>
}
8022c28: e037883a mov sp,fp
8022c2c: dfc00117 ldw ra,4(sp)
8022c30: df000017 ldw fp,0(sp)
8022c34: dec00204 addi sp,sp,8
8022c38: f800283a ret
08022c3c <write>:
* This implementation vectors requests to either the HAL alt_write() function
* (for files and device drivers) or the InterNiche send() function for sockets.
*/
int write (int fd, const void *ptr, size_t len)
{
8022c3c: defffb04 addi sp,sp,-20
8022c40: dfc00415 stw ra,16(sp)
8022c44: df000315 stw fp,12(sp)
8022c48: df000304 addi fp,sp,12
8022c4c: e13fff15 stw r4,-4(fp)
8022c50: e17ffe15 stw r5,-8(fp)
8022c54: e1bffd15 stw r6,-12(fp)
if (fd < ALT_MAX_FD)
8022c58: e0bfff17 ldw r2,-4(fp)
8022c5c: 10800408 cmpgei r2,r2,16
8022c60: 1000051e bne r2,zero,8022c78 <write+0x3c>
{
return alt_write (fd, ptr, len);
8022c64: e1bffd17 ldw r6,-12(fp)
8022c68: e17ffe17 ldw r5,-8(fp)
8022c6c: e13fff17 ldw r4,-4(fp)
8022c70: 803826c0 call 803826c <alt_write>
8022c74: 00000606 br 8022c90 <write+0x54>
}
else
{
return send (fd, (void*) ptr, len, 0);
8022c78: e0bffd17 ldw r2,-12(fp)
8022c7c: 000f883a mov r7,zero
8022c80: 100d883a mov r6,r2
8022c84: e17ffe17 ldw r5,-8(fp)
8022c88: e13fff17 ldw r4,-4(fp)
8022c8c: 802cb9c0 call 802cb9c <t_send>
}
}
8022c90: e037883a mov sp,fp
8022c94: dfc00117 ldw ra,4(sp)
8022c98: df000017 ldw fp,0(sp)
8022c9c: dec00204 addi sp,sp,8
8022ca0: f800283a ret
08022ca4 <etainit>:
* RETURNS: int 0 if OK, else nonzero
*/
int
etainit(void)
{
8022ca4: defffe04 addi sp,sp,-8
8022ca8: dfc00115 stw ra,4(sp)
8022cac: df000015 stw fp,0(sp)
8022cb0: d839883a mov fp,sp
/* register ARP type with the Net Driver */
if (reg_type(ET_ARP) != 0)
8022cb4: 01018204 movi r4,1544
8022cb8: 80241c80 call 80241c8 <reg_type>
8022cbc: 10000526 beq r2,zero,8022cd4 <etainit+0x30>
{
#ifdef NPDEBUG
dprintf("ARP: unable to register type with MAC Driver\n");
8022cc0: 01020174 movhi r4,2053
8022cc4: 2126ac04 addi r4,r4,-25936
8022cc8: 8002d9c0 call 8002d9c <puts>
#endif
return (1);
8022ccc: 00800044 movi r2,1
8022cd0: 00000106 br 8022cd8 <etainit+0x34>
}
return (0);
8022cd4: 0005883a mov r2,zero
}
8022cd8: e037883a mov sp,fp
8022cdc: dfc00117 ldw ra,4(sp)
8022ce0: df000017 ldw fp,0(sp)
8022ce4: dec00204 addi sp,sp,8
8022ce8: f800283a ret
08022cec <et_send>:
* and MIB info in the packet header.
*/
int
et_send(PACKET pkt, struct arptabent *tp)
{
8022cec: defff904 addi sp,sp,-28
8022cf0: dfc00615 stw ra,24(sp)
8022cf4: df000515 stw fp,20(sp)
8022cf8: df000504 addi fp,sp,20
8022cfc: e13ffc15 stw r4,-16(fp)
8022d00: e17ffb15 stw r5,-20(fp)
char *ethhdr;
IFMIB etif = pkt->net->n_mib; /* mib info for this ethernet interface */
8022d04: e0bffc17 ldw r2,-16(fp)
8022d08: 10800617 ldw r2,24(r2)
8022d0c: 10802717 ldw r2,156(r2)
8022d10: e0bffe15 stw r2,-8(fp)
int err;
tp->lasttime = cticks;
8022d14: d0e07d17 ldw r3,-32268(gp)
8022d18: e0bffb17 ldw r2,-20(fp)
8022d1c: 10c00615 stw r3,24(r2)
pkt->nb_prot -= ETHHDR_SIZE; /* prepare for prepending ethernet header */
8022d20: e0bffc17 ldw r2,-16(fp)
8022d24: 10800317 ldw r2,12(r2)
8022d28: 10fffc04 addi r3,r2,-16
8022d2c: e0bffc17 ldw r2,-16(fp)
8022d30: 10c00315 stw r3,12(r2)
pkt->nb_plen += ETHHDR_SIZE;
8022d34: e0bffc17 ldw r2,-16(fp)
8022d38: 10800417 ldw r2,16(r2)
8022d3c: 10c00404 addi r3,r2,16
8022d40: e0bffc17 ldw r2,-16(fp)
8022d44: 10c00415 stw r3,16(r2)
ethhdr = pkt->nb_prot + ETHHDR_BIAS;
8022d48: e0bffc17 ldw r2,-16(fp)
8022d4c: 10800317 ldw r2,12(r2)
8022d50: 10800084 addi r2,r2,2
8022d54: e0bffd15 stw r2,-12(fp)
MEMMOVE(snap, snapdata, 6);
snap->type = ARPIP;
}
#endif /* IEEE_802_3 */
if (ethhdr < pkt->nb_buff) /* sanity check pointer */
8022d58: e0bffc17 ldw r2,-16(fp)
8022d5c: 10800117 ldw r2,4(r2)
8022d60: e0fffd17 ldw r3,-12(fp)
8022d64: 1880032e bgeu r3,r2,8022d74 <et_send+0x88>
panic("et_send: prepend");
8022d68: 01020174 movhi r4,2053
8022d6c: 2126b804 addi r4,r4,-25888
8022d70: 80271780 call 8027178 <panic>
MEMMOVE(ethhdr + ET_DSTOFF, tp->t_phy_addr, 6); /* set pkt's MAC dst addr */
8022d74: e0bffb17 ldw r2,-20(fp)
8022d78: 10800104 addi r2,r2,4
8022d7c: 01800184 movi r6,6
8022d80: 100b883a mov r5,r2
8022d84: e13ffd17 ldw r4,-12(fp)
8022d88: 80087b80 call 80087b8 <memmove>
MEMMOVE(ethhdr + ET_SRCOFF, etif->ifPhysAddress, 6); /* MAC src */
8022d8c: e0bffd17 ldw r2,-12(fp)
8022d90: 10c00184 addi r3,r2,6
8022d94: e0bffe17 ldw r2,-8(fp)
8022d98: 10800517 ldw r2,20(r2)
8022d9c: 01800184 movi r6,6
8022da0: 100b883a mov r5,r2
8022da4: 1809883a mov r4,r3
8022da8: 80087b80 call 80087b8 <memmove>
/* nice clean ethernet II header */
if ((tp->flags & (ET_ETH2|ET_SNAP)) != ET_SNAP)
8022dac: e0bffb17 ldw r2,-20(fp)
8022db0: 1080070b ldhu r2,28(r2)
8022db4: 10bfffcc andi r2,r2,65535
8022db8: 108000cc andi r2,r2,3
8022dbc: 108000a0 cmpeqi r2,r2,2
8022dc0: 1000041e bne r2,zero,8022dd4 <et_send+0xe8>
ET_TYPE_SET(ethhdr, ntohs(ARPIP));
8022dc4: e0bffd17 ldw r2,-12(fp)
8022dc8: 10800304 addi r2,r2,12
8022dcc: 00c00204 movi r3,8
8022dd0: 10c00005 stb r3,0(r2)
8022dd4: e0bffd17 ldw r2,-12(fp)
8022dd8: 10800344 addi r2,r2,13
8022ddc: 10000005 stb zero,0(r2)
ET_TYPE_SET(ethhdr, len8023);
}
#endif /* IEEE_802_3 */
/* if a packet oriented send exists, use it: */
if (pkt->net->pkt_send)
8022de0: e0bffc17 ldw r2,-16(fp)
8022de4: 10800617 ldw r2,24(r2)
8022de8: 10800417 ldw r2,16(r2)
8022dec: 10000726 beq r2,zero,8022e0c <et_send+0x120>
err = pkt->net->pkt_send(pkt); /* send packet to media */
8022df0: e0bffc17 ldw r2,-16(fp)
8022df4: 10800617 ldw r2,24(r2)
8022df8: 10800417 ldw r2,16(r2)
8022dfc: e13ffc17 ldw r4,-16(fp)
8022e00: 103ee83a callr r2
8022e04: e0bfff15 stw r2,-4(fp)
8022e08: 00001206 br 8022e54 <et_send+0x168>
else /* else use older raw_send routine */
{
/* sent to media */
err = pkt->net->raw_send(pkt->net, pkt->nb_prot, pkt->nb_plen);
8022e0c: e0bffc17 ldw r2,-16(fp)
8022e10: 10800617 ldw r2,24(r2)
8022e14: 10800317 ldw r2,12(r2)
8022e18: e0fffc17 ldw r3,-16(fp)
8022e1c: 19000617 ldw r4,24(r3)
8022e20: e0fffc17 ldw r3,-16(fp)
8022e24: 19400317 ldw r5,12(r3)
8022e28: e0fffc17 ldw r3,-16(fp)
8022e2c: 18c00417 ldw r3,16(r3)
8022e30: 180d883a mov r6,r3
8022e34: 103ee83a callr r2
8022e38: e0bfff15 stw r2,-4(fp)
LOCK_NET_RESOURCE(FREEQ_RESID);
8022e3c: 01000084 movi r4,2
8022e40: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8022e44: e13ffc17 ldw r4,-16(fp)
8022e48: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8022e4c: 01000084 movi r4,2
8022e50: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
return (err);
8022e54: e0bfff17 ldw r2,-4(fp)
}
8022e58: e037883a mov sp,fp
8022e5c: dfc00117 ldw ra,4(sp)
8022e60: df000017 ldw fp,0(sp)
8022e64: dec00204 addi sp,sp,8
8022e68: f800283a ret
08022e6c <arp_free_pending>:
* and mark the entry "unused".
*/
void
arp_free_pending(struct arptabent *entry)
{
8022e6c: defffb04 addi sp,sp,-20
8022e70: dfc00415 stw ra,16(sp)
8022e74: df000315 stw fp,12(sp)
8022e78: df000304 addi fp,sp,12
8022e7c: e13ffd15 stw r4,-12(fp)
PACKET tmppkt;
PACKET nextpkt;
/* entry->pending has the linked list of all pending packets */
tmppkt = entry->pending;
8022e80: e0bffd17 ldw r2,-12(fp)
8022e84: 10800417 ldw r2,16(r2)
8022e88: e0bfff15 stw r2,-4(fp)
entry->pending = (PACKET)NULL;
8022e8c: e0bffd17 ldw r2,-12(fp)
8022e90: 10000415 stw zero,16(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
8022e94: 01000084 movi r4,2
8022e98: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/* free all pending packets */
while (tmppkt)
8022e9c: 00000906 br 8022ec4 <arp_free_pending+0x58>
{
nextpkt = tmppkt->next; /* save the next packet in list */
8022ea0: e0bfff17 ldw r2,-4(fp)
8022ea4: 10800017 ldw r2,0(r2)
8022ea8: e0bffe15 stw r2,-8(fp)
tmppkt->next = (PACKET)NULL;
8022eac: e0bfff17 ldw r2,-4(fp)
8022eb0: 10000015 stw zero,0(r2)
pk_free(tmppkt); /* free current packet */
8022eb4: e13fff17 ldw r4,-4(fp)
8022eb8: 80287480 call 8028748 <pk_free>
tmppkt = nextpkt; /* process the next packet */
8022ebc: e0bffe17 ldw r2,-8(fp)
8022ec0: e0bfff15 stw r2,-4(fp)
while (tmppkt)
8022ec4: e0bfff17 ldw r2,-4(fp)
8022ec8: 103ff51e bne r2,zero,8022ea0 <arp_free_pending+0x34>
}
entry->t_pro_addr = 0; /* mark the entry "unused" */
8022ecc: e0bffd17 ldw r2,-12(fp)
8022ed0: 10000015 stw zero,0(r2)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8022ed4: 01000084 movi r4,2
8022ed8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
8022edc: 0001883a nop
8022ee0: e037883a mov sp,fp
8022ee4: dfc00117 ldw ra,4(sp)
8022ee8: df000017 ldw fp,0(sp)
8022eec: dec00204 addi sp,sp,8
8022ef0: f800283a ret
08022ef4 <arp_send_pending>:
* Clear the list (entry->pending) after sending the packets.
*/
void
arp_send_pending(struct arptabent *entry)
{
8022ef4: defffc04 addi sp,sp,-16
8022ef8: dfc00315 stw ra,12(sp)
8022efc: df000215 stw fp,8(sp)
8022f00: df000204 addi fp,sp,8
8022f04: e13ffe15 stw r4,-8(fp)
PACKET tmppkt = entry->pending;
8022f08: e0bffe17 ldw r2,-8(fp)
8022f0c: 10800417 ldw r2,16(r2)
8022f10: e0bfff15 stw r2,-4(fp)
/* entry->pending has the linked list of all pending packets */
/* send all pending packets */
while ((tmppkt = entry->pending) != (PACKET)NULL)
8022f14: 00000906 br 8022f3c <arp_send_pending+0x48>
{
entry->pending = tmppkt->next; /* unlink the next packet */
8022f18: e0bfff17 ldw r2,-4(fp)
8022f1c: 10c00017 ldw r3,0(r2)
8022f20: e0bffe17 ldw r2,-8(fp)
8022f24: 10c00415 stw r3,16(r2)
tmppkt->next = (PACKET)NULL;
8022f28: e0bfff17 ldw r2,-4(fp)
8022f2c: 10000015 stw zero,0(r2)
et_send(tmppkt, entry); /* try send again */
8022f30: e17ffe17 ldw r5,-8(fp)
8022f34: e13fff17 ldw r4,-4(fp)
8022f38: 8022cec0 call 8022cec <et_send>
while ((tmppkt = entry->pending) != (PACKET)NULL)
8022f3c: e0bffe17 ldw r2,-8(fp)
8022f40: 10800417 ldw r2,16(r2)
8022f44: e0bfff15 stw r2,-4(fp)
8022f48: e0bfff17 ldw r2,-4(fp)
8022f4c: 103ff21e bne r2,zero,8022f18 <arp_send_pending+0x24>
}
}
8022f50: 0001883a nop
8022f54: e037883a mov sp,fp
8022f58: dfc00117 ldw ra,4(sp)
8022f5c: df000017 ldw fp,0(sp)
8022f60: dec00204 addi sp,sp,8
8022f64: f800283a ret
08022f68 <send_arp>:
* timeout will eventually free packet.
*/
int
send_arp(PACKET pkt, ip_addr dest_ip)
{
8022f68: defff404 addi sp,sp,-48
8022f6c: dfc00b15 stw ra,44(sp)
8022f70: df000a15 stw fp,40(sp)
8022f74: df000a04 addi fp,sp,40
8022f78: e13ff715 stw r4,-36(fp)
8022f7c: e17ff615 stw r5,-40(fp)
struct arptabent * oldest;
char * ethhdr;
NET net = pkt->net;
8022f80: e0bff717 ldw r2,-36(fp)
8022f84: 10800617 ldw r2,24(r2)
8022f88: e0bfff15 stw r2,-4(fp)
struct arp_hdr * arphdr;
IFMIB etif = pkt->net->n_mib; /* mib info for this ethernet interface */
8022f8c: e0bff717 ldw r2,-36(fp)
8022f90: 10800617 ldw r2,24(r2)
8022f94: 10802717 ldw r2,156(r2)
8022f98: e0bffe15 stw r2,-8(fp)
} dest_ip_ptr;
#endif /* ETHMCAST */
/* If we are broadcasting or multicasting ... */
if ((dest_ip == 0xFFFFFFFF) ||
8022f9c: e0bff617 ldw r2,-40(fp)
8022fa0: 10bfffe0 cmpeqi r2,r2,-1
8022fa4: 1000191e bne r2,zero,802300c <send_arp+0xa4>
((dest_ip & ~(net->snmask)) == (0xFFFFFFFF & ~(net->snmask)))
8022fa8: e0bfff17 ldw r2,-4(fp)
8022fac: 10800c17 ldw r2,48(r2)
8022fb0: 0086303a nor r3,zero,r2
8022fb4: e0bff617 ldw r2,-40(fp)
8022fb8: 1886703a and r3,r3,r2
8022fbc: e0bfff17 ldw r2,-4(fp)
8022fc0: 10800c17 ldw r2,48(r2)
8022fc4: 0084303a nor r2,zero,r2
if ((dest_ip == 0xFFFFFFFF) ||
8022fc8: 18801026 beq r3,r2,802300c <send_arp+0xa4>
|| (IN_MULTICAST(ntohl(dest_ip)) ))
8022fcc: e0bff617 ldw r2,-40(fp)
8022fd0: 1006d63a srli r3,r2,24
8022fd4: e0bff617 ldw r2,-40(fp)
8022fd8: 1004d23a srli r2,r2,8
8022fdc: 10bfc00c andi r2,r2,65280
8022fe0: 1886b03a or r3,r3,r2
8022fe4: e0bff617 ldw r2,-40(fp)
8022fe8: 1004923a slli r2,r2,8
8022fec: 10803fec andhi r2,r2,255
8022ff0: 1886b03a or r3,r3,r2
8022ff4: e0bff617 ldw r2,-40(fp)
8022ff8: 1004963a slli r2,r2,24
8022ffc: 1884b03a or r2,r3,r2
8023000: 10fc002c andhi r3,r2,61440
8023004: 00b80034 movhi r2,57344
8023008: 1880391e bne r3,r2,80230f0 <send_arp+0x188>
((dest_ip & ~(net->snmask)) == (0xFFFFFFFF & ~(net->snmask))))
#endif /* IP_MULTICAST */
{
/* get unused or oldest entry in table */
oldest = make_arp_entry(dest_ip, pkt->net);
802300c: e0bff717 ldw r2,-36(fp)
8023010: 10800617 ldw r2,24(r2)
8023014: 100b883a mov r5,r2
8023018: e13ff617 ldw r4,-40(fp)
802301c: 80235280 call 8023528 <make_arp_entry>
8023020: e0bffc15 stw r2,-16(fp)
/* set MAC destination to ethernet broadcast (all FFs) */
MEMSET(oldest->t_phy_addr, 0xFF, 6);
8023024: e0bffc17 ldw r2,-16(fp)
8023028: 10800104 addi r2,r2,4
802302c: 01800184 movi r6,6
8023030: 01403fc4 movi r5,255
8023034: 1009883a mov r4,r2
8023038: 80088e40 call 80088e4 <memset>
#ifdef IP_MULTICAST
/* If n_mcastlist routine is defined in the net structure,
map IP mcast to Ether multicast */
#ifdef ETHMCAST
if ((pkt->net->n_mcastlist) && (IN_MULTICAST(ntohl(dest_ip))))
802303c: e0bff717 ldw r2,-36(fp)
8023040: 10800617 ldw r2,24(r2)
8023044: 10802b17 ldw r2,172(r2)
8023048: 10002526 beq r2,zero,80230e0 <send_arp+0x178>
802304c: e0bff617 ldw r2,-40(fp)
8023050: 1006d63a srli r3,r2,24
8023054: e0bff617 ldw r2,-40(fp)
8023058: 1004d23a srli r2,r2,8
802305c: 10bfc00c andi r2,r2,65280
8023060: 1886b03a or r3,r3,r2
8023064: e0bff617 ldw r2,-40(fp)
8023068: 1004923a slli r2,r2,8
802306c: 10803fec andhi r2,r2,255
8023070: 1886b03a or r3,r3,r2
8023074: e0bff617 ldw r2,-40(fp)
8023078: 1004963a slli r2,r2,24
802307c: 1884b03a or r2,r3,r2
8023080: 10fc002c andhi r3,r2,61440
8023084: 00b80034 movhi r2,57344
8023088: 1880151e bne r3,r2,80230e0 <send_arp+0x178>
{
/* If IP mcast to be mapped to Ethernet multicast */
dest_ip_ptr.l = dest_ip;
802308c: e0bff617 ldw r2,-40(fp)
8023090: e0bff815 stw r2,-32(fp)
oldest->t_phy_addr[0] = 0x01;
8023094: e0bffc17 ldw r2,-16(fp)
8023098: 00c00044 movi r3,1
802309c: 10c00105 stb r3,4(r2)
oldest->t_phy_addr[1] = 0x00;
80230a0: e0bffc17 ldw r2,-16(fp)
80230a4: 10000145 stb zero,5(r2)
oldest->t_phy_addr[2] = 0x5e;
80230a8: e0bffc17 ldw r2,-16(fp)
80230ac: 00c01784 movi r3,94
80230b0: 10c00185 stb r3,6(r2)
oldest->t_phy_addr[3] = (u_char )(dest_ip_ptr.c[1] & 0x7f);
80230b4: e0bff843 ldbu r2,-31(fp)
80230b8: 10801fcc andi r2,r2,127
80230bc: 1007883a mov r3,r2
80230c0: e0bffc17 ldw r2,-16(fp)
80230c4: 10c001c5 stb r3,7(r2)
oldest->t_phy_addr[4] = (u_char )dest_ip_ptr.c[2];
80230c8: e0fff883 ldbu r3,-30(fp)
80230cc: e0bffc17 ldw r2,-16(fp)
80230d0: 10c00205 stb r3,8(r2)
oldest->t_phy_addr[5] = (u_char )dest_ip_ptr.c[3];
80230d4: e0fff8c3 ldbu r3,-29(fp)
80230d8: e0bffc17 ldw r2,-16(fp)
80230dc: 10c00245 stb r3,9(r2)
}
#endif /* ETHMCAST */
#endif /* IP_MULTICAST */
return (et_send(pkt, oldest));
80230e0: e17ffc17 ldw r5,-16(fp)
80230e4: e13ff717 ldw r4,-36(fp)
80230e8: 8022cec0 call 8022cec <et_send>
80230ec: 0000ae06 br 80233a8 <send_arp+0x440>
/* If packet is addressed to this Ethernet interface, and
* it's not a loopback address, then don't send it on the wire.
* Instead, free the packet and return ENP_NO_ROUTE
*/
if ((pkt->fhost == pkt->net->n_ipaddr) &&
80230f0: e0bff717 ldw r2,-36(fp)
80230f4: 10c00717 ldw r3,28(r2)
80230f8: e0bff717 ldw r2,-36(fp)
80230fc: 10800617 ldw r2,24(r2)
8023100: 10800a17 ldw r2,40(r2)
8023104: 18800d1e bne r3,r2,802313c <send_arp+0x1d4>
((pkt->fhost & htonl(0xFF000000)) != htonl(0x7F000000)))
8023108: e0bff717 ldw r2,-36(fp)
802310c: 10800717 ldw r2,28(r2)
8023110: 10803fcc andi r2,r2,255
if ((pkt->fhost == pkt->net->n_ipaddr) &&
8023114: 10801fe0 cmpeqi r2,r2,127
8023118: 1000081e bne r2,zero,802313c <send_arp+0x1d4>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
802311c: 01000084 movi r4,2
8023120: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8023124: e13ff717 ldw r4,-36(fp)
8023128: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802312c: 01000084 movi r4,2
8023130: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_NO_ROUTE;
8023134: 00bff7c4 movi r2,-33
8023138: 00009b06 br 80233a8 <send_arp+0x440>
}
/* not broadcasting, so get a packet for an ARP request */
LOCK_NET_RESOURCE(FREEQ_RESID);
802313c: 01000084 movi r4,2
8023140: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
arppkt = pk_alloc(arpsize);
8023144: 01000c04 movi r4,48
8023148: 80284340 call 8028434 <pk_alloc>
802314c: e0bffd15 stw r2,-12(fp)
if (!arppkt)
8023150: e0bffd17 ldw r2,-12(fp)
8023154: 1000061e bne r2,zero,8023170 <send_arp+0x208>
{
pk_free(pkt);
8023158: e13ff717 ldw r4,-36(fp)
802315c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023160: 01000084 movi r4,2
8023164: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_RESOURCE;
8023168: 00bffa84 movi r2,-22
802316c: 00008e06 br 80233a8 <send_arp+0x440>
}
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023170: 01000084 movi r4,2
8023174: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
arppkt->nb_prot = arppkt->nb_buff;
8023178: e0bffd17 ldw r2,-12(fp)
802317c: 10c00117 ldw r3,4(r2)
8023180: e0bffd17 ldw r2,-12(fp)
8023184: 10c00315 stw r3,12(r2)
arppkt->nb_plen = arpsize;
8023188: e0bffd17 ldw r2,-12(fp)
802318c: 00c00c04 movi r3,48
8023190: 10c00415 stw r3,16(r2)
arppkt->net = pkt->net;
8023194: e0bff717 ldw r2,-36(fp)
8023198: 10c00617 ldw r3,24(r2)
802319c: e0bffd17 ldw r2,-12(fp)
80231a0: 10c00615 stw r3,24(r2)
/* get unused or oldest entry in table */
oldest = make_arp_entry(dest_ip, pkt->net);
80231a4: e0bff717 ldw r2,-36(fp)
80231a8: 10800617 ldw r2,24(r2)
80231ac: 100b883a mov r5,r2
80231b0: e13ff617 ldw r4,-40(fp)
80231b4: 80235280 call 8023528 <make_arp_entry>
80231b8: e0bffc15 stw r2,-16(fp)
oldest->pending = pkt; /* packet is "pended", not pk_free()d */
80231bc: e0bffc17 ldw r2,-16(fp)
80231c0: e0fff717 ldw r3,-36(fp)
80231c4: 10c00415 stw r3,16(r2)
/* build arp request packet */
ethhdr = arppkt->nb_buff + ETHHDR_BIAS; /* ethernet header at start of buffer */
80231c8: e0bffd17 ldw r2,-12(fp)
80231cc: 10800117 ldw r2,4(r2)
80231d0: 10800084 addi r2,r2,2
80231d4: e0bffb15 stw r2,-20(fp)
arphdr = (struct arp_hdr *)(arppkt->nb_buff + ETHHDR_SIZE); /* arp header follows */
80231d8: e0bffd17 ldw r2,-12(fp)
80231dc: 10800117 ldw r2,4(r2)
80231e0: 10800404 addi r2,r2,16
80231e4: e0bffa15 stw r2,-24(fp)
#ifdef IEEE_802_3
arphdr->ar_hd = ARP8023HW; /* net endian 802.3 arp hardware type (ethernet) */
#else
arphdr->ar_hd = ARPHW; /* net endian Ethernet arp hardware type (ethernet) */
80231e8: e0bffa17 ldw r2,-24(fp)
80231ec: 00c04004 movi r3,256
80231f0: 10c0000d sth r3,0(r2)
#endif /* IEEE_802_3 */
arphdr->ar_pro = ARPIP;
80231f4: e0bffa17 ldw r2,-24(fp)
80231f8: 00c00204 movi r3,8
80231fc: 10c0008d sth r3,2(r2)
arphdr->ar_hln = 6;
8023200: e0bffa17 ldw r2,-24(fp)
8023204: 00c00184 movi r3,6
8023208: 10c00105 stb r3,4(r2)
arphdr->ar_pln = 4;
802320c: e0bffa17 ldw r2,-24(fp)
8023210: 00c00104 movi r3,4
8023214: 10c00145 stb r3,5(r2)
arphdr->ar_op = ARREQ;
8023218: e0bffa17 ldw r2,-24(fp)
802321c: 00c04004 movi r3,256
8023220: 10c0018d sth r3,6(r2)
arphdr->ar_tpa = dest_ip; /* target's IP address */
8023224: e0bffa17 ldw r2,-24(fp)
8023228: e0fff617 ldw r3,-40(fp)
802322c: 10c00715 stw r3,28(r2)
arphdr->ar_spa = pkt->net->n_ipaddr; /* my IP address */
8023230: e0bff717 ldw r2,-36(fp)
8023234: 10800617 ldw r2,24(r2)
8023238: 10c00a17 ldw r3,40(r2)
802323c: e0bffa17 ldw r2,-24(fp)
8023240: 10c00415 stw r3,16(r2)
MEMMOVE(arphdr->ar_sha, etif->ifPhysAddress, 6);
8023244: e0bffa17 ldw r2,-24(fp)
8023248: 10c00204 addi r3,r2,8
802324c: e0bffe17 ldw r2,-8(fp)
8023250: 10800517 ldw r2,20(r2)
8023254: 01800184 movi r6,6
8023258: 100b883a mov r5,r2
802325c: 1809883a mov r4,r3
8023260: 80087b80 call 80087b8 <memmove>
MEMSET(ethhdr + ET_DSTOFF, 0xFF, 6); /* destination to broadcast (all FFs) */
8023264: 01800184 movi r6,6
8023268: 01403fc4 movi r5,255
802326c: e13ffb17 ldw r4,-20(fp)
8023270: 80088e40 call 80088e4 <memset>
MEMMOVE(ethhdr + ET_SRCOFF, etif->ifPhysAddress, 6);
8023274: e0bffb17 ldw r2,-20(fp)
8023278: 10c00184 addi r3,r2,6
802327c: e0bffe17 ldw r2,-8(fp)
8023280: 10800517 ldw r2,20(r2)
8023284: 01800184 movi r6,6
8023288: 100b883a mov r5,r2
802328c: 1809883a mov r4,r3
8023290: 80087b80 call 80087b8 <memmove>
ET_TYPE_SET(ethhdr, ntohs(ET_ARP));
8023294: e0bffb17 ldw r2,-20(fp)
8023298: 10800304 addi r2,r2,12
802329c: 00c00204 movi r3,8
80232a0: 10c00005 stb r3,0(r2)
80232a4: e0bffb17 ldw r2,-20(fp)
80232a8: 10800344 addi r2,r2,13
80232ac: 00c00184 movi r3,6
80232b0: 10c00005 stb r3,0(r2)
#ifdef NO_CC_PACKING /* move ARP fields to proper network boundaries */
{
struct arp_wire * arwp = (struct arp_wire *)arphdr;
80232b4: e0bffa17 ldw r2,-24(fp)
80232b8: e0bff915 stw r2,-28(fp)
MEMMOVE(&arwp->data[AR_SHA], arphdr->ar_sha, 6);
80232bc: e0bff917 ldw r2,-28(fp)
80232c0: 10c00204 addi r3,r2,8
80232c4: e0bffa17 ldw r2,-24(fp)
80232c8: 10800204 addi r2,r2,8
80232cc: 01800184 movi r6,6
80232d0: 100b883a mov r5,r2
80232d4: 1809883a mov r4,r3
80232d8: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arwp->data[AR_SPA], &arphdr->ar_spa, 4);
80232dc: e0bff917 ldw r2,-28(fp)
80232e0: 10c00384 addi r3,r2,14
80232e4: e0bffa17 ldw r2,-24(fp)
80232e8: 10800404 addi r2,r2,16
80232ec: 01800104 movi r6,4
80232f0: 100b883a mov r5,r2
80232f4: 1809883a mov r4,r3
80232f8: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arwp->data[AR_THA], arphdr->ar_tha, 6);
80232fc: e0bff917 ldw r2,-28(fp)
8023300: 10c00484 addi r3,r2,18
8023304: e0bffa17 ldw r2,-24(fp)
8023308: 10800504 addi r2,r2,20
802330c: 01800184 movi r6,6
8023310: 100b883a mov r5,r2
8023314: 1809883a mov r4,r3
8023318: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arwp->data[AR_TPA], &arphdr->ar_tpa, 4);
802331c: e0bff917 ldw r2,-28(fp)
8023320: 10c00604 addi r3,r2,24
8023324: e0bffa17 ldw r2,-24(fp)
8023328: 10800704 addi r2,r2,28
802332c: 01800104 movi r6,4
8023330: 100b883a mov r5,r2
8023334: 1809883a mov r4,r3
8023338: 80087b80 call 80087b8 <memmove>
}
#endif /* IEEE_802_3 */
#ifndef IEEE_802_3_ONLY
/* send arp request - if a packet oriented send exists, use it: */
if (net->pkt_send)
802333c: e0bfff17 ldw r2,-4(fp)
8023340: 10800417 ldw r2,16(r2)
8023344: 10000526 beq r2,zero,802335c <send_arp+0x3f4>
net->pkt_send(arppkt); /* driver should free arppkt later */
8023348: e0bfff17 ldw r2,-4(fp)
802334c: 10800417 ldw r2,16(r2)
8023350: e13ffd17 ldw r4,-12(fp)
8023354: 103ee83a callr r2
8023358: 00000f06 br 8023398 <send_arp+0x430>
else /* use old raw send */
{
net->raw_send(arppkt->net, arppkt->nb_buff, arpsize);
802335c: e0bfff17 ldw r2,-4(fp)
8023360: 10800317 ldw r2,12(r2)
8023364: e0fffd17 ldw r3,-12(fp)
8023368: 19000617 ldw r4,24(r3)
802336c: e0fffd17 ldw r3,-12(fp)
8023370: 18c00117 ldw r3,4(r3)
8023374: 01800c04 movi r6,48
8023378: 180b883a mov r5,r3
802337c: 103ee83a callr r2
LOCK_NET_RESOURCE(FREEQ_RESID);
8023380: 01000084 movi r4,2
8023384: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(arppkt);
8023388: e13ffd17 ldw r4,-12(fp)
802338c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023390: 01000084 movi r4,2
8023394: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
arpReqsOut++;
8023398: d0a06117 ldw r2,-32380(gp)
802339c: 10800044 addi r2,r2,1
80233a0: d0a06115 stw r2,-32380(gp)
LOCK_NET_RESOURCE(FREEQ_RESID);
pk_free(arppkt);
UNLOCK_NET_RESOURCE(FREEQ_RESID);
#endif /* IEEE_802_3_ONLY */
return ENP_SEND_PENDING;
80233a4: 00800044 movi r2,1
}
80233a8: e037883a mov sp,fp
80233ac: dfc00117 ldw ra,4(sp)
80233b0: df000017 ldw fp,0(sp)
80233b4: dec00204 addi sp,sp,8
80233b8: f800283a ret
080233bc <find_oldest_arp>:
* Old entries are removed from the table.
*/
struct arptabent *
find_oldest_arp(ip_addr dest_ip)
{
80233bc: defff804 addi sp,sp,-32
80233c0: dfc00715 stw ra,28(sp)
80233c4: df000615 stw fp,24(sp)
80233c8: df000604 addi fp,sp,24
80233cc: e13ffa15 stw r4,-24(fp)
struct arptabent *tp;
struct arptabent *exact = (struct arptabent *)NULL;
80233d0: e03ffe15 stw zero,-8(fp)
struct arptabent *oldest = (struct arptabent *)NULL;
80233d4: e03ffd15 stw zero,-12(fp)
struct arptabent *empty = (struct arptabent *)NULL;
80233d8: e03ffc15 stw zero,-16(fp)
unsigned long lticks = cticks;
80233dc: d0a07d17 ldw r2,-32268(gp)
80233e0: e0bffb15 stw r2,-20(fp)
/* find lru (or free) entry */
for (tp = &arp_table[0]; tp < &arp_table[MAXARPS]; tp++)
80233e4: 008201b4 movhi r2,2054
80233e8: 10b66604 addi r2,r2,-9832
80233ec: e0bfff15 stw r2,-4(fp)
80233f0: 00003b06 br 80234e0 <find_oldest_arp+0x124>
{
/* age out old, pending entries */
if (tp->pending)
80233f4: e0bfff17 ldw r2,-4(fp)
80233f8: 10800417 ldw r2,16(r2)
80233fc: 10000b26 beq r2,zero,802342c <find_oldest_arp+0x70>
{
/* purge if pending for more than one second */
if ((lticks - tp->createtime) > TPS)
8023400: e0bfff17 ldw r2,-4(fp)
8023404: 10800517 ldw r2,20(r2)
8023408: e0fffb17 ldw r3,-20(fp)
802340c: 1885c83a sub r2,r3,r2
8023410: 10801970 cmpltui r2,r2,101
8023414: 1000171e bne r2,zero,8023474 <find_oldest_arp+0xb8>
{
arp_free_pending(tp); /* free pending packets */
8023418: e13fff17 ldw r4,-4(fp)
802341c: 8022e6c0 call 8022e6c <arp_free_pending>
tp->t_pro_addr = 0; /* mark entry as "unused" */
8023420: e0bfff17 ldw r2,-4(fp)
8023424: 10000015 stw zero,0(r2)
8023428: 00001206 br 8023474 <find_oldest_arp+0xb8>
}
}
else if ((tp->t_pro_addr != 0) &&
802342c: e0bfff17 ldw r2,-4(fp)
8023430: 10800017 ldw r2,0(r2)
8023434: 10000f26 beq r2,zero,8023474 <find_oldest_arp+0xb8>
((int)(lticks - tp->createtime) >= arp_ageout) &&
8023438: e0bfff17 ldw r2,-4(fp)
802343c: 10800517 ldw r2,20(r2)
8023440: e0fffb17 ldw r3,-20(fp)
8023444: 1885c83a sub r2,r3,r2
8023448: 1007883a mov r3,r2
802344c: d0a01117 ldw r2,-32700(gp)
else if ((tp->t_pro_addr != 0) &&
8023450: 18800816 blt r3,r2,8023474 <find_oldest_arp+0xb8>
((int)(lticks - tp->lasttime) >= TPS))
8023454: e0bfff17 ldw r2,-4(fp)
8023458: 10800617 ldw r2,24(r2)
802345c: e0fffb17 ldw r3,-20(fp)
8023460: 1885c83a sub r2,r3,r2
((int)(lticks - tp->createtime) >= arp_ageout) &&
8023464: 10801910 cmplti r2,r2,100
8023468: 1000021e bne r2,zero,8023474 <find_oldest_arp+0xb8>
{
/* entry has "expired" and has not been reference in 1 sec. */
tp->t_pro_addr = 0; /* mark entry as "unused" */
802346c: e0bfff17 ldw r2,-4(fp)
8023470: 10000015 stw zero,0(r2)
}
if (tp->t_pro_addr == dest_ip) /* ip addr already has entry */
8023474: e0bfff17 ldw r2,-4(fp)
8023478: 10800017 ldw r2,0(r2)
802347c: e0fffa17 ldw r3,-24(fp)
8023480: 1880031e bne r3,r2,8023490 <find_oldest_arp+0xd4>
{
exact = tp;
8023484: e0bfff17 ldw r2,-4(fp)
8023488: e0bffe15 stw r2,-8(fp)
802348c: 00001106 br 80234d4 <find_oldest_arp+0x118>
}
else if (tp->t_pro_addr != 0)
8023490: e0bfff17 ldw r2,-4(fp)
8023494: 10800017 ldw r2,0(r2)
8023498: 10000a26 beq r2,zero,80234c4 <find_oldest_arp+0x108>
{
if (!oldest || (tp->lasttime < oldest->lasttime))
802349c: e0bffd17 ldw r2,-12(fp)
80234a0: 10000526 beq r2,zero,80234b8 <find_oldest_arp+0xfc>
80234a4: e0bfff17 ldw r2,-4(fp)
80234a8: 10c00617 ldw r3,24(r2)
80234ac: e0bffd17 ldw r2,-12(fp)
80234b0: 10800617 ldw r2,24(r2)
80234b4: 1880072e bgeu r3,r2,80234d4 <find_oldest_arp+0x118>
oldest = tp;
80234b8: e0bfff17 ldw r2,-4(fp)
80234bc: e0bffd15 stw r2,-12(fp)
80234c0: 00000406 br 80234d4 <find_oldest_arp+0x118>
}
else if (!empty)
80234c4: e0bffc17 ldw r2,-16(fp)
80234c8: 1000021e bne r2,zero,80234d4 <find_oldest_arp+0x118>
empty = tp; /* grab first empty slot */
80234cc: e0bfff17 ldw r2,-4(fp)
80234d0: e0bffc15 stw r2,-16(fp)
for (tp = &arp_table[0]; tp < &arp_table[MAXARPS]; tp++)
80234d4: e0bfff17 ldw r2,-4(fp)
80234d8: 10800804 addi r2,r2,32
80234dc: e0bfff15 stw r2,-4(fp)
80234e0: e0ffff17 ldw r3,-4(fp)
80234e4: 008201b4 movhi r2,2054
80234e8: 10b6a604 addi r2,r2,-9576
80234ec: 18bfc136 bltu r3,r2,80233f4 <find_oldest_arp+0x38>
}
return ((exact) ? exact : ((empty) ? empty : oldest));
80234f0: e0bffe17 ldw r2,-8(fp)
80234f4: 1000061e bne r2,zero,8023510 <find_oldest_arp+0x154>
80234f8: e0bffc17 ldw r2,-16(fp)
80234fc: 10000226 beq r2,zero,8023508 <find_oldest_arp+0x14c>
8023500: e0bffc17 ldw r2,-16(fp)
8023504: 00000306 br 8023514 <find_oldest_arp+0x158>
8023508: e0bffd17 ldw r2,-12(fp)
802350c: 00000106 br 8023514 <find_oldest_arp+0x158>
8023510: e0bffe17 ldw r2,-8(fp)
}
8023514: e037883a mov sp,fp
8023518: dfc00117 ldw ra,4(sp)
802351c: df000017 ldw fp,0(sp)
8023520: dec00204 addi sp,sp,8
8023524: f800283a ret
08023528 <make_arp_entry>:
* active.
*/
struct arptabent *
make_arp_entry(ip_addr dest_ip, NET net)
{
8023528: defffa04 addi sp,sp,-24
802352c: dfc00515 stw ra,20(sp)
8023530: df000415 stw fp,16(sp)
8023534: df000404 addi fp,sp,16
8023538: e13ffd15 stw r4,-12(fp)
802353c: e17ffc15 stw r5,-16(fp)
struct arptabent *oldest;
unsigned long lticks = cticks;
8023540: d0a07d17 ldw r2,-32268(gp)
8023544: e0bfff15 stw r2,-4(fp)
/* find usable (or existing) ARP table entry */
oldest = find_oldest_arp(dest_ip);
8023548: e13ffd17 ldw r4,-12(fp)
802354c: 80233bc0 call 80233bc <find_oldest_arp>
8023550: e0bffe15 stw r2,-8(fp)
/* If recycling entry, don't leak packets which may be stuck here */
if (oldest->pending && (oldest->t_pro_addr != dest_ip))
8023554: e0bffe17 ldw r2,-8(fp)
8023558: 10800417 ldw r2,16(r2)
802355c: 10000626 beq r2,zero,8023578 <make_arp_entry+0x50>
8023560: e0bffe17 ldw r2,-8(fp)
8023564: 10800017 ldw r2,0(r2)
8023568: e0fffd17 ldw r3,-12(fp)
802356c: 18800226 beq r3,r2,8023578 <make_arp_entry+0x50>
{
arp_free_pending(oldest);
8023570: e13ffe17 ldw r4,-8(fp)
8023574: 8022e6c0 call 8022e6c <arp_free_pending>
}
/* partially fill in arp entry */
oldest->t_pro_addr = dest_ip;
8023578: e0bffe17 ldw r2,-8(fp)
802357c: e0fffd17 ldw r3,-12(fp)
8023580: 10c00015 stw r3,0(r2)
oldest->net = net;
8023584: e0bffe17 ldw r2,-8(fp)
8023588: e0fffc17 ldw r3,-16(fp)
802358c: 10c00315 stw r3,12(r2)
oldest->flags = 0;
8023590: e0bffe17 ldw r2,-8(fp)
8023594: 1000070d sth zero,28(r2)
MEMSET(oldest->t_phy_addr, '\0', 6); /* clear mac address */
8023598: e0bffe17 ldw r2,-8(fp)
802359c: 10800104 addi r2,r2,4
80235a0: 01800184 movi r6,6
80235a4: 000b883a mov r5,zero
80235a8: 1009883a mov r4,r2
80235ac: 80088e40 call 80088e4 <memset>
oldest->createtime = oldest->lasttime = lticks;
80235b0: e0bffe17 ldw r2,-8(fp)
80235b4: e0ffff17 ldw r3,-4(fp)
80235b8: 10c00615 stw r3,24(r2)
80235bc: e0bffe17 ldw r2,-8(fp)
80235c0: 10c00617 ldw r3,24(r2)
80235c4: e0bffe17 ldw r2,-8(fp)
80235c8: 10c00515 stw r3,20(r2)
/* start a ARP timer if there isn't one already */
/* update the timeout value if there is a timer */
/* time is specified in milliseconds */
if (arp_timer == 0)
80235cc: d0a05d17 ldw r2,-32396(gp)
80235d0: 1000071e bne r2,zero,80235f0 <make_arp_entry+0xc8>
{
arp_timer = in_timerset(&cb_arpent_tmo, ARPENT_TMO * 1000, 0);
80235d4: 000d883a mov r6,zero
80235d8: 0149c404 movi r5,10000
80235dc: 010200b4 movhi r4,2050
80235e0: 210f3104 addi r4,r4,15556
80235e4: 8038c740 call 8038c74 <in_timerset>
80235e8: d0a05d15 stw r2,-32396(gp)
80235ec: 00000706 br 802360c <make_arp_entry+0xe4>
}
else
{
((struct intimer *)arp_timer)->tmo =
((struct intimer *)arp_timer)->interval + lticks;
80235f0: d0a05d17 ldw r2,-32396(gp)
80235f4: 10c00217 ldw r3,8(r2)
((struct intimer *)arp_timer)->tmo =
80235f8: d0a05d17 ldw r2,-32396(gp)
80235fc: 1009883a mov r4,r2
((struct intimer *)arp_timer)->interval + lticks;
8023600: e0bfff17 ldw r2,-4(fp)
8023604: 1885883a add r2,r3,r2
((struct intimer *)arp_timer)->tmo =
8023608: 20800315 stw r2,12(r4)
}
return oldest;
802360c: e0bffe17 ldw r2,-8(fp)
}
8023610: e037883a mov sp,fp
8023614: dfc00117 ldw ra,4(sp)
8023618: df000017 ldw fp,0(sp)
802361c: dec00204 addi sp,sp,8
8023620: f800283a ret
08023624 <arpReply>:
* must be freed (or reused) herein.
*/
void
arpReply(PACKET pkt)
{
8023624: defff704 addi sp,sp,-36
8023628: dfc00815 stw ra,32(sp)
802362c: df000715 stw fp,28(sp)
8023630: df000704 addi fp,sp,28
8023634: e13ff915 stw r4,-28(fp)
struct arp_hdr *in;
struct arp_hdr *out;
char *ethout;
char *ethin;
LOCK_NET_RESOURCE(FREEQ_RESID);
8023638: 01000084 movi r4,2
802363c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
outpkt = pk_alloc(arpsize);
8023640: 01000c04 movi r4,48
8023644: 80284340 call 8028434 <pk_alloc>
8023648: e0bfff15 stw r2,-4(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802364c: 01000084 movi r4,2
8023650: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (!outpkt)
8023654: e0bfff17 ldw r2,-4(fp)
8023658: 1000021e bne r2,zero,8023664 <arpReply+0x40>
{
dtrap();
802365c: 8028cd40 call 8028cd4 <dtrap>
return;
8023660: 00009b06 br 80238d0 <arpReply+0x2ac>
}
outpkt->net = pkt->net; /* send back out the iface it came from */
8023664: e0bff917 ldw r2,-28(fp)
8023668: 10c00617 ldw r3,24(r2)
802366c: e0bfff17 ldw r2,-4(fp)
8023670: 10c00615 stw r3,24(r2)
ethin = pkt->nb_prot - (ETHHDR_SIZE - ETHHDR_BIAS);
8023674: e0bff917 ldw r2,-28(fp)
8023678: 10800317 ldw r2,12(r2)
802367c: 10bffc84 addi r2,r2,-14
8023680: e0bffe15 stw r2,-8(fp)
ethout = outpkt->nb_buff + ETHHDR_BIAS;
8023684: e0bfff17 ldw r2,-4(fp)
8023688: 10800117 ldw r2,4(r2)
802368c: 10800084 addi r2,r2,2
8023690: e0bffd15 stw r2,-12(fp)
snap->type = ET_ARP;
}
else
#endif /* IEEE_802_3 */
{
ET_TYPE_SET(ethout, ntohs(ET_ARP)); /* 0x0806 - ARP type on ethernet */
8023694: e0bffd17 ldw r2,-12(fp)
8023698: 10800304 addi r2,r2,12
802369c: 00c00204 movi r3,8
80236a0: 10c00005 stb r3,0(r2)
80236a4: e0bffd17 ldw r2,-12(fp)
80236a8: 10800344 addi r2,r2,13
80236ac: 00c00184 movi r3,6
80236b0: 10c00005 stb r3,0(r2)
in = (struct arp_hdr *)(pkt->nb_prot);
80236b4: e0bff917 ldw r2,-28(fp)
80236b8: 10800317 ldw r2,12(r2)
80236bc: e0bffc15 stw r2,-16(fp)
out = (struct arp_hdr *)(outpkt->nb_buff + ETHHDR_SIZE);
80236c0: e0bfff17 ldw r2,-4(fp)
80236c4: 10800117 ldw r2,4(r2)
80236c8: 10800404 addi r2,r2,16
80236cc: e0bffb15 stw r2,-20(fp)
outpkt->nb_plen = arpsize;
80236d0: e0bfff17 ldw r2,-4(fp)
80236d4: 00c00c04 movi r3,48
80236d8: 10c00415 stw r3,16(r2)
/* prepare outgoing arp packet */
#ifdef IEEE_802_3
out->ar_hd = ARP8023HW; /* net endian 802.3 arp hardware type (ethernet) */
#else
out->ar_hd = ARPHW; /* net endian Ethernet arp hardware type (ethernet) */
80236dc: e0bffb17 ldw r2,-20(fp)
80236e0: 00c04004 movi r3,256
80236e4: 10c0000d sth r3,0(r2)
#endif /* IEEE_802_3 */
out->ar_pro = ARPIP;
80236e8: e0bffb17 ldw r2,-20(fp)
80236ec: 00c00204 movi r3,8
80236f0: 10c0008d sth r3,2(r2)
out->ar_hln = 6;
80236f4: e0bffb17 ldw r2,-20(fp)
80236f8: 00c00184 movi r3,6
80236fc: 10c00105 stb r3,4(r2)
out->ar_pln = 4;
8023700: e0bffb17 ldw r2,-20(fp)
8023704: 00c00104 movi r3,4
8023708: 10c00145 stb r3,5(r2)
out->ar_op = ARREP;
802370c: e0bffb17 ldw r2,-20(fp)
8023710: 00c08004 movi r3,512
8023714: 10c0018d sth r3,6(r2)
out->ar_tpa = in->ar_spa; /* swap IP addresses */
8023718: e0bffc17 ldw r2,-16(fp)
802371c: 10c00417 ldw r3,16(r2)
8023720: e0bffb17 ldw r2,-20(fp)
8023724: 10c00715 stw r3,28(r2)
out->ar_spa = in->ar_tpa;
8023728: e0bffc17 ldw r2,-16(fp)
802372c: 10c00717 ldw r3,28(r2)
8023730: e0bffb17 ldw r2,-20(fp)
8023734: 10c00415 stw r3,16(r2)
MEMMOVE(out->ar_tha, in->ar_sha, 6); /* move his MAC address */
8023738: e0bffb17 ldw r2,-20(fp)
802373c: 10c00504 addi r3,r2,20
8023740: e0bffc17 ldw r2,-16(fp)
8023744: 10800204 addi r2,r2,8
8023748: 01800184 movi r6,6
802374c: 100b883a mov r5,r2
8023750: 1809883a mov r4,r3
8023754: 80087b80 call 80087b8 <memmove>
MEMMOVE(out->ar_sha, outpkt->net->n_mib->ifPhysAddress, 6); /* fill in our mac address */
8023758: e0bffb17 ldw r2,-20(fp)
802375c: 10c00204 addi r3,r2,8
8023760: e0bfff17 ldw r2,-4(fp)
8023764: 10800617 ldw r2,24(r2)
8023768: 10802717 ldw r2,156(r2)
802376c: 10800517 ldw r2,20(r2)
8023770: 01800184 movi r6,6
8023774: 100b883a mov r5,r2
8023778: 1809883a mov r4,r3
802377c: 80087b80 call 80087b8 <memmove>
/* prepend ethernet unicast header to arp reply */
MEMMOVE(ethout + ET_DSTOFF, ethin + ET_SRCOFF, 6);
8023780: e0bffe17 ldw r2,-8(fp)
8023784: 10800184 addi r2,r2,6
8023788: 01800184 movi r6,6
802378c: 100b883a mov r5,r2
8023790: e13ffd17 ldw r4,-12(fp)
8023794: 80087b80 call 80087b8 <memmove>
MEMMOVE(ethout + ET_SRCOFF, outpkt->net->n_mib->ifPhysAddress, 6);
8023798: e0bffd17 ldw r2,-12(fp)
802379c: 10c00184 addi r3,r2,6
80237a0: e0bfff17 ldw r2,-4(fp)
80237a4: 10800617 ldw r2,24(r2)
80237a8: 10802717 ldw r2,156(r2)
80237ac: 10800517 ldw r2,20(r2)
80237b0: 01800184 movi r6,6
80237b4: 100b883a mov r5,r2
80237b8: 1809883a mov r4,r3
80237bc: 80087b80 call 80087b8 <memmove>
#ifdef NO_CC_PACKING /* move ARP fields to proper network boundaries */
{
struct arp_wire * arwp = (struct arp_wire *)out;
80237c0: e0bffb17 ldw r2,-20(fp)
80237c4: e0bffa15 stw r2,-24(fp)
MEMMOVE(&arwp->data[AR_SHA], out->ar_sha, 6);
80237c8: e0bffa17 ldw r2,-24(fp)
80237cc: 10c00204 addi r3,r2,8
80237d0: e0bffb17 ldw r2,-20(fp)
80237d4: 10800204 addi r2,r2,8
80237d8: 01800184 movi r6,6
80237dc: 100b883a mov r5,r2
80237e0: 1809883a mov r4,r3
80237e4: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arwp->data[AR_SPA], &out->ar_spa, 4);
80237e8: e0bffa17 ldw r2,-24(fp)
80237ec: 10c00384 addi r3,r2,14
80237f0: e0bffb17 ldw r2,-20(fp)
80237f4: 10800404 addi r2,r2,16
80237f8: 01800104 movi r6,4
80237fc: 100b883a mov r5,r2
8023800: 1809883a mov r4,r3
8023804: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arwp->data[AR_THA], out->ar_tha, 6);
8023808: e0bffa17 ldw r2,-24(fp)
802380c: 10c00484 addi r3,r2,18
8023810: e0bffb17 ldw r2,-20(fp)
8023814: 10800504 addi r2,r2,20
8023818: 01800184 movi r6,6
802381c: 100b883a mov r5,r2
8023820: 1809883a mov r4,r3
8023824: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arwp->data[AR_TPA], &out->ar_tpa, 4);
8023828: e0bffa17 ldw r2,-24(fp)
802382c: 10c00604 addi r3,r2,24
8023830: e0bffb17 ldw r2,-20(fp)
8023834: 10800704 addi r2,r2,28
8023838: 01800104 movi r6,4
802383c: 100b883a mov r5,r2
8023840: 1809883a mov r4,r3
8023844: 80087b80 call 80087b8 <memmove>
}
#endif /* NO_CC_PACKING */
/* if a packet oriented send exists, use it: */
if (outpkt->net->pkt_send)
8023848: e0bfff17 ldw r2,-4(fp)
802384c: 10800617 ldw r2,24(r2)
8023850: 10800417 ldw r2,16(r2)
8023854: 10000a26 beq r2,zero,8023880 <arpReply+0x25c>
{
outpkt->nb_prot = outpkt->nb_buff;
8023858: e0bfff17 ldw r2,-4(fp)
802385c: 10c00117 ldw r3,4(r2)
8023860: e0bfff17 ldw r2,-4(fp)
8023864: 10c00315 stw r3,12(r2)
outpkt->net->pkt_send(outpkt);
8023868: e0bfff17 ldw r2,-4(fp)
802386c: 10800617 ldw r2,24(r2)
8023870: 10800417 ldw r2,16(r2)
8023874: e13fff17 ldw r4,-4(fp)
8023878: 103ee83a callr r2
802387c: 00001106 br 80238c4 <arpReply+0x2a0>
}
else
{
outpkt->net->raw_send(pkt->net, outpkt->nb_buff, outpkt->nb_plen);
8023880: e0bfff17 ldw r2,-4(fp)
8023884: 10800617 ldw r2,24(r2)
8023888: 10800317 ldw r2,12(r2)
802388c: e0fff917 ldw r3,-28(fp)
8023890: 19000617 ldw r4,24(r3)
8023894: e0ffff17 ldw r3,-4(fp)
8023898: 19400117 ldw r5,4(r3)
802389c: e0ffff17 ldw r3,-4(fp)
80238a0: 18c00417 ldw r3,16(r3)
80238a4: 180d883a mov r6,r3
80238a8: 103ee83a callr r2
LOCK_NET_RESOURCE(FREEQ_RESID);
80238ac: 01000084 movi r4,2
80238b0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(outpkt);
80238b4: e13fff17 ldw r4,-4(fp)
80238b8: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
80238bc: 01000084 movi r4,2
80238c0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
/* input 'pkt' will be freed by caller */
arpRepsOut++;
80238c4: d0a06317 ldw r2,-32372(gp)
80238c8: 10800044 addi r2,r2,1
80238cc: d0a06315 stw r2,-32372(gp)
}
80238d0: e037883a mov sp,fp
80238d4: dfc00117 ldw ra,4(sp)
80238d8: df000017 ldw fp,0(sp)
80238dc: dec00204 addi sp,sp,8
80238e0: f800283a ret
080238e4 <arprcv>:
* else a negative error code.
*/
int
arprcv(PACKET pkt)
{
80238e4: defff904 addi sp,sp,-28
80238e8: dfc00615 stw ra,24(sp)
80238ec: df000515 stw fp,20(sp)
80238f0: df000504 addi fp,sp,20
80238f4: e13ffb15 stw r4,-20(fp)
char *eth;
#ifdef IEEE_802_3
int ieee = FALSE; /* TRUE if received packet is 802.3 */
#endif
eth = pkt->nb_prot - (ETHHDR_SIZE - ETHHDR_BIAS);
80238f8: e0bffb17 ldw r2,-20(fp)
80238fc: 10800317 ldw r2,12(r2)
8023900: 10bffc84 addi r2,r2,-14
8023904: e0bffe15 stw r2,-8(fp)
arphdr = (struct arp_hdr *)(pkt->nb_prot);
8023908: e0bffb17 ldw r2,-20(fp)
802390c: 10800317 ldw r2,12(r2)
8023910: e0bffd15 stw r2,-12(fp)
#endif /* IEEE_802_3_ONLY */
#endif /* IEEE_802_3 */
#ifdef NO_CC_PACKING /* force ARP fields to local CPU valid boundaries */
{
struct arp_wire * arwp = (struct arp_wire *)arphdr;
8023914: e0bffd17 ldw r2,-12(fp)
8023918: e0bffc15 stw r2,-16(fp)
MEMMOVE(&arphdr->ar_tpa, &arwp->data[AR_TPA], 4);
802391c: e0bffd17 ldw r2,-12(fp)
8023920: 10c00704 addi r3,r2,28
8023924: e0bffc17 ldw r2,-16(fp)
8023928: 10800604 addi r2,r2,24
802392c: 01800104 movi r6,4
8023930: 100b883a mov r5,r2
8023934: 1809883a mov r4,r3
8023938: 80087b80 call 80087b8 <memmove>
MEMMOVE(arphdr->ar_tha, &arwp->data[AR_THA], 6);
802393c: e0bffd17 ldw r2,-12(fp)
8023940: 10c00504 addi r3,r2,20
8023944: e0bffc17 ldw r2,-16(fp)
8023948: 10800484 addi r2,r2,18
802394c: 01800184 movi r6,6
8023950: 100b883a mov r5,r2
8023954: 1809883a mov r4,r3
8023958: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arphdr->ar_spa, &arwp->data[AR_SPA], 4);
802395c: e0bffd17 ldw r2,-12(fp)
8023960: 10c00404 addi r3,r2,16
8023964: e0bffc17 ldw r2,-16(fp)
8023968: 10800384 addi r2,r2,14
802396c: 01800104 movi r6,4
8023970: 100b883a mov r5,r2
8023974: 1809883a mov r4,r3
8023978: 80087b80 call 80087b8 <memmove>
MEMMOVE(arphdr->ar_sha, &arwp->data[AR_SHA], 6);
802397c: e0bffd17 ldw r2,-12(fp)
8023980: 10c00204 addi r3,r2,8
8023984: e0bffc17 ldw r2,-16(fp)
8023988: 10800204 addi r2,r2,8
802398c: 01800184 movi r6,6
8023990: 100b883a mov r5,r2
8023994: 1809883a mov r4,r3
8023998: 80087b80 call 80087b8 <memmove>
#endif
USE_ARG(eth);
/* check ARP's target IP against our net's: */
#ifdef IP_MULTICAST
if ((arphdr->ar_tpa != pkt->net->n_ipaddr) && /* if it's not for me.... */
802399c: e0bffd17 ldw r2,-12(fp)
80239a0: 10c00717 ldw r3,28(r2)
80239a4: e0bffb17 ldw r2,-20(fp)
80239a8: 10800617 ldw r2,24(r2)
80239ac: 10800a17 ldw r2,40(r2)
80239b0: 18801c26 beq r3,r2,8023a24 <arprcv+0x140>
(!IN_MULTICAST(ntohl(arphdr->ar_tpa))))
80239b4: e0bffd17 ldw r2,-12(fp)
80239b8: 10800717 ldw r2,28(r2)
80239bc: 1006d63a srli r3,r2,24
80239c0: e0bffd17 ldw r2,-12(fp)
80239c4: 10800717 ldw r2,28(r2)
80239c8: 1004d23a srli r2,r2,8
80239cc: 10bfc00c andi r2,r2,65280
80239d0: 1886b03a or r3,r3,r2
80239d4: e0bffd17 ldw r2,-12(fp)
80239d8: 10800717 ldw r2,28(r2)
80239dc: 1004923a slli r2,r2,8
80239e0: 10803fec andhi r2,r2,255
80239e4: 1886b03a or r3,r3,r2
80239e8: e0bffd17 ldw r2,-12(fp)
80239ec: 10800717 ldw r2,28(r2)
80239f0: 1004963a slli r2,r2,24
80239f4: 1884b03a or r2,r3,r2
80239f8: 10fc002c andhi r3,r2,61440
if ((arphdr->ar_tpa != pkt->net->n_ipaddr) && /* if it's not for me.... */
80239fc: 00b80034 movhi r2,57344
8023a00: 18800826 beq r3,r2,8023a24 <arprcv+0x140>
#else
if (arphdr->ar_tpa != pkt->net->n_ipaddr)
#endif /* IP_MULTICAST */
{
LOCK_NET_RESOURCE(FREEQ_RESID);
8023a04: 01000084 movi r4,2
8023a08: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt); /* not for us, dump & ret (proxy here later?) */
8023a0c: e13ffb17 ldw r4,-20(fp)
8023a10: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023a14: 01000084 movi r4,2
8023a18: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return (ENP_NOT_MINE);
8023a1c: 00800084 movi r2,2
8023a20: 00004406 br 8023b34 <arprcv+0x250>
}
if (arphdr->ar_op == ARREQ) /* is it an arp request? */
8023a24: e0bffd17 ldw r2,-12(fp)
8023a28: 1080018b ldhu r2,6(r2)
8023a2c: 10bfffcc andi r2,r2,65535
8023a30: 10804018 cmpnei r2,r2,256
8023a34: 10000d1e bne r2,zero,8023a6c <arprcv+0x188>
{
arpReqsIn++; /* count these */
8023a38: d0a06017 ldw r2,-32384(gp)
8023a3c: 10800044 addi r2,r2,1
8023a40: d0a06015 stw r2,-32384(gp)
arpReply(pkt); /* send arp reply */
8023a44: e13ffb17 ldw r4,-20(fp)
8023a48: 80236240 call 8023624 <arpReply>
/* make partial ARP table entry */
make_arp_entry(arphdr->ar_spa, pkt->net);
8023a4c: e0bffd17 ldw r2,-12(fp)
8023a50: 10c00417 ldw r3,16(r2)
8023a54: e0bffb17 ldw r2,-20(fp)
8023a58: 10800617 ldw r2,24(r2)
8023a5c: 100b883a mov r5,r2
8023a60: 1809883a mov r4,r3
8023a64: 80235280 call 8023528 <make_arp_entry>
8023a68: 00000306 br 8023a78 <arprcv+0x194>
/* fall thru to arp reply logic to finish our table entry */
}
else /* ARP reply, count and fall thru to logic to update table */
{
arpRepsIn++;
8023a6c: d0a06217 ldw r2,-32376(gp)
8023a70: 10800044 addi r2,r2,1
8023a74: d0a06215 stw r2,-32376(gp)
}
/* scan table for matching entry */
/* check this for default gateway situations later, JB */
for (tp = &arp_table[0]; tp < &arp_table[MAXARPS]; tp++)
8023a78: 008201b4 movhi r2,2054
8023a7c: 10b66604 addi r2,r2,-9832
8023a80: e0bfff15 stw r2,-4(fp)
8023a84: 00002006 br 8023b08 <arprcv+0x224>
{
if (tp->t_pro_addr == arphdr->ar_spa) /* we found IP address, update entry */
8023a88: e0bfff17 ldw r2,-4(fp)
8023a8c: 10c00017 ldw r3,0(r2)
8023a90: e0bffd17 ldw r2,-12(fp)
8023a94: 10800417 ldw r2,16(r2)
8023a98: 1880181e bne r3,r2,8023afc <arprcv+0x218>
tp->flags |= ET_SNAP;
else
tp->flags |= ET_ETH2; /* else it's ethernet II */
#endif /* IEEE_802_3 */
MEMMOVE(tp->t_phy_addr, arphdr->ar_sha, 6); /* update MAC adddress */
8023a9c: e0bfff17 ldw r2,-4(fp)
8023aa0: 10c00104 addi r3,r2,4
8023aa4: e0bffd17 ldw r2,-12(fp)
8023aa8: 10800204 addi r2,r2,8
8023aac: 01800184 movi r6,6
8023ab0: 100b883a mov r5,r2
8023ab4: 1809883a mov r4,r3
8023ab8: 80087b80 call 80087b8 <memmove>
tp->lasttime = cticks;
8023abc: d0e07d17 ldw r3,-32268(gp)
8023ac0: e0bfff17 ldw r2,-4(fp)
8023ac4: 10c00615 stw r3,24(r2)
if (tp->pending) /* packet waiting for this IP entry? */
8023ac8: e0bfff17 ldw r2,-4(fp)
8023acc: 10800417 ldw r2,16(r2)
8023ad0: 10000226 beq r2,zero,8023adc <arprcv+0x1f8>
{
arp_send_pending(tp);
8023ad4: e13fff17 ldw r4,-4(fp)
8023ad8: 8022ef40 call 8022ef4 <arp_send_pending>
}
LOCK_NET_RESOURCE(FREEQ_RESID);
8023adc: 01000084 movi r4,2
8023ae0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8023ae4: e13ffb17 ldw r4,-20(fp)
8023ae8: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023aec: 01000084 movi r4,2
8023af0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return (0);
8023af4: 0005883a mov r2,zero
8023af8: 00000e06 br 8023b34 <arprcv+0x250>
for (tp = &arp_table[0]; tp < &arp_table[MAXARPS]; tp++)
8023afc: e0bfff17 ldw r2,-4(fp)
8023b00: 10800804 addi r2,r2,32
8023b04: e0bfff15 stw r2,-4(fp)
8023b08: e0ffff17 ldw r3,-4(fp)
8023b0c: 008201b4 movhi r2,2054
8023b10: 10b6a604 addi r2,r2,-9576
8023b14: 18bfdc36 bltu r3,r2,8023a88 <arprcv+0x1a4>
#ifdef IEEE_802_3_ONLY
drop:
#endif /* IEEE_802_3_ONLY */
/* fall to here if packet is not in table */
LOCK_NET_RESOURCE(FREEQ_RESID);
8023b18: 01000084 movi r4,2
8023b1c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8023b20: e13ffb17 ldw r4,-20(fp)
8023b24: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023b28: 01000084 movi r4,2
8023b2c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_NOT_MINE;
8023b30: 00800084 movi r2,2
}
8023b34: e037883a mov sp,fp
8023b38: dfc00117 ldw ra,4(sp)
8023b3c: df000017 ldw fp,0(sp)
8023b40: dec00204 addi sp,sp,8
8023b44: f800283a ret
08023b48 <send_via_arp>:
* change the PC's IP address.
*/
int
send_via_arp(PACKET pkt, ip_addr dest_ip)
{
8023b48: defff804 addi sp,sp,-32
8023b4c: dfc00715 stw ra,28(sp)
8023b50: df000615 stw fp,24(sp)
8023b54: df000604 addi fp,sp,24
8023b58: e13ffb15 stw r4,-20(fp)
8023b5c: e17ffa15 stw r5,-24(fp)
struct arptabent *tp;
unsigned long lticks = cticks;
8023b60: d0a07d17 ldw r2,-32268(gp)
8023b64: e0bffc15 stw r2,-16(fp)
int err;
/* don't allow zero dest */
if (dest_ip == 0)
8023b68: e0bffa17 ldw r2,-24(fp)
8023b6c: 1000081e bne r2,zero,8023b90 <send_via_arp+0x48>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
8023b70: 01000084 movi r4,2
8023b74: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8023b78: e13ffb17 ldw r4,-20(fp)
8023b7c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023b80: 01000084 movi r4,2
8023b84: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SEND_DROPPED;
8023b88: 00bffa84 movi r2,-22
8023b8c: 00004806 br 8023cb0 <send_via_arp+0x168>
}
/* Force refresh of cache once a second */
if ((lticks - cachetime) > TPS)
8023b90: d0a05f17 ldw r2,-32388(gp)
8023b94: e0fffc17 ldw r3,-16(fp)
8023b98: 1885c83a sub r2,r3,r2
8023b9c: 10801970 cmpltui r2,r2,101
8023ba0: 1000011e bne r2,zero,8023ba8 <send_via_arp+0x60>
arpcache = (struct arptabent *)NULL;
8023ba4: d0205e15 stw zero,-32392(gp)
/* look at the last ARP entry used. Good chance it's ours: */
if (arpcache && (arpcache->t_pro_addr == dest_ip))
8023ba8: d0a05e17 ldw r2,-32392(gp)
8023bac: 10000726 beq r2,zero,8023bcc <send_via_arp+0x84>
8023bb0: d0a05e17 ldw r2,-32392(gp)
8023bb4: 10800017 ldw r2,0(r2)
8023bb8: e0fffa17 ldw r3,-24(fp)
8023bbc: 1880031e bne r3,r2,8023bcc <send_via_arp+0x84>
tp = arpcache;
8023bc0: d0a05e17 ldw r2,-32392(gp)
8023bc4: e0bfff15 stw r2,-4(fp)
8023bc8: 00000306 br 8023bd8 <send_via_arp+0x90>
else
{
/* scan arp table for an existing entry */
tp = find_oldest_arp(dest_ip);
8023bcc: e13ffa17 ldw r4,-24(fp)
8023bd0: 80233bc0 call 80233bc <find_oldest_arp>
8023bd4: e0bfff15 stw r2,-4(fp)
}
if (tp->t_pro_addr == dest_ip) /* we found our entry */
8023bd8: e0bfff17 ldw r2,-4(fp)
8023bdc: 10800017 ldw r2,0(r2)
8023be0: e0fffa17 ldw r3,-24(fp)
8023be4: 18802d1e bne r3,r2,8023c9c <send_via_arp+0x154>
{
if (tp->pending) /* arp already pending for this IP? */
8023be8: e0bfff17 ldw r2,-4(fp)
8023bec: 10800417 ldw r2,16(r2)
8023bf0: 10002126 beq r2,zero,8023c78 <send_via_arp+0x130>
{
if (lilfreeq.q_len < 2)
8023bf4: 008201b4 movhi r2,2054
8023bf8: 10b79817 ldw r2,-8608(r2)
8023bfc: 10800088 cmpgei r2,r2,2
8023c00: 1000091e bne r2,zero,8023c28 <send_via_arp+0xe0>
{
/* system is depleted of resources - free the
* pkt instead of queueing it - so that we are in a
* position to receive an arp reply
*/
LOCK_NET_RESOURCE(FREEQ_RESID);
8023c04: 01000084 movi r4,2
8023c08: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt); /* sorry, we have to dump this one.. */
8023c0c: e13ffb17 ldw r4,-20(fp)
8023c10: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023c14: 01000084 movi r4,2
8023c18: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
err = SEND_DROPPED; /* pkts already waiting for this IP entry */
8023c1c: 00bffa84 movi r2,-22
8023c20: e0bffe15 stw r2,-8(fp)
8023c24: 00002106 br 8023cac <send_via_arp+0x164>
}
else
{
PACKET tmppkt=tp->pending;
8023c28: e0bfff17 ldw r2,-4(fp)
8023c2c: 10800417 ldw r2,16(r2)
8023c30: e0bffd15 stw r2,-12(fp)
/* queue the packet in pending list */
while (tmppkt->next) /* traverse to the last packet */
8023c34: 00000306 br 8023c44 <send_via_arp+0xfc>
tmppkt = tmppkt->next;
8023c38: e0bffd17 ldw r2,-12(fp)
8023c3c: 10800017 ldw r2,0(r2)
8023c40: e0bffd15 stw r2,-12(fp)
while (tmppkt->next) /* traverse to the last packet */
8023c44: e0bffd17 ldw r2,-12(fp)
8023c48: 10800017 ldw r2,0(r2)
8023c4c: 103ffa1e bne r2,zero,8023c38 <send_via_arp+0xf0>
tmppkt->next = pkt; /* add new pkt to end of list */
8023c50: e0bffd17 ldw r2,-12(fp)
8023c54: e0fffb17 ldw r3,-20(fp)
8023c58: 10c00015 stw r3,0(r2)
if (pkt->next)
8023c5c: e0bffb17 ldw r2,-20(fp)
8023c60: 10800017 ldw r2,0(r2)
8023c64: 10000126 beq r2,zero,8023c6c <send_via_arp+0x124>
{
dtrap(); /* chain of pkts to be sent ??? */
8023c68: 8028cd40 call 8028cd4 <dtrap>
}
err = ENP_SEND_PENDING; /* packet queued pending ARP reply */
8023c6c: 00800044 movi r2,1
8023c70: e0bffe15 stw r2,-8(fp)
8023c74: 00000d06 br 8023cac <send_via_arp+0x164>
}
}
else /* just send it */
{
arpcache = tp; /* cache this entry */
8023c78: e0bfff17 ldw r2,-4(fp)
8023c7c: d0a05e15 stw r2,-32392(gp)
cachetime = lticks; /* mark time we cached */
8023c80: e0bffc17 ldw r2,-16(fp)
8023c84: d0a05f15 stw r2,-32388(gp)
err = et_send(pkt, tp);
8023c88: e17fff17 ldw r5,-4(fp)
8023c8c: e13ffb17 ldw r4,-20(fp)
8023c90: 8022cec0 call 8022cec <et_send>
8023c94: e0bffe15 stw r2,-8(fp)
8023c98: 00000406 br 8023cac <send_via_arp+0x164>
}
}
else
/* start the ARP process for this IP address */
err = send_arp(pkt, dest_ip);
8023c9c: e17ffa17 ldw r5,-24(fp)
8023ca0: e13ffb17 ldw r4,-20(fp)
8023ca4: 8022f680 call 8022f68 <send_arp>
8023ca8: e0bffe15 stw r2,-8(fp)
return (err);
8023cac: e0bffe17 ldw r2,-8(fp)
}
8023cb0: e037883a mov sp,fp
8023cb4: dfc00117 ldw ra,4(sp)
8023cb8: df000017 ldw fp,0(sp)
8023cbc: dec00204 addi sp,sp,8
8023cc0: f800283a ret
08023cc4 <cb_arpent_tmo>:
*
* If there are no more unresolved entries, cancel the timer.
*/
void
cb_arpent_tmo(long arg)
{
8023cc4: defffa04 addi sp,sp,-24
8023cc8: dfc00515 stw ra,20(sp)
8023ccc: df000415 stw fp,16(sp)
8023cd0: df000404 addi fp,sp,16
8023cd4: e13ffc15 stw r4,-16(fp)
struct arptabent *tp;
int arp_count = 0;
8023cd8: e03ffe15 stw zero,-8(fp)
unsigned long lticks = cticks;
8023cdc: d0a07d17 ldw r2,-32268(gp)
8023ce0: e0bffd15 stw r2,-12(fp)
for (tp = &arp_table[0]; tp < &arp_table[MAXARPS]; tp++)
8023ce4: 008201b4 movhi r2,2054
8023ce8: 10b66604 addi r2,r2,-9832
8023cec: e0bfff15 stw r2,-4(fp)
8023cf0: 00002706 br 8023d90 <cb_arpent_tmo+0xcc>
{
if (tp->t_pro_addr != 0)
8023cf4: e0bfff17 ldw r2,-4(fp)
8023cf8: 10800017 ldw r2,0(r2)
8023cfc: 10002126 beq r2,zero,8023d84 <cb_arpent_tmo+0xc0>
{
/* age out old, pending entries */
if (tp->pending && ((lticks - tp->createtime) > TPS))
8023d00: e0bfff17 ldw r2,-4(fp)
8023d04: 10800417 ldw r2,16(r2)
8023d08: 10000b26 beq r2,zero,8023d38 <cb_arpent_tmo+0x74>
8023d0c: e0bfff17 ldw r2,-4(fp)
8023d10: 10800517 ldw r2,20(r2)
8023d14: e0fffd17 ldw r3,-12(fp)
8023d18: 1885c83a sub r2,r3,r2
8023d1c: 10801970 cmpltui r2,r2,101
8023d20: 1000051e bne r2,zero,8023d38 <cb_arpent_tmo+0x74>
{
/* purge if pending for more than one second */
arp_free_pending(tp); /* free pending packets */
8023d24: e13fff17 ldw r4,-4(fp)
8023d28: 8022e6c0 call 8022e6c <arp_free_pending>
tp->t_pro_addr = 0; /* mark entry as "unused" */
8023d2c: e0bfff17 ldw r2,-4(fp)
8023d30: 10000015 stw zero,0(r2)
8023d34: 00001306 br 8023d84 <cb_arpent_tmo+0xc0>
}
else if (((int)(lticks - tp->createtime) >= arp_ageout) &&
8023d38: e0bfff17 ldw r2,-4(fp)
8023d3c: 10800517 ldw r2,20(r2)
8023d40: e0fffd17 ldw r3,-12(fp)
8023d44: 1885c83a sub r2,r3,r2
8023d48: 1007883a mov r3,r2
8023d4c: d0a01117 ldw r2,-32700(gp)
8023d50: 18800916 blt r3,r2,8023d78 <cb_arpent_tmo+0xb4>
((int)(lticks - tp->lasttime) >= TPS))
8023d54: e0bfff17 ldw r2,-4(fp)
8023d58: 10800617 ldw r2,24(r2)
8023d5c: e0fffd17 ldw r3,-12(fp)
8023d60: 1885c83a sub r2,r3,r2
else if (((int)(lticks - tp->createtime) >= arp_ageout) &&
8023d64: 10801910 cmplti r2,r2,100
8023d68: 1000031e bne r2,zero,8023d78 <cb_arpent_tmo+0xb4>
{
/* entry has "expired" and has not been reference in 1 sec. */
tp->t_pro_addr = 0; /* mark entry as "unused" */
8023d6c: e0bfff17 ldw r2,-4(fp)
8023d70: 10000015 stw zero,0(r2)
8023d74: 00000306 br 8023d84 <cb_arpent_tmo+0xc0>
}
else
arp_count++;
8023d78: e0bffe17 ldw r2,-8(fp)
8023d7c: 10800044 addi r2,r2,1
8023d80: e0bffe15 stw r2,-8(fp)
for (tp = &arp_table[0]; tp < &arp_table[MAXARPS]; tp++)
8023d84: e0bfff17 ldw r2,-4(fp)
8023d88: 10800804 addi r2,r2,32
8023d8c: e0bfff15 stw r2,-4(fp)
8023d90: e0ffff17 ldw r3,-4(fp)
8023d94: 008201b4 movhi r2,2054
8023d98: 10b6a604 addi r2,r2,-9576
8023d9c: 18bfd536 bltu r3,r2,8023cf4 <cb_arpent_tmo+0x30>
}
}
/* if there are no more "pending" entries, kill the timer */
if (arp_count == 0)
8023da0: e0bffe17 ldw r2,-8(fp)
8023da4: 1000041e bne r2,zero,8023db8 <cb_arpent_tmo+0xf4>
{
in_timerkill(arp_timer);
8023da8: d0a05d17 ldw r2,-32396(gp)
8023dac: 1009883a mov r4,r2
8023db0: 8038da00 call 8038da0 <in_timerkill>
arp_timer = 0;
8023db4: d0205d15 stw zero,-32396(gp)
}
USE_ARG(arg);
}
8023db8: 0001883a nop
8023dbc: e037883a mov sp,fp
8023dc0: dfc00117 ldw ra,4(sp)
8023dc4: df000017 ldw fp,0(sp)
8023dc8: dec00204 addi sp,sp,8
8023dcc: f800283a ret
08023dd0 <grat_arp>:
* RETURNS: Returns 0 if OK, or the usual ENP_ errors
*/
int
grat_arp(NET net, int flag)
{
8023dd0: defff704 addi sp,sp,-36
8023dd4: dfc00815 stw ra,32(sp)
8023dd8: df000715 stw fp,28(sp)
8023ddc: df000704 addi fp,sp,28
8023de0: e13ffa15 stw r4,-24(fp)
8023de4: e17ff915 stw r5,-28(fp)
char * ethhdr;
struct arp_hdr * arphdr;
IFMIB etif = net->n_mib; /* mib info for this ethernet interface */
8023de8: e0bffa17 ldw r2,-24(fp)
8023dec: 10802717 ldw r2,156(r2)
8023df0: e0bfff15 stw r2,-4(fp)
PACKET arppkt;
/* get a packet for an ARP request */
LOCK_NET_RESOURCE(FREEQ_RESID);
8023df4: 01000084 movi r4,2
8023df8: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
arppkt = pk_alloc(arpsize);
8023dfc: 01000c04 movi r4,48
8023e00: 80284340 call 8028434 <pk_alloc>
8023e04: e0bffe15 stw r2,-8(fp)
if (!arppkt)
8023e08: e0bffe17 ldw r2,-8(fp)
8023e0c: 1000041e bne r2,zero,8023e20 <grat_arp+0x50>
{
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023e10: 01000084 movi r4,2
8023e14: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_RESOURCE;
8023e18: 00bffa84 movi r2,-22
8023e1c: 00009506 br 8024074 <grat_arp+0x2a4>
}
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8023e20: 01000084 movi r4,2
8023e24: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
arppkt->nb_prot = arppkt->nb_buff;
8023e28: e0bffe17 ldw r2,-8(fp)
8023e2c: 10c00117 ldw r3,4(r2)
8023e30: e0bffe17 ldw r2,-8(fp)
8023e34: 10c00315 stw r3,12(r2)
arppkt->nb_plen = arpsize;
8023e38: e0bffe17 ldw r2,-8(fp)
8023e3c: 00c00c04 movi r3,48
8023e40: 10c00415 stw r3,16(r2)
arppkt->net = net;
8023e44: e0bffe17 ldw r2,-8(fp)
8023e48: e0fffa17 ldw r3,-24(fp)
8023e4c: 10c00615 stw r3,24(r2)
/* build arp request packet */
ethhdr = arppkt->nb_buff + ETHHDR_BIAS; /* ethernet header at start of buffer */
8023e50: e0bffe17 ldw r2,-8(fp)
8023e54: 10800117 ldw r2,4(r2)
8023e58: 10800084 addi r2,r2,2
8023e5c: e0bffd15 stw r2,-12(fp)
arphdr = (struct arp_hdr *)(arppkt->nb_buff + ETHHDR_SIZE); /* arp header follows */
8023e60: e0bffe17 ldw r2,-8(fp)
8023e64: 10800117 ldw r2,4(r2)
8023e68: 10800404 addi r2,r2,16
8023e6c: e0bffc15 stw r2,-16(fp)
#ifdef IEEE_802_3
arphdr->ar_hd = ARP8023HW; /* net endian 802.3 arp hardware type (ethernet) */
#else
arphdr->ar_hd = ARPHW; /* net endian Ethernet arp hardware type (ethernet) */
8023e70: e0bffc17 ldw r2,-16(fp)
8023e74: 00c04004 movi r3,256
8023e78: 10c0000d sth r3,0(r2)
#endif /* IEEE_802_3 */
arphdr->ar_pro = ARPIP;
8023e7c: e0bffc17 ldw r2,-16(fp)
8023e80: 00c00204 movi r3,8
8023e84: 10c0008d sth r3,2(r2)
arphdr->ar_hln = 6;
8023e88: e0bffc17 ldw r2,-16(fp)
8023e8c: 00c00184 movi r3,6
8023e90: 10c00105 stb r3,4(r2)
arphdr->ar_pln = 4;
8023e94: e0bffc17 ldw r2,-16(fp)
8023e98: 00c00104 movi r3,4
8023e9c: 10c00145 stb r3,5(r2)
/* ARP req? */
if (flag == 0)
8023ea0: e0bff917 ldw r2,-28(fp)
8023ea4: 1000041e bne r2,zero,8023eb8 <grat_arp+0xe8>
/* yup */
arphdr->ar_op = ARREQ;
8023ea8: e0bffc17 ldw r2,-16(fp)
8023eac: 00c04004 movi r3,256
8023eb0: 10c0018d sth r3,6(r2)
8023eb4: 00000306 br 8023ec4 <grat_arp+0xf4>
else
/* nope */
arphdr->ar_op = ARREP;
8023eb8: e0bffc17 ldw r2,-16(fp)
8023ebc: 00c08004 movi r3,512
8023ec0: 10c0018d sth r3,6(r2)
arphdr->ar_tpa = net->n_ipaddr; /* target's IP address */
8023ec4: e0bffa17 ldw r2,-24(fp)
8023ec8: 10c00a17 ldw r3,40(r2)
8023ecc: e0bffc17 ldw r2,-16(fp)
8023ed0: 10c00715 stw r3,28(r2)
arphdr->ar_spa = net->n_ipaddr; /* my IP address */
8023ed4: e0bffa17 ldw r2,-24(fp)
8023ed8: 10c00a17 ldw r3,40(r2)
8023edc: e0bffc17 ldw r2,-16(fp)
8023ee0: 10c00415 stw r3,16(r2)
MEMMOVE(arphdr->ar_sha, etif->ifPhysAddress, 6);
8023ee4: e0bffc17 ldw r2,-16(fp)
8023ee8: 10c00204 addi r3,r2,8
8023eec: e0bfff17 ldw r2,-4(fp)
8023ef0: 10800517 ldw r2,20(r2)
8023ef4: 01800184 movi r6,6
8023ef8: 100b883a mov r5,r2
8023efc: 1809883a mov r4,r3
8023f00: 80087b80 call 80087b8 <memmove>
MEMSET(ethhdr + ET_DSTOFF, 0xFF, 6); /* destination to broadcast (all FFs) */
8023f04: 01800184 movi r6,6
8023f08: 01403fc4 movi r5,255
8023f0c: e13ffd17 ldw r4,-12(fp)
8023f10: 80088e40 call 80088e4 <memset>
MEMMOVE(ethhdr + ET_SRCOFF, etif->ifPhysAddress, 6);
8023f14: e0bffd17 ldw r2,-12(fp)
8023f18: 10c00184 addi r3,r2,6
8023f1c: e0bfff17 ldw r2,-4(fp)
8023f20: 10800517 ldw r2,20(r2)
8023f24: 01800184 movi r6,6
8023f28: 100b883a mov r5,r2
8023f2c: 1809883a mov r4,r3
8023f30: 80087b80 call 80087b8 <memmove>
ET_TYPE_SET(ethhdr, ntohs(ET_ARP));
8023f34: e0bffd17 ldw r2,-12(fp)
8023f38: 10800304 addi r2,r2,12
8023f3c: 00c00204 movi r3,8
8023f40: 10c00005 stb r3,0(r2)
8023f44: e0bffd17 ldw r2,-12(fp)
8023f48: 10800344 addi r2,r2,13
8023f4c: 00c00184 movi r3,6
8023f50: 10c00005 stb r3,0(r2)
#ifdef NO_CC_PACKING /* move ARP fields to proper network boundaries */
{
struct arp_wire * arwp = (struct arp_wire *)arphdr;
8023f54: e0bffc17 ldw r2,-16(fp)
8023f58: e0bffb15 stw r2,-20(fp)
MEMMOVE(&arwp->data[AR_SHA], arphdr->ar_sha, 6);
8023f5c: e0bffb17 ldw r2,-20(fp)
8023f60: 10c00204 addi r3,r2,8
8023f64: e0bffc17 ldw r2,-16(fp)
8023f68: 10800204 addi r2,r2,8
8023f6c: 01800184 movi r6,6
8023f70: 100b883a mov r5,r2
8023f74: 1809883a mov r4,r3
8023f78: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arwp->data[AR_SPA], &arphdr->ar_spa, 4);
8023f7c: e0bffb17 ldw r2,-20(fp)
8023f80: 10c00384 addi r3,r2,14
8023f84: e0bffc17 ldw r2,-16(fp)
8023f88: 10800404 addi r2,r2,16
8023f8c: 01800104 movi r6,4
8023f90: 100b883a mov r5,r2
8023f94: 1809883a mov r4,r3
8023f98: 80087b80 call 80087b8 <memmove>
/* ARP req? */
if (flag == 0)
8023f9c: e0bff917 ldw r2,-28(fp)
8023fa0: 1000091e bne r2,zero,8023fc8 <grat_arp+0x1f8>
/* yup */
MEMMOVE(&arwp->data[AR_THA], arphdr->ar_tha, 6);
8023fa4: e0bffb17 ldw r2,-20(fp)
8023fa8: 10c00484 addi r3,r2,18
8023fac: e0bffc17 ldw r2,-16(fp)
8023fb0: 10800504 addi r2,r2,20
8023fb4: 01800184 movi r6,6
8023fb8: 100b883a mov r5,r2
8023fbc: 1809883a mov r4,r3
8023fc0: 80087b80 call 80087b8 <memmove>
8023fc4: 00000806 br 8023fe8 <grat_arp+0x218>
else
/* nope */
MEMMOVE(&arwp->data[AR_THA], arphdr->ar_sha, 6);
8023fc8: e0bffb17 ldw r2,-20(fp)
8023fcc: 10c00484 addi r3,r2,18
8023fd0: e0bffc17 ldw r2,-16(fp)
8023fd4: 10800204 addi r2,r2,8
8023fd8: 01800184 movi r6,6
8023fdc: 100b883a mov r5,r2
8023fe0: 1809883a mov r4,r3
8023fe4: 80087b80 call 80087b8 <memmove>
MEMMOVE(&arwp->data[AR_TPA], &arphdr->ar_tpa, 4);
8023fe8: e0bffb17 ldw r2,-20(fp)
8023fec: 10c00604 addi r3,r2,24
8023ff0: e0bffc17 ldw r2,-16(fp)
8023ff4: 10800704 addi r2,r2,28
8023ff8: 01800104 movi r6,4
8023ffc: 100b883a mov r5,r2
8024000: 1809883a mov r4,r3
8024004: 80087b80 call 80087b8 <memmove>
}
#endif /* IEEE_802_3 */
#ifndef IEEE_802_3_ONLY
/* send arp request - if a packet oriented send exists, use it: */
if (net->pkt_send)
8024008: e0bffa17 ldw r2,-24(fp)
802400c: 10800417 ldw r2,16(r2)
8024010: 10000526 beq r2,zero,8024028 <grat_arp+0x258>
net->pkt_send(arppkt); /* driver should free arppkt later */
8024014: e0bffa17 ldw r2,-24(fp)
8024018: 10800417 ldw r2,16(r2)
802401c: e13ffe17 ldw r4,-8(fp)
8024020: 103ee83a callr r2
8024024: 00000f06 br 8024064 <grat_arp+0x294>
else /* use old raw send */
{
net->raw_send(arppkt->net, arppkt->nb_buff, arpsize);
8024028: e0bffa17 ldw r2,-24(fp)
802402c: 10800317 ldw r2,12(r2)
8024030: e0fffe17 ldw r3,-8(fp)
8024034: 19000617 ldw r4,24(r3)
8024038: e0fffe17 ldw r3,-8(fp)
802403c: 18c00117 ldw r3,4(r3)
8024040: 01800c04 movi r6,48
8024044: 180b883a mov r5,r3
8024048: 103ee83a callr r2
LOCK_NET_RESOURCE(FREEQ_RESID);
802404c: 01000084 movi r4,2
8024050: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(arppkt);
8024054: e13ffe17 ldw r4,-8(fp)
8024058: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802405c: 01000084 movi r4,2
8024060: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
arpReqsOut++;
8024064: d0a06117 ldw r2,-32380(gp)
8024068: 10800044 addi r2,r2,1
802406c: d0a06115 stw r2,-32380(gp)
LOCK_NET_RESOURCE(FREEQ_RESID);
pk_free(arppkt);
UNLOCK_NET_RESOURCE(FREEQ_RESID);
#endif /* IEEE_802_3_ONLY */
return ENP_SEND_PENDING;
8024070: 00800044 movi r2,1
}
8024074: e037883a mov sp,fp
8024078: dfc00117 ldw ra,4(sp)
802407c: df000017 ldw fp,0(sp)
8024080: dec00204 addi sp,sp,8
8024084: f800283a ret
08024088 <if_getbynum>:
* RETURNS: Returns NET pointer, or NULL if out of range
*/
NET
if_getbynum(int ifnum)
{
8024088: defffc04 addi sp,sp,-16
802408c: dfc00315 stw ra,12(sp)
8024090: df000215 stw fp,8(sp)
8024094: df000204 addi fp,sp,8
8024098: e13ffe15 stw r4,-8(fp)
NET ifp;
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802409c: 008201b4 movhi r2,2054
80240a0: 10b6a617 ldw r2,-9576(r2)
80240a4: e0bfff15 stw r2,-4(fp)
80240a8: 00000906 br 80240d0 <if_getbynum+0x48>
{
if(ifnum-- == 0)
80240ac: e0bffe17 ldw r2,-8(fp)
80240b0: 10ffffc4 addi r3,r2,-1
80240b4: e0fffe15 stw r3,-8(fp)
80240b8: 1000021e bne r2,zero,80240c4 <if_getbynum+0x3c>
return ifp;
80240bc: e0bfff17 ldw r2,-4(fp)
80240c0: 00000706 br 80240e0 <if_getbynum+0x58>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
80240c4: e0bfff17 ldw r2,-4(fp)
80240c8: 10800017 ldw r2,0(r2)
80240cc: e0bfff15 stw r2,-4(fp)
80240d0: e0bfff17 ldw r2,-4(fp)
80240d4: 103ff51e bne r2,zero,80240ac <if_getbynum+0x24>
}
dtrap();
80240d8: 8028cd40 call 8028cd4 <dtrap>
return NULL; /* list is not long enough */
80240dc: 0005883a mov r2,zero
}
80240e0: e037883a mov sp,fp
80240e4: dfc00117 ldw ra,4(sp)
80240e8: df000017 ldw fp,0(sp)
80240ec: dec00204 addi sp,sp,8
80240f0: f800283a ret
080240f4 <isbcast>:
* RETURNS: Returns TRUE if broadcast, else false.
*/
int
isbcast(NET ifc, unsigned char * addr)
{
80240f4: defffd04 addi sp,sp,-12
80240f8: df000215 stw fp,8(sp)
80240fc: df000204 addi fp,sp,8
8024100: e13fff15 stw r4,-4(fp)
8024104: e17ffe15 stw r5,-8(fp)
#if (ALIGN_TYPE > 2)
/* On systems with 32bit alignment requirements we have to make
* sure our tests are aligned. Specifically, this results in "data
* abort" errors on the Samsung/ARM port.
*/
if((u_long)addr & (ALIGN_TYPE - 1))
8024108: e0bffe17 ldw r2,-8(fp)
802410c: 108000cc andi r2,r2,3
8024110: 10000e26 beq r2,zero,802414c <isbcast+0x58>
{
/* check first two bytes */
if ((u_short)*(u_short*)(addr) != 0xFFFF)
8024114: e0bffe17 ldw r2,-8(fp)
8024118: 1080000b ldhu r2,0(r2)
802411c: 10ffffcc andi r3,r2,65535
8024120: 00bfffd4 movui r2,65535
8024124: 18800226 beq r3,r2,8024130 <isbcast+0x3c>
return(FALSE);
8024128: 0005883a mov r2,zero
802412c: 00002206 br 80241b8 <isbcast+0xc4>
if ((u_long)(*(u_long*)(addr + 2)) != 0xFFFFFFFF)
8024130: e0bffe17 ldw r2,-8(fp)
8024134: 10800084 addi r2,r2,2
8024138: 10800017 ldw r2,0(r2)
802413c: 10bfffe0 cmpeqi r2,r2,-1
8024140: 1000101e bne r2,zero,8024184 <isbcast+0x90>
return FALSE;
8024144: 0005883a mov r2,zero
8024148: 00001b06 br 80241b8 <isbcast+0xc4>
#endif /* ALIGN_TYPE > 4 */
{
/* check first four bytes for all ones. Since this is the fastest
* test, do it first
*/
if ((u_long)(*(u_long*)addr) != 0xFFFFFFFF)
802414c: e0bffe17 ldw r2,-8(fp)
8024150: 10800017 ldw r2,0(r2)
8024154: 10bfffe0 cmpeqi r2,r2,-1
8024158: 1000021e bne r2,zero,8024164 <isbcast+0x70>
return FALSE;
802415c: 0005883a mov r2,zero
8024160: 00001506 br 80241b8 <isbcast+0xc4>
/* check last two bytes */
if ((u_short)*(u_short*)(addr+4) != 0xFFFF)
8024164: e0bffe17 ldw r2,-8(fp)
8024168: 10800104 addi r2,r2,4
802416c: 1080000b ldhu r2,0(r2)
8024170: 10ffffcc andi r3,r2,65535
8024174: 00bfffd4 movui r2,65535
8024178: 18800226 beq r3,r2,8024184 <isbcast+0x90>
return(FALSE);
802417c: 0005883a mov r2,zero
8024180: 00000d06 br 80241b8 <isbcast+0xc4>
}
/* now reject any line type packets which don't support broadcast */
if ((ifc->n_mib->ifType == PPP) ||
8024184: e0bfff17 ldw r2,-4(fp)
8024188: 10802717 ldw r2,156(r2)
802418c: 10800217 ldw r2,8(r2)
8024190: 108005e0 cmpeqi r2,r2,23
8024194: 1000051e bne r2,zero,80241ac <isbcast+0xb8>
(ifc->n_mib->ifType == SLIP))
8024198: e0bfff17 ldw r2,-4(fp)
802419c: 10802717 ldw r2,156(r2)
80241a0: 10800217 ldw r2,8(r2)
if ((ifc->n_mib->ifType == PPP) ||
80241a4: 10800718 cmpnei r2,r2,28
80241a8: 1000021e bne r2,zero,80241b4 <isbcast+0xc0>
{
return FALSE;
80241ac: 0005883a mov r2,zero
80241b0: 00000106 br 80241b8 <isbcast+0xc4>
}
/* passed all tests, must be broadcast */
return(TRUE);
80241b4: 00800044 movi r2,1
}
80241b8: e037883a mov sp,fp
80241bc: df000017 ldw fp,0(sp)
80241c0: dec00104 addi sp,sp,4
80241c4: f800283a ret
080241c8 <reg_type>:
* RETURNS: Returns 0 if OK, else non-zero error code.
*/
int
reg_type(unshort type)
{
80241c8: defffb04 addi sp,sp,-20
80241cc: dfc00415 stw ra,16(sp)
80241d0: df000315 stw fp,12(sp)
80241d4: df000304 addi fp,sp,12
80241d8: 2005883a mov r2,r4
80241dc: e0bffd0d sth r2,-12(fp)
if (i >= PLLISTLEN)
return ENP_RESOURCE;
#endif /* DYNAMIC_IFACES */
/* loop thru list of nets, making them all look at new type */
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
80241e0: 008201b4 movhi r2,2054
80241e4: 10b6a617 ldw r2,-9576(r2)
80241e8: e0bfff15 stw r2,-4(fp)
80241ec: 00001106 br 8024234 <reg_type+0x6c>
{
if (ifp->n_reg_type) /* make sure call exists */
80241f0: e0bfff17 ldw r2,-4(fp)
80241f4: 10800617 ldw r2,24(r2)
80241f8: 10000b26 beq r2,zero,8024228 <reg_type+0x60>
{
e = (ifp->n_reg_type)(type, ifp);
80241fc: e0bfff17 ldw r2,-4(fp)
8024200: 10800617 ldw r2,24(r2)
8024204: e0fffd0b ldhu r3,-12(fp)
8024208: e17fff17 ldw r5,-4(fp)
802420c: 1809883a mov r4,r3
8024210: 103ee83a callr r2
8024214: e0bffe15 stw r2,-8(fp)
if (e)
8024218: e0bffe17 ldw r2,-8(fp)
802421c: 10000226 beq r2,zero,8024228 <reg_type+0x60>
return e; /* bails out if error */
8024220: e0bffe17 ldw r2,-8(fp)
8024224: 00000606 br 8024240 <reg_type+0x78>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8024228: e0bfff17 ldw r2,-4(fp)
802422c: 10800017 ldw r2,0(r2)
8024230: e0bfff15 stw r2,-4(fp)
8024234: e0bfff17 ldw r2,-4(fp)
8024238: 103fed1e bne r2,zero,80241f0 <reg_type+0x28>
}
}
return 0; /* OK code */
802423c: 0005883a mov r2,zero
}
8024240: e037883a mov sp,fp
8024244: dfc00117 ldw ra,4(sp)
8024248: df000017 ldw fp,0(sp)
802424c: dec00204 addi sp,sp,8
8024250: f800283a ret
08024254 <if_killsocks>:
*/
/* kill this NETs sockets */
void
if_killsocks(NET ifp)
{
8024254: defffa04 addi sp,sp,-24
8024258: dfc00515 stw ra,20(sp)
802425c: df000415 stw fp,16(sp)
8024260: df000404 addi fp,sp,16
8024264: e13ffc15 stw r4,-16(fp)
struct socket * so;
struct socket * next;
NET so_ifp; /* interface of sockets in list */
/* reset any sockets with this iface IP address */
so = (struct socket *)(soq.q_head);
8024268: 008201b4 movhi r2,2054
802426c: 10b87117 ldw r2,-7740(r2)
8024270: e0bfff15 stw r2,-4(fp)
while(so)
8024274: 00001306 br 80242c4 <if_killsocks+0x70>
{
if(so->so_pcb)
8024278: e0bfff17 ldw r2,-4(fp)
802427c: 10800117 ldw r2,4(r2)
8024280: 10000526 beq r2,zero,8024298 <if_killsocks+0x44>
so_ifp = so->so_pcb->ifp;
8024284: e0bfff17 ldw r2,-4(fp)
8024288: 10800117 ldw r2,4(r2)
802428c: 10800a17 ldw r2,40(r2)
8024290: e0bffe15 stw r2,-8(fp)
8024294: 00000106 br 802429c <if_killsocks+0x48>
else
so_ifp = NULL;
8024298: e03ffe15 stw zero,-8(fp)
next = (struct socket *)so->next;
802429c: e0bfff17 ldw r2,-4(fp)
80242a0: 10800017 ldw r2,0(r2)
80242a4: e0bffd15 stw r2,-12(fp)
if (so_ifp == ifp)
80242a8: e0fffe17 ldw r3,-8(fp)
80242ac: e0bffc17 ldw r2,-16(fp)
80242b0: 1880021e bne r3,r2,80242bc <if_killsocks+0x68>
{
/* this is a direct heavy-handed close. A reset is sent
* and all data is lost. The user should really have closed
* all the sockets gracfully first....
*/
soabort(so);
80242b4: e13fff17 ldw r4,-4(fp)
80242b8: 802d6fc0 call 802d6fc <soabort>
}
so = next;
80242bc: e0bffd17 ldw r2,-12(fp)
80242c0: e0bfff15 stw r2,-4(fp)
while(so)
80242c4: e0bfff17 ldw r2,-4(fp)
80242c8: 103feb1e bne r2,zero,8024278 <if_killsocks+0x24>
}
}
80242cc: 0001883a nop
80242d0: e037883a mov sp,fp
80242d4: dfc00117 ldw ra,4(sp)
80242d8: df000017 ldw fp,0(sp)
80242dc: dec00204 addi sp,sp,8
80242e0: f800283a ret
080242e4 <Netinit>:
* a non-zero error code
*/
int
Netinit()
{
80242e4: defffc04 addi sp,sp,-16
80242e8: dfc00315 stw ra,12(sp)
80242ec: df000215 stw fp,8(sp)
80242f0: df000204 addi fp,sp,8
#ifndef MULTI_HOMED
ifNumber = 1; /* prevents weird behavior below... */
#endif
/* set our largest header size and frames size */
for (i = 0; i < (int)ifNumber; i++)
80242f4: e03fff15 stw zero,-4(fp)
80242f8: 00003c06 br 80243ec <Netinit+0x108>
{
/* sanity check on mtu, et.al. We added this because earlier
* drivers were sloppy about setting them, but new
* logic depends on these sizes.
*/
if (nets[i]->n_mib->ifType == ETHERNET) /* ethernet? */
80242fc: e0bfff17 ldw r2,-4(fp)
8024300: 100690ba slli r3,r2,2
8024304: 008201b4 movhi r2,2054
8024308: 1885883a add r2,r3,r2
802430c: 10b77017 ldw r2,-8768(r2)
8024310: 10802717 ldw r2,156(r2)
8024314: 10800217 ldw r2,8(r2)
8024318: 10800198 cmpnei r2,r2,6
802431c: 10001c1e bne r2,zero,8024390 <Netinit+0xac>
{
if (nets[i]->n_mtu == 0) /* let device code override */
8024320: e0bfff17 ldw r2,-4(fp)
8024324: 100690ba slli r3,r2,2
8024328: 008201b4 movhi r2,2054
802432c: 1885883a add r2,r3,r2
8024330: 10b77017 ldw r2,-8768(r2)
8024334: 10800917 ldw r2,36(r2)
8024338: 1000071e bne r2,zero,8024358 <Netinit+0x74>
nets[i]->n_mtu = 1514;
802433c: e0bfff17 ldw r2,-4(fp)
8024340: 100690ba slli r3,r2,2
8024344: 008201b4 movhi r2,2054
8024348: 1885883a add r2,r3,r2
802434c: 10b77017 ldw r2,-8768(r2)
8024350: 00c17a84 movi r3,1514
8024354: 10c00915 stw r3,36(r2)
if (nets[i]->n_lnh == 0)
8024358: e0bfff17 ldw r2,-4(fp)
802435c: 100690ba slli r3,r2,2
8024360: 008201b4 movhi r2,2054
8024364: 1885883a add r2,r3,r2
8024368: 10b77017 ldw r2,-8768(r2)
802436c: 10800817 ldw r2,32(r2)
8024370: 1000071e bne r2,zero,8024390 <Netinit+0xac>
{
#ifdef IEEE_802_3
nets[i]->n_lnh = ETHHDR_SIZE + sizeof(struct snap_hdr);
#else
nets[i]->n_lnh = ETHHDR_SIZE;
8024374: e0bfff17 ldw r2,-4(fp)
8024378: 100690ba slli r3,r2,2
802437c: 008201b4 movhi r2,2054
8024380: 1885883a add r2,r3,r2
8024384: 10b77017 ldw r2,-8768(r2)
8024388: 00c00404 movi r3,16
802438c: 10c00815 stw r3,32(r2)
{
continue;
}
#endif /* IP_V6 */
MaxLnh = max(MaxLnh, nets[i]->n_lnh);
8024390: e0bfff17 ldw r2,-4(fp)
8024394: 100690ba slli r3,r2,2
8024398: 008201b4 movhi r2,2054
802439c: 1885883a add r2,r3,r2
80243a0: 10b77017 ldw r2,-8768(r2)
80243a4: 10800817 ldw r2,32(r2)
80243a8: d0e06417 ldw r3,-32368(gp)
80243ac: 10c0010e bge r2,r3,80243b4 <Netinit+0xd0>
80243b0: 1805883a mov r2,r3
80243b4: d0a06415 stw r2,-32368(gp)
MaxMtu = max(MaxMtu, nets[i]->n_mtu);
80243b8: e0bfff17 ldw r2,-4(fp)
80243bc: 100690ba slli r3,r2,2
80243c0: 008201b4 movhi r2,2054
80243c4: 1885883a add r2,r3,r2
80243c8: 10b77017 ldw r2,-8768(r2)
80243cc: 10800917 ldw r2,36(r2)
80243d0: d0e06517 ldw r3,-32364(gp)
80243d4: 10c0010e bge r2,r3,80243dc <Netinit+0xf8>
80243d8: 1805883a mov r2,r3
80243dc: d0a06515 stw r2,-32364(gp)
for (i = 0; i < (int)ifNumber; i++)
80243e0: e0bfff17 ldw r2,-4(fp)
80243e4: 10800044 addi r2,r2,1
80243e8: e0bfff15 stw r2,-4(fp)
80243ec: d0a06717 ldw r2,-32356(gp)
80243f0: 1007883a mov r3,r2
80243f4: e0bfff17 ldw r2,-4(fp)
80243f8: 10ffc016 blt r2,r3,80242fc <Netinit+0x18>
}
/* set up the received packet queue */
rcvdq.q_head = rcvdq.q_tail = NULL;
80243fc: 008201b4 movhi r2,2054
8024400: 1036ac15 stw zero,-9552(r2)
8024404: 008201b4 movhi r2,2054
8024408: 10f6ac17 ldw r3,-9552(r2)
802440c: 008201b4 movhi r2,2054
8024410: 10f6ab15 stw r3,-9556(r2)
rcvdq.q_max = rcvdq.q_min = rcvdq.q_len = 0;
8024414: 008201b4 movhi r2,2054
8024418: 1036ad15 stw zero,-9548(r2)
802441c: 008201b4 movhi r2,2054
8024420: 10f6ad17 ldw r3,-9548(r2)
8024424: 008201b4 movhi r2,2054
8024428: 10f6af15 stw r3,-9540(r2)
802442c: 008201b4 movhi r2,2054
8024430: 10f6af17 ldw r3,-9540(r2)
8024434: 008201b4 movhi r2,2054
8024438: 10f6ae15 stw r3,-9544(r2)
/* initialize freeq */
LOCK_NET_RESOURCE(FREEQ_RESID);
802443c: 01000084 movi r4,2
8024440: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
e = pk_init();
8024444: 80281a80 call 80281a8 <pk_init>
8024448: e0bffe15 stw r2,-8(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802444c: 01000084 movi r4,2
8024450: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (e) /* report error (memory ran out?) */
8024454: e0bffe17 ldw r2,-8(fp)
8024458: 10000226 beq r2,zero,8024464 <Netinit+0x180>
return e;
802445c: e0bffe17 ldw r2,-8(fp)
8024460: 0000cf06 br 80247a0 <Netinit+0x4bc>
/* packet buffers in freeq are now all set. */
exit_hook(netclose); /* Clean up nets when we are unloaded */
8024464: 010200b4 movhi r4,2050
8024468: 21123904 addi r4,r4,18660
802446c: 80251e40 call 80251e4 <exit_hook>
/* now do the per-IP interface initializations */
for (i = 0; i < (int)ifNumber; i++)
8024470: e03fff15 stw zero,-4(fp)
8024474: 0000c506 br 802478c <Netinit+0x4a8>
{
if (nets[i]->n_init != NULL) /* If iface has init routine... */
8024478: e0bfff17 ldw r2,-4(fp)
802447c: 100690ba slli r3,r2,2
8024480: 008201b4 movhi r2,2054
8024484: 1885883a add r2,r3,r2
8024488: 10b77017 ldw r2,-8768(r2)
802448c: 10800217 ldw r2,8(r2)
8024490: 10007726 beq r2,zero,8024670 <Netinit+0x38c>
{
if ((e = (*nets[i]->n_init)(i)) != 0) /* call init routine */
8024494: e0bfff17 ldw r2,-4(fp)
8024498: 100690ba slli r3,r2,2
802449c: 008201b4 movhi r2,2054
80244a0: 1885883a add r2,r3,r2
80244a4: 10b77017 ldw r2,-8768(r2)
80244a8: 10800217 ldw r2,8(r2)
80244ac: e13fff17 ldw r4,-4(fp)
80244b0: 103ee83a callr r2
80244b4: e0bffe15 stw r2,-8(fp)
80244b8: e0bffe17 ldw r2,-8(fp)
80244bc: 10000e26 beq r2,zero,80244f8 <Netinit+0x214>
{
dprintf("init error %d on net[%d]\n", e, i);
80244c0: e1bfff17 ldw r6,-4(fp)
80244c4: e17ffe17 ldw r5,-8(fp)
80244c8: 01020174 movhi r4,2053
80244cc: 2126bd04 addi r4,r4,-25868
80244d0: 8002c780 call 8002c78 <printf>
nets[i]->n_mib->ifOperStatus = NI_DOWN;
80244d4: e0bfff17 ldw r2,-4(fp)
80244d8: 100690ba slli r3,r2,2
80244dc: 008201b4 movhi r2,2054
80244e0: 1885883a add r2,r3,r2
80244e4: 10b77017 ldw r2,-8768(r2)
80244e8: 10802717 ldw r2,156(r2)
80244ec: 00c00084 movi r3,2
80244f0: 10c00715 stw r3,28(r2)
continue; /* ignore ifaces which fail */
80244f4: 0000a206 br 8024780 <Netinit+0x49c>
}
/* If interface is ethernet, set bcast flag bit. This
* should really be done by the init routine, but we handle it
* here to support MAC drivers which predate the flags field.
*/
if(nets[i]->n_mib->ifType == ETHERNET)
80244f8: e0bfff17 ldw r2,-4(fp)
80244fc: 100690ba slli r3,r2,2
8024500: 008201b4 movhi r2,2054
8024504: 1885883a add r2,r3,r2
8024508: 10b77017 ldw r2,-8768(r2)
802450c: 10802717 ldw r2,156(r2)
8024510: 10800217 ldw r2,8(r2)
8024514: 10800198 cmpnei r2,r2,6
8024518: 10000d1e bne r2,zero,8024550 <Netinit+0x26c>
nets[i]->n_flags |= NF_BCAST;
802451c: e0bfff17 ldw r2,-4(fp)
8024520: 100690ba slli r3,r2,2
8024524: 008201b4 movhi r2,2054
8024528: 1885883a add r2,r3,r2
802452c: 10b77017 ldw r2,-8768(r2)
8024530: 10c02a17 ldw r3,168(r2)
8024534: e0bfff17 ldw r2,-4(fp)
8024538: 100890ba slli r4,r2,2
802453c: 008201b4 movhi r2,2054
8024540: 2085883a add r2,r4,r2
8024544: 10b77017 ldw r2,-8768(r2)
8024548: 18c00054 ori r3,r3,1
802454c: 10c02a15 stw r3,168(r2)
/* set ifAdminStatus in case init() routine forgot to. IfOperStatus
* is not nessecarily up at this point, as in the case of a modem which
* is now in autoanswer mode.
*/
nets[i]->n_mib->ifAdminStatus = NI_UP;
8024550: e0bfff17 ldw r2,-4(fp)
8024554: 100690ba slli r3,r2,2
8024558: 008201b4 movhi r2,2054
802455c: 1885883a add r2,r3,r2
8024560: 10b77017 ldw r2,-8768(r2)
8024564: 10802717 ldw r2,156(r2)
8024568: 00c00044 movi r3,1
802456c: 10c00615 stw r3,24(r2)
/* assign default names to unnamed ifaces */
if(nets[i]->name[0] == 0) /* no name set by prep or init */
8024570: e0bfff17 ldw r2,-4(fp)
8024574: 100690ba slli r3,r2,2
8024578: 008201b4 movhi r2,2054
802457c: 1885883a add r2,r3,r2
8024580: 10b77017 ldw r2,-8768(r2)
8024584: 10800103 ldbu r2,4(r2)
8024588: 10803fcc andi r2,r2,255
802458c: 1080201c xori r2,r2,128
8024590: 10bfe004 addi r2,r2,-128
8024594: 1000361e bne r2,zero,8024670 <Netinit+0x38c>
{
if(nets[i]->n_mib->ifType == ETHERNET)
8024598: e0bfff17 ldw r2,-4(fp)
802459c: 100690ba slli r3,r2,2
80245a0: 008201b4 movhi r2,2054
80245a4: 1885883a add r2,r3,r2
80245a8: 10b77017 ldw r2,-8768(r2)
80245ac: 10802717 ldw r2,156(r2)
80245b0: 10800217 ldw r2,8(r2)
80245b4: 10800198 cmpnei r2,r2,6
80245b8: 10000f1e bne r2,zero,80245f8 <Netinit+0x314>
{
nets[i]->name[0] = 'e'; /* "et1", "et2", etc. */
80245bc: e0bfff17 ldw r2,-4(fp)
80245c0: 100690ba slli r3,r2,2
80245c4: 008201b4 movhi r2,2054
80245c8: 1885883a add r2,r3,r2
80245cc: 10b77017 ldw r2,-8768(r2)
80245d0: 00c01944 movi r3,101
80245d4: 10c00105 stb r3,4(r2)
nets[i]->name[1] = 't';
80245d8: e0bfff17 ldw r2,-4(fp)
80245dc: 100690ba slli r3,r2,2
80245e0: 008201b4 movhi r2,2054
80245e4: 1885883a add r2,r3,r2
80245e8: 10b77017 ldw r2,-8768(r2)
80245ec: 00c01d04 movi r3,116
80245f0: 10c00145 stb r3,5(r2)
80245f4: 00000e06 br 8024630 <Netinit+0x34c>
}
else
{
nets[i]->name[0] = 'i'; /* "if1", "if2", etc. */
80245f8: e0bfff17 ldw r2,-4(fp)
80245fc: 100690ba slli r3,r2,2
8024600: 008201b4 movhi r2,2054
8024604: 1885883a add r2,r3,r2
8024608: 10b77017 ldw r2,-8768(r2)
802460c: 00c01a44 movi r3,105
8024610: 10c00105 stb r3,4(r2)
nets[i]->name[1] = 'f';
8024614: e0bfff17 ldw r2,-4(fp)
8024618: 100690ba slli r3,r2,2
802461c: 008201b4 movhi r2,2054
8024620: 1885883a add r2,r3,r2
8024624: 10b77017 ldw r2,-8768(r2)
8024628: 00c01984 movi r3,102
802462c: 10c00145 stb r3,5(r2)
}
nets[i]->name[2] = (char)(i + '1');
8024630: e0bfff17 ldw r2,-4(fp)
8024634: 10800c44 addi r2,r2,49
8024638: 1009883a mov r4,r2
802463c: e0bfff17 ldw r2,-4(fp)
8024640: 100690ba slli r3,r2,2
8024644: 008201b4 movhi r2,2054
8024648: 1885883a add r2,r3,r2
802464c: 10b77017 ldw r2,-8768(r2)
8024650: 2007883a mov r3,r4
8024654: 10c00185 stb r3,6(r2)
nets[i]->name[3] = '\0';
8024658: e0bfff17 ldw r2,-4(fp)
802465c: 100690ba slli r3,r2,2
8024660: 008201b4 movhi r2,2054
8024664: 1885883a add r2,r3,r2
8024668: 10b77017 ldw r2,-8768(r2)
802466c: 100001c5 stb zero,7(r2)
}
}
/* check on subnet routing - if no mask then make one */
fixup_subnet_mask(i); /* make mask for this net */
8024670: e13fff17 ldw r4,-4(fp)
8024674: 80247b40 call 80247b4 <fixup_subnet_mask>
/* build broadcast addresses */
if(nets[i]->n_ipaddr != 0)
8024678: e0bfff17 ldw r2,-4(fp)
802467c: 100690ba slli r3,r2,2
8024680: 008201b4 movhi r2,2054
8024684: 1885883a add r2,r3,r2
8024688: 10b77017 ldw r2,-8768(r2)
802468c: 10800a17 ldw r2,40(r2)
8024690: 10003b26 beq r2,zero,8024780 <Netinit+0x49c>
{
nets[i]->n_netbr = nets[i]->n_ipaddr | ~nets[i]->snmask;
8024694: e0bfff17 ldw r2,-4(fp)
8024698: 100690ba slli r3,r2,2
802469c: 008201b4 movhi r2,2054
80246a0: 1885883a add r2,r3,r2
80246a4: 10b77017 ldw r2,-8768(r2)
80246a8: 11000a17 ldw r4,40(r2)
80246ac: e0bfff17 ldw r2,-4(fp)
80246b0: 100690ba slli r3,r2,2
80246b4: 008201b4 movhi r2,2054
80246b8: 1885883a add r2,r3,r2
80246bc: 10b77017 ldw r2,-8768(r2)
80246c0: 10800c17 ldw r2,48(r2)
80246c4: 0086303a nor r3,zero,r2
80246c8: e0bfff17 ldw r2,-4(fp)
80246cc: 100a90ba slli r5,r2,2
80246d0: 008201b4 movhi r2,2054
80246d4: 2885883a add r2,r5,r2
80246d8: 10b77017 ldw r2,-8768(r2)
80246dc: 20c6b03a or r3,r4,r3
80246e0: 10c00e15 stw r3,56(r2)
nets[i]->n_netbr42 = nets[i]->n_ipaddr & nets[i]->snmask;
80246e4: e0bfff17 ldw r2,-4(fp)
80246e8: 100690ba slli r3,r2,2
80246ec: 008201b4 movhi r2,2054
80246f0: 1885883a add r2,r3,r2
80246f4: 10b77017 ldw r2,-8768(r2)
80246f8: 11000a17 ldw r4,40(r2)
80246fc: e0bfff17 ldw r2,-4(fp)
8024700: 100690ba slli r3,r2,2
8024704: 008201b4 movhi r2,2054
8024708: 1885883a add r2,r3,r2
802470c: 10b77017 ldw r2,-8768(r2)
8024710: 10c00c17 ldw r3,48(r2)
8024714: e0bfff17 ldw r2,-4(fp)
8024718: 100a90ba slli r5,r2,2
802471c: 008201b4 movhi r2,2054
8024720: 2885883a add r2,r5,r2
8024724: 10b77017 ldw r2,-8768(r2)
8024728: 20c6703a and r3,r4,r3
802472c: 10c00f15 stw r3,60(r2)
nets[i]->n_subnetbr = nets[i]->n_ipaddr | ~nets[i]->snmask;
8024730: e0bfff17 ldw r2,-4(fp)
8024734: 100690ba slli r3,r2,2
8024738: 008201b4 movhi r2,2054
802473c: 1885883a add r2,r3,r2
8024740: 10b77017 ldw r2,-8768(r2)
8024744: 11000a17 ldw r4,40(r2)
8024748: e0bfff17 ldw r2,-4(fp)
802474c: 100690ba slli r3,r2,2
8024750: 008201b4 movhi r2,2054
8024754: 1885883a add r2,r3,r2
8024758: 10b77017 ldw r2,-8768(r2)
802475c: 10800c17 ldw r2,48(r2)
8024760: 0086303a nor r3,zero,r2
8024764: e0bfff17 ldw r2,-4(fp)
8024768: 100a90ba slli r5,r2,2
802476c: 008201b4 movhi r2,2054
8024770: 2885883a add r2,r5,r2
8024774: 10b77017 ldw r2,-8768(r2)
8024778: 20c6b03a or r3,r4,r3
802477c: 10c01015 stw r3,64(r2)
for (i = 0; i < (int)ifNumber; i++)
8024780: e0bfff17 ldw r2,-4(fp)
8024784: 10800044 addi r2,r2,1
8024788: e0bfff15 stw r2,-4(fp)
802478c: d0a06717 ldw r2,-32356(gp)
8024790: 1007883a mov r3,r2
8024794: e0bfff17 ldw r2,-4(fp)
8024798: 10ff3716 blt r2,r3,8024478 <Netinit+0x194>
#if defined(DYNAMIC_IFACES) && defined(IN_MENUS)
/* Install dynamic iface menu */
install_menu(&dynif_menu[0]);
#endif /* DYNAMIC_IFACES && IN_MENUS */
return(0);
802479c: 0005883a mov r2,zero
}
80247a0: e037883a mov sp,fp
80247a4: dfc00117 ldw ra,4(sp)
80247a8: df000017 ldw fp,0(sp)
80247ac: dec00204 addi sp,sp,8
80247b0: f800283a ret
080247b4 <fixup_subnet_mask>:
* RETURNS:
*/
void
fixup_subnet_mask(int netnum) /* which of the nets[] to do. */
{
80247b4: defffc04 addi sp,sp,-16
80247b8: dfc00315 stw ra,12(sp)
80247bc: df000215 stw fp,8(sp)
80247c0: df000204 addi fp,sp,8
80247c4: e13ffe15 stw r4,-8(fp)
u_long smask;
if (nets[netnum]->snmask) /* if mask is already set, don't bother */
80247c8: e0bffe17 ldw r2,-8(fp)
80247cc: 100690ba slli r3,r2,2
80247d0: 008201b4 movhi r2,2054
80247d4: 1885883a add r2,r3,r2
80247d8: 10b77017 ldw r2,-8768(r2)
80247dc: 10800c17 ldw r2,48(r2)
80247e0: 10003a1e bne r2,zero,80248cc <fixup_subnet_mask+0x118>
return;
/* things depending on IP address class: */
if ((nets[netnum]->n_ipaddr & AMASK) == AADDR)
80247e4: e0bffe17 ldw r2,-8(fp)
80247e8: 100690ba slli r3,r2,2
80247ec: 008201b4 movhi r2,2054
80247f0: 1885883a add r2,r3,r2
80247f4: 10b77017 ldw r2,-8768(r2)
80247f8: 10800a17 ldw r2,40(r2)
80247fc: 1080200c andi r2,r2,128
8024800: 1000031e bne r2,zero,8024810 <fixup_subnet_mask+0x5c>
smask = 0xFF000000L;
8024804: 00bfc034 movhi r2,65280
8024808: e0bfff15 stw r2,-4(fp)
802480c: 00001b06 br 802487c <fixup_subnet_mask+0xc8>
else if((nets[netnum]->n_ipaddr & BMASK) == BADDR)
8024810: e0bffe17 ldw r2,-8(fp)
8024814: 100690ba slli r3,r2,2
8024818: 008201b4 movhi r2,2054
802481c: 1885883a add r2,r3,r2
8024820: 10b77017 ldw r2,-8768(r2)
8024824: 10800a17 ldw r2,40(r2)
8024828: 1080300c andi r2,r2,192
802482c: 10802018 cmpnei r2,r2,128
8024830: 1000031e bne r2,zero,8024840 <fixup_subnet_mask+0x8c>
smask = 0xFFFF0000L;
8024834: 00bffff4 movhi r2,65535
8024838: e0bfff15 stw r2,-4(fp)
802483c: 00000f06 br 802487c <fixup_subnet_mask+0xc8>
else if((nets[netnum]->n_ipaddr & CMASK) == CADDR)
8024840: e0bffe17 ldw r2,-8(fp)
8024844: 100690ba slli r3,r2,2
8024848: 008201b4 movhi r2,2054
802484c: 1885883a add r2,r3,r2
8024850: 10b77017 ldw r2,-8768(r2)
8024854: 10800a17 ldw r2,40(r2)
8024858: 1080380c andi r2,r2,224
802485c: 10803018 cmpnei r2,r2,192
8024860: 1000031e bne r2,zero,8024870 <fixup_subnet_mask+0xbc>
smask = 0xFFFFFF00L;
8024864: 00bfc004 movi r2,-256
8024868: e0bfff15 stw r2,-4(fp)
802486c: 00000306 br 802487c <fixup_subnet_mask+0xc8>
else
{
dtrap(); /* bad logic or setup values */
8024870: 8028cd40 call 8028cd4 <dtrap>
smask = 0xFFFFFF00L;
8024874: 00bfc004 movi r2,-256
8024878: e0bfff15 stw r2,-4(fp)
}
nets[netnum]->snmask = htonl(smask);
802487c: e0bfff17 ldw r2,-4(fp)
8024880: 1006d63a srli r3,r2,24
8024884: e0bfff17 ldw r2,-4(fp)
8024888: 1004d23a srli r2,r2,8
802488c: 10bfc00c andi r2,r2,65280
8024890: 1886b03a or r3,r3,r2
8024894: e0bfff17 ldw r2,-4(fp)
8024898: 1004923a slli r2,r2,8
802489c: 10803fec andhi r2,r2,255
80248a0: 1888b03a or r4,r3,r2
80248a4: e0bfff17 ldw r2,-4(fp)
80248a8: 1006963a slli r3,r2,24
80248ac: e0bffe17 ldw r2,-8(fp)
80248b0: 100a90ba slli r5,r2,2
80248b4: 008201b4 movhi r2,2054
80248b8: 2885883a add r2,r5,r2
80248bc: 10b77017 ldw r2,-8768(r2)
80248c0: 20c6b03a or r3,r4,r3
80248c4: 10c00c15 stw r3,48(r2)
80248c8: 00000106 br 80248d0 <fixup_subnet_mask+0x11c>
return;
80248cc: 0001883a nop
}
80248d0: e037883a mov sp,fp
80248d4: dfc00117 ldw ra,4(sp)
80248d8: df000017 ldw fp,0(sp)
80248dc: dec00204 addi sp,sp,8
80248e0: f800283a ret
080248e4 <netclose>:
* RETURNS:
*/
void
netclose()
{
80248e4: defffc04 addi sp,sp,-16
80248e8: dfc00315 stw ra,12(sp)
80248ec: df000215 stw fp,8(sp)
80248f0: df000204 addi fp,sp,8
NET ifp;
int index = 0;
80248f4: e03ffe15 stw zero,-8(fp)
#ifdef NPDEBUG
if (NDEBUG & INFOMSG) dprintf("netclose() called\n");
80248f8: d0a06617 ldw r2,-32360(gp)
80248fc: 1080010c andi r2,r2,4
8024900: 10000326 beq r2,zero,8024910 <netclose+0x2c>
8024904: 01020174 movhi r4,2053
8024908: 2126c404 addi r4,r4,-25840
802490c: 8002d9c0 call 8002d9c <puts>
#endif
for (ifp = (NET)netlist.q_head; ifp; ifp = ifp->n_next)
8024910: 008201b4 movhi r2,2054
8024914: 10b6a617 ldw r2,-9576(r2)
8024918: e0bfff15 stw r2,-4(fp)
802491c: 00002106 br 80249a4 <netclose+0xc0>
{
if (ifp->n_close)
8024920: e0bfff17 ldw r2,-4(fp)
8024924: 10800517 ldw r2,20(r2)
8024928: 10000f26 beq r2,zero,8024968 <netclose+0x84>
{
dprintf("netclose: closing iface %s\n", ifp->n_mib->ifDescr);
802492c: e0bfff17 ldw r2,-4(fp)
8024930: 10802717 ldw r2,156(r2)
8024934: 10800117 ldw r2,4(r2)
8024938: 100b883a mov r5,r2
802493c: 01020174 movhi r4,2053
8024940: 2126c904 addi r4,r4,-25820
8024944: 8002c780 call 8002c78 <printf>
(*(ifp->n_close))(index++);
8024948: e0bfff17 ldw r2,-4(fp)
802494c: 10c00517 ldw r3,20(r2)
8024950: e0bffe17 ldw r2,-8(fp)
8024954: 11000044 addi r4,r2,1
8024958: e13ffe15 stw r4,-8(fp)
802495c: 1009883a mov r4,r2
8024960: 183ee83a callr r3
8024964: 00000c06 br 8024998 <netclose+0xb4>
}
else
{
#ifdef NPDEBUG
if (NDEBUG & INFOMSG) dprintf("net %s: no close routine!\n", ifp->name);
8024968: d0a06617 ldw r2,-32360(gp)
802496c: 1080010c andi r2,r2,4
8024970: 10000626 beq r2,zero,802498c <netclose+0xa8>
8024974: e0bfff17 ldw r2,-4(fp)
8024978: 10800104 addi r2,r2,4
802497c: 100b883a mov r5,r2
8024980: 01020174 movhi r4,2053
8024984: 2126d004 addi r4,r4,-25792
8024988: 8002c780 call 8002c78 <printf>
#endif
index++;
802498c: e0bffe17 ldw r2,-8(fp)
8024990: 10800044 addi r2,r2,1
8024994: e0bffe15 stw r2,-8(fp)
for (ifp = (NET)netlist.q_head; ifp; ifp = ifp->n_next)
8024998: e0bfff17 ldw r2,-4(fp)
802499c: 10800017 ldw r2,0(r2)
80249a0: e0bfff15 stw r2,-4(fp)
80249a4: e0bfff17 ldw r2,-4(fp)
80249a8: 103fdd1e bne r2,zero,8024920 <netclose+0x3c>
}
}
}
80249ac: 0001883a nop
80249b0: e037883a mov sp,fp
80249b4: dfc00117 ldw ra,4(sp)
80249b8: df000017 ldw fp,0(sp)
80249bc: dec00204 addi sp,sp,8
80249c0: f800283a ret
080249c4 <pktdemux>:
* RETURNS: void
*/
void
pktdemux()
{
80249c4: defff904 addi sp,sp,-28
80249c8: dfc00615 stw ra,24(sp)
80249cc: df000515 stw fp,20(sp)
80249d0: df000504 addi fp,sp,20
NET ifc; /* interface packet came from */
IFMIB mib;
int pkts;
char * eth;
pkts = 0; /* packets per loop */
80249d4: e03fff15 stw zero,-4(fp)
while (rcvdq.q_len)
80249d8: 0000d906 br 8024d40 <pktdemux+0x37c>
{
/* If we are low on free packets, don't hog CPU cycles */
if (pkts++ > bigfreeq.q_len)
80249dc: e0bfff17 ldw r2,-4(fp)
80249e0: 10c00044 addi r3,r2,1
80249e4: e0ffff15 stw r3,-4(fp)
80249e8: 00c201b4 movhi r3,2054
80249ec: 18f7dd17 ldw r3,-8332(r3)
80249f0: 1880020e bge r3,r2,80249fc <pktdemux+0x38>
{
#ifdef SUPERLOOP
return; /* don't hog stack on superloop */
#else /* SUPERLOOP */
tk_yield(); /* let application tasks process received packets */
80249f4: 8027ce40 call 8027ce4 <tk_yield>
pkts = 0; /* reset counter */
80249f8: e03fff15 stw zero,-4(fp)
#endif /* SUPERLOOP else */
}
/* If we get receive interupt from the net during this
lock, the MAC driver needs to wait or reschedule */
LOCK_NET_RESOURCE(RXQ_RESID);
80249fc: 01000044 movi r4,1
8024a00: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pkt = (PACKET)q_deq(&rcvdq);
8024a04: 010201b4 movhi r4,2054
8024a08: 2136ab04 addi r4,r4,-9556
8024a0c: 80288d80 call 80288d8 <getq>
8024a10: e0bffe15 stw r2,-8(fp)
UNLOCK_NET_RESOURCE(RXQ_RESID);
8024a14: 01000044 movi r4,1
8024a18: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (!pkt) panic("pktdemux: got null pkt");
8024a1c: e0bffe17 ldw r2,-8(fp)
8024a20: 1000031e bne r2,zero,8024a30 <pktdemux+0x6c>
8024a24: 01020174 movhi r4,2053
8024a28: 2126d704 addi r4,r4,-25764
8024a2c: 80271780 call 8027178 <panic>
ifc = pkt->net;
8024a30: e0bffe17 ldw r2,-8(fp)
8024a34: 10800617 ldw r2,24(r2)
8024a38: e0bffd15 stw r2,-12(fp)
mib = ifc->n_mib;
8024a3c: e0bffd17 ldw r2,-12(fp)
8024a40: 10802717 ldw r2,156(r2)
8024a44: e0bffc15 stw r2,-16(fp)
/* maintain mib stats for unicast and broadcast */
if (isbcast(ifc, (u_char*)pkt->nb_buff + ETHHDR_BIAS))
8024a48: e0bffe17 ldw r2,-8(fp)
8024a4c: 10800117 ldw r2,4(r2)
8024a50: 10800084 addi r2,r2,2
8024a54: 100b883a mov r5,r2
8024a58: e13ffd17 ldw r4,-12(fp)
8024a5c: 80240f40 call 80240f4 <isbcast>
8024a60: 10000626 beq r2,zero,8024a7c <pktdemux+0xb8>
mib->ifInNUcastPkts++;
8024a64: e0bffc17 ldw r2,-16(fp)
8024a68: 10800b17 ldw r2,44(r2)
8024a6c: 10c00044 addi r3,r2,1
8024a70: e0bffc17 ldw r2,-16(fp)
8024a74: 10c00b15 stw r3,44(r2)
8024a78: 00000506 br 8024a90 <pktdemux+0xcc>
else
mib->ifInUcastPkts++;
8024a7c: e0bffc17 ldw r2,-16(fp)
8024a80: 10800a17 ldw r2,40(r2)
8024a84: 10c00044 addi r3,r2,1
8024a88: e0bffc17 ldw r2,-16(fp)
8024a8c: 10c00a15 stw r3,40(r2)
if(mib->ifAdminStatus == NI_DOWN)
8024a90: e0bffc17 ldw r2,-16(fp)
8024a94: 10800617 ldw r2,24(r2)
8024a98: 10800098 cmpnei r2,r2,2
8024a9c: 10000c1e bne r2,zero,8024ad0 <pktdemux+0x10c>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
8024aa0: 01000084 movi r4,2
8024aa4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt); /* dump packet from downed interface */
8024aa8: e13ffe17 ldw r4,-8(fp)
8024aac: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8024ab0: 01000084 movi r4,2
8024ab4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
mib->ifInDiscards++;
8024ab8: e0bffc17 ldw r2,-16(fp)
8024abc: 10800c17 ldw r2,48(r2)
8024ac0: 10c00044 addi r3,r2,1
8024ac4: e0bffc17 ldw r2,-16(fp)
8024ac8: 10c00c15 stw r3,48(r2)
continue; /* next packet */
8024acc: 00009c06 br 8024d40 <pktdemux+0x37c>
}
#ifdef NPDEBUG
if (*(pkt->nb_buff - ALIGN_TYPE) != 'M' ||
8024ad0: e0bffe17 ldw r2,-8(fp)
8024ad4: 10800117 ldw r2,4(r2)
8024ad8: 10bfff04 addi r2,r2,-4
8024adc: 10800003 ldbu r2,0(r2)
8024ae0: 10803fcc andi r2,r2,255
8024ae4: 1080201c xori r2,r2,128
8024ae8: 10bfe004 addi r2,r2,-128
8024aec: 10801358 cmpnei r2,r2,77
8024af0: 10000b1e bne r2,zero,8024b20 <pktdemux+0x15c>
*(pkt->nb_buff + pkt->nb_blen) != 'M')
8024af4: e0bffe17 ldw r2,-8(fp)
8024af8: 10c00117 ldw r3,4(r2)
8024afc: e0bffe17 ldw r2,-8(fp)
8024b00: 10800217 ldw r2,8(r2)
8024b04: 1885883a add r2,r3,r2
8024b08: 10800003 ldbu r2,0(r2)
if (*(pkt->nb_buff - ALIGN_TYPE) != 'M' ||
8024b0c: 10803fcc andi r2,r2,255
8024b10: 1080201c xori r2,r2,128
8024b14: 10bfe004 addi r2,r2,-128
8024b18: 10801360 cmpeqi r2,r2,77
8024b1c: 1000041e bne r2,zero,8024b30 <pktdemux+0x16c>
{
dtrap();
8024b20: 8028cd40 call 8028cd4 <dtrap>
panic("pktdemux: corrupt pkt");
8024b24: 01020174 movhi r4,2053
8024b28: 2126dd04 addi r4,r4,-25740
8024b2c: 80271780 call 8027178 <panic>
}
}
#endif /* LOSSY_IO */
/* see if driver set pkt->nb_prot and pkt->type */
if((ifc->n_flags & NF_NBPROT) == 0)
8024b30: e0bffd17 ldw r2,-12(fp)
8024b34: 10802a17 ldw r2,168(r2)
8024b38: 1080020c andi r2,r2,8
8024b3c: 1000491e bne r2,zero,8024c64 <pktdemux+0x2a0>
* probably the right thing to do, but because of this historic
* inconsistency we don't try to fix it here - the longer size
* turns out to be harmless since the IP layer fixes the size
* based on the IP header length field.
*/
switch(ifc->n_mib->ifType)
8024b40: e0bffd17 ldw r2,-12(fp)
8024b44: 10802717 ldw r2,156(r2)
8024b48: 10800217 ldw r2,8(r2)
8024b4c: 10800198 cmpnei r2,r2,6
8024b50: 1000361e bne r2,zero,8024c2c <pktdemux+0x268>
{
case ETHERNET:
/* get pointer to ethernet header */
eth = (pkt->nb_buff + ETHHDR_BIAS);
8024b54: e0bffe17 ldw r2,-8(fp)
8024b58: 10800117 ldw r2,4(r2)
8024b5c: 10800084 addi r2,r2,2
8024b60: e0bffb15 stw r2,-20(fp)
{
pkt->type = htons((unshort)ET_TYPE_GET(eth));
pkt->nb_prot = pkt->nb_buff + ETHHDR_SIZE;
}
#else
pkt->type = htons((unshort)ET_TYPE_GET(eth));
8024b64: e0bffb17 ldw r2,-20(fp)
8024b68: 10800304 addi r2,r2,12
8024b6c: 10800003 ldbu r2,0(r2)
8024b70: 10803fcc andi r2,r2,255
8024b74: 1080201c xori r2,r2,128
8024b78: 10bfe004 addi r2,r2,-128
8024b7c: 1004923a slli r2,r2,8
8024b80: 1007883a mov r3,r2
8024b84: e0bffb17 ldw r2,-20(fp)
8024b88: 10800344 addi r2,r2,13
8024b8c: 10800003 ldbu r2,0(r2)
8024b90: 10803fcc andi r2,r2,255
8024b94: 1080201c xori r2,r2,128
8024b98: 10bfe004 addi r2,r2,-128
8024b9c: 10803fcc andi r2,r2,255
8024ba0: 1885883a add r2,r3,r2
8024ba4: 10bfffcc andi r2,r2,65535
8024ba8: 1004d23a srli r2,r2,8
8024bac: 1007883a mov r3,r2
8024bb0: e0bffb17 ldw r2,-20(fp)
8024bb4: 10800304 addi r2,r2,12
8024bb8: 10800003 ldbu r2,0(r2)
8024bbc: 10803fcc andi r2,r2,255
8024bc0: 1080201c xori r2,r2,128
8024bc4: 10bfe004 addi r2,r2,-128
8024bc8: 1004923a slli r2,r2,8
8024bcc: 1009883a mov r4,r2
8024bd0: e0bffb17 ldw r2,-20(fp)
8024bd4: 10800344 addi r2,r2,13
8024bd8: 10800003 ldbu r2,0(r2)
8024bdc: 10803fcc andi r2,r2,255
8024be0: 1080201c xori r2,r2,128
8024be4: 10bfe004 addi r2,r2,-128
8024be8: 10803fcc andi r2,r2,255
8024bec: 2085883a add r2,r4,r2
8024bf0: 10bfffcc andi r2,r2,65535
8024bf4: 1004923a slli r2,r2,8
8024bf8: 1884b03a or r2,r3,r2
8024bfc: 1007883a mov r3,r2
8024c00: e0bffe17 ldw r2,-8(fp)
8024c04: 10c0080d sth r3,32(r2)
pkt->nb_prot = pkt->nb_buff + pkt->net->n_lnh;
8024c08: e0bffe17 ldw r2,-8(fp)
8024c0c: 10800117 ldw r2,4(r2)
8024c10: e0fffe17 ldw r3,-8(fp)
8024c14: 18c00617 ldw r3,24(r3)
8024c18: 18c00817 ldw r3,32(r3)
8024c1c: 10c7883a add r3,r2,r3
8024c20: e0bffe17 ldw r2,-8(fp)
8024c24: 10c00315 stw r3,12(r2)
#endif /* IEEE_802_3 */
break;
8024c28: 00000f06 br 8024c68 <pktdemux+0x2a4>
case PPPOE:
/* do not change type yet, for PPPoE */
break;
#endif /* USE_PPPOE */
default: /* driver bug? */
dprintf("pktdemux: bad Iface type %ld\n",ifc->n_mib->ifType);
8024c2c: e0bffd17 ldw r2,-12(fp)
8024c30: 10802717 ldw r2,156(r2)
8024c34: 10800217 ldw r2,8(r2)
8024c38: 100b883a mov r5,r2
8024c3c: 01020174 movhi r4,2053
8024c40: 2126e304 addi r4,r4,-25716
8024c44: 8002c780 call 8002c78 <printf>
LOCK_NET_RESOURCE(FREEQ_RESID);
8024c48: 01000084 movi r4,2
8024c4c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8024c50: e13ffe17 ldw r4,-8(fp)
8024c54: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8024c58: 01000084 movi r4,2
8024c5c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
continue;
8024c60: 00003706 br 8024d40 <pktdemux+0x37c>
}
}
8024c64: 0001883a nop
/* pkt->nb_prot and pkt->type are now set. pass pkt to upper layer */
switch(pkt->type)
8024c68: e0bffe17 ldw r2,-8(fp)
8024c6c: 1080080b ldhu r2,32(r2)
8024c70: 10bfffcc andi r2,r2,65535
8024c74: 10c00220 cmpeqi r3,r2,8
8024c78: 1800031e bne r3,zero,8024c88 <pktdemux+0x2c4>
8024c7c: 10818220 cmpeqi r2,r2,1544
8024c80: 1000081e bne r2,zero,8024ca4 <pktdemux+0x2e0>
8024c84: 00000e06 br 8024cc0 <pktdemux+0x2fc>
{
case IPTP: /* IP type */
LOCK_NET_RESOURCE(NET_RESID);
8024c88: 0009883a mov r4,zero
8024c8c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
#ifdef SHARED_IPADDRS
add_share_route(pkt);
#endif /* SHARED_IPADDRS */
#ifdef IP_V4
ip_rcv(pkt);
8024c90: e13ffe17 ldw r4,-8(fp)
8024c94: 803b6680 call 803b668 <ip_rcv>
/* don't care, it's IPv4 */
LOCK_NET_RESOURCE(FREEQ_RESID);
pk_free(pkt);
UNLOCK_NET_RESOURCE(FREEQ_RESID);
#endif
UNLOCK_NET_RESOURCE(NET_RESID);
8024c98: 0009883a mov r4,zero
8024c9c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
break;
8024ca0: 00002606 br 8024d3c <pktdemux+0x378>
#ifdef INCLUDE_ARP
case ARPTP: /* ARP type */
LOCK_NET_RESOURCE(NET_RESID);
8024ca4: 0009883a mov r4,zero
8024ca8: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
arprcv(pkt);
8024cac: e13ffe17 ldw r4,-8(fp)
8024cb0: 80238e40 call 80238e4 <arprcv>
UNLOCK_NET_RESOURCE(NET_RESID);
8024cb4: 0009883a mov r4,zero
8024cb8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
break;
8024cbc: 00001f06 br 8024d3c <pktdemux+0x378>
UNLOCK_NET_RESOURCE(NET_RESID);
break;
#endif
default:
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
8024cc0: d0a06617 ldw r2,-32360(gp)
8024cc4: 1081000c andi r2,r2,1024
8024cc8: 10001026 beq r2,zero,8024d0c <pktdemux+0x348>
dprintf("pktdemux: bad pkt type 0x%04x\n", ntohs(pkt->type));
8024ccc: e0bffe17 ldw r2,-8(fp)
8024cd0: 1080080b ldhu r2,32(r2)
8024cd4: 10bfffcc andi r2,r2,65535
8024cd8: 1004d23a srli r2,r2,8
8024cdc: 10bfffcc andi r2,r2,65535
8024ce0: 10c03fcc andi r3,r2,255
8024ce4: e0bffe17 ldw r2,-8(fp)
8024ce8: 1080080b ldhu r2,32(r2)
8024cec: 10bfffcc andi r2,r2,65535
8024cf0: 1004923a slli r2,r2,8
8024cf4: 10bfffcc andi r2,r2,65535
8024cf8: 1884b03a or r2,r3,r2
8024cfc: 100b883a mov r5,r2
8024d00: 01020174 movhi r4,2053
8024d04: 2126eb04 addi r4,r4,-25684
8024d08: 8002c780 call 8002c78 <printf>
#endif /* NPDEBUG */
ifc->n_mib->ifInUnknownProtos++;
8024d0c: e0bffd17 ldw r2,-12(fp)
8024d10: 10802717 ldw r2,156(r2)
8024d14: 10c00e17 ldw r3,56(r2)
8024d18: 18c00044 addi r3,r3,1
8024d1c: 10c00e15 stw r3,56(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
8024d20: 01000084 movi r4,2
8024d24: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt); /* return to free buffer */
8024d28: e13ffe17 ldw r4,-8(fp)
8024d2c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8024d30: 01000084 movi r4,2
8024d34: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
break;
8024d38: 0001883a nop
}
continue;
8024d3c: 0001883a nop
while (rcvdq.q_len)
8024d40: 008201b4 movhi r2,2054
8024d44: 10b6ad17 ldw r2,-9548(r2)
8024d48: 103f241e bne r2,zero,80249dc <pktdemux+0x18>
}
}
8024d4c: 0001883a nop
8024d50: e037883a mov sp,fp
8024d54: dfc00117 ldw ra,4(sp)
8024d58: df000017 ldw fp,0(sp)
8024d5c: dec00204 addi sp,sp,8
8024d60: f800283a ret
08024d64 <c_older>:
* RETURNS: the older of the two passed tick counts
*/
u_long
c_older(u_long ct1, u_long ct2)
{
8024d64: defffd04 addi sp,sp,-12
8024d68: df000215 stw fp,8(sp)
8024d6c: df000204 addi fp,sp,8
8024d70: e13fff15 stw r4,-4(fp)
8024d74: e17ffe15 stw r5,-8(fp)
if (!(cticks & 0x80000000) || /* cticks has not wrapped recently, or */
8024d78: d0a07d17 ldw r2,-32268(gp)
8024d7c: 10000c0e bge r2,zero,8024db0 <c_older+0x4c>
(ct1 <= cticks && ct2 <= cticks) || /* both are below cticks or */
8024d80: d0e07d17 ldw r3,-32268(gp)
if (!(cticks & 0x80000000) || /* cticks has not wrapped recently, or */
8024d84: e0bfff17 ldw r2,-4(fp)
8024d88: 18800336 bltu r3,r2,8024d98 <c_older+0x34>
(ct1 <= cticks && ct2 <= cticks) || /* both are below cticks or */
8024d8c: d0e07d17 ldw r3,-32268(gp)
8024d90: e0bffe17 ldw r2,-8(fp)
8024d94: 1880062e bgeu r3,r2,8024db0 <c_older+0x4c>
(ct1 >= cticks && ct2 >= cticks)) /* both are above cticks */
8024d98: d0a07d17 ldw r2,-32268(gp)
(ct1 <= cticks && ct2 <= cticks) || /* both are below cticks or */
8024d9c: e0ffff17 ldw r3,-4(fp)
8024da0: 18800a36 bltu r3,r2,8024dcc <c_older+0x68>
(ct1 >= cticks && ct2 >= cticks)) /* both are above cticks */
8024da4: d0a07d17 ldw r2,-32268(gp)
8024da8: e0fffe17 ldw r3,-8(fp)
8024dac: 18800736 bltu r3,r2,8024dcc <c_older+0x68>
{
if (ct1 < ct2)
8024db0: e0ffff17 ldw r3,-4(fp)
8024db4: e0bffe17 ldw r2,-8(fp)
8024db8: 1880022e bgeu r3,r2,8024dc4 <c_older+0x60>
return(ct1); /* then smaller is oldest */
8024dbc: e0bfff17 ldw r2,-4(fp)
8024dc0: 00000806 br 8024de4 <c_older+0x80>
else
return(ct2);
8024dc4: e0bffe17 ldw r2,-8(fp)
8024dc8: 00000606 br 8024de4 <c_older+0x80>
}
/* else one is less than cticks, and one is greater.
the larger value is then the oldest */
if (ct1 >= ct2)
8024dcc: e0ffff17 ldw r3,-4(fp)
8024dd0: e0bffe17 ldw r2,-8(fp)
8024dd4: 18800236 bltu r3,r2,8024de0 <c_older+0x7c>
return(ct1);
8024dd8: e0bfff17 ldw r2,-4(fp)
8024ddc: 00000106 br 8024de4 <c_older+0x80>
else
return(ct2);
8024de0: e0bffe17 ldw r2,-8(fp)
}
8024de4: e037883a mov sp,fp
8024de8: df000017 ldw fp,0(sp)
8024dec: dec00104 addi sp,sp,4
8024df0: f800283a ret
08024df4 <ip2mac>:
*/
int
ip2mac(PACKET pkt, /* the packet itself, all set but for dest MAC address */
ip_addr dest_ip) /* the IP host or gateway to get MAC addr for */
{
8024df4: defffb04 addi sp,sp,-20
8024df8: dfc00415 stw ra,16(sp)
8024dfc: df000315 stw fp,12(sp)
8024e00: df000304 addi fp,sp,12
8024e04: e13ffe15 stw r4,-8(fp)
8024e08: e17ffd15 stw r5,-12(fp)
IFMIB ifmib = pkt->net->n_mib; /* mib info for this interface */
8024e0c: e0bffe17 ldw r2,-8(fp)
8024e10: 10800617 ldw r2,24(r2)
8024e14: 10802717 ldw r2,156(r2)
8024e18: e0bfff15 stw r2,-4(fp)
/* Always punt if iface ifAdminStatus is DOWN. ifOperStatus may
* be down too, but our packet may be the event required to bring
* it up - so don't worry about ifOperStatus here.
*/
if(ifmib->ifAdminStatus == NI_DOWN)
8024e1c: e0bfff17 ldw r2,-4(fp)
8024e20: 10800617 ldw r2,24(r2)
8024e24: 10800098 cmpnei r2,r2,2
8024e28: 1000081e bne r2,zero,8024e4c <ip2mac+0x58>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
8024e2c: 01000084 movi r4,2
8024e30: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8024e34: e13ffe17 ldw r4,-8(fp)
8024e38: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8024e3c: 01000084 movi r4,2
8024e40: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return(ENP_NO_ROUTE);
8024e44: 00bff7c4 movi r2,-33
8024e48: 00004806 br 8024f6c <ip2mac+0x178>
return ENP_NOBUFFER;
}
#endif /* LINKED_PKTS */
/* some interfaces (ie SLIP) just get the raw IP frame - no ARP needed */
if ((pkt->net->n_lnh == 0) || /* no MAC header */
8024e4c: e0bffe17 ldw r2,-8(fp)
8024e50: 10800617 ldw r2,24(r2)
8024e54: 10800817 ldw r2,32(r2)
8024e58: 10000826 beq r2,zero,8024e7c <ip2mac+0x88>
(ifmib->ifType == PPP) || /* or PPP or SLIP... */
8024e5c: e0bfff17 ldw r2,-4(fp)
8024e60: 10800217 ldw r2,8(r2)
if ((pkt->net->n_lnh == 0) || /* no MAC header */
8024e64: 108005e0 cmpeqi r2,r2,23
8024e68: 1000041e bne r2,zero,8024e7c <ip2mac+0x88>
(ifmib->ifType == SLIP))
8024e6c: e0bfff17 ldw r2,-4(fp)
8024e70: 10800217 ldw r2,8(r2)
(ifmib->ifType == PPP) || /* or PPP or SLIP... */
8024e74: 10800718 cmpnei r2,r2,28
8024e78: 1000291e bne r2,zero,8024f20 <ip2mac+0x12c>
{
ifmib->ifOutUcastPkts++; /* maintain MIB counters */
8024e7c: e0bfff17 ldw r2,-4(fp)
8024e80: 10801017 ldw r2,64(r2)
8024e84: 10c00044 addi r3,r2,1
8024e88: e0bfff17 ldw r2,-4(fp)
8024e8c: 10c01015 stw r3,64(r2)
ifmib->ifOutOctets += pkt->nb_plen;
8024e90: e0bfff17 ldw r2,-4(fp)
8024e94: 10c00f17 ldw r3,60(r2)
8024e98: e0bffe17 ldw r2,-8(fp)
8024e9c: 10800417 ldw r2,16(r2)
8024ea0: 1887883a add r3,r3,r2
8024ea4: e0bfff17 ldw r2,-4(fp)
8024ea8: 10c00f15 stw r3,60(r2)
/* send packet on media */
if (pkt->net->pkt_send) /* favor using packet send */
8024eac: e0bffe17 ldw r2,-8(fp)
8024eb0: 10800617 ldw r2,24(r2)
8024eb4: 10800417 ldw r2,16(r2)
8024eb8: 10000626 beq r2,zero,8024ed4 <ip2mac+0xe0>
pkt->net->pkt_send(pkt); /* pkt will be freed by MAC code */
8024ebc: e0bffe17 ldw r2,-8(fp)
8024ec0: 10800617 ldw r2,24(r2)
8024ec4: 10800417 ldw r2,16(r2)
8024ec8: e13ffe17 ldw r4,-8(fp)
8024ecc: 103ee83a callr r2
8024ed0: 00001106 br 8024f18 <ip2mac+0x124>
else /* no packet send; try raw send */
{
pkt->net->raw_send(pkt->net, pkt->nb_prot, pkt->nb_plen);
8024ed4: e0bffe17 ldw r2,-8(fp)
8024ed8: 10800617 ldw r2,24(r2)
8024edc: 10800317 ldw r2,12(r2)
8024ee0: e0fffe17 ldw r3,-8(fp)
8024ee4: 19000617 ldw r4,24(r3)
8024ee8: e0fffe17 ldw r3,-8(fp)
8024eec: 19400317 ldw r5,12(r3)
8024ef0: e0fffe17 ldw r3,-8(fp)
8024ef4: 18c00417 ldw r3,16(r3)
8024ef8: 180d883a mov r6,r3
8024efc: 103ee83a callr r2
LOCK_NET_RESOURCE(FREEQ_RESID);
8024f00: 01000084 movi r4,2
8024f04: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8024f08: e13ffe17 ldw r4,-8(fp)
8024f0c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8024f10: 01000084 movi r4,2
8024f14: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
return(SUCCESS);
8024f18: 0005883a mov r2,zero
8024f1c: 00001306 br 8024f6c <ip2mac+0x178>
}
/* don't allow unicast sends if NIC iface has no IP address. This
* is to prevent DHCP clients from sending prior to assignment.
*/
if (pkt->net->n_ipaddr == 0L)
8024f20: e0bffe17 ldw r2,-8(fp)
8024f24: 10800617 ldw r2,24(r2)
8024f28: 10800a17 ldw r2,40(r2)
8024f2c: 10000c1e bne r2,zero,8024f60 <ip2mac+0x16c>
{
if (pkt->fhost != 0xFFFFFFFF) /* check for broadcast packet */
8024f30: e0bffe17 ldw r2,-8(fp)
8024f34: 10800717 ldw r2,28(r2)
8024f38: 10bfffe0 cmpeqi r2,r2,-1
8024f3c: 1000081e bne r2,zero,8024f60 <ip2mac+0x16c>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
8024f40: 01000084 movi r4,2
8024f44: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8024f48: e13ffe17 ldw r4,-8(fp)
8024f4c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8024f50: 01000084 movi r4,2
8024f54: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_SENDERR;
8024f58: 00bff884 movi r2,-30
8024f5c: 00000306 br 8024f6c <ip2mac+0x178>
}
}
#ifdef INCLUDE_ARP /* must be ethernet or token ring */
return(send_via_arp(pkt, dest_ip));
8024f60: e17ffd17 ldw r5,-12(fp)
8024f64: e13ffe17 ldw r4,-8(fp)
8024f68: 8023b480 call 8023b48 <send_via_arp>
#else
dtrap(); /* Bad option combination? */
return ENP_NO_IFACE; /* sent to unknown interface type */
#endif /* INCLUDE_ARP */
}
8024f6c: e037883a mov sp,fp
8024f70: dfc00117 ldw ra,4(sp)
8024f74: df000017 ldw fp,0(sp)
8024f78: dec00204 addi sp,sp,8
8024f7c: f800283a ret
08024f80 <ip_startup>:
* RETURNS: returns NULL if OK, or text of an error message
*/
char *
ip_startup()
{
8024f80: defffc04 addi sp,sp,-16
8024f84: dfc00315 stw ra,12(sp)
8024f88: df000215 stw fp,8(sp)
8024f8c: df000204 addi fp,sp,8
int e; /* error holder */
int i;
/* thread nets[] and attach mib data to nets[] arrays */
for (i = 0; i < STATIC_NETS; i++)
8024f90: e03fff15 stw zero,-4(fp)
8024f94: 00002206 br 8025020 <ip_startup+0xa0>
{
nets[i] = &netstatic[i]; /* set up array of pointers */
8024f98: e0bfff17 ldw r2,-4(fp)
8024f9c: 10c03024 muli r3,r2,192
8024fa0: 008201b4 movhi r2,2054
8024fa4: 10b6b004 addi r2,r2,-9536
8024fa8: 1887883a add r3,r3,r2
8024fac: e0bfff17 ldw r2,-4(fp)
8024fb0: 100890ba slli r4,r2,2
8024fb4: 008201b4 movhi r2,2054
8024fb8: 2085883a add r2,r4,r2
8024fbc: 10f77015 stw r3,-8768(r2)
nets[i]->n_mib = &nets[i]->mib; /* set mib pointer */
8024fc0: e0bfff17 ldw r2,-4(fp)
8024fc4: 100690ba slli r3,r2,2
8024fc8: 008201b4 movhi r2,2054
8024fcc: 1885883a add r2,r3,r2
8024fd0: 10f77017 ldw r3,-8768(r2)
8024fd4: e0bfff17 ldw r2,-4(fp)
8024fd8: 100890ba slli r4,r2,2
8024fdc: 008201b4 movhi r2,2054
8024fe0: 2085883a add r2,r4,r2
8024fe4: 10b77017 ldw r2,-8768(r2)
8024fe8: 18c01204 addi r3,r3,72
8024fec: 10c02715 stw r3,156(r2)
/* add static iface to end of nets list */
putq(&netlist, nets[i]);
8024ff0: e0bfff17 ldw r2,-4(fp)
8024ff4: 100690ba slli r3,r2,2
8024ff8: 008201b4 movhi r2,2054
8024ffc: 1885883a add r2,r3,r2
8025000: 10b77017 ldw r2,-8768(r2)
8025004: 100b883a mov r5,r2
8025008: 010201b4 movhi r4,2054
802500c: 2136a604 addi r4,r4,-9576
8025010: 80289900 call 8028990 <putq>
for (i = 0; i < STATIC_NETS; i++)
8025014: e0bfff17 ldw r2,-4(fp)
8025018: 10800044 addi r2,r2,1
802501c: e0bfff15 stw r2,-4(fp)
8025020: e0bfff17 ldw r2,-4(fp)
8025024: 10800110 cmplti r2,r2,4
8025028: 103fdb1e bne r2,zero,8024f98 <ip_startup+0x18>
}
/* call port routine to locate and init network interfaces. */
ifNumber = (unsigned)prep_ifaces(ifNumber);
802502c: d0a06717 ldw r2,-32356(gp)
8025030: 1009883a mov r4,r2
8025034: 803c5680 call 803c568 <prep_ifaces>
8025038: d0a06715 stw r2,-32356(gp)
if (ifNumber < 1) /* no static interfaces? */
802503c: d0a06717 ldw r2,-32356(gp)
8025040: 1000031e bne r2,zero,8025050 <ip_startup+0xd0>
#ifdef DYNAMIC_IFACES
/* print a debug message and hope user knows what he's doing */
dprintf("unable to find any working interfaces");
#else /* static ifaces only */
/* no static and no dynamic interfaces is probably a bug... */
return("unable to find any working interfaces");
8025044: 00820174 movhi r2,2053
8025048: 10a6fc04 addi r2,r2,-25616
802504c: 00006006 br 80251d0 <ip_startup+0x250>
#endif /* DYNAMIC_IFACES */
}
/* throw away any unused static nets */
for (i = ifNumber; i < STATIC_NETS; i++)
8025050: d0a06717 ldw r2,-32356(gp)
8025054: e0bfff15 stw r2,-4(fp)
8025058: 00001106 br 80250a0 <ip_startup+0x120>
{
qdel(&netlist, (qp)nets[i]); /* remove from queue */
802505c: e0bfff17 ldw r2,-4(fp)
8025060: 100690ba slli r3,r2,2
8025064: 008201b4 movhi r2,2054
8025068: 1885883a add r2,r3,r2
802506c: 10b77017 ldw r2,-8768(r2)
8025070: 100b883a mov r5,r2
8025074: 010201b4 movhi r4,2054
8025078: 2136a604 addi r4,r4,-9576
802507c: 8028a400 call 8028a40 <qdel>
nets[i] = NULL; /* remove from array */
8025080: e0bfff17 ldw r2,-4(fp)
8025084: 100690ba slli r3,r2,2
8025088: 008201b4 movhi r2,2054
802508c: 1885883a add r2,r3,r2
8025090: 10377015 stw zero,-8768(r2)
for (i = ifNumber; i < STATIC_NETS; i++)
8025094: e0bfff17 ldw r2,-4(fp)
8025098: 10800044 addi r2,r2,1
802509c: e0bfff15 stw r2,-4(fp)
80250a0: e0bfff17 ldw r2,-4(fp)
80250a4: 10800110 cmplti r2,r2,4
80250a8: 103fec1e bne r2,zero,802505c <ip_startup+0xdc>
/* The sequence of events when initing the net & interface systems
* is very important. Be very carefull about altering the order of
* the following statements.
*/
/* once these are done, we should call ip_exit before quiting IP */
clock_init(); /* start clock system */
80250ac: 8028de00 call 8028de0 <clock_init>
exit_hook(clock_c);
80250b0: 010200f4 movhi r4,2051
80250b4: 21238604 addi r4,r4,-29160
80250b8: 80251e40 call 80251e4 <exit_hook>
e = Netinit(); /* start net interface(s) */
80250bc: 80242e40 call 80242e4 <Netinit>
80250c0: e0bffe15 stw r2,-8(fp)
if (e)
80250c4: e0bffe17 ldw r2,-8(fp)
80250c8: 10000326 beq r2,zero,80250d8 <ip_startup+0x158>
{
return("unable to initialize net");
80250cc: 00820174 movhi r2,2053
80250d0: 10a70604 addi r2,r2,-25576
80250d4: 00003e06 br 80251d0 <ip_startup+0x250>
}
#ifdef INCLUDE_ARP
e = etainit(); /* startup ARP layer */
80250d8: 8022ca40 call 8022ca4 <etainit>
80250dc: e0bffe15 stw r2,-8(fp)
if (e)
80250e0: e0bffe17 ldw r2,-8(fp)
80250e4: 10000426 beq r2,zero,80250f8 <ip_startup+0x178>
{
ip_exit();
80250e8: 802524c0 call 802524c <ip_exit>
return("unable to initialize arp");
80250ec: 00820174 movhi r2,2053
80250f0: 10a70d04 addi r2,r2,-25548
80250f4: 00003606 br 80251d0 <ip_startup+0x250>
}
#endif
#ifdef IP_V4
e = ip_init(); /* start up IP layer */
80250f8: 803a0700 call 803a070 <ip_init>
80250fc: e0bffe15 stw r2,-8(fp)
if (e)
8025100: e0bffe17 ldw r2,-8(fp)
8025104: 10000426 beq r2,zero,8025118 <ip_startup+0x198>
{
ip_exit();
8025108: 802524c0 call 802524c <ip_exit>
return("unable to initialize IP");
802510c: 00820174 movhi r2,2053
8025110: 10a71404 addi r2,r2,-25520
8025114: 00002e06 br 80251d0 <ip_startup+0x250>
#if defined (IP_MULTICAST) && (defined (IGMP_V1) || defined (IGMP_V2))
/* Join the All hosts group on every interface that IP multicast is
* supported
*/
e = igmp_init(); /* Initialize igmp */
8025118: 802537c0 call 802537c <igmp_init>
802511c: e0bffe15 stw r2,-8(fp)
if (e)
8025120: e0bffe17 ldw r2,-8(fp)
8025124: 10000326 beq r2,zero,8025134 <ip_startup+0x1b4>
{
ip_exit();
8025128: 802524c0 call 802524c <ip_exit>
return(ipmcfail_str);
802512c: d0a01217 ldw r2,-32696(gp)
8025130: 00002706 br 80251d0 <ip_startup+0x250>
}
for (i = 0; i < (int)ifNumber; i++)
8025134: e03fff15 stw zero,-4(fp)
8025138: 00001706 br 8025198 <ip_startup+0x218>
{
if (nets[i]->n_mcastlist != NULL)
802513c: e0bfff17 ldw r2,-4(fp)
8025140: 100690ba slli r3,r2,2
8025144: 008201b4 movhi r2,2054
8025148: 1885883a add r2,r3,r2
802514c: 10b77017 ldw r2,-8768(r2)
8025150: 10802b17 ldw r2,172(r2)
8025154: 10000d26 beq r2,zero,802518c <ip_startup+0x20c>
if ((in_addmulti(&igmp_all_hosts_group, nets[i], 4) == NULL))
8025158: e0bfff17 ldw r2,-4(fp)
802515c: 100690ba slli r3,r2,2
8025160: 008201b4 movhi r2,2054
8025164: 1885883a add r2,r3,r2
8025168: 10b77017 ldw r2,-8768(r2)
802516c: 01800104 movi r6,4
8025170: 100b883a mov r5,r2
8025174: d1206b04 addi r4,gp,-32340
8025178: 803c2ac0 call 803c2ac <in_addmulti>
802517c: 1000031e bne r2,zero,802518c <ip_startup+0x20c>
{
ip_exit();
8025180: 802524c0 call 802524c <ip_exit>
return(ipmcfail_str);
8025184: d0a01217 ldw r2,-32696(gp)
8025188: 00001106 br 80251d0 <ip_startup+0x250>
for (i = 0; i < (int)ifNumber; i++)
802518c: e0bfff17 ldw r2,-4(fp)
8025190: 10800044 addi r2,r2,1
8025194: e0bfff15 stw r2,-4(fp)
8025198: d0a06717 ldw r2,-32356(gp)
802519c: 1007883a mov r3,r2
80251a0: e0bfff17 ldw r2,-4(fp)
80251a4: 10ffe516 blt r2,r3,802513c <ip_startup+0x1bc>
}
}
#endif /* IP_MULTICAST and (IGMPv1 or IGMPv2) */
#ifdef INCLUDE_TCP
e = tcpinit();
80251a8: 803637c0 call 803637c <tcpinit>
80251ac: e0bffe15 stw r2,-8(fp)
if (e)
80251b0: e0bffe17 ldw r2,-8(fp)
80251b4: 10000426 beq r2,zero,80251c8 <ip_startup+0x248>
{
ip_exit();
80251b8: 802524c0 call 802524c <ip_exit>
return("unable to initialize TCP");
80251bc: 00820174 movhi r2,2053
80251c0: 10a71a04 addi r2,r2,-25496
80251c4: 00000206 br 80251d0 <ip_startup+0x250>
/* setup event map for (UDP and TCP) socket library's events (such as
* those used by tcp_sleep () and tcp_wakeup ()). These events either
* map into operating system primitives such as events or semaphores,
* or into task suspend and task resume mechanisms.
*/
evtmap_setup ();
80251c8: 803c6100 call 803c610 <evtmap_setup>
return("unable to initialize IP Filter table");
else
exit_hook(ipf_cleanup);
#endif
return(NULL); /* we got through with no errors */
80251cc: 0005883a mov r2,zero
}
80251d0: e037883a mov sp,fp
80251d4: dfc00117 ldw ra,4(sp)
80251d8: df000017 ldw fp,0(sp)
80251dc: dec00204 addi sp,sp,8
80251e0: f800283a ret
080251e4 <exit_hook>:
* RETURNS:
*/
void
exit_hook(void (*func)(void))
{
80251e4: defffd04 addi sp,sp,-12
80251e8: dfc00215 stw ra,8(sp)
80251ec: df000115 stw fp,4(sp)
80251f0: df000104 addi fp,sp,4
80251f4: e13fff15 stw r4,-4(fp)
if (nclosers >= (NUMCLOSERS-1))
80251f8: d0a06817 ldw r2,-32352(gp)
80251fc: 10800390 cmplti r2,r2,14
8025200: 1000031e bne r2,zero,8025210 <exit_hook+0x2c>
panic("exit_hook");
8025204: 01020174 movhi r4,2053
8025208: 21272104 addi r4,r4,-25468
802520c: 80271780 call 8027178 <panic>
closers[++nclosers] = func;
8025210: d0a06817 ldw r2,-32352(gp)
8025214: 10800044 addi r2,r2,1
8025218: d0a06815 stw r2,-32352(gp)
802521c: d0a06817 ldw r2,-32352(gp)
8025220: 100890ba slli r4,r2,2
8025224: e0ffff17 ldw r3,-4(fp)
8025228: 00820174 movhi r2,2053
802522c: 2085883a add r2,r4,r2
8025230: 10f36e15 stw r3,-12872(r2)
}
8025234: 0001883a nop
8025238: e037883a mov sp,fp
802523c: dfc00117 ldw ra,4(sp)
8025240: df000017 ldw fp,0(sp)
8025244: dec00204 addi sp,sp,8
8025248: f800283a ret
0802524c <ip_exit>:
* RETURNS: void
*/
void
ip_exit()
{
802524c: defffd04 addi sp,sp,-12
8025250: dfc00215 stw ra,8(sp)
8025254: df000115 stw fp,4(sp)
8025258: df000104 addi fp,sp,4
int n;
for (n=nclosers; n; n--)
802525c: d0a06817 ldw r2,-32352(gp)
8025260: e0bfff15 stw r2,-4(fp)
8025264: 00001d06 br 80252dc <ip_exit+0x90>
{
#ifdef NPDEBUG
dprintf("ip_exit: calling func %p\n", closers[n]);
8025268: e0bfff17 ldw r2,-4(fp)
802526c: 100690ba slli r3,r2,2
8025270: 00820174 movhi r2,2053
8025274: 1885883a add r2,r3,r2
8025278: 10b36e17 ldw r2,-12872(r2)
802527c: 100b883a mov r5,r2
8025280: 01020174 movhi r4,2053
8025284: 21272404 addi r4,r4,-25456
8025288: 8002c780 call 8002c78 <printf>
#endif
if(closers[n])
802528c: e0bfff17 ldw r2,-4(fp)
8025290: 100690ba slli r3,r2,2
8025294: 00820174 movhi r2,2053
8025298: 1885883a add r2,r3,r2
802529c: 10b36e17 ldw r2,-12872(r2)
80252a0: 10000b26 beq r2,zero,80252d0 <ip_exit+0x84>
{
(*closers[n])();
80252a4: e0bfff17 ldw r2,-4(fp)
80252a8: 100690ba slli r3,r2,2
80252ac: 00820174 movhi r2,2053
80252b0: 1885883a add r2,r3,r2
80252b4: 10b36e17 ldw r2,-12872(r2)
80252b8: 103ee83a callr r2
closers[n] = NULL;
80252bc: e0bfff17 ldw r2,-4(fp)
80252c0: 100690ba slli r3,r2,2
80252c4: 00820174 movhi r2,2053
80252c8: 1885883a add r2,r3,r2
80252cc: 10336e15 stw zero,-12872(r2)
for (n=nclosers; n; n--)
80252d0: e0bfff17 ldw r2,-4(fp)
80252d4: 10bfffc4 addi r2,r2,-1
80252d8: e0bfff15 stw r2,-4(fp)
80252dc: e0bfff17 ldw r2,-4(fp)
80252e0: 103fe11e bne r2,zero,8025268 <ip_exit+0x1c>
}
}
}
80252e4: 0001883a nop
80252e8: e037883a mov sp,fp
80252ec: dfc00117 ldw ra,4(sp)
80252f0: df000017 ldw fp,0(sp)
80252f4: dec00204 addi sp,sp,8
80252f8: f800283a ret
080252fc <if_netnumber>:
* RETURNS: net index for passed net pointer
*/
int
if_netnumber(NET nptr)
{
80252fc: defffb04 addi sp,sp,-20
8025300: dfc00415 stw ra,16(sp)
8025304: df000315 stw fp,12(sp)
8025308: df000304 addi fp,sp,12
802530c: e13ffd15 stw r4,-12(fp)
unsigned i;
NET ifp;
for(ifp = (NET)(netlist.q_head), i = 0; ifp; ifp = ifp->n_next, i++)
8025310: 008201b4 movhi r2,2054
8025314: 10b6a617 ldw r2,-9576(r2)
8025318: e0bffe15 stw r2,-8(fp)
802531c: e03fff15 stw zero,-4(fp)
8025320: 00000b06 br 8025350 <if_netnumber+0x54>
{
if(ifp == nptr)
8025324: e0fffe17 ldw r3,-8(fp)
8025328: e0bffd17 ldw r2,-12(fp)
802532c: 1880021e bne r3,r2,8025338 <if_netnumber+0x3c>
return (int)i;
8025330: e0bfff17 ldw r2,-4(fp)
8025334: 00000c06 br 8025368 <if_netnumber+0x6c>
for(ifp = (NET)(netlist.q_head), i = 0; ifp; ifp = ifp->n_next, i++)
8025338: e0bffe17 ldw r2,-8(fp)
802533c: 10800017 ldw r2,0(r2)
8025340: e0bffe15 stw r2,-8(fp)
8025344: e0bfff17 ldw r2,-4(fp)
8025348: 10800044 addi r2,r2,1
802534c: e0bfff15 stw r2,-4(fp)
8025350: e0bffe17 ldw r2,-8(fp)
8025354: 103ff31e bne r2,zero,8025324 <if_netnumber+0x28>
}
panic("bad net ptr");
8025358: 01020174 movhi r4,2053
802535c: 21272b04 addi r4,r4,-25428
8025360: 80271780 call 8027178 <panic>
return 0;
8025364: 0005883a mov r2,zero
}
8025368: e037883a mov sp,fp
802536c: dfc00117 ldw ra,4(sp)
8025370: df000017 ldw fp,0(sp)
8025374: dec00204 addi sp,sp,8
8025378: f800283a ret
0802537c <igmp_init>:
*
* OUTPUT: None.
*/
int igmp_init(void)
{
802537c: defffe04 addi sp,sp,-8
8025380: df000115 stw fp,4(sp)
8025384: df000104 addi fp,sp,4
NET ifp;
/*
* To avoid byte-swapping the same value over and over again.
*/
igmp_all_hosts_group = htonl(INADDR_ALLHOSTS_GROUP);
8025388: 00804034 movhi r2,256
802538c: 10803804 addi r2,r2,224
8025390: d0a06b15 stw r2,-32340(gp)
igmp_all_rtrs_group = htonl(INADDR_ALLRTRS_GROUP);
8025394: 00808034 movhi r2,512
8025398: 10803804 addi r2,r2,224
802539c: d0a06c15 stw r2,-32336(gp)
/* note that the IGMP operational mode configuration for a
* given link (i.e., whether it should run IGMPv1 or IGMPv2)
* has already been validated, so no additional checks are
* required here.
*/
for (ifp = (NET) netlist.q_head; ifp; ifp = ifp->n_next)
80253a0: 008201b4 movhi r2,2054
80253a4: 10b6a617 ldw r2,-9576(r2)
80253a8: e0bfff15 stw r2,-4(fp)
80253ac: 00001006 br 80253f0 <igmp_init+0x74>
{
if (ifp->igmp_oper_mode == IGMP_MODE_V1)
80253b0: e0bfff17 ldw r2,-4(fp)
80253b4: 10802f03 ldbu r2,188(r2)
80253b8: 10803fcc andi r2,r2,255
80253bc: 10800058 cmpnei r2,r2,1
80253c0: 1000041e bne r2,zero,80253d4 <igmp_init+0x58>
{
ifp->igmpv1_rtr_present = 1;
80253c4: e0bfff17 ldw r2,-4(fp)
80253c8: 00c00044 movi r3,1
80253cc: 10c02d05 stb r3,180(r2)
80253d0: 00000406 br 80253e4 <igmp_init+0x68>
}
else
{
ifp->igmpv1_rtr_present = 0;
80253d4: e0bfff17 ldw r2,-4(fp)
80253d8: 10002d05 stb zero,180(r2)
/* not really required, only referred to if IGMPv1 router is
* "present" */
ifp->igmpv1_query_rcvd_time = 0;
80253dc: e0bfff17 ldw r2,-4(fp)
80253e0: 10002e15 stw zero,184(r2)
for (ifp = (NET) netlist.q_head; ifp; ifp = ifp->n_next)
80253e4: e0bfff17 ldw r2,-4(fp)
80253e8: 10800017 ldw r2,0(r2)
80253ec: e0bfff15 stw r2,-4(fp)
80253f0: e0bfff17 ldw r2,-4(fp)
80253f4: 103fee1e bne r2,zero,80253b0 <igmp_init+0x34>
}
/*
* Call igmp_fasttimo PR_FASTHZ (5) times per second
*/
igmp_cticks = cticks + TPS/PR_FASTHZ;
80253f8: d0a07d17 ldw r2,-32268(gp)
80253fc: 10800504 addi r2,r2,20
8025400: d0a06a15 stw r2,-32344(gp)
/* there are no timers running initially */
igmp_timers_are_running = 0;
8025404: d0206915 stw zero,-32348(gp)
return IGMP_OK;
8025408: 0005883a mov r2,zero
}
802540c: e037883a mov sp,fp
8025410: df000017 ldw fp,0(sp)
8025414: dec00104 addi sp,sp,4
8025418: f800283a ret
0802541c <igmp_input>:
* returned if the operating mode is not correctly configured
* to a valid IGMP operating mode.
*/
int igmp_input (PACKET p)
{
802541c: defffb04 addi sp,sp,-20
8025420: dfc00415 stw ra,16(sp)
8025424: df000315 stw fp,12(sp)
8025428: df000304 addi fp,sp,12
802542c: e13ffd15 stw r4,-12(fp)
u_char mode;
int rc;
++igmpstats.igmp_total_rcvd;
8025430: 008201b4 movhi r2,2054
8025434: 10b77417 ldw r2,-8752(r2)
8025438: 10c00044 addi r3,r2,1
802543c: 008201b4 movhi r2,2054
8025440: 10f77415 stw r3,-8752(r2)
/* validate the received packet; if validation fails,
* drop the packet and return */
if ((rc = igmp_validate (p)) != IGMP_OK) goto end;
8025444: e13ffd17 ldw r4,-12(fp)
8025448: 8025b840 call 8025b84 <igmp_validate>
802544c: e0bfff15 stw r2,-4(fp)
8025450: e0bfff17 ldw r2,-4(fp)
8025454: 1000181e bne r2,zero,80254b8 <igmp_input+0x9c>
/* determine the operating mode for IGMP on the ingress link */
mode = p->net->igmp_oper_mode;
8025458: e0bffd17 ldw r2,-12(fp)
802545c: 10800617 ldw r2,24(r2)
8025460: 10802f03 ldbu r2,188(r2)
8025464: e0bffec5 stb r2,-5(fp)
/* feed packet to IGMPv1 or IGMPv2 code based on the operating
* mode of the ingress link */
switch (mode)
8025468: e0bffec3 ldbu r2,-5(fp)
802546c: 10c00060 cmpeqi r3,r2,1
8025470: 1800031e bne r3,zero,8025480 <igmp_input+0x64>
8025474: 108000a0 cmpeqi r2,r2,2
8025478: 1000041e bne r2,zero,802548c <igmp_input+0x70>
802547c: 00000606 br 8025498 <igmp_input+0x7c>
{
#ifdef IGMP_V1
case IGMP_MODE_V1:
return (igmpv1_input (p));
8025480: e13ffd17 ldw r4,-12(fp)
8025484: 803ddfc0 call 803ddfc <igmpv1_input>
8025488: 00001306 br 80254d8 <igmp_input+0xbc>
#endif
#ifdef IGMP_V2
case IGMP_MODE_V2:
return (igmpv2_input (p));
802548c: e13ffd17 ldw r4,-12(fp)
8025490: 803e0640 call 803e064 <igmpv2_input>
8025494: 00001006 br 80254d8 <igmp_input+0xbc>
#endif
default:
++igmpstats.igmp_bad_oper_mode;
8025498: 008201b4 movhi r2,2054
802549c: 10b78117 ldw r2,-8700(r2)
80254a0: 10c00044 addi r3,r2,1
80254a4: 008201b4 movhi r2,2054
80254a8: 10f78115 stw r3,-8700(r2)
rc = IGMP_ERR;
80254ac: 00bfffc4 movi r2,-1
80254b0: e0bfff15 stw r2,-4(fp)
break;
80254b4: 00000106 br 80254bc <igmp_input+0xa0>
if ((rc = igmp_validate (p)) != IGMP_OK) goto end;
80254b8: 0001883a nop
}
end:
/* return packet buffer back to free pool */
LOCK_NET_RESOURCE(FREEQ_RESID);
80254bc: 01000084 movi r4,2
80254c0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
80254c4: e13ffd17 ldw r4,-12(fp)
80254c8: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
80254cc: 01000084 movi r4,2
80254d0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return rc;
80254d4: e0bfff17 ldw r2,-4(fp)
}
80254d8: e037883a mov sp,fp
80254dc: dfc00117 ldw ra,4(sp)
80254e0: df000017 ldw fp,0(sp)
80254e4: dec00204 addi sp,sp,8
80254e8: f800283a ret
080254ec <igmp_fasttimo>:
*
* OUTPUT: None.
*/
void igmp_fasttimo (void)
{
80254ec: defffc04 addi sp,sp,-16
80254f0: dfc00315 stw ra,12(sp)
80254f4: df000215 stw fp,8(sp)
80254f8: df000204 addi fp,sp,8
struct in_multi * inm;
NET ifp;
LOCK_NET_RESOURCE (NET_RESID);
80254fc: 0009883a mov r4,zero
8025500: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/*
* Quick check to see if any work needs to be done, in order
* to minimize the overhead of fasttimo processing.
*/
if (!igmp_timers_are_running)
8025504: d0a06917 ldw r2,-32348(gp)
8025508: 1000031e bne r2,zero,8025518 <igmp_fasttimo+0x2c>
{
UNLOCK_NET_RESOURCE (NET_RESID);
802550c: 0009883a mov r4,zero
8025510: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return;
8025514: 00004c06 br 8025648 <igmp_fasttimo+0x15c>
}
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8025518: 008201b4 movhi r2,2054
802551c: 10b6a617 ldw r2,-9576(r2)
8025520: e0bffe15 stw r2,-8(fp)
8025524: 00004006 br 8025628 <igmp_fasttimo+0x13c>
{
for (inm = ifp->mc_list; inm; inm = inm->inm_next)
8025528: e0bffe17 ldw r2,-8(fp)
802552c: 10802c17 ldw r2,176(r2)
8025530: e0bfff15 stw r2,-4(fp)
8025534: 00003706 br 8025614 <igmp_fasttimo+0x128>
{
/* skip IPv6 entries */
if (inm->inm_addr == 0)
8025538: e0bfff17 ldw r2,-4(fp)
802553c: 10800017 ldw r2,0(r2)
8025540: 10003026 beq r2,zero,8025604 <igmp_fasttimo+0x118>
continue;
if (inm->inm_timer == 0) /* timer not set */
8025544: e0bfff17 ldw r2,-4(fp)
8025548: 10800317 ldw r2,12(r2)
802554c: 10002e26 beq r2,zero,8025608 <igmp_fasttimo+0x11c>
{
/* do nothing */
}
else if (--inm->inm_timer == 0) /* timer expired */
8025550: e0bfff17 ldw r2,-4(fp)
8025554: 10800317 ldw r2,12(r2)
8025558: 10ffffc4 addi r3,r2,-1
802555c: e0bfff17 ldw r2,-4(fp)
8025560: 10c00315 stw r3,12(r2)
8025564: e0bfff17 ldw r2,-4(fp)
8025568: 10800317 ldw r2,12(r2)
802556c: 1000261e bne r2,zero,8025608 <igmp_fasttimo+0x11c>
{
/* send membership report in appropriate format */
if (ifp->igmpv1_rtr_present)
8025570: e0bffe17 ldw r2,-8(fp)
8025574: 10802d03 ldbu r2,180(r2)
8025578: 10803fcc andi r2,r2,255
802557c: 10000426 beq r2,zero,8025590 <igmp_fasttimo+0xa4>
{
/* always true for IGMPv1, may be true for IGMPv2 */
igmp_send (IGMP_HOST_MEMBERSHIP_REPORT, inm);
8025580: e17fff17 ldw r5,-4(fp)
8025584: 01000484 movi r4,18
8025588: 802565c0 call 802565c <igmp_send>
802558c: 00000306 br 802559c <igmp_fasttimo+0xb0>
}
else
{
igmp_send (IGMPv2_MEMBERSHIP_REPORT, inm);
8025590: e17fff17 ldw r5,-4(fp)
8025594: 01000584 movi r4,22
8025598: 802565c0 call 802565c <igmp_send>
/* for IGMPv2, indicate that we were the last to send
* a Report for this multicast group (relevant for
* IGMPv2 only). also check to see if we should mark
* the IGMPv1 router as "absent". */
if (ifp->igmp_oper_mode == IGMP_MODE_V2)
802559c: e0bffe17 ldw r2,-8(fp)
80255a0: 10802f03 ldbu r2,188(r2)
80255a4: 10803fcc andi r2,r2,255
80255a8: 10800098 cmpnei r2,r2,2
80255ac: 1000111e bne r2,zero,80255f4 <igmp_fasttimo+0x108>
{
inm->last2send_report = IGMP_TRUE;
80255b0: e0bfff17 ldw r2,-4(fp)
80255b4: 00c00044 movi r3,1
80255b8: 10c00405 stb r3,16(r2)
if (ifp->igmpv1_rtr_present)
80255bc: e0bffe17 ldw r2,-8(fp)
80255c0: 10802d03 ldbu r2,180(r2)
80255c4: 10803fcc andi r2,r2,255
80255c8: 10000a26 beq r2,zero,80255f4 <igmp_fasttimo+0x108>
{
if (cticks > (ifp->igmpv1_query_rcvd_time + (IGMPv1_RTR_PRESENT_TMO * TPS)))
80255cc: e0bffe17 ldw r2,-8(fp)
80255d0: 10c02e17 ldw r3,184(r2)
80255d4: 00a71014 movui r2,40000
80255d8: 1887883a add r3,r3,r2
80255dc: d0a07d17 ldw r2,-32268(gp)
80255e0: 1880042e bgeu r3,r2,80255f4 <igmp_fasttimo+0x108>
/* we haven't heard from the IGMPv1 router for a duration
* greater than or equal to Version 1 Router Present Timeout
* (400 seconds), and will now update the igmpv1_rtr_present
* variable to reflect that.
*/
ifp->igmpv1_rtr_present = IGMP_FALSE;
80255e4: e0bffe17 ldw r2,-8(fp)
80255e8: 10002d05 stb zero,180(r2)
ifp->igmpv1_query_rcvd_time = 0;
80255ec: e0bffe17 ldw r2,-8(fp)
80255f0: 10002e15 stw zero,184(r2)
}
}
}
/* decrement the count of running IGMP timers */
--igmp_timers_are_running;
80255f4: d0a06917 ldw r2,-32348(gp)
80255f8: 10bfffc4 addi r2,r2,-1
80255fc: d0a06915 stw r2,-32348(gp)
8025600: 00000106 br 8025608 <igmp_fasttimo+0x11c>
continue;
8025604: 0001883a nop
for (inm = ifp->mc_list; inm; inm = inm->inm_next)
8025608: e0bfff17 ldw r2,-4(fp)
802560c: 10800517 ldw r2,20(r2)
8025610: e0bfff15 stw r2,-4(fp)
8025614: e0bfff17 ldw r2,-4(fp)
8025618: 103fc71e bne r2,zero,8025538 <igmp_fasttimo+0x4c>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802561c: e0bffe17 ldw r2,-8(fp)
8025620: 10800017 ldw r2,0(r2)
8025624: e0bffe15 stw r2,-8(fp)
8025628: e0bffe17 ldw r2,-8(fp)
802562c: 103fbe1e bne r2,zero,8025528 <igmp_fasttimo+0x3c>
}
}
/* Setup time for the next call into igmp_fasttimo ()
* (200 ms later). */
igmp_cticks = cticks + TPS/PR_FASTHZ;
8025630: d0a07d17 ldw r2,-32268(gp)
8025634: 10800504 addi r2,r2,20
8025638: d0a06a15 stw r2,-32344(gp)
UNLOCK_NET_RESOURCE (NET_RESID);
802563c: 0009883a mov r4,zero
8025640: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return;
8025644: 0001883a nop
}
8025648: e037883a mov sp,fp
802564c: dfc00117 ldw ra,4(sp)
8025650: df000017 ldw fp,0(sp)
8025654: dec00204 addi sp,sp,8
8025658: f800283a ret
0802565c <igmp_send>:
*
* OUTPUT: None.
*/
void igmp_send (u_char type, struct in_multi * inm)
{
802565c: deffde04 addi sp,sp,-136
8025660: dfc02115 stw ra,132(sp)
8025664: df002015 stw fp,128(sp)
8025668: df002004 addi fp,sp,128
802566c: 2005883a mov r2,r4
8025670: e17fe015 stw r5,-128(fp)
8025674: e0bfe105 stb r2,-124(fp)
struct igmp * igmp;
struct ip_moptions * imop;
struct ip_moptions simo;
struct ip * pip;
u_char * tmpp;
u_char opts [2] = {IP_RTR_ALERT_OPT, EOL_OPT};
8025678: 00800504 movi r2,20
802567c: e0bfe285 stb r2,-118(fp)
8025680: e03fe2c5 stb zero,-117(fp)
u_char reqd_len;
/* compute length of buffer required for outgoing packet.
* also account for the length of the IP Router Alert
* option, if required. */
reqd_len = MaxLnh + sizeof (struct ip) + sizeof (struct igmp);
8025684: d0a06417 ldw r2,-32368(gp)
8025688: 10800704 addi r2,r2,28
802568c: e0bffdc5 stb r2,-9(fp)
if ((type == IGMPv2_LEAVE_GROUP) ||
8025690: e0bfe103 ldbu r2,-124(fp)
8025694: 108005e0 cmpeqi r2,r2,23
8025698: 1000031e bne r2,zero,80256a8 <igmp_send+0x4c>
802569c: e0bfe103 ldbu r2,-124(fp)
80256a0: 10800598 cmpnei r2,r2,22
80256a4: 1000031e bne r2,zero,80256b4 <igmp_send+0x58>
(type == IGMPv2_MEMBERSHIP_REPORT))
{
reqd_len += IP_RTR_ALERT_OPT_SIZE;
80256a8: e0bffdc3 ldbu r2,-9(fp)
80256ac: 10800104 addi r2,r2,4
80256b0: e0bffdc5 stb r2,-9(fp)
}
/* obtain a packet to send the IGMP message */
LOCK_NET_RESOURCE (FREEQ_RESID);
80256b4: 01000084 movi r4,2
80256b8: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
p = pk_alloc (reqd_len);
80256bc: e0bffdc3 ldbu r2,-9(fp)
80256c0: 1009883a mov r4,r2
80256c4: 80284340 call 8028434 <pk_alloc>
80256c8: e0bffc15 stw r2,-16(fp)
UNLOCK_NET_RESOURCE (FREEQ_RESID);
80256cc: 01000084 movi r4,2
80256d0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
/* log an error and return if the allocation fails */
if (!p)
80256d4: e0bffc17 ldw r2,-16(fp)
80256d8: 1000061e bne r2,zero,80256f4 <igmp_send+0x98>
{
++igmpstats.igmp_pkt_alloc_fail;
80256dc: 008201b4 movhi r2,2054
80256e0: 10b78017 ldw r2,-8704(r2)
80256e4: 10c00044 addi r3,r2,1
80256e8: 008201b4 movhi r2,2054
80256ec: 10f78015 stw r3,-8704(r2)
80256f0: 00007406 br 80258c4 <igmp_send+0x268>
return;
}
/* Need to fill in the source and destination ip addresses */
pip = (struct ip *) p->nb_prot;
80256f4: e0bffc17 ldw r2,-16(fp)
80256f8: 10800317 ldw r2,12(r2)
80256fc: e0bffb15 stw r2,-20(fp)
pip->ip_src = inm->inm_netp->n_ipaddr;
8025700: e0bfe017 ldw r2,-128(fp)
8025704: 10800117 ldw r2,4(r2)
8025708: 10c00a17 ldw r3,40(r2)
802570c: e0bffb17 ldw r2,-20(fp)
8025710: 10c00315 stw r3,12(r2)
/* Leave Group messages are sent to the all-routers multicast group */
if (type == IGMPv2_LEAVE_GROUP)
8025714: e0bfe103 ldbu r2,-124(fp)
8025718: 108005d8 cmpnei r2,r2,23
802571c: 1000041e bne r2,zero,8025730 <igmp_send+0xd4>
{
/* igmp_all_rtrs_group is already in network byte order */
pip->ip_dest = igmp_all_rtrs_group;
8025720: d0e06c17 ldw r3,-32336(gp)
8025724: e0bffb17 ldw r2,-20(fp)
8025728: 10c00415 stw r3,16(r2)
802572c: 00000406 br 8025740 <igmp_send+0xe4>
}
else
pip->ip_dest = inm->inm_addr;
8025730: e0bfe017 ldw r2,-128(fp)
8025734: 10c00017 ldw r3,0(r2)
8025738: e0bffb17 ldw r2,-20(fp)
802573c: 10c00415 stw r3,16(r2)
p->fhost = pip->ip_dest;
8025740: e0bffb17 ldw r2,-20(fp)
8025744: 10c00417 ldw r3,16(r2)
8025748: e0bffc17 ldw r2,-16(fp)
802574c: 10c00715 stw r3,28(r2)
tmpp = (((u_char *) p->nb_prot) + sizeof (struct ip));
8025750: e0bffc17 ldw r2,-16(fp)
8025754: 10800317 ldw r2,12(r2)
8025758: 10800504 addi r2,r2,20
802575c: e0bfff15 stw r2,-4(fp)
/* when transmitting an IGMP packet, our IGMP module will insert
* data for the Router Alert option in the following types of
* packets: Version 2 Membership Report (0x16) and Leave Group
* (0x17) */
if ((type == IGMPv2_LEAVE_GROUP) ||
8025760: e0bfe103 ldbu r2,-124(fp)
8025764: 108005e0 cmpeqi r2,r2,23
8025768: 1000031e bne r2,zero,8025778 <igmp_send+0x11c>
802576c: e0bfe103 ldbu r2,-124(fp)
8025770: 10800598 cmpnei r2,r2,22
8025774: 1000061e bne r2,zero,8025790 <igmp_send+0x134>
(type == IGMPv2_MEMBERSHIP_REPORT))
{
/* provide space for ip_write2 () to write option-related data */
tmpp += IP_RTR_ALERT_OPT_SIZE;
8025778: e0bfff17 ldw r2,-4(fp)
802577c: 10800104 addi r2,r2,4
8025780: e0bfff15 stw r2,-4(fp)
optp = &(opts [0]); /* one option (IP Router Alert) */
8025784: e0bfe284 addi r2,fp,-118
8025788: e0bffe15 stw r2,-8(fp)
802578c: 00000306 br 802579c <igmp_send+0x140>
}
/* outgoing packet does not require any options */
else
optp = &(opts [1]);
8025790: e0bfe284 addi r2,fp,-118
8025794: 10800044 addi r2,r2,1
8025798: e0bffe15 stw r2,-8(fp)
/* point to the start of the IGMP header */
igmp = (struct igmp *) tmpp;
802579c: e0bfff17 ldw r2,-4(fp)
80257a0: e0bffa15 stw r2,-24(fp)
igmp->igmp_type = type;
80257a4: e0bffa17 ldw r2,-24(fp)
80257a8: e0ffe103 ldbu r3,-124(fp)
80257ac: 10c00005 stb r3,0(r2)
igmp->igmp_code = 0;
80257b0: e0bffa17 ldw r2,-24(fp)
80257b4: 10000045 stb zero,1(r2)
/* all messages (Report or Leave) have Group Address field
* set to the group being reported or left */
igmp->igmp_group = inm->inm_addr;
80257b8: e0bfe017 ldw r2,-128(fp)
80257bc: 10c00017 ldw r3,0(r2)
80257c0: e0bffa17 ldw r2,-24(fp)
80257c4: 10c00115 stw r3,4(r2)
igmp->igmp_cksum = 0;
80257c8: e0bffa17 ldw r2,-24(fp)
80257cc: 1000008d sth zero,2(r2)
igmp->igmp_cksum = ~cksum((void*)igmp, IGMP_MINLEN>>1);
80257d0: 01400104 movi r5,4
80257d4: e13ffa17 ldw r4,-24(fp)
80257d8: 8026d7c0 call 8026d7c <cksum>
80257dc: 0084303a nor r2,zero,r2
80257e0: 1007883a mov r3,r2
80257e4: e0bffa17 ldw r2,-24(fp)
80257e8: 10c0008d sth r3,2(r2)
imop = &simo;
80257ec: e0bfe304 addi r2,fp,-116
80257f0: e0bff915 stw r2,-28(fp)
MEMSET(imop, 0, sizeof(simo));
80257f4: 01801604 movi r6,88
80257f8: 000b883a mov r5,zero
80257fc: e13ff917 ldw r4,-28(fp)
8025800: 80088e40 call 80088e4 <memset>
imop->imo_multicast_netp = inm->inm_netp;
8025804: e0bfe017 ldw r2,-128(fp)
8025808: 10c00117 ldw r3,4(r2)
802580c: e0bff917 ldw r2,-28(fp)
8025810: 10c00015 stw r3,0(r2)
imop->imo_multicast_ttl = 1;
8025814: e0bff917 ldw r2,-28(fp)
8025818: 00c00044 movi r3,1
802581c: 10c00105 stb r3,4(r2)
/* we do not want our own reports to be looped back */
imop->imo_multicast_loop = 0;
8025820: e0bff917 ldw r2,-28(fp)
8025824: 10000145 stb zero,5(r2)
/* set nb_prot to point to the beginning of the IGMP data,
* and nb_plen to the length of the IGMP data, and attach
* the multicast options structure to the outgoing packet */
p->nb_prot = (char *) tmpp;
8025828: e0bffc17 ldw r2,-16(fp)
802582c: e0ffff17 ldw r3,-4(fp)
8025830: 10c00315 stw r3,12(r2)
p->nb_plen = sizeof(struct igmp);
8025834: e0bffc17 ldw r2,-16(fp)
8025838: 00c00204 movi r3,8
802583c: 10c00415 stw r3,16(r2)
p->imo = imop;
8025840: e0bffc17 ldw r2,-16(fp)
8025844: e0fff917 ldw r3,-28(fp)
8025848: 10c00b15 stw r3,44(r2)
ip_write2 (IGMP_PROT, p, optp);
802584c: e1bffe17 ldw r6,-8(fp)
8025850: e17ffc17 ldw r5,-16(fp)
8025854: 01000084 movi r4,2
8025858: 803abf80 call 803abf8 <ip_write2>
if (type == IGMPv2_LEAVE_GROUP)
802585c: e0bfe103 ldbu r2,-124(fp)
8025860: 108005d8 cmpnei r2,r2,23
8025864: 1000061e bne r2,zero,8025880 <igmp_send+0x224>
++igmpstats.igmpv2mode_v2_leave_msgs_sent;
8025868: 008201b4 movhi r2,2054
802586c: 10b78b17 ldw r2,-8660(r2)
8025870: 10c00044 addi r3,r2,1
8025874: 008201b4 movhi r2,2054
8025878: 10f78b15 stw r3,-8660(r2)
802587c: 00001106 br 80258c4 <igmp_send+0x268>
else if (type == IGMPv2_MEMBERSHIP_REPORT)
8025880: e0bfe103 ldbu r2,-124(fp)
8025884: 10800598 cmpnei r2,r2,22
8025888: 1000061e bne r2,zero,80258a4 <igmp_send+0x248>
++igmpstats.igmpv2mode_v2_reports_sent;
802588c: 008201b4 movhi r2,2054
8025890: 10b78c17 ldw r2,-8656(r2)
8025894: 10c00044 addi r3,r2,1
8025898: 008201b4 movhi r2,2054
802589c: 10f78c15 stw r3,-8656(r2)
80258a0: 00000806 br 80258c4 <igmp_send+0x268>
else if (type == IGMP_HOST_MEMBERSHIP_REPORT)
80258a4: e0bfe103 ldbu r2,-124(fp)
80258a8: 10800498 cmpnei r2,r2,18
80258ac: 1000051e bne r2,zero,80258c4 <igmp_send+0x268>
++igmpstats.igmp_v1_reports_sent;
80258b0: 008201b4 movhi r2,2054
80258b4: 10b78a17 ldw r2,-8664(r2)
80258b8: 10c00044 addi r3,r2,1
80258bc: 008201b4 movhi r2,2054
80258c0: 10f78a15 stw r3,-8664(r2)
}
80258c4: e037883a mov sp,fp
80258c8: dfc00117 ldw ra,4(sp)
80258cc: df000017 ldw fp,0(sp)
80258d0: dec00204 addi sp,sp,8
80258d4: f800283a ret
080258d8 <igmp_joingroup>:
*
* OUTPUT: None.
*/
void igmp_joingroup(struct in_multi * inm)
{
80258d8: defffc04 addi sp,sp,-16
80258dc: dfc00315 stw ra,12(sp)
80258e0: df000215 stw fp,8(sp)
80258e4: df000204 addi fp,sp,8
80258e8: e13ffe15 stw r4,-8(fp)
NET ifp;
/* extract the network interface to which this multicast
* address is "attached" */
ifp = inm->inm_netp;
80258ec: e0bffe17 ldw r2,-8(fp)
80258f0: 10800117 ldw r2,4(r2)
80258f4: e0bfff15 stw r2,-4(fp)
if (inm->inm_addr == igmp_all_hosts_group)
80258f8: e0bffe17 ldw r2,-8(fp)
80258fc: 10c00017 ldw r3,0(r2)
8025900: d0a06b17 ldw r2,-32340(gp)
8025904: 1880031e bne r3,r2,8025914 <igmp_joingroup+0x3c>
{
inm->inm_timer = 0;
8025908: e0bffe17 ldw r2,-8(fp)
802590c: 10000315 stw zero,12(r2)
}
++igmp_timers_are_running;
}
return;
8025910: 00007706 br 8025af0 <igmp_joingroup+0x218>
if (ifp->igmpv1_rtr_present)
8025914: e0bfff17 ldw r2,-4(fp)
8025918: 10802d03 ldbu r2,180(r2)
802591c: 10803fcc andi r2,r2,255
8025920: 10003426 beq r2,zero,80259f4 <igmp_joingroup+0x11c>
igmp_send (IGMP_HOST_MEMBERSHIP_REPORT, inm);
8025924: e17ffe17 ldw r5,-8(fp)
8025928: 01000484 movi r4,18
802592c: 802565c0 call 802565c <igmp_send>
inm->inm_timer = (unsigned) IGMP_RANDOM_DELAY(inm->inm_addr);
8025930: 008201b4 movhi r2,2054
8025934: 10f95117 ldw r3,-6844(r2)
8025938: 008201b4 movhi r2,2054
802593c: 10b77017 ldw r2,-8768(r2)
8025940: 10800a17 ldw r2,40(r2)
8025944: 1008d63a srli r4,r2,24
8025948: 008201b4 movhi r2,2054
802594c: 10b77017 ldw r2,-8768(r2)
8025950: 10800a17 ldw r2,40(r2)
8025954: 1004d23a srli r2,r2,8
8025958: 10bfc00c andi r2,r2,65280
802595c: 2088b03a or r4,r4,r2
8025960: 008201b4 movhi r2,2054
8025964: 10b77017 ldw r2,-8768(r2)
8025968: 10800a17 ldw r2,40(r2)
802596c: 1004923a slli r2,r2,8
8025970: 10803fec andhi r2,r2,255
8025974: 2088b03a or r4,r4,r2
8025978: 008201b4 movhi r2,2054
802597c: 10b77017 ldw r2,-8768(r2)
8025980: 10800a17 ldw r2,40(r2)
8025984: 1004963a slli r2,r2,24
8025988: 2084b03a or r2,r4,r2
802598c: 1887883a add r3,r3,r2
8025990: e0bffe17 ldw r2,-8(fp)
8025994: 10800017 ldw r2,0(r2)
8025998: 1008d63a srli r4,r2,24
802599c: e0bffe17 ldw r2,-8(fp)
80259a0: 10800017 ldw r2,0(r2)
80259a4: 1004d23a srli r2,r2,8
80259a8: 10bfc00c andi r2,r2,65280
80259ac: 2088b03a or r4,r4,r2
80259b0: e0bffe17 ldw r2,-8(fp)
80259b4: 10800017 ldw r2,0(r2)
80259b8: 1004923a slli r2,r2,8
80259bc: 10803fec andhi r2,r2,255
80259c0: 2088b03a or r4,r4,r2
80259c4: e0bffe17 ldw r2,-8(fp)
80259c8: 10800017 ldw r2,0(r2)
80259cc: 1004963a slli r2,r2,24
80259d0: 2084b03a or r2,r4,r2
80259d4: 1885883a add r2,r3,r2
80259d8: 01400c84 movi r5,50
80259dc: 1009883a mov r4,r2
80259e0: 800d05c0 call 800d05c <__umodsi3>
80259e4: 10c00044 addi r3,r2,1
80259e8: e0bffe17 ldw r2,-8(fp)
80259ec: 10c00315 stw r3,12(r2)
80259f0: 00003306 br 8025ac0 <igmp_joingroup+0x1e8>
igmp_send (IGMPv2_MEMBERSHIP_REPORT, inm);
80259f4: e17ffe17 ldw r5,-8(fp)
80259f8: 01000584 movi r4,22
80259fc: 802565c0 call 802565c <igmp_send>
inm->inm_timer = (unsigned) IGMPv2_RANDOM_DELAY ((UNSOLIC_RPT_INTERVAL * PR_FASTHZ), inm->inm_addr);
8025a00: 008201b4 movhi r2,2054
8025a04: 10f95117 ldw r3,-6844(r2)
8025a08: 008201b4 movhi r2,2054
8025a0c: 10b77017 ldw r2,-8768(r2)
8025a10: 10800a17 ldw r2,40(r2)
8025a14: 1008d63a srli r4,r2,24
8025a18: 008201b4 movhi r2,2054
8025a1c: 10b77017 ldw r2,-8768(r2)
8025a20: 10800a17 ldw r2,40(r2)
8025a24: 1004d23a srli r2,r2,8
8025a28: 10bfc00c andi r2,r2,65280
8025a2c: 2088b03a or r4,r4,r2
8025a30: 008201b4 movhi r2,2054
8025a34: 10b77017 ldw r2,-8768(r2)
8025a38: 10800a17 ldw r2,40(r2)
8025a3c: 1004923a slli r2,r2,8
8025a40: 10803fec andhi r2,r2,255
8025a44: 2088b03a or r4,r4,r2
8025a48: 008201b4 movhi r2,2054
8025a4c: 10b77017 ldw r2,-8768(r2)
8025a50: 10800a17 ldw r2,40(r2)
8025a54: 1004963a slli r2,r2,24
8025a58: 2084b03a or r2,r4,r2
8025a5c: 1887883a add r3,r3,r2
8025a60: e0bffe17 ldw r2,-8(fp)
8025a64: 10800017 ldw r2,0(r2)
8025a68: 1008d63a srli r4,r2,24
8025a6c: e0bffe17 ldw r2,-8(fp)
8025a70: 10800017 ldw r2,0(r2)
8025a74: 1004d23a srli r2,r2,8
8025a78: 10bfc00c andi r2,r2,65280
8025a7c: 2088b03a or r4,r4,r2
8025a80: e0bffe17 ldw r2,-8(fp)
8025a84: 10800017 ldw r2,0(r2)
8025a88: 1004923a slli r2,r2,8
8025a8c: 10803fec andhi r2,r2,255
8025a90: 2088b03a or r4,r4,r2
8025a94: e0bffe17 ldw r2,-8(fp)
8025a98: 10800017 ldw r2,0(r2)
8025a9c: 1004963a slli r2,r2,24
8025aa0: 2084b03a or r2,r4,r2
8025aa4: 1885883a add r2,r3,r2
8025aa8: 01400c84 movi r5,50
8025aac: 1009883a mov r4,r2
8025ab0: 800d05c0 call 800d05c <__umodsi3>
8025ab4: 10c00044 addi r3,r2,1
8025ab8: e0bffe17 ldw r2,-8(fp)
8025abc: 10c00315 stw r3,12(r2)
if (ifp->igmp_oper_mode == IGMP_MODE_V2)
8025ac0: e0bfff17 ldw r2,-4(fp)
8025ac4: 10802f03 ldbu r2,188(r2)
8025ac8: 10803fcc andi r2,r2,255
8025acc: 10800098 cmpnei r2,r2,2
8025ad0: 1000031e bne r2,zero,8025ae0 <igmp_joingroup+0x208>
inm->last2send_report = IGMP_TRUE;
8025ad4: e0bffe17 ldw r2,-8(fp)
8025ad8: 00c00044 movi r3,1
8025adc: 10c00405 stb r3,16(r2)
++igmp_timers_are_running;
8025ae0: d0a06917 ldw r2,-32348(gp)
8025ae4: 10800044 addi r2,r2,1
8025ae8: d0a06915 stw r2,-32348(gp)
return;
8025aec: 0001883a nop
}
8025af0: e037883a mov sp,fp
8025af4: dfc00117 ldw ra,4(sp)
8025af8: df000017 ldw fp,0(sp)
8025afc: dec00204 addi sp,sp,8
8025b00: f800283a ret
08025b04 <igmp_leavegroup>:
*
* OUTPUT: None.
*/
void igmp_leavegroup (struct in_multi * inm)
{
8025b04: defffc04 addi sp,sp,-16
8025b08: dfc00315 stw ra,12(sp)
8025b0c: df000215 stw fp,8(sp)
8025b10: df000204 addi fp,sp,8
8025b14: e13ffe15 stw r4,-8(fp)
NET ifp;
ifp = inm->inm_netp;
8025b18: e0bffe17 ldw r2,-8(fp)
8025b1c: 10800117 ldw r2,4(r2)
8025b20: e0bfff15 stw r2,-4(fp)
if ((ifp->igmp_oper_mode == IGMP_MODE_V2) &&
8025b24: e0bfff17 ldw r2,-4(fp)
8025b28: 10802f03 ldbu r2,188(r2)
8025b2c: 10803fcc andi r2,r2,255
8025b30: 10800098 cmpnei r2,r2,2
8025b34: 10000d1e bne r2,zero,8025b6c <igmp_leavegroup+0x68>
!ifp->igmpv1_rtr_present)
8025b38: e0bfff17 ldw r2,-4(fp)
8025b3c: 10802d03 ldbu r2,180(r2)
if ((ifp->igmp_oper_mode == IGMP_MODE_V2) &&
8025b40: 10803fcc andi r2,r2,255
8025b44: 1000091e bne r2,zero,8025b6c <igmp_leavegroup+0x68>
{
if (inm->last2send_report == IGMP_TRUE)
8025b48: e0bffe17 ldw r2,-8(fp)
8025b4c: 10800403 ldbu r2,16(r2)
8025b50: 10803fcc andi r2,r2,255
8025b54: 10800058 cmpnei r2,r2,1
8025b58: 1000041e bne r2,zero,8025b6c <igmp_leavegroup+0x68>
igmp_send (IGMPv2_LEAVE_GROUP, inm);
8025b5c: e17ffe17 ldw r5,-8(fp)
8025b60: 010005c4 movi r4,23
8025b64: 802565c0 call 802565c <igmp_send>
}
return;
8025b68: 0001883a nop
8025b6c: 0001883a nop
}
8025b70: e037883a mov sp,fp
8025b74: dfc00117 ldw ra,4(sp)
8025b78: df000017 ldw fp,0(sp)
8025b7c: dec00204 addi sp,sp,8
8025b80: f800283a ret
08025b84 <igmp_validate>:
* validation fails; otherwise, it returns
* IGMP_OK.
*/
int igmp_validate (PACKET p)
{
8025b84: defff604 addi sp,sp,-40
8025b88: dfc00915 stw ra,36(sp)
8025b8c: df000815 stw fp,32(sp)
8025b90: df000804 addi fp,sp,32
8025b94: e13ff815 stw r4,-32(fp)
u_short xsum;
u_char type;
ip_addr mcgrp_addr;
u_char resp_time;
pip = ip_head (p);
8025b98: e0bff817 ldw r2,-32(fp)
8025b9c: 10800317 ldw r2,12(r2)
8025ba0: e0bfff15 stw r2,-4(fp)
/* compute length of IGMP packet (after accounting for IP header,
* including the IP Router Alert option (if present)) */
igmplen = p->nb_plen - ip_hlen (pip);
8025ba4: e0bff817 ldw r2,-32(fp)
8025ba8: 10c00417 ldw r3,16(r2)
8025bac: e0bfff17 ldw r2,-4(fp)
8025bb0: 10800003 ldbu r2,0(r2)
8025bb4: 10803fcc andi r2,r2,255
8025bb8: 100490ba slli r2,r2,2
8025bbc: 10800f0c andi r2,r2,60
8025bc0: 1885c83a sub r2,r3,r2
8025bc4: e0bffe15 stw r2,-8(fp)
/* validate length (IGMP_MINLEN is 8 bytes) */
if (igmplen != IGMP_MINLEN)
8025bc8: e0bffe17 ldw r2,-8(fp)
8025bcc: 10800220 cmpeqi r2,r2,8
8025bd0: 1000071e bne r2,zero,8025bf0 <igmp_validate+0x6c>
{
++igmpstats.igmp_badlen_rcvd;
8025bd4: 008201b4 movhi r2,2054
8025bd8: 10b77e17 ldw r2,-8712(r2)
8025bdc: 10c00044 addi r3,r2,1
8025be0: 008201b4 movhi r2,2054
8025be4: 10f77e15 stw r3,-8712(r2)
return ENP_BAD_HEADER;
8025be8: 00bff804 movi r2,-32
8025bec: 00009706 br 8025e4c <igmp_validate+0x2c8>
}
/* validate checksum */
igmp = (struct igmp *) (ip_data (pip));
8025bf0: e0bfff17 ldw r2,-4(fp)
8025bf4: 10800003 ldbu r2,0(r2)
8025bf8: 10803fcc andi r2,r2,255
8025bfc: 100490ba slli r2,r2,2
8025c00: 10800f0c andi r2,r2,60
8025c04: e0ffff17 ldw r3,-4(fp)
8025c08: 1885883a add r2,r3,r2
8025c0c: e0bffd15 stw r2,-12(fp)
osum = igmp->igmp_cksum;
8025c10: e0bffd17 ldw r2,-12(fp)
8025c14: 1080008b ldhu r2,2(r2)
8025c18: e0bffc8d sth r2,-14(fp)
igmp->igmp_cksum = 0;
8025c1c: e0bffd17 ldw r2,-12(fp)
8025c20: 1000008d sth zero,2(r2)
xsum = ~cksum(igmp, igmplen>>1);
8025c24: e0bffe17 ldw r2,-8(fp)
8025c28: 1005d07a srai r2,r2,1
8025c2c: 100b883a mov r5,r2
8025c30: e13ffd17 ldw r4,-12(fp)
8025c34: 8026d7c0 call 8026d7c <cksum>
8025c38: 0084303a nor r2,zero,r2
8025c3c: e0bffc0d sth r2,-16(fp)
if (xsum != osum)
8025c40: e0fffc0b ldhu r3,-16(fp)
8025c44: e0bffc8b ldhu r2,-14(fp)
8025c48: 18800a26 beq r3,r2,8025c74 <igmp_validate+0xf0>
{
igmp->igmp_cksum = osum;
8025c4c: e0bffd17 ldw r2,-12(fp)
8025c50: e0fffc8b ldhu r3,-14(fp)
8025c54: 10c0008d sth r3,2(r2)
++igmpstats.igmp_badsum_rcvd;
8025c58: 008201b4 movhi r2,2054
8025c5c: 10b77f17 ldw r2,-8708(r2)
8025c60: 10c00044 addi r3,r2,1
8025c64: 008201b4 movhi r2,2054
8025c68: 10f77f15 stw r3,-8708(r2)
return ENP_BAD_HEADER;
8025c6c: 00bff804 movi r2,-32
8025c70: 00007606 br 8025e4c <igmp_validate+0x2c8>
}
/* extract the IGMP packet type, Group Address, and Max Response Time
* (unused for IGMPv1) fields from received packet */
type = igmp->igmp_type;
8025c74: e0bffd17 ldw r2,-12(fp)
8025c78: 10800003 ldbu r2,0(r2)
8025c7c: e0bffbc5 stb r2,-17(fp)
mcgrp_addr = ntohl(igmp->igmp_group);
8025c80: e0bffd17 ldw r2,-12(fp)
8025c84: 10800117 ldw r2,4(r2)
8025c88: 1006d63a srli r3,r2,24
8025c8c: e0bffd17 ldw r2,-12(fp)
8025c90: 10800117 ldw r2,4(r2)
8025c94: 1004d23a srli r2,r2,8
8025c98: 10bfc00c andi r2,r2,65280
8025c9c: 1886b03a or r3,r3,r2
8025ca0: e0bffd17 ldw r2,-12(fp)
8025ca4: 10800117 ldw r2,4(r2)
8025ca8: 1004923a slli r2,r2,8
8025cac: 10803fec andhi r2,r2,255
8025cb0: 1886b03a or r3,r3,r2
8025cb4: e0bffd17 ldw r2,-12(fp)
8025cb8: 10800117 ldw r2,4(r2)
8025cbc: 1004963a slli r2,r2,24
8025cc0: 1884b03a or r2,r3,r2
8025cc4: e0bffa15 stw r2,-24(fp)
resp_time = igmp->igmp_code;
8025cc8: e0bffd17 ldw r2,-12(fp)
8025ccc: 10800043 ldbu r2,1(r2)
8025cd0: e0bff9c5 stb r2,-25(fp)
if (type == IGMP_HOST_MEMBERSHIP_QUERY)
8025cd4: e0bffbc3 ldbu r2,-17(fp)
8025cd8: 10800458 cmpnei r2,r2,17
8025cdc: 10002c1e bne r2,zero,8025d90 <igmp_validate+0x20c>
{
if ((resp_time == 0) || /* IGMPv1 Query */
8025ce0: e0bff9c3 ldbu r2,-25(fp)
8025ce4: 10000426 beq r2,zero,8025cf8 <igmp_validate+0x174>
8025ce8: e0bff9c3 ldbu r2,-25(fp)
8025cec: 10000d26 beq r2,zero,8025d24 <igmp_validate+0x1a0>
((resp_time > 0) && (mcgrp_addr == 0))) /* IGMPv2 General Query */
8025cf0: e0bffa17 ldw r2,-24(fp)
8025cf4: 10000b1e bne r2,zero,8025d24 <igmp_validate+0x1a0>
{
/* if this is a IGMPv1 Host Membership Query or a IGMPv2
* General Query, it must be addressed to the all-hosts
* group */
if (pip->ip_dest != igmp_all_hosts_group)
8025cf8: e0bfff17 ldw r2,-4(fp)
8025cfc: 10c00417 ldw r3,16(r2)
8025d00: d0a06b17 ldw r2,-32340(gp)
8025d04: 18800726 beq r3,r2,8025d24 <igmp_validate+0x1a0>
{
++igmpstats.igmp_bad_queries_rcvd;
8025d08: 008201b4 movhi r2,2054
8025d0c: 10b78217 ldw r2,-8696(r2)
8025d10: 10c00044 addi r3,r2,1
8025d14: 008201b4 movhi r2,2054
8025d18: 10f78215 stw r3,-8696(r2)
return ENP_BAD_HEADER;
8025d1c: 00bff804 movi r2,-32
8025d20: 00004a06 br 8025e4c <igmp_validate+0x2c8>
}
}
if ((resp_time > 0) && (mcgrp_addr != 0))
8025d24: e0bff9c3 ldbu r2,-25(fp)
8025d28: 10001926 beq r2,zero,8025d90 <igmp_validate+0x20c>
8025d2c: e0bffa17 ldw r2,-24(fp)
8025d30: 10001726 beq r2,zero,8025d90 <igmp_validate+0x20c>
{
/* this is a IGMPv2 Group-Specific Query. */
if (p->net->igmp_oper_mode == IGMP_MODE_V1)
8025d34: e0bff817 ldw r2,-32(fp)
8025d38: 10800617 ldw r2,24(r2)
8025d3c: 10802f03 ldbu r2,188(r2)
8025d40: 10803fcc andi r2,r2,255
8025d44: 10800058 cmpnei r2,r2,1
8025d48: 1000021e bne r2,zero,8025d54 <igmp_validate+0x1d0>
{
/* IGMPv1 code does not understand a IGMPv2 Group-
* Specific Query */
return ENP_BAD_HEADER;
8025d4c: 00bff804 movi r2,-32
8025d50: 00003e06 br 8025e4c <igmp_validate+0x2c8>
/* check to make sure that the group address field carries
* a valid multicast address; if it doesn't, we
* drop the packet. Also drop packets that
* carry the multicast address for the all-hosts
* group. */
if ((!IN_MULTICAST(mcgrp_addr)) ||
8025d54: e0bffa17 ldw r2,-24(fp)
8025d58: 10fc002c andhi r3,r2,61440
8025d5c: 00b80034 movhi r2,57344
8025d60: 1880041e bne r3,r2,8025d74 <igmp_validate+0x1f0>
/* igmp_all_hosts_group is already in network byte order */
(igmp->igmp_group == igmp_all_hosts_group))
8025d64: e0bffd17 ldw r2,-12(fp)
8025d68: 10c00117 ldw r3,4(r2)
8025d6c: d0a06b17 ldw r2,-32340(gp)
if ((!IN_MULTICAST(mcgrp_addr)) ||
8025d70: 1880071e bne r3,r2,8025d90 <igmp_validate+0x20c>
{
++igmpstats.igmpv2mode_v2_bad_grp_specific_queries_rcvd;
8025d74: 008201b4 movhi r2,2054
8025d78: 10b78517 ldw r2,-8684(r2)
8025d7c: 10c00044 addi r3,r2,1
8025d80: 008201b4 movhi r2,2054
8025d84: 10f78515 stw r3,-8684(r2)
/* caller will free received packet */
return ENP_BAD_HEADER;
8025d88: 00bff804 movi r2,-32
8025d8c: 00002f06 br 8025e4c <igmp_validate+0x2c8>
/* check to ensure that a received IGMPv1 or v2 Report has the
* same IP host group address in its IP destination field and
* its IGMP group address field, and that the group address is
* a valid multicast address */
if ((type == IGMP_HOST_MEMBERSHIP_REPORT) ||
8025d90: e0bffbc3 ldbu r2,-17(fp)
8025d94: 108004a0 cmpeqi r2,r2,18
8025d98: 1000031e bne r2,zero,8025da8 <igmp_validate+0x224>
8025d9c: e0bffbc3 ldbu r2,-17(fp)
8025da0: 10800598 cmpnei r2,r2,22
8025da4: 1000101e bne r2,zero,8025de8 <igmp_validate+0x264>
(type == IGMPv2_MEMBERSHIP_REPORT))
{
if ((igmp->igmp_group != pip->ip_dest) ||
8025da8: e0bffd17 ldw r2,-12(fp)
8025dac: 10c00117 ldw r3,4(r2)
8025db0: e0bfff17 ldw r2,-4(fp)
8025db4: 10800417 ldw r2,16(r2)
8025db8: 1880041e bne r3,r2,8025dcc <igmp_validate+0x248>
(!IN_MULTICAST(mcgrp_addr)))
8025dbc: e0bffa17 ldw r2,-24(fp)
8025dc0: 10fc002c andhi r3,r2,61440
if ((igmp->igmp_group != pip->ip_dest) ||
8025dc4: 00b80034 movhi r2,57344
8025dc8: 18800726 beq r3,r2,8025de8 <igmp_validate+0x264>
{
++igmpstats.igmp_bad_reports_rcvd;
8025dcc: 008201b4 movhi r2,2054
8025dd0: 10b78317 ldw r2,-8692(r2)
8025dd4: 10c00044 addi r3,r2,1
8025dd8: 008201b4 movhi r2,2054
8025ddc: 10f78315 stw r3,-8692(r2)
return ENP_BAD_HEADER;
8025de0: 00bff804 movi r2,-32
8025de4: 00001906 br 8025e4c <igmp_validate+0x2c8>
* Version 1 Host Membership Reports and Version 1 Host Membership Query
* packets will not be checked for the IP Router Alert option.
*/
#ifdef IGMP_V2
if ((type == IGMPv2_LEAVE_GROUP) ||
8025de8: e0bffbc3 ldbu r2,-17(fp)
8025dec: 108005e0 cmpeqi r2,r2,23
8025df0: 10000a1e bne r2,zero,8025e1c <igmp_validate+0x298>
8025df4: e0bffbc3 ldbu r2,-17(fp)
8025df8: 108005a0 cmpeqi r2,r2,22
8025dfc: 1000071e bne r2,zero,8025e1c <igmp_validate+0x298>
(type == IGMPv2_MEMBERSHIP_REPORT) ||
8025e00: e0bffbc3 ldbu r2,-17(fp)
8025e04: 10800458 cmpnei r2,r2,17
8025e08: 10000f1e bne r2,zero,8025e48 <igmp_validate+0x2c4>
((type == IGMP_HOST_MEMBERSHIP_QUERY) && (igmp->igmp_code > 0)))
8025e0c: e0bffd17 ldw r2,-12(fp)
8025e10: 10800043 ldbu r2,1(r2)
8025e14: 10803fcc andi r2,r2,255
8025e18: 10000b26 beq r2,zero,8025e48 <igmp_validate+0x2c4>
{
if (!igmpv2_chk4_rtr_alert_opt (pip))
8025e1c: e13fff17 ldw r4,-4(fp)
8025e20: 803e5740 call 803e574 <igmpv2_chk4_rtr_alert_opt>
8025e24: 10803fcc andi r2,r2,255
8025e28: 1000071e bne r2,zero,8025e48 <igmp_validate+0x2c4>
{
++igmpstats.igmpv2mode_v2_rtr_alert_missing;
8025e2c: 008201b4 movhi r2,2054
8025e30: 10b78817 ldw r2,-8672(r2)
8025e34: 10c00044 addi r3,r2,1
8025e38: 008201b4 movhi r2,2054
8025e3c: 10f78815 stw r3,-8672(r2)
return ENP_BAD_HEADER;
8025e40: 00bff804 movi r2,-32
8025e44: 00000106 br 8025e4c <igmp_validate+0x2c8>
}
}
#endif
/* validation successful */
return IGMP_OK;
8025e48: 0005883a mov r2,zero
}
8025e4c: e037883a mov sp,fp
8025e50: dfc00117 ldw ra,4(sp)
8025e54: df000017 ldw fp,0(sp)
8025e58: dec00204 addi sp,sp,8
8025e5c: f800283a ret
08025e60 <igmp_print_stats>:
*
* OUTPUT: This function always returns IGMP_OK.
*/
int igmp_print_stats (void * pio)
{
8025e60: defffa04 addi sp,sp,-24
8025e64: dfc00515 stw ra,20(sp)
8025e68: df000415 stw fp,16(sp)
8025e6c: df000404 addi fp,sp,16
8025e70: e13ffe15 stw r4,-8(fp)
NET ifp;
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8025e74: 008201b4 movhi r2,2054
8025e78: 10b6a617 ldw r2,-9576(r2)
8025e7c: e0bfff15 stw r2,-4(fp)
8025e80: 00003b06 br 8025f70 <igmp_print_stats+0x110>
{
ns_printf (pio, "%s: mode: %u [%s] ",
ifp->name,
8025e84: e0bfff17 ldw r2,-4(fp)
8025e88: 10c00104 addi r3,r2,4
ifp->igmp_oper_mode,
8025e8c: e0bfff17 ldw r2,-4(fp)
8025e90: 10802f03 ldbu r2,188(r2)
ns_printf (pio, "%s: mode: %u [%s] ",
8025e94: 11003fcc andi r4,r2,255
((ifp->igmp_oper_mode == IGMP_MODE_V1)? "v1":"v2"));
8025e98: e0bfff17 ldw r2,-4(fp)
8025e9c: 10802f03 ldbu r2,188(r2)
ns_printf (pio, "%s: mode: %u [%s] ",
8025ea0: 10803fcc andi r2,r2,255
8025ea4: 10800058 cmpnei r2,r2,1
8025ea8: 1000031e bne r2,zero,8025eb8 <igmp_print_stats+0x58>
8025eac: 00820174 movhi r2,2053
8025eb0: 10a72e04 addi r2,r2,-25416
8025eb4: 00000206 br 8025ec0 <igmp_print_stats+0x60>
8025eb8: 00820174 movhi r2,2053
8025ebc: 10a72f04 addi r2,r2,-25412
8025ec0: d8800015 stw r2,0(sp)
8025ec4: 200f883a mov r7,r4
8025ec8: 180d883a mov r6,r3
8025ecc: 01420174 movhi r5,2053
8025ed0: 29673004 addi r5,r5,-25408
8025ed4: e13ffe17 ldw r4,-8(fp)
8025ed8: 80273900 call 8027390 <ns_printf>
/* if a link has been configured for IGMPv2, display the status
* of the v1 router-related variables too */
if (ifp->igmp_oper_mode == IGMP_MODE_V2)
8025edc: e0bfff17 ldw r2,-4(fp)
8025ee0: 10802f03 ldbu r2,188(r2)
8025ee4: 10803fcc andi r2,r2,255
8025ee8: 10800098 cmpnei r2,r2,2
8025eec: 1000191e bne r2,zero,8025f54 <igmp_print_stats+0xf4>
{
ns_printf (pio, "v1 rtr: %u [%s] v1 last query: %x [now %x]\n",
ifp->igmpv1_rtr_present,
8025ef0: e0bfff17 ldw r2,-4(fp)
8025ef4: 10802d03 ldbu r2,180(r2)
ns_printf (pio, "v1 rtr: %u [%s] v1 last query: %x [now %x]\n",
8025ef8: 11403fcc andi r5,r2,255
((ifp->igmpv1_rtr_present == IGMP_TRUE)? "present" : "absent"),
8025efc: e0bfff17 ldw r2,-4(fp)
8025f00: 10802d03 ldbu r2,180(r2)
ns_printf (pio, "v1 rtr: %u [%s] v1 last query: %x [now %x]\n",
8025f04: 10803fcc andi r2,r2,255
8025f08: 10800058 cmpnei r2,r2,1
8025f0c: 1000031e bne r2,zero,8025f1c <igmp_print_stats+0xbc>
8025f10: 00820174 movhi r2,2053
8025f14: 10a73504 addi r2,r2,-25388
8025f18: 00000206 br 8025f24 <igmp_print_stats+0xc4>
8025f1c: 00820174 movhi r2,2053
8025f20: 10a73704 addi r2,r2,-25380
8025f24: e0ffff17 ldw r3,-4(fp)
8025f28: 18c02e17 ldw r3,184(r3)
8025f2c: d1207d17 ldw r4,-32268(gp)
8025f30: d9000115 stw r4,4(sp)
8025f34: d8c00015 stw r3,0(sp)
8025f38: 100f883a mov r7,r2
8025f3c: 280d883a mov r6,r5
8025f40: 01420174 movhi r5,2053
8025f44: 29673904 addi r5,r5,-25372
8025f48: e13ffe17 ldw r4,-8(fp)
8025f4c: 80273900 call 8027390 <ns_printf>
8025f50: 00000406 br 8025f64 <igmp_print_stats+0x104>
ifp->igmpv1_query_rcvd_time,
cticks);
}
else ns_printf (pio, "\n");
8025f54: 01420174 movhi r5,2053
8025f58: 29674404 addi r5,r5,-25328
8025f5c: e13ffe17 ldw r4,-8(fp)
8025f60: 80273900 call 8027390 <ns_printf>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8025f64: e0bfff17 ldw r2,-4(fp)
8025f68: 10800017 ldw r2,0(r2)
8025f6c: e0bfff15 stw r2,-4(fp)
8025f70: e0bfff17 ldw r2,-4(fp)
8025f74: 103fc31e bne r2,zero,8025e84 <igmp_print_stats+0x24>
}
/* rx and timer statistics */
ns_printf (pio, "[Rx ] IGMP messages rcvd: %lu, timers running: %lu\n", igmpstats.igmp_total_rcvd, igmp_timers_are_running);
8025f78: 008201b4 movhi r2,2054
8025f7c: 10b77417 ldw r2,-8752(r2)
8025f80: d0e06917 ldw r3,-32348(gp)
8025f84: 180f883a mov r7,r3
8025f88: 100d883a mov r6,r2
8025f8c: 01420174 movhi r5,2053
8025f90: 29674504 addi r5,r5,-25324
8025f94: e13ffe17 ldw r4,-8(fp)
8025f98: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Rx ] IGMPv1 Host Membership Queries rcvd (by v1-mode links): %lu\n", igmpstats.igmpv1mode_v1_queries_rcvd);
8025f9c: 008201b4 movhi r2,2054
8025fa0: 10b77517 ldw r2,-8748(r2)
8025fa4: 100d883a mov r6,r2
8025fa8: 01420174 movhi r5,2053
8025fac: 29675204 addi r5,r5,-25272
8025fb0: e13ffe17 ldw r4,-8(fp)
8025fb4: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Rx ] IGMPv1 Host Membership Reports rcvd: %lu\n", igmpstats.igmpv1mode_v1_reports_rcvd);
8025fb8: 008201b4 movhi r2,2054
8025fbc: 10b77617 ldw r2,-8744(r2)
8025fc0: 100d883a mov r6,r2
8025fc4: 01420174 movhi r5,2053
8025fc8: 29676304 addi r5,r5,-25204
8025fcc: e13ffe17 ldw r4,-8(fp)
8025fd0: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Rx ] IGMP Host Membership Reports rcvd causing timer cancellation: %lu\n", igmpstats.igmpv1mode_v1_reports_rcvd_canceled_timer);
8025fd4: 008201b4 movhi r2,2054
8025fd8: 10b77717 ldw r2,-8740(r2)
8025fdc: 100d883a mov r6,r2
8025fe0: 01420174 movhi r5,2053
8025fe4: 29676f04 addi r5,r5,-25156
8025fe8: e13ffe17 ldw r4,-8(fp)
8025fec: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Rx ] IGMPv1 Host Membership Queries rcvd (by v2-mode links): %lu\n", igmpstats.igmpv2mode_v1_queries_rcvd);
8025ff0: 008201b4 movhi r2,2054
8025ff4: 10b77817 ldw r2,-8736(r2)
8025ff8: 100d883a mov r6,r2
8025ffc: 01420174 movhi r5,2053
8026000: 29678204 addi r5,r5,-25080
8026004: e13ffe17 ldw r4,-8(fp)
8026008: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Rx ] IGMPv2 General Queries rcvd: %lu, Group-Specific Queries rcvd: %lu\n", igmpstats.igmpv2mode_v2_general_queries_rcvd, igmpstats.igmpv2mode_v2_grp_specific_queries_rcvd);
802600c: 008201b4 movhi r2,2054
8026010: 10f77917 ldw r3,-8732(r2)
8026014: 008201b4 movhi r2,2054
8026018: 10b77a17 ldw r2,-8728(r2)
802601c: 100f883a mov r7,r2
8026020: 180d883a mov r6,r3
8026024: 01420174 movhi r5,2053
8026028: 29679304 addi r5,r5,-25012
802602c: e13ffe17 ldw r4,-8(fp)
8026030: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Rx ] IGMP Host Membership Reports rcvd causing timer cancellation: %lu\n", igmpstats.igmpv2mode_v12_reports_rcvd_canceled_timer);
8026034: 008201b4 movhi r2,2054
8026038: 10b77b17 ldw r2,-8724(r2)
802603c: 100d883a mov r6,r2
8026040: 01420174 movhi r5,2053
8026044: 29676f04 addi r5,r5,-25156
8026048: e13ffe17 ldw r4,-8(fp)
802604c: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Rx ] IGMP Host Membership Reports rcvd with no local timer: %lu\n", igmpstats.igmpv2mode_v12_reports_rcvd_no_timer);
8026050: 008201b4 movhi r2,2054
8026054: 10b77c17 ldw r2,-8720(r2)
8026058: 100d883a mov r6,r2
802605c: 01420174 movhi r5,2053
8026060: 2967a604 addi r5,r5,-24936
8026064: e13ffe17 ldw r4,-8(fp)
8026068: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Rx ] IGMPv2 Leave Group messages rcvd: %lu\n", igmpstats.igmpv2mode_v2_leave_msgs_rcvd);
802606c: 008201b4 movhi r2,2054
8026070: 10b77d17 ldw r2,-8716(r2)
8026074: 100d883a mov r6,r2
8026078: 01420174 movhi r5,2053
802607c: 2967b704 addi r5,r5,-24868
8026080: e13ffe17 ldw r4,-8(fp)
8026084: 80273900 call 8027390 <ns_printf>
/* tx statistics */
ns_printf (pio, "[Tx ] IGMPv2 Leave Group messages sent: %lu, Membership Reports sent: %lu\n", igmpstats.igmpv2mode_v2_leave_msgs_sent, igmpstats.igmpv2mode_v2_reports_sent);
8026088: 008201b4 movhi r2,2054
802608c: 10f78b17 ldw r3,-8660(r2)
8026090: 008201b4 movhi r2,2054
8026094: 10b78c17 ldw r2,-8656(r2)
8026098: 100f883a mov r7,r2
802609c: 180d883a mov r6,r3
80260a0: 01420174 movhi r5,2053
80260a4: 2967c304 addi r5,r5,-24820
80260a8: e13ffe17 ldw r4,-8(fp)
80260ac: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Tx ] IGMPv1 Host Membership Reports sent: %lu\n", igmpstats.igmp_v1_reports_sent);
80260b0: 008201b4 movhi r2,2054
80260b4: 10b78a17 ldw r2,-8664(r2)
80260b8: 100d883a mov r6,r2
80260bc: 01420174 movhi r5,2053
80260c0: 2967d604 addi r5,r5,-24744
80260c4: e13ffe17 ldw r4,-8(fp)
80260c8: 80273900 call 8027390 <ns_printf>
/* error statistics */
ns_printf (pio, "[Err] IGMP packets rcvd with bad length: %lu\n", igmpstats.igmp_badlen_rcvd);
80260cc: 008201b4 movhi r2,2054
80260d0: 10b77e17 ldw r2,-8712(r2)
80260d4: 100d883a mov r6,r2
80260d8: 01420174 movhi r5,2053
80260dc: 2967e204 addi r5,r5,-24696
80260e0: e13ffe17 ldw r4,-8(fp)
80260e4: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] IGMP packets rcvd with bad checksum: %lu\n", igmpstats.igmp_badsum_rcvd);
80260e8: 008201b4 movhi r2,2054
80260ec: 10b77f17 ldw r2,-8708(r2)
80260f0: 100d883a mov r6,r2
80260f4: 01420174 movhi r5,2053
80260f8: 2967ee04 addi r5,r5,-24648
80260fc: e13ffe17 ldw r4,-8(fp)
8026100: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] Packet buffer allocation failures: %lu, Bad IGMP Oper Mode config: %lu\n",igmpstats.igmp_pkt_alloc_fail, igmpstats.igmp_bad_oper_mode);
8026104: 008201b4 movhi r2,2054
8026108: 10f78017 ldw r3,-8704(r2)
802610c: 008201b4 movhi r2,2054
8026110: 10b78117 ldw r2,-8700(r2)
8026114: 100f883a mov r7,r2
8026118: 180d883a mov r6,r3
802611c: 01420174 movhi r5,2053
8026120: 2967fa04 addi r5,r5,-24600
8026124: e13ffe17 ldw r4,-8(fp)
8026128: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] Bad IGMP Queries rcvd: %lu, Bad IGMP Reports rcvd: %lu\n", igmpstats.igmp_bad_queries_rcvd, igmpstats.igmp_bad_reports_rcvd);
802612c: 008201b4 movhi r2,2054
8026130: 10f78217 ldw r3,-8696(r2)
8026134: 008201b4 movhi r2,2054
8026138: 10b78317 ldw r2,-8692(r2)
802613c: 100f883a mov r7,r2
8026140: 180d883a mov r6,r3
8026144: 01420174 movhi r5,2053
8026148: 29680e04 addi r5,r5,-24520
802614c: e13ffe17 ldw r4,-8(fp)
8026150: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] Bad IGMPv2 Group-Specific Queries rcvd: %lu\n", igmpstats.igmpv2mode_v2_bad_grp_specific_queries_rcvd);
8026154: 008201b4 movhi r2,2054
8026158: 10b78517 ldw r2,-8684(r2)
802615c: 100d883a mov r6,r2
8026160: 01420174 movhi r5,2053
8026164: 29681e04 addi r5,r5,-24456
8026168: e13ffe17 ldw r4,-8(fp)
802616c: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] IGMPv2 Group-Specific Queries rcvd with unknown Group Address: %lu\n", igmpstats.igmpv2mode_v2_unknown_grp_specific_queries_rcvd);
8026170: 008201b4 movhi r2,2054
8026174: 10b78617 ldw r2,-8680(r2)
8026178: 100d883a mov r6,r2
802617c: 01420174 movhi r5,2053
8026180: 29682b04 addi r5,r5,-24404
8026184: e13ffe17 ldw r4,-8(fp)
8026188: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] IGMP Membership Reports rcvd with unknown Group Address: %lu\n", igmpstats.igmpv2mode_v12_unknown_grp_reports_rcvd);
802618c: 008201b4 movhi r2,2054
8026190: 10b78717 ldw r2,-8676(r2)
8026194: 100d883a mov r6,r2
8026198: 01420174 movhi r5,2053
802619c: 29683e04 addi r5,r5,-24328
80261a0: e13ffe17 ldw r4,-8(fp)
80261a4: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] Number of IGMPv2 messages rcvd without Router Alert option: %lu\n", igmpstats.igmpv2mode_v2_rtr_alert_missing);
80261a8: 008201b4 movhi r2,2054
80261ac: 10b78817 ldw r2,-8672(r2)
80261b0: 100d883a mov r6,r2
80261b4: 01420174 movhi r5,2053
80261b8: 29684f04 addi r5,r5,-24260
80261bc: e13ffe17 ldw r4,-8(fp)
80261c0: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] IGMP packets of unknown type rcvd by v1-mode links: %lu\n", igmpstats.igmpv1mode_unknown_pkttype);
80261c4: 008201b4 movhi r2,2054
80261c8: 10b78417 ldw r2,-8688(r2)
80261cc: 100d883a mov r6,r2
80261d0: 01420174 movhi r5,2053
80261d4: 29686104 addi r5,r5,-24188
80261d8: e13ffe17 ldw r4,-8(fp)
80261dc: 80273900 call 8027390 <ns_printf>
ns_printf (pio, "[Err] IGMP packets of unknown type rcvd by v2-mode links: %lu\n", igmpstats.igmpv2mode_unknown_pkttype);
80261e0: 008201b4 movhi r2,2054
80261e4: 10b78917 ldw r2,-8668(r2)
80261e8: 100d883a mov r6,r2
80261ec: 01420174 movhi r5,2053
80261f0: 29687104 addi r5,r5,-24124
80261f4: e13ffe17 ldw r4,-8(fp)
80261f8: 80273900 call 8027390 <ns_printf>
return IGMP_OK;
80261fc: 0005883a mov r2,zero
}
8026200: e037883a mov sp,fp
8026204: dfc00117 ldw ra,4(sp)
8026208: df000017 ldw fp,0(sp)
802620c: dec00204 addi sp,sp,8
8026210: f800283a ret
08026214 <bsd_accept>:
* The error is available via bsd_errno(s).
*/
BSD_SOCKET
bsd_accept(BSD_SOCKET s,
struct sockaddr * addr, int * addrlen)
{
8026214: defff404 addi sp,sp,-48
8026218: dfc00b15 stw ra,44(sp)
802621c: df000a15 stw fp,40(sp)
8026220: df000a04 addi fp,sp,40
8026224: e13ff815 stw r4,-32(fp)
8026228: e17ff715 stw r5,-36(fp)
802622c: e1bff615 stw r6,-40(fp)
struct socket * so;
struct sockaddr laddr;
long lret;
so = LONG2SO(s);
8026230: e0bff817 ldw r2,-32(fp)
8026234: 10bffc04 addi r2,r2,-16
8026238: 100490ba slli r2,r2,2
802623c: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
8026240: 008201b4 movhi r2,2054
8026244: 10b87104 addi r2,r2,-7740
8026248: e0bfff15 stw r2,-4(fp)
802624c: 00000606 br 8026268 <bsd_accept+0x54>
8026250: e0ffff17 ldw r3,-4(fp)
8026254: e0bffe17 ldw r2,-8(fp)
8026258: 18800626 beq r3,r2,8026274 <bsd_accept+0x60>
802625c: e0bfff17 ldw r2,-4(fp)
8026260: 10800017 ldw r2,0(r2)
8026264: e0bfff15 stw r2,-4(fp)
8026268: e0bfff17 ldw r2,-4(fp)
802626c: 103ff81e bne r2,zero,8026250 <bsd_accept+0x3c>
8026270: 00000106 br 8026278 <bsd_accept+0x64>
8026274: 0001883a nop
8026278: e0ffff17 ldw r3,-4(fp)
802627c: e0bffe17 ldw r2,-8(fp)
8026280: 18800326 beq r3,r2,8026290 <bsd_accept+0x7c>
8026284: 8028cd40 call 8028cd4 <dtrap>
8026288: 00bfffc4 movi r2,-1
802628c: 00002406 br 8026320 <bsd_accept+0x10c>
/* if we were given a buffer for the peer's address, also get the
* buffer's length
*/
if (addr != NULL)
8026290: e0bff717 ldw r2,-36(fp)
8026294: 10000726 beq r2,zero,80262b4 <bsd_accept+0xa0>
{
if (addrlen == 0)
8026298: e0bff617 ldw r2,-40(fp)
802629c: 1000051e bne r2,zero,80262b4 <bsd_accept+0xa0>
{
so->so_error = EFAULT;
80262a0: e0bffe17 ldw r2,-8(fp)
80262a4: 00c00384 movi r3,14
80262a8: 10c00615 stw r3,24(r2)
return -1;
80262ac: 00bfffc4 movi r2,-1
80262b0: 00001b06 br 8026320 <bsd_accept+0x10c>
}
}
lret = t_accept(s, &laddr, addrlen);
80262b4: e0bff904 addi r2,fp,-28
80262b8: e1bff617 ldw r6,-40(fp)
80262bc: 100b883a mov r5,r2
80262c0: e13ff817 ldw r4,-32(fp)
80262c4: 802bd240 call 802bd24 <t_accept>
80262c8: e0bffd15 stw r2,-12(fp)
* address: copy the peer's address back into the buffer, but limit
* the copy to the lesser of the buffer's length and sizeof(struct
* sockaddr_in), which is all that t_accept() can return as a peer
* address.
*/
if ((lret != -1) && (addr != NULL))
80262cc: e0bffd17 ldw r2,-12(fp)
80262d0: 10bfffe0 cmpeqi r2,r2,-1
80262d4: 1000111e bne r2,zero,802631c <bsd_accept+0x108>
80262d8: e0bff717 ldw r2,-36(fp)
80262dc: 10000f26 beq r2,zero,802631c <bsd_accept+0x108>
{
if (*addrlen > sizeof(struct sockaddr_in))
80262e0: e0bff617 ldw r2,-40(fp)
80262e4: 10800017 ldw r2,0(r2)
80262e8: 10800470 cmpltui r2,r2,17
80262ec: 1000031e bne r2,zero,80262fc <bsd_accept+0xe8>
*addrlen = sizeof(struct sockaddr_in);
80262f0: e0bff617 ldw r2,-40(fp)
80262f4: 00c00404 movi r3,16
80262f8: 10c00015 stw r3,0(r2)
MEMCPY(addr, &laddr, *addrlen);
80262fc: e0bff617 ldw r2,-40(fp)
8026300: 10800017 ldw r2,0(r2)
8026304: 1007883a mov r3,r2
8026308: e0bff904 addi r2,fp,-28
802630c: 180d883a mov r6,r3
8026310: 100b883a mov r5,r2
8026314: e13ff717 ldw r4,-36(fp)
8026318: 80086b80 call 80086b8 <memcpy>
}
return lret;
802631c: e0bffd17 ldw r2,-12(fp)
}
8026320: e037883a mov sp,fp
8026324: dfc00117 ldw ra,4(sp)
8026328: df000017 ldw fp,0(sp)
802632c: dec00204 addi sp,sp,8
8026330: f800283a ret
08026334 <bsd_getpeername>:
* available via bsd_errno(s).
*/
int
bsd_getpeername(BSD_SOCKET s,
struct sockaddr * name, int * namelen)
{
8026334: defff304 addi sp,sp,-52
8026338: dfc00c15 stw ra,48(sp)
802633c: df000b15 stw fp,44(sp)
8026340: df000b04 addi fp,sp,44
8026344: e13ff715 stw r4,-36(fp)
8026348: e17ff615 stw r5,-40(fp)
802634c: e1bff515 stw r6,-44(fp)
struct socket * so;
struct sockaddr lname;
int lnamelen;
int lret;
so = LONG2SO(s);
8026350: e0bff717 ldw r2,-36(fp)
8026354: 10bffc04 addi r2,r2,-16
8026358: 100490ba slli r2,r2,2
802635c: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
8026360: 008201b4 movhi r2,2054
8026364: 10b87104 addi r2,r2,-7740
8026368: e0bfff15 stw r2,-4(fp)
802636c: 00000606 br 8026388 <bsd_getpeername+0x54>
8026370: e0ffff17 ldw r3,-4(fp)
8026374: e0bffe17 ldw r2,-8(fp)
8026378: 18800626 beq r3,r2,8026394 <bsd_getpeername+0x60>
802637c: e0bfff17 ldw r2,-4(fp)
8026380: 10800017 ldw r2,0(r2)
8026384: e0bfff15 stw r2,-4(fp)
8026388: e0bfff17 ldw r2,-4(fp)
802638c: 103ff81e bne r2,zero,8026370 <bsd_getpeername+0x3c>
8026390: 00000106 br 8026398 <bsd_getpeername+0x64>
8026394: 0001883a nop
8026398: e0ffff17 ldw r3,-4(fp)
802639c: e0bffe17 ldw r2,-8(fp)
80263a0: 18800326 beq r3,r2,80263b0 <bsd_getpeername+0x7c>
80263a4: 8028cd40 call 8028cd4 <dtrap>
80263a8: 00bfffc4 movi r2,-1
80263ac: 00002406 br 8026440 <bsd_getpeername+0x10c>
/* if the buffer length is bogus, fail */
if (namelen == NULL)
80263b0: e0bff517 ldw r2,-44(fp)
80263b4: 1000051e bne r2,zero,80263cc <bsd_getpeername+0x98>
{
so->so_error = EFAULT;
80263b8: e0bffe17 ldw r2,-8(fp)
80263bc: 00c00384 movi r3,14
80263c0: 10c00615 stw r3,24(r2)
return -1;
80263c4: 00bfffc4 movi r2,-1
80263c8: 00001d06 br 8026440 <bsd_getpeername+0x10c>
}
lnamelen = *namelen;
80263cc: e0bff517 ldw r2,-44(fp)
80263d0: 10800017 ldw r2,0(r2)
80263d4: e0bff815 stw r2,-32(fp)
lret = t_getpeername(s, &lname, &lnamelen);
80263d8: e0fff804 addi r3,fp,-32
80263dc: e0bff904 addi r2,fp,-28
80263e0: 180d883a mov r6,r3
80263e4: 100b883a mov r5,r2
80263e8: e13ff717 ldw r4,-36(fp)
80263ec: 802c1e40 call 802c1e4 <t_getpeername>
80263f0: e0bffd15 stw r2,-12(fp)
* t_getpeername() can return as a peer address, and pass the
* copied length back to the caller.
* For IPV6 addresses, or for dual IPV4/IPV6 stack,
* the max size is sizeof(struct sockaddr_in6)
*/
if (lret != -1)
80263f4: e0bffd17 ldw r2,-12(fp)
80263f8: 10bfffe0 cmpeqi r2,r2,-1
80263fc: 10000f1e bne r2,zero,802643c <bsd_getpeername+0x108>
{
#ifndef IP_V6
if (lnamelen > sizeof(struct sockaddr_in))
8026400: e0bff817 ldw r2,-32(fp)
8026404: 10800470 cmpltui r2,r2,17
8026408: 1000021e bne r2,zero,8026414 <bsd_getpeername+0xe0>
lnamelen = sizeof(struct sockaddr_in);
802640c: 00800404 movi r2,16
8026410: e0bff815 stw r2,-32(fp)
#else
if (lnamelen > sizeof(struct sockaddr_in6))
lnamelen = sizeof(struct sockaddr_in6);
#endif
MEMCPY(name, &lname, lnamelen);
8026414: e0bff817 ldw r2,-32(fp)
8026418: 1007883a mov r3,r2
802641c: e0bff904 addi r2,fp,-28
8026420: 180d883a mov r6,r3
8026424: 100b883a mov r5,r2
8026428: e13ff617 ldw r4,-40(fp)
802642c: 80086b80 call 80086b8 <memcpy>
*namelen = lnamelen;
8026430: e0fff817 ldw r3,-32(fp)
8026434: e0bff517 ldw r2,-44(fp)
8026438: 10c00015 stw r3,0(r2)
}
return lret;
802643c: e0bffd17 ldw r2,-12(fp)
}
8026440: e037883a mov sp,fp
8026444: dfc00117 ldw ra,4(sp)
8026448: df000017 ldw fp,0(sp)
802644c: dec00204 addi sp,sp,8
8026450: f800283a ret
08026454 <bsd_getsockname>:
* available via bsd_errno(s).
*/
int
bsd_getsockname(BSD_SOCKET s,
struct sockaddr * name, int * namelen)
{
8026454: defff304 addi sp,sp,-52
8026458: dfc00c15 stw ra,48(sp)
802645c: df000b15 stw fp,44(sp)
8026460: df000b04 addi fp,sp,44
8026464: e13ff715 stw r4,-36(fp)
8026468: e17ff615 stw r5,-40(fp)
802646c: e1bff515 stw r6,-44(fp)
struct socket * so;
struct sockaddr lname;
int lnamelen;
int lret;
so = LONG2SO(s);
8026470: e0bff717 ldw r2,-36(fp)
8026474: 10bffc04 addi r2,r2,-16
8026478: 100490ba slli r2,r2,2
802647c: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
8026480: 008201b4 movhi r2,2054
8026484: 10b87104 addi r2,r2,-7740
8026488: e0bfff15 stw r2,-4(fp)
802648c: 00000606 br 80264a8 <bsd_getsockname+0x54>
8026490: e0ffff17 ldw r3,-4(fp)
8026494: e0bffe17 ldw r2,-8(fp)
8026498: 18800626 beq r3,r2,80264b4 <bsd_getsockname+0x60>
802649c: e0bfff17 ldw r2,-4(fp)
80264a0: 10800017 ldw r2,0(r2)
80264a4: e0bfff15 stw r2,-4(fp)
80264a8: e0bfff17 ldw r2,-4(fp)
80264ac: 103ff81e bne r2,zero,8026490 <bsd_getsockname+0x3c>
80264b0: 00000106 br 80264b8 <bsd_getsockname+0x64>
80264b4: 0001883a nop
80264b8: e0ffff17 ldw r3,-4(fp)
80264bc: e0bffe17 ldw r2,-8(fp)
80264c0: 18800326 beq r3,r2,80264d0 <bsd_getsockname+0x7c>
80264c4: 8028cd40 call 8028cd4 <dtrap>
80264c8: 00bfffc4 movi r2,-1
80264cc: 00002406 br 8026560 <bsd_getsockname+0x10c>
/* if the buffer length is bogus, fail */
if (namelen == NULL)
80264d0: e0bff517 ldw r2,-44(fp)
80264d4: 1000051e bne r2,zero,80264ec <bsd_getsockname+0x98>
{
so->so_error = EFAULT;
80264d8: e0bffe17 ldw r2,-8(fp)
80264dc: 00c00384 movi r3,14
80264e0: 10c00615 stw r3,24(r2)
return -1;
80264e4: 00bfffc4 movi r2,-1
80264e8: 00001d06 br 8026560 <bsd_getsockname+0x10c>
}
lnamelen = *namelen;
80264ec: e0bff517 ldw r2,-44(fp)
80264f0: 10800017 ldw r2,0(r2)
80264f4: e0bff815 stw r2,-32(fp)
lret = t_getsockname(s, &lname, &lnamelen);
80264f8: e0fff804 addi r3,fp,-32
80264fc: e0bff904 addi r2,fp,-28
8026500: 180d883a mov r6,r3
8026504: 100b883a mov r5,r2
8026508: e13ff717 ldw r4,-36(fp)
802650c: 802c2280 call 802c228 <t_getsockname>
8026510: e0bffd15 stw r2,-12(fp)
* copied length back to the caller.
* For IPV6 addresses, or for a dual IPV4/IPV6 stack,
* the max size copied is sizeof(struct sockaddr_in6)
*
*/
if (lret != -1)
8026514: e0bffd17 ldw r2,-12(fp)
8026518: 10bfffe0 cmpeqi r2,r2,-1
802651c: 10000f1e bne r2,zero,802655c <bsd_getsockname+0x108>
{
#ifndef IP_V6
if (lnamelen > sizeof(struct sockaddr_in))
8026520: e0bff817 ldw r2,-32(fp)
8026524: 10800470 cmpltui r2,r2,17
8026528: 1000021e bne r2,zero,8026534 <bsd_getsockname+0xe0>
lnamelen = sizeof(struct sockaddr_in);
802652c: 00800404 movi r2,16
8026530: e0bff815 stw r2,-32(fp)
#else
if (lnamelen > sizeof(struct sockaddr_in6))
lnamelen = sizeof(struct sockaddr_in6);
#endif
MEMCPY(name, &lname, lnamelen);
8026534: e0bff817 ldw r2,-32(fp)
8026538: 1007883a mov r3,r2
802653c: e0bff904 addi r2,fp,-28
8026540: 180d883a mov r6,r3
8026544: 100b883a mov r5,r2
8026548: e13ff617 ldw r4,-40(fp)
802654c: 80086b80 call 80086b8 <memcpy>
*namelen = lnamelen;
8026550: e0fff817 ldw r3,-32(fp)
8026554: e0bff517 ldw r2,-44(fp)
8026558: 10c00015 stw r3,0(r2)
}
return lret;
802655c: e0bffd17 ldw r2,-12(fp)
}
8026560: e037883a mov sp,fp
8026564: dfc00117 ldw ra,4(sp)
8026568: df000017 ldw fp,0(sp)
802656c: dec00204 addi sp,sp,8
8026570: f800283a ret
08026574 <bsd_i_sockoptlen>:
* RETURNS: minimum length of the named socket option, in bytes
*/
int
bsd_i_sockoptlen(int level,
int name)
{
8026574: defffd04 addi sp,sp,-12
8026578: df000215 stw fp,8(sp)
802657c: df000204 addi fp,sp,8
8026580: e13fff15 stw r4,-4(fp)
8026584: e17ffe15 stw r5,-8(fp)
USE_ARG(level);
switch (name)
8026588: e0bffe17 ldw r2,-8(fp)
802658c: 10802020 cmpeqi r2,r2,128
8026590: 1000491e bne r2,zero,80266b8 <bsd_i_sockoptlen+0x144>
8026594: e0bffe17 ldw r2,-8(fp)
8026598: 10802048 cmpgei r2,r2,129
802659c: 1000251e bne r2,zero,8026634 <bsd_i_sockoptlen+0xc0>
80265a0: e0bffe17 ldw r2,-8(fp)
80265a4: 10800308 cmpgei r2,r2,12
80265a8: 1000141e bne r2,zero,80265fc <bsd_i_sockoptlen+0x88>
80265ac: e0bffe17 ldw r2,-8(fp)
80265b0: 10800288 cmpgei r2,r2,10
80265b4: 1000481e bne r2,zero,80266d8 <bsd_i_sockoptlen+0x164>
80265b8: e0bffe17 ldw r2,-8(fp)
80265bc: 10800120 cmpeqi r2,r2,4
80265c0: 1000411e bne r2,zero,80266c8 <bsd_i_sockoptlen+0x154>
80265c4: e0bffe17 ldw r2,-8(fp)
80265c8: 10800148 cmpgei r2,r2,5
80265cc: 1000041e bne r2,zero,80265e0 <bsd_i_sockoptlen+0x6c>
80265d0: e0bffe17 ldw r2,-8(fp)
80265d4: 108000e0 cmpeqi r2,r2,3
80265d8: 1000431e bne r2,zero,80266e8 <bsd_i_sockoptlen+0x174>
80265dc: 00004406 br 80266f0 <bsd_i_sockoptlen+0x17c>
80265e0: e0bffe17 ldw r2,-8(fp)
80265e4: 10800220 cmpeqi r2,r2,8
80265e8: 1000371e bne r2,zero,80266c8 <bsd_i_sockoptlen+0x154>
80265ec: e0bffe17 ldw r2,-8(fp)
80265f0: 10800260 cmpeqi r2,r2,9
80265f4: 1000361e bne r2,zero,80266d0 <bsd_i_sockoptlen+0x15c>
80265f8: 00003d06 br 80266f0 <bsd_i_sockoptlen+0x17c>
80265fc: e0bffe17 ldw r2,-8(fp)
8026600: 10800420 cmpeqi r2,r2,16
8026604: 1000301e bne r2,zero,80266c8 <bsd_i_sockoptlen+0x154>
8026608: e0bffe17 ldw r2,-8(fp)
802660c: 10800448 cmpgei r2,r2,17
8026610: 1000041e bne r2,zero,8026624 <bsd_i_sockoptlen+0xb0>
8026614: e0bffe17 ldw r2,-8(fp)
8026618: 10800388 cmpgei r2,r2,14
802661c: 1000341e bne r2,zero,80266f0 <bsd_i_sockoptlen+0x17c>
8026620: 00002f06 br 80266e0 <bsd_i_sockoptlen+0x16c>
8026624: e0bffe17 ldw r2,-8(fp)
8026628: 10800820 cmpeqi r2,r2,32
802662c: 1000261e bne r2,zero,80266c8 <bsd_i_sockoptlen+0x154>
8026630: 00002f06 br 80266f0 <bsd_i_sockoptlen+0x17c>
8026634: e0bffe17 ldw r2,-8(fp)
8026638: 108401c8 cmpgei r2,r2,4103
802663c: 10000e1e bne r2,zero,8026678 <bsd_i_sockoptlen+0x104>
8026640: e0bffe17 ldw r2,-8(fp)
8026644: 10840148 cmpgei r2,r2,4101
8026648: 10001d1e bne r2,zero,80266c0 <bsd_i_sockoptlen+0x14c>
802664c: e0bffe17 ldw r2,-8(fp)
8026650: 10804020 cmpeqi r2,r2,256
8026654: 10001c1e bne r2,zero,80266c8 <bsd_i_sockoptlen+0x154>
8026658: e0bffe17 ldw r2,-8(fp)
802665c: 10804010 cmplti r2,r2,256
8026660: 1000231e bne r2,zero,80266f0 <bsd_i_sockoptlen+0x17c>
8026664: e0bffe17 ldw r2,-8(fp)
8026668: 10bbffc4 addi r2,r2,-4097
802666c: 108000a8 cmpgeui r2,r2,2
8026670: 10001f1e bne r2,zero,80266f0 <bsd_i_sockoptlen+0x17c>
8026674: 00001406 br 80266c8 <bsd_i_sockoptlen+0x154>
8026678: e0bffe17 ldw r2,-8(fp)
802667c: 10840588 cmpgei r2,r2,4118
8026680: 1000071e bne r2,zero,80266a0 <bsd_i_sockoptlen+0x12c>
8026684: e0bffe17 ldw r2,-8(fp)
8026688: 10840508 cmpgei r2,r2,4116
802668c: 1000081e bne r2,zero,80266b0 <bsd_i_sockoptlen+0x13c>
8026690: e0bffe17 ldw r2,-8(fp)
8026694: 10840248 cmpgei r2,r2,4105
8026698: 1000151e bne r2,zero,80266f0 <bsd_i_sockoptlen+0x17c>
802669c: 00000a06 br 80266c8 <bsd_i_sockoptlen+0x154>
80266a0: e0bffe17 ldw r2,-8(fp)
80266a4: 108405a0 cmpeqi r2,r2,4118
80266a8: 1000071e bne r2,zero,80266c8 <bsd_i_sockoptlen+0x154>
80266ac: 00001006 br 80266f0 <bsd_i_sockoptlen+0x17c>
{
case SO_BIO:
case SO_NBIO:
/* these don't use an option value */
return 0;
80266b0: 0005883a mov r2,zero
80266b4: 00000f06 br 80266f4 <bsd_i_sockoptlen+0x180>
case SO_LINGER:
/* this option is a struct linger */
return sizeof(struct linger);
80266b8: 00800204 movi r2,8
80266bc: 00000d06 br 80266f4 <bsd_i_sockoptlen+0x180>
case SO_RCVTIMEO:
case SO_SNDTIMEO:
/* these options are type short */
return sizeof(short);
80266c0: 00800084 movi r2,2
80266c4: 00000b06 br 80266f4 <bsd_i_sockoptlen+0x180>
case SO_RCVBUF:
case SO_NONBLOCK:
case SO_ERROR:
case SO_TYPE:
/* these options are type int */
return sizeof(int);
80266c8: 00800104 movi r2,4
80266cc: 00000906 br 80266f4 <bsd_i_sockoptlen+0x180>
return sizeof(int (*)());
#endif /* TCP_ZEROCOPY */
#ifdef IP_MULTICAST
case IP_MULTICAST_IF:
/* this option is type ip_addr */
return sizeof(ip_addr);
80266d0: 00800104 movi r2,4
80266d4: 00000706 br 80266f4 <bsd_i_sockoptlen+0x180>
case IP_MULTICAST_TTL:
case IP_MULTICAST_LOOP:
/* these options are type u_char */
return sizeof(u_char);
80266d8: 00800044 movi r2,1
80266dc: 00000506 br 80266f4 <bsd_i_sockoptlen+0x180>
case IP_ADD_MEMBERSHIP:
case IP_DROP_MEMBERSHIP:
/* these options are struct ip_mreq */
return sizeof(struct ip_mreq);
80266e0: 00800204 movi r2,8
80266e4: 00000306 br 80266f4 <bsd_i_sockoptlen+0x180>
* IP_TTL_OPT == SOREUSEADDR. This causes a build erro
* due to duplicate cases. Removing this one. They both
* return the same value (sizeof(int)).
*/
// case IP_TTL_OPT:
return sizeof(int);
80266e8: 00800104 movi r2,4
80266ec: 00000106 br 80266f4 <bsd_i_sockoptlen+0x180>
default:
/* we don't know what type these options are */
return 0;
80266f0: 0005883a mov r2,zero
}
}
80266f4: e037883a mov sp,fp
80266f8: df000017 ldw fp,0(sp)
80266fc: dec00104 addi sp,sp,4
8026700: f800283a ret
08026704 <bsd_getsockopt>:
int
bsd_getsockopt(BSD_SOCKET s,
int level,
int name,
void * opt, int * optlen)
{
8026704: defff504 addi sp,sp,-44
8026708: dfc00a15 stw ra,40(sp)
802670c: df000915 stw fp,36(sp)
8026710: df000904 addi fp,sp,36
8026714: e13ffb15 stw r4,-20(fp)
8026718: e17ffa15 stw r5,-24(fp)
802671c: e1bff915 stw r6,-28(fp)
8026720: e1fff815 stw r7,-32(fp)
struct socket * so;
int loptlen;
int e;
so = LONG2SO(s);
8026724: e0bffb17 ldw r2,-20(fp)
8026728: 10bffc04 addi r2,r2,-16
802672c: 100490ba slli r2,r2,2
8026730: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
8026734: 008201b4 movhi r2,2054
8026738: 10b87104 addi r2,r2,-7740
802673c: e0bfff15 stw r2,-4(fp)
8026740: 00000606 br 802675c <bsd_getsockopt+0x58>
8026744: e0ffff17 ldw r3,-4(fp)
8026748: e0bffe17 ldw r2,-8(fp)
802674c: 18800626 beq r3,r2,8026768 <bsd_getsockopt+0x64>
8026750: e0bfff17 ldw r2,-4(fp)
8026754: 10800017 ldw r2,0(r2)
8026758: e0bfff15 stw r2,-4(fp)
802675c: e0bfff17 ldw r2,-4(fp)
8026760: 103ff81e bne r2,zero,8026744 <bsd_getsockopt+0x40>
8026764: 00000106 br 802676c <bsd_getsockopt+0x68>
8026768: 0001883a nop
802676c: e0ffff17 ldw r3,-4(fp)
8026770: e0bffe17 ldw r2,-8(fp)
8026774: 18800326 beq r3,r2,8026784 <bsd_getsockopt+0x80>
8026778: 8028cd40 call 8028cd4 <dtrap>
802677c: 00bfffc4 movi r2,-1
8026780: 00001d06 br 80267f8 <bsd_getsockopt+0xf4>
/* make sure supplied option value is big enough for the
* named option, else fail w/error EFAULT
*/
loptlen = bsd_i_sockoptlen(level, name);
8026784: e17ff917 ldw r5,-28(fp)
8026788: e13ffa17 ldw r4,-24(fp)
802678c: 80265740 call 8026574 <bsd_i_sockoptlen>
8026790: e0bffd15 stw r2,-12(fp)
if ((optlen == NULL) || (*optlen < loptlen))
8026794: e0800217 ldw r2,8(fp)
8026798: 10000426 beq r2,zero,80267ac <bsd_getsockopt+0xa8>
802679c: e0800217 ldw r2,8(fp)
80267a0: 10c00017 ldw r3,0(r2)
80267a4: e0bffd17 ldw r2,-12(fp)
80267a8: 1880050e bge r3,r2,80267c0 <bsd_getsockopt+0xbc>
{
so->so_error = EFAULT;
80267ac: e0bffe17 ldw r2,-8(fp)
80267b0: 00c00384 movi r3,14
80267b4: 10c00615 stw r3,24(r2)
return -1;
80267b8: 00bfffc4 movi r2,-1
80267bc: 00000e06 br 80267f8 <bsd_getsockopt+0xf4>
}
e = t_getsockopt(s, level, name, opt, loptlen);
80267c0: e0bffd17 ldw r2,-12(fp)
80267c4: d8800015 stw r2,0(sp)
80267c8: e1fff817 ldw r7,-32(fp)
80267cc: e1bff917 ldw r6,-28(fp)
80267d0: e17ffa17 ldw r5,-24(fp)
80267d4: e13ffb17 ldw r4,-20(fp)
80267d8: 802c60c0 call 802c60c <t_getsockopt>
80267dc: e0bffc15 stw r2,-16(fp)
/* if it worked, copy the option length back for the caller's use */
if (e == 0)
80267e0: e0bffc17 ldw r2,-16(fp)
80267e4: 1000031e bne r2,zero,80267f4 <bsd_getsockopt+0xf0>
{
*optlen = loptlen;
80267e8: e0800217 ldw r2,8(fp)
80267ec: e0fffd17 ldw r3,-12(fp)
80267f0: 10c00015 stw r3,0(r2)
}
return e;
80267f4: e0bffc17 ldw r2,-16(fp)
}
80267f8: e037883a mov sp,fp
80267fc: dfc00117 ldw ra,4(sp)
8026800: df000017 ldw fp,0(sp)
8026804: dec00204 addi sp,sp,8
8026808: f800283a ret
0802680c <bsd_ioctl>:
* available via bsd_errno(s).
*/
int
bsd_ioctl(BSD_SOCKET s,
unsigned long request, ...)
{
802680c: defff504 addi sp,sp,-44
8026810: dfc00815 stw ra,32(sp)
8026814: df000715 stw fp,28(sp)
8026818: df000704 addi fp,sp,28
802681c: e13ffb15 stw r4,-20(fp)
8026820: e17ffa15 stw r5,-24(fp)
8026824: e1800215 stw r6,8(fp)
8026828: e1c00315 stw r7,12(fp)
struct socket * so;
va_list argptr;
int iarg;
so = LONG2SO(s);
802682c: e0bffb17 ldw r2,-20(fp)
8026830: 10bffc04 addi r2,r2,-16
8026834: 100490ba slli r2,r2,2
8026838: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802683c: 008201b4 movhi r2,2054
8026840: 10b87104 addi r2,r2,-7740
8026844: e0bfff15 stw r2,-4(fp)
8026848: 00000606 br 8026864 <bsd_ioctl+0x58>
802684c: e0ffff17 ldw r3,-4(fp)
8026850: e0bffe17 ldw r2,-8(fp)
8026854: 18800626 beq r3,r2,8026870 <bsd_ioctl+0x64>
8026858: e0bfff17 ldw r2,-4(fp)
802685c: 10800017 ldw r2,0(r2)
8026860: e0bfff15 stw r2,-4(fp)
8026864: e0bfff17 ldw r2,-4(fp)
8026868: 103ff81e bne r2,zero,802684c <bsd_ioctl+0x40>
802686c: 00000106 br 8026874 <bsd_ioctl+0x68>
8026870: 0001883a nop
8026874: e0ffff17 ldw r3,-4(fp)
8026878: e0bffe17 ldw r2,-8(fp)
802687c: 18800326 beq r3,r2,802688c <bsd_ioctl+0x80>
8026880: 8028cd40 call 8028cd4 <dtrap>
8026884: 00bfffc4 movi r2,-1
8026888: 00001706 br 80268e8 <bsd_ioctl+0xdc>
va_start(argptr, request);
802688c: e0800204 addi r2,fp,8
8026890: e0bffd15 stw r2,-12(fp)
switch (request)
8026894: e0bffa17 ldw r2,-24(fp)
8026898: 10840598 cmpnei r2,r2,4118
802689c: 10000e1e bne r2,zero,80268d8 <bsd_ioctl+0xcc>
{
case FIONBIO:
iarg = va_arg(argptr, int);
80268a0: e0bffd17 ldw r2,-12(fp)
80268a4: 10c00104 addi r3,r2,4
80268a8: e0fffd15 stw r3,-12(fp)
80268ac: 10800017 ldw r2,0(r2)
80268b0: e0bffc15 stw r2,-16(fp)
va_end(argptr);
return t_setsockopt(s, SOL_SOCKET, SO_NONBLOCK, &iarg, sizeof(iarg));
80268b4: e0fffc04 addi r3,fp,-16
80268b8: 00800104 movi r2,4
80268bc: d8800015 stw r2,0(sp)
80268c0: 180f883a mov r7,r3
80268c4: 01840584 movi r6,4118
80268c8: 017fffc4 movi r5,-1
80268cc: e13ffb17 ldw r4,-20(fp)
80268d0: 802c44c0 call 802c44c <t_setsockopt>
80268d4: 00000406 br 80268e8 <bsd_ioctl+0xdc>
default:
so->so_error = EINVAL;
80268d8: e0bffe17 ldw r2,-8(fp)
80268dc: 00c00584 movi r3,22
80268e0: 10c00615 stw r3,24(r2)
return -1;
80268e4: 00bfffc4 movi r2,-1
}
}
80268e8: e037883a mov sp,fp
80268ec: dfc00117 ldw ra,4(sp)
80268f0: df000017 ldw fp,0(sp)
80268f4: dec00404 addi sp,sp,16
80268f8: f800283a ret
080268fc <bsd_inet_ntoa>:
* RETURNS: pointer to null-terminated string containing dotted-decimal
* printable representation of in
*/
char *
bsd_inet_ntoa(struct in_addr in)
{
80268fc: defffd04 addi sp,sp,-12
8026900: dfc00215 stw ra,8(sp)
8026904: df000115 stw fp,4(sp)
8026908: df000104 addi fp,sp,4
802690c: e13fff15 stw r4,-4(fp)
return print_ipad(in.s_addr);
8026910: e0bfff17 ldw r2,-4(fp)
8026914: 1009883a mov r4,r2
8026918: 8026fbc0 call 8026fbc <print_ipad>
}
802691c: e037883a mov sp,fp
8026920: dfc00117 ldw ra,4(sp)
8026924: df000017 ldw fp,0(sp)
8026928: dec00204 addi sp,sp,8
802692c: f800283a ret
08026930 <bsd_recvfrom>:
bsd_recvfrom(BSD_SOCKET s,
void * buf,
BSD_SIZE_T len,
int flags,
struct sockaddr * from, int * fromlen)
{
8026930: defff004 addi sp,sp,-64
8026934: dfc00f15 stw ra,60(sp)
8026938: df000e15 stw fp,56(sp)
802693c: df000e04 addi fp,sp,56
8026940: e13ff715 stw r4,-36(fp)
8026944: e17ff615 stw r5,-40(fp)
8026948: e1bff515 stw r6,-44(fp)
802694c: e1fff415 stw r7,-48(fp)
struct socket * so;
struct sockaddr lfrom;
int lfromlen = 0;
8026950: e03ff815 stw zero,-32(fp)
int lret;
so = LONG2SO(s);
8026954: e0bff717 ldw r2,-36(fp)
8026958: 10bffc04 addi r2,r2,-16
802695c: 100490ba slli r2,r2,2
8026960: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
8026964: 008201b4 movhi r2,2054
8026968: 10b87104 addi r2,r2,-7740
802696c: e0bfff15 stw r2,-4(fp)
8026970: 00000606 br 802698c <bsd_recvfrom+0x5c>
8026974: e0ffff17 ldw r3,-4(fp)
8026978: e0bffe17 ldw r2,-8(fp)
802697c: 18800626 beq r3,r2,8026998 <bsd_recvfrom+0x68>
8026980: e0bfff17 ldw r2,-4(fp)
8026984: 10800017 ldw r2,0(r2)
8026988: e0bfff15 stw r2,-4(fp)
802698c: e0bfff17 ldw r2,-4(fp)
8026990: 103ff81e bne r2,zero,8026974 <bsd_recvfrom+0x44>
8026994: 00000106 br 802699c <bsd_recvfrom+0x6c>
8026998: 0001883a nop
802699c: e0ffff17 ldw r3,-4(fp)
80269a0: e0bffe17 ldw r2,-8(fp)
80269a4: 18800326 beq r3,r2,80269b4 <bsd_recvfrom+0x84>
80269a8: 8028cd40 call 8028cd4 <dtrap>
80269ac: 00bfffc4 movi r2,-1
80269b0: 00002b06 br 8026a60 <bsd_recvfrom+0x130>
/* if we were given a buffer for the peer's address, also get the
* buffer's length
*/
if (from != NULL)
80269b4: e0800217 ldw r2,8(fp)
80269b8: 10000a26 beq r2,zero,80269e4 <bsd_recvfrom+0xb4>
{
if (fromlen == NULL)
80269bc: e0800317 ldw r2,12(fp)
80269c0: 1000051e bne r2,zero,80269d8 <bsd_recvfrom+0xa8>
{
so->so_error = EFAULT;
80269c4: e0bffe17 ldw r2,-8(fp)
80269c8: 00c00384 movi r3,14
80269cc: 10c00615 stw r3,24(r2)
return -1;
80269d0: 00bfffc4 movi r2,-1
80269d4: 00002206 br 8026a60 <bsd_recvfrom+0x130>
}
lfromlen = *fromlen;
80269d8: e0800317 ldw r2,12(fp)
80269dc: 10800017 ldw r2,0(r2)
80269e0: e0bff815 stw r2,-32(fp)
}
lret = t_recvfrom(s, (char *)buf, len, flags, &lfrom, &lfromlen );
80269e4: e0bff804 addi r2,fp,-32
80269e8: d8800115 stw r2,4(sp)
80269ec: e0bff904 addi r2,fp,-28
80269f0: d8800015 stw r2,0(sp)
80269f4: e1fff417 ldw r7,-48(fp)
80269f8: e1bff517 ldw r6,-44(fp)
80269fc: e17ff617 ldw r5,-40(fp)
8026a00: e13ff717 ldw r4,-36(fp)
8026a04: 802c8700 call 802c870 <t_recvfrom>
8026a08: e0bffd15 stw r2,-12(fp)
* sockaddr_in), which is all that t_recvfrom() can return as a peer
* name.
* For IPV6 addresses or dual IPV4/IPV6 stack, the max size copied
* is sizeof(struct sockaddr_in6)
*/
if ((lret != -1) && (from != NULL))
8026a0c: e0bffd17 ldw r2,-12(fp)
8026a10: 10bfffe0 cmpeqi r2,r2,-1
8026a14: 1000111e bne r2,zero,8026a5c <bsd_recvfrom+0x12c>
8026a18: e0800217 ldw r2,8(fp)
8026a1c: 10000f26 beq r2,zero,8026a5c <bsd_recvfrom+0x12c>
{
#ifndef IP_V6
if (lfromlen > sizeof(struct sockaddr_in))
8026a20: e0bff817 ldw r2,-32(fp)
8026a24: 10800470 cmpltui r2,r2,17
8026a28: 1000021e bne r2,zero,8026a34 <bsd_recvfrom+0x104>
lfromlen = sizeof(struct sockaddr_in);
8026a2c: 00800404 movi r2,16
8026a30: e0bff815 stw r2,-32(fp)
#else
if (lfromlen > sizeof(struct sockaddr_in6))
lfromlen = sizeof(struct sockaddr_in6);
#endif
MEMCPY(from, &lfrom, lfromlen);
8026a34: e0bff817 ldw r2,-32(fp)
8026a38: 1007883a mov r3,r2
8026a3c: e0bff904 addi r2,fp,-28
8026a40: 180d883a mov r6,r3
8026a44: 100b883a mov r5,r2
8026a48: e1000217 ldw r4,8(fp)
8026a4c: 80086b80 call 80086b8 <memcpy>
*fromlen = lfromlen;
8026a50: e0fff817 ldw r3,-32(fp)
8026a54: e0800317 ldw r2,12(fp)
8026a58: 10c00015 stw r3,0(r2)
}
return lret;
8026a5c: e0bffd17 ldw r2,-12(fp)
}
8026a60: e037883a mov sp,fp
8026a64: dfc00117 ldw ra,4(sp)
8026a68: df000017 ldw fp,0(sp)
8026a6c: dec00204 addi sp,sp,8
8026a70: f800283a ret
08026a74 <bsd_select>:
bsd_select(int nfds,
fd_set * readfds,
fd_set * writefds,
fd_set * exceptfds,
BSD_TIMEVAL_T * timeout)
{
8026a74: defff804 addi sp,sp,-32
8026a78: dfc00715 stw ra,28(sp)
8026a7c: df000615 stw fp,24(sp)
8026a80: df000604 addi fp,sp,24
8026a84: e13ffd15 stw r4,-12(fp)
8026a88: e17ffc15 stw r5,-16(fp)
8026a8c: e1bffb15 stw r6,-20(fp)
8026a90: e1fffa15 stw r7,-24(fp)
long ltv; /* timeout expressed in ticks */
long tps; /* local copy of TPS */
USE_ARG(nfds);
if (timeout != NULL)
8026a94: e0800217 ldw r2,8(fp)
8026a98: 10004c26 beq r2,zero,8026bcc <bsd_select+0x158>
* million (i.e. any number of microseconds up to one second).
* So we scale tv_usec from microseconds to something reasonable
* based on TPS, multiply it by TPS, then scale it the rest of
* the way to ticks-per-second.
*/
tps = TPS;
8026a9c: 00801904 movi r2,100
8026aa0: e0bffe15 stw r2,-8(fp)
if (tps >= 1000)
8026aa4: e0bffe17 ldw r2,-8(fp)
8026aa8: 1080fa10 cmplti r2,r2,1000
8026aac: 10000e1e bne r2,zero,8026ae8 <bsd_select+0x74>
{
ltv = (((timeout->tv_usec + 50) / 100) * tps) / 10000;
8026ab0: e0800217 ldw r2,8(fp)
8026ab4: 10800217 ldw r2,8(r2)
8026ab8: 10800c84 addi r2,r2,50
8026abc: 01401904 movi r5,100
8026ac0: 1009883a mov r4,r2
8026ac4: 800cf000 call 800cf00 <__divsi3>
8026ac8: 1007883a mov r3,r2
8026acc: e0bffe17 ldw r2,-8(fp)
8026ad0: 1885383a mul r2,r3,r2
8026ad4: 0149c404 movi r5,10000
8026ad8: 1009883a mov r4,r2
8026adc: 800cf000 call 800cf00 <__divsi3>
8026ae0: e0bfff15 stw r2,-4(fp)
8026ae4: 00003106 br 8026bac <bsd_select+0x138>
}
else if (tps >= 100)
8026ae8: e0bffe17 ldw r2,-8(fp)
8026aec: 10801910 cmplti r2,r2,100
8026af0: 10000e1e bne r2,zero,8026b2c <bsd_select+0xb8>
{
ltv = (((timeout->tv_usec + 500) / 1000) * tps) / 1000;
8026af4: e0800217 ldw r2,8(fp)
8026af8: 10800217 ldw r2,8(r2)
8026afc: 10807d04 addi r2,r2,500
8026b00: 0140fa04 movi r5,1000
8026b04: 1009883a mov r4,r2
8026b08: 800cf000 call 800cf00 <__divsi3>
8026b0c: 1007883a mov r3,r2
8026b10: e0bffe17 ldw r2,-8(fp)
8026b14: 1885383a mul r2,r3,r2
8026b18: 0140fa04 movi r5,1000
8026b1c: 1009883a mov r4,r2
8026b20: 800cf000 call 800cf00 <__divsi3>
8026b24: e0bfff15 stw r2,-4(fp)
8026b28: 00002006 br 8026bac <bsd_select+0x138>
}
else if (tps >= 10)
8026b2c: e0bffe17 ldw r2,-8(fp)
8026b30: 10800290 cmplti r2,r2,10
8026b34: 10000e1e bne r2,zero,8026b70 <bsd_select+0xfc>
{
ltv = (((timeout->tv_usec + 5000) / 10000) * tps) / 100;
8026b38: e0800217 ldw r2,8(fp)
8026b3c: 10800217 ldw r2,8(r2)
8026b40: 1084e204 addi r2,r2,5000
8026b44: 0149c404 movi r5,10000
8026b48: 1009883a mov r4,r2
8026b4c: 800cf000 call 800cf00 <__divsi3>
8026b50: 1007883a mov r3,r2
8026b54: e0bffe17 ldw r2,-8(fp)
8026b58: 1885383a mul r2,r3,r2
8026b5c: 01401904 movi r5,100
8026b60: 1009883a mov r4,r2
8026b64: 800cf000 call 800cf00 <__divsi3>
8026b68: e0bfff15 stw r2,-4(fp)
8026b6c: 00000f06 br 8026bac <bsd_select+0x138>
}
else
{
ltv = (((timeout->tv_usec + 50000) / 100000) * tps) / 10;
8026b70: e0800217 ldw r2,8(fp)
8026b74: 10c00217 ldw r3,8(r2)
8026b78: 00b0d414 movui r2,50000
8026b7c: 1885883a add r2,r3,r2
8026b80: 014000b4 movhi r5,2
8026b84: 2961a804 addi r5,r5,-31072
8026b88: 1009883a mov r4,r2
8026b8c: 800cf000 call 800cf00 <__divsi3>
8026b90: 1007883a mov r3,r2
8026b94: e0bffe17 ldw r2,-8(fp)
8026b98: 1885383a mul r2,r3,r2
8026b9c: 01400284 movi r5,10
8026ba0: 1009883a mov r4,r2
8026ba4: 800cf000 call 800cf00 <__divsi3>
8026ba8: e0bfff15 stw r2,-4(fp)
}
ltv += (timeout->tv_sec * TPS);
8026bac: e1000217 ldw r4,8(fp)
8026bb0: 20800017 ldw r2,0(r4)
8026bb4: 20c00117 ldw r3,4(r4)
8026bb8: 10c01924 muli r3,r2,100
8026bbc: e0bfff17 ldw r2,-4(fp)
8026bc0: 1885883a add r2,r3,r2
8026bc4: e0bfff15 stw r2,-4(fp)
8026bc8: 00000206 br 8026bd4 <bsd_select+0x160>
}
else {
/*
* NULL timeout: wait indefinitely in t_select()
*/
ltv = -1;
8026bcc: 00bfffc4 movi r2,-1
8026bd0: e0bfff15 stw r2,-4(fp)
}
return (t_select(readfds, writefds, exceptfds, ltv));
8026bd4: e1ffff17 ldw r7,-4(fp)
8026bd8: e1bffa17 ldw r6,-24(fp)
8026bdc: e17ffb17 ldw r5,-20(fp)
8026be0: e13ffc17 ldw r4,-16(fp)
8026be4: 80303f80 call 80303f8 <t_select>
}
8026be8: e037883a mov sp,fp
8026bec: dfc00117 ldw ra,4(sp)
8026bf0: df000017 ldw fp,0(sp)
8026bf4: dec00204 addi sp,sp,8
8026bf8: f800283a ret
08026bfc <bsd_setsockopt>:
int
bsd_setsockopt(BSD_SOCKET s,
int level,
int name,
void * opt, int optlen)
{
8026bfc: defff704 addi sp,sp,-36
8026c00: dfc00815 stw ra,32(sp)
8026c04: df000715 stw fp,28(sp)
8026c08: df000704 addi fp,sp,28
8026c0c: e13ffd15 stw r4,-12(fp)
8026c10: e17ffc15 stw r5,-16(fp)
8026c14: e1bffb15 stw r6,-20(fp)
8026c18: e1fffa15 stw r7,-24(fp)
struct socket * so;
so = LONG2SO(s);
8026c1c: e0bffd17 ldw r2,-12(fp)
8026c20: 10bffc04 addi r2,r2,-16
8026c24: 100490ba slli r2,r2,2
8026c28: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
8026c2c: 008201b4 movhi r2,2054
8026c30: 10b87104 addi r2,r2,-7740
8026c34: e0bfff15 stw r2,-4(fp)
8026c38: 00000606 br 8026c54 <bsd_setsockopt+0x58>
8026c3c: e0ffff17 ldw r3,-4(fp)
8026c40: e0bffe17 ldw r2,-8(fp)
8026c44: 18800626 beq r3,r2,8026c60 <bsd_setsockopt+0x64>
8026c48: e0bfff17 ldw r2,-4(fp)
8026c4c: 10800017 ldw r2,0(r2)
8026c50: e0bfff15 stw r2,-4(fp)
8026c54: e0bfff17 ldw r2,-4(fp)
8026c58: 103ff81e bne r2,zero,8026c3c <bsd_setsockopt+0x40>
8026c5c: 00000106 br 8026c64 <bsd_setsockopt+0x68>
8026c60: 0001883a nop
8026c64: e0ffff17 ldw r3,-4(fp)
8026c68: e0bffe17 ldw r2,-8(fp)
8026c6c: 18800326 beq r3,r2,8026c7c <bsd_setsockopt+0x80>
8026c70: 8028cd40 call 8028cd4 <dtrap>
8026c74: 00bfffc4 movi r2,-1
8026c78: 00001206 br 8026cc4 <bsd_setsockopt+0xc8>
/* make sure supplied option value is big enough for the
* named option, else fail w/error EFAULT
*/
if (optlen < bsd_i_sockoptlen(level, name))
8026c7c: e17ffb17 ldw r5,-20(fp)
8026c80: e13ffc17 ldw r4,-16(fp)
8026c84: 80265740 call 8026574 <bsd_i_sockoptlen>
8026c88: 1007883a mov r3,r2
8026c8c: e0800217 ldw r2,8(fp)
8026c90: 10c0050e bge r2,r3,8026ca8 <bsd_setsockopt+0xac>
{
so->so_error = EFAULT;
8026c94: e0bffe17 ldw r2,-8(fp)
8026c98: 00c00384 movi r3,14
8026c9c: 10c00615 stw r3,24(r2)
return -1;
8026ca0: 00bfffc4 movi r2,-1
8026ca4: 00000706 br 8026cc4 <bsd_setsockopt+0xc8>
}
return t_setsockopt(s, level, name, opt, optlen);
8026ca8: e0800217 ldw r2,8(fp)
8026cac: d8800015 stw r2,0(sp)
8026cb0: e1fffa17 ldw r7,-24(fp)
8026cb4: e1bffb17 ldw r6,-20(fp)
8026cb8: e17ffc17 ldw r5,-16(fp)
8026cbc: e13ffd17 ldw r4,-12(fp)
8026cc0: 802c44c0 call 802c44c <t_setsockopt>
}
8026cc4: e037883a mov sp,fp
8026cc8: dfc00117 ldw ra,4(sp)
8026ccc: df000017 ldw fp,0(sp)
8026cd0: dec00204 addi sp,sp,8
8026cd4: f800283a ret
08026cd8 <ccksum>:
* be done in 16-bit chunks.
*/
unsigned short
ccksum (void *ptr, unsigned words)
{
8026cd8: defffa04 addi sp,sp,-24
8026cdc: df000515 stw fp,20(sp)
8026ce0: df000504 addi fp,sp,20
8026ce4: e13ffc15 stw r4,-16(fp)
8026ce8: e17ffb15 stw r5,-20(fp)
unsigned short *addr = (unsigned short *)ptr;
8026cec: e0bffc17 ldw r2,-16(fp)
8026cf0: e0bfff15 stw r2,-4(fp)
unsigned long sum = 0;
8026cf4: e03ffe15 stw zero,-8(fp)
int count = (int)words;
8026cf8: e0bffb17 ldw r2,-20(fp)
8026cfc: e0bffd15 stw r2,-12(fp)
while (--count >= 0)
8026d00: 00000806 br 8026d24 <ccksum+0x4c>
{
/* This is the inner loop */
sum += *addr++;
8026d04: e0bfff17 ldw r2,-4(fp)
8026d08: 10c00084 addi r3,r2,2
8026d0c: e0ffff15 stw r3,-4(fp)
8026d10: 1080000b ldhu r2,0(r2)
8026d14: 10bfffcc andi r2,r2,65535
8026d18: e0fffe17 ldw r3,-8(fp)
8026d1c: 1885883a add r2,r3,r2
8026d20: e0bffe15 stw r2,-8(fp)
while (--count >= 0)
8026d24: e0bffd17 ldw r2,-12(fp)
8026d28: 10bfffc4 addi r2,r2,-1
8026d2c: e0bffd15 stw r2,-12(fp)
8026d30: e0bffd17 ldw r2,-12(fp)
8026d34: 103ff30e bge r2,zero,8026d04 <ccksum+0x2c>
}
/* Fold 32-bit sum to 16 bits */
sum = (sum & 0xffff) + (sum >> 16);
8026d38: e0bffe17 ldw r2,-8(fp)
8026d3c: 10ffffcc andi r3,r2,65535
8026d40: e0bffe17 ldw r2,-8(fp)
8026d44: 1004d43a srli r2,r2,16
8026d48: 1885883a add r2,r3,r2
8026d4c: e0bffe15 stw r2,-8(fp)
sum = (sum & 0xffff) + (sum >> 16);
8026d50: e0bffe17 ldw r2,-8(fp)
8026d54: 10ffffcc andi r3,r2,65535
8026d58: e0bffe17 ldw r2,-8(fp)
8026d5c: 1004d43a srli r2,r2,16
8026d60: 1885883a add r2,r3,r2
8026d64: e0bffe15 stw r2,-8(fp)
/* checksum = ~sum; *//* removed for MIT IP stack */
return ((unsigned short)sum);
8026d68: e0bffe17 ldw r2,-8(fp)
}
8026d6c: e037883a mov sp,fp
8026d70: df000017 ldw fp,0(sp)
8026d74: dec00104 addi sp,sp,4
8026d78: f800283a ret
08026d7c <cksum>:
* 3 = user-supplied alternate implementation
*/
unsigned short
cksum (void *ptr, unsigned count)
{
8026d7c: defffc04 addi sp,sp,-16
8026d80: dfc00315 stw ra,12(sp)
8026d84: df000215 stw fp,8(sp)
8026d88: df000204 addi fp,sp,8
8026d8c: e13fff15 stw r4,-4(fp)
8026d90: e17ffe15 stw r5,-8(fp)
switch (cksum_select)
8026d94: d0a01317 ldw r2,-32692(gp)
8026d98: 108000a0 cmpeqi r2,r2,2
8026d9c: 1000041e bne r2,zero,8026db0 <cksum+0x34>
{
case 1:
default:
return (ccksum(ptr, count));
8026da0: e17ffe17 ldw r5,-8(fp)
8026da4: e13fff17 ldw r4,-4(fp)
8026da8: 8026cd80 call 8026cd8 <ccksum>
8026dac: 00000306 br 8026dbc <cksum+0x40>
#ifndef C_CHECKSUM
case 2:
return (asm_cksum(ptr, count));
8026db0: e17ffe17 ldw r5,-8(fp)
8026db4: e13fff17 ldw r4,-4(fp)
8026db8: 8028b400 call 8028b40 <asm_cksum>
#else
#endif
return (alt_cksum(ptr, count));
#endif
}
}
8026dbc: e037883a mov sp,fp
8026dc0: dfc00117 ldw ra,4(sp)
8026dc4: df000017 ldw fp,0(sp)
8026dc8: dec00204 addi sp,sp,8
8026dcc: f800283a ret
08026dd0 <do_trap>:
* RETURNS: 0
*/
int
do_trap(void)
{
8026dd0: defffe04 addi sp,sp,-8
8026dd4: dfc00115 stw ra,4(sp)
8026dd8: df000015 stw fp,0(sp)
8026ddc: d839883a mov fp,sp
dtrap();
8026de0: 8028cd40 call 8028cd4 <dtrap>
return 0;
8026de4: 0005883a mov r2,zero
}
8026de8: e037883a mov sp,fp
8026dec: dfc00117 ldw ra,4(sp)
8026df0: df000017 ldw fp,0(sp)
8026df4: dec00204 addi sp,sp,8
8026df8: f800283a ret
08026dfc <nextarg>:
* RETURNS: pointer to next arg in string
*/
char *
nextarg(char * argp)
{
8026dfc: defffe04 addi sp,sp,-8
8026e00: df000115 stw fp,4(sp)
8026e04: df000104 addi fp,sp,4
8026e08: e13fff15 stw r4,-4(fp)
while (*argp > ' ')argp++; /* scan past current arg */
8026e0c: 00000306 br 8026e1c <nextarg+0x20>
8026e10: e0bfff17 ldw r2,-4(fp)
8026e14: 10800044 addi r2,r2,1
8026e18: e0bfff15 stw r2,-4(fp)
8026e1c: e0bfff17 ldw r2,-4(fp)
8026e20: 10800003 ldbu r2,0(r2)
8026e24: 10803fcc andi r2,r2,255
8026e28: 1080201c xori r2,r2,128
8026e2c: 10bfe004 addi r2,r2,-128
8026e30: 10800848 cmpgei r2,r2,33
8026e34: 103ff61e bne r2,zero,8026e10 <nextarg+0x14>
while (*argp == ' ')argp++; /* scan past spaces */
8026e38: 00000306 br 8026e48 <nextarg+0x4c>
8026e3c: e0bfff17 ldw r2,-4(fp)
8026e40: 10800044 addi r2,r2,1
8026e44: e0bfff15 stw r2,-4(fp)
8026e48: e0bfff17 ldw r2,-4(fp)
8026e4c: 10800003 ldbu r2,0(r2)
8026e50: 10803fcc andi r2,r2,255
8026e54: 1080201c xori r2,r2,128
8026e58: 10bfe004 addi r2,r2,-128
8026e5c: 10800820 cmpeqi r2,r2,32
8026e60: 103ff61e bne r2,zero,8026e3c <nextarg+0x40>
return (argp);
8026e64: e0bfff17 ldw r2,-4(fp)
}
8026e68: e037883a mov sp,fp
8026e6c: df000017 ldw fp,0(sp)
8026e70: dec00104 addi sp,sp,4
8026e74: f800283a ret
08026e78 <hexdump>:
#define HEX_BYTES_PER_LINE 16
void
hexdump(void * pio, void * buffer, unsigned len)
{
8026e78: defff804 addi sp,sp,-32
8026e7c: dfc00715 stw ra,28(sp)
8026e80: df000615 stw fp,24(sp)
8026e84: df000604 addi fp,sp,24
8026e88: e13ffc15 stw r4,-16(fp)
8026e8c: e17ffb15 stw r5,-20(fp)
8026e90: e1bffa15 stw r6,-24(fp)
u_char * data = (u_char *)buffer;
8026e94: e0bffb17 ldw r2,-20(fp)
8026e98: e0bfff15 stw r2,-4(fp)
unsigned int count;
char c;
while (len)
8026e9c: 00003f06 br 8026f9c <hexdump+0x124>
{
/* display data in hex */
for (count = 0; (count < HEX_BYTES_PER_LINE) && (count < len); ++count)
8026ea0: e03ffe15 stw zero,-8(fp)
8026ea4: 00000d06 br 8026edc <hexdump+0x64>
ns_printf(pio, "%02x ", *(data + count));
8026ea8: e0ffff17 ldw r3,-4(fp)
8026eac: e0bffe17 ldw r2,-8(fp)
8026eb0: 1885883a add r2,r3,r2
8026eb4: 10800003 ldbu r2,0(r2)
8026eb8: 10803fcc andi r2,r2,255
8026ebc: 100d883a mov r6,r2
8026ec0: 01420174 movhi r5,2053
8026ec4: 29688104 addi r5,r5,-24060
8026ec8: e13ffc17 ldw r4,-16(fp)
8026ecc: 80273900 call 8027390 <ns_printf>
for (count = 0; (count < HEX_BYTES_PER_LINE) && (count < len); ++count)
8026ed0: e0bffe17 ldw r2,-8(fp)
8026ed4: 10800044 addi r2,r2,1
8026ed8: e0bffe15 stw r2,-8(fp)
8026edc: e0bffe17 ldw r2,-8(fp)
8026ee0: 10800428 cmpgeui r2,r2,16
8026ee4: 1000031e bne r2,zero,8026ef4 <hexdump+0x7c>
8026ee8: e0fffe17 ldw r3,-8(fp)
8026eec: e0bffa17 ldw r2,-24(fp)
8026ef0: 18bfed36 bltu r3,r2,8026ea8 <hexdump+0x30>
/* display data in ascii */
for (count = 0; (count < HEX_BYTES_PER_LINE) && (count < len); ++count)
8026ef4: e03ffe15 stw zero,-8(fp)
8026ef8: 00001606 br 8026f54 <hexdump+0xdc>
{
c = *(data + count);
8026efc: e0ffff17 ldw r3,-4(fp)
8026f00: e0bffe17 ldw r2,-8(fp)
8026f04: 1885883a add r2,r3,r2
8026f08: 10800003 ldbu r2,0(r2)
8026f0c: e0bffdc5 stb r2,-9(fp)
ns_printf(pio, "%c", ((c >= 0x20) && (c < 0x7f)) ? c : '.');
8026f10: e0bffdc7 ldb r2,-9(fp)
8026f14: 10800810 cmplti r2,r2,32
8026f18: 1000051e bne r2,zero,8026f30 <hexdump+0xb8>
8026f1c: e0bffdc7 ldb r2,-9(fp)
8026f20: 10801fe0 cmpeqi r2,r2,127
8026f24: 1000021e bne r2,zero,8026f30 <hexdump+0xb8>
8026f28: e0bffdc7 ldb r2,-9(fp)
8026f2c: 00000106 br 8026f34 <hexdump+0xbc>
8026f30: 00800b84 movi r2,46
8026f34: 100d883a mov r6,r2
8026f38: 01420174 movhi r5,2053
8026f3c: 29688304 addi r5,r5,-24052
8026f40: e13ffc17 ldw r4,-16(fp)
8026f44: 80273900 call 8027390 <ns_printf>
for (count = 0; (count < HEX_BYTES_PER_LINE) && (count < len); ++count)
8026f48: e0bffe17 ldw r2,-8(fp)
8026f4c: 10800044 addi r2,r2,1
8026f50: e0bffe15 stw r2,-8(fp)
8026f54: e0bffe17 ldw r2,-8(fp)
8026f58: 10800428 cmpgeui r2,r2,16
8026f5c: 1000031e bne r2,zero,8026f6c <hexdump+0xf4>
8026f60: e0fffe17 ldw r3,-8(fp)
8026f64: e0bffa17 ldw r2,-24(fp)
8026f68: 18bfe436 bltu r3,r2,8026efc <hexdump+0x84>
}
ns_printf(pio,"\n");
8026f6c: 01420174 movhi r5,2053
8026f70: 29688404 addi r5,r5,-24048
8026f74: e13ffc17 ldw r4,-16(fp)
8026f78: 80273900 call 8027390 <ns_printf>
len -= count;
8026f7c: e0fffa17 ldw r3,-24(fp)
8026f80: e0bffe17 ldw r2,-8(fp)
8026f84: 1885c83a sub r2,r3,r2
8026f88: e0bffa15 stw r2,-24(fp)
data += count;
8026f8c: e0ffff17 ldw r3,-4(fp)
8026f90: e0bffe17 ldw r2,-8(fp)
8026f94: 1885883a add r2,r3,r2
8026f98: e0bfff15 stw r2,-4(fp)
while (len)
8026f9c: e0bffa17 ldw r2,-24(fp)
8026fa0: 103fbf1e bne r2,zero,8026ea0 <hexdump+0x28>
}
}
8026fa4: 0001883a nop
8026fa8: e037883a mov sp,fp
8026fac: dfc00117 ldw ra,4(sp)
8026fb0: df000017 ldw fp,0(sp)
8026fb4: dec00204 addi sp,sp,8
8026fb8: f800283a ret
08026fbc <print_ipad>:
char ipreturn[18]; /* buffer for return */
char *
print_ipad(unsigned long ipaddr)
{
8026fbc: defffa04 addi sp,sp,-24
8026fc0: dfc00515 stw ra,20(sp)
8026fc4: df000415 stw fp,16(sp)
8026fc8: df000404 addi fp,sp,16
8026fcc: e13ffe15 stw r4,-8(fp)
struct l2b ip;
ip.ip.iplong = ipaddr;
8026fd0: e0bffe17 ldw r2,-8(fp)
8026fd4: e0bfff15 stw r2,-4(fp)
sprintf(ipreturn, "%u.%u.%u.%u",
ip.ip.ipchar[0],
8026fd8: e0bfff03 ldbu r2,-4(fp)
sprintf(ipreturn, "%u.%u.%u.%u",
8026fdc: 11003fcc andi r4,r2,255
ip.ip.ipchar[1],
8026fe0: e0bfff43 ldbu r2,-3(fp)
sprintf(ipreturn, "%u.%u.%u.%u",
8026fe4: 11403fcc andi r5,r2,255
ip.ip.ipchar[2],
8026fe8: e0bfff83 ldbu r2,-2(fp)
sprintf(ipreturn, "%u.%u.%u.%u",
8026fec: 10803fcc andi r2,r2,255
ip.ip.ipchar[3]);
8026ff0: e0ffffc3 ldbu r3,-1(fp)
sprintf(ipreturn, "%u.%u.%u.%u",
8026ff4: 18c03fcc andi r3,r3,255
8026ff8: d8c00115 stw r3,4(sp)
8026ffc: d8800015 stw r2,0(sp)
8027000: 280f883a mov r7,r5
8027004: 200d883a mov r6,r4
8027008: 01420174 movhi r5,2053
802700c: 29688504 addi r5,r5,-24044
8027010: 010201b4 movhi r4,2054
8027014: 21379184 addi r4,r4,-8634
8027018: 8042d980 call 8042d98 <sprintf>
return ipreturn;
802701c: 008201b4 movhi r2,2054
8027020: 10b79184 addi r2,r2,-8634
}
8027024: e037883a mov sp,fp
8027028: dfc00117 ldw ra,4(sp)
802702c: df000017 ldw fp,0(sp)
8027030: dec00204 addi sp,sp,8
8027034: f800283a ret
08027038 <print_uptime>:
static char tistring[24]; /* buffer for return */
char *
print_uptime(unsigned long timetick)
{
8027038: defff804 addi sp,sp,-32
802703c: dfc00715 stw ra,28(sp)
8027040: df000615 stw fp,24(sp)
8027044: df000604 addi fp,sp,24
8027048: e13ffc15 stw r4,-16(fp)
unsigned seconds, minutes, hours;
timetick = timetick/100; /* turn timetick into seconds */
802704c: e0bffc17 ldw r2,-16(fp)
8027050: 01401904 movi r5,100
8027054: 1009883a mov r4,r2
8027058: 800cff80 call 800cff8 <__udivsi3>
802705c: e0bffc15 stw r2,-16(fp)
seconds = (unsigned)(timetick%60);
8027060: e0bffc17 ldw r2,-16(fp)
8027064: 01400f04 movi r5,60
8027068: 1009883a mov r4,r2
802706c: 800d05c0 call 800d05c <__umodsi3>
8027070: e0bfff15 stw r2,-4(fp)
timetick = timetick/60; /* turn timetick into minutes */
8027074: e0bffc17 ldw r2,-16(fp)
8027078: 01400f04 movi r5,60
802707c: 1009883a mov r4,r2
8027080: 800cff80 call 800cff8 <__udivsi3>
8027084: e0bffc15 stw r2,-16(fp)
minutes = (unsigned)(timetick%60);
8027088: e0bffc17 ldw r2,-16(fp)
802708c: 01400f04 movi r5,60
8027090: 1009883a mov r4,r2
8027094: 800d05c0 call 800d05c <__umodsi3>
8027098: e0bffe15 stw r2,-8(fp)
timetick = timetick/60; /* turn timetick into hours */
802709c: e0bffc17 ldw r2,-16(fp)
80270a0: 01400f04 movi r5,60
80270a4: 1009883a mov r4,r2
80270a8: 800cff80 call 800cff8 <__udivsi3>
80270ac: e0bffc15 stw r2,-16(fp)
hours = (unsigned)(timetick%24);
80270b0: e0bffc17 ldw r2,-16(fp)
80270b4: 01400604 movi r5,24
80270b8: 1009883a mov r4,r2
80270bc: 800d05c0 call 800d05c <__umodsi3>
80270c0: e0bffd15 stw r2,-12(fp)
timetick = timetick/24; /* turn timetick into days */
80270c4: e0bffc17 ldw r2,-16(fp)
80270c8: 01400604 movi r5,24
80270cc: 1009883a mov r4,r2
80270d0: 800cff80 call 800cff8 <__udivsi3>
80270d4: e0bffc15 stw r2,-16(fp)
if (timetick) /* Is there a whole number of days? */
80270d8: e0bffc17 ldw r2,-16(fp)
80270dc: 10000c26 beq r2,zero,8027110 <print_uptime+0xd8>
sprintf(tistring, "%ld days, %dh:%dm:%ds",
80270e0: e0bfff17 ldw r2,-4(fp)
80270e4: d8800115 stw r2,4(sp)
80270e8: e0bffe17 ldw r2,-8(fp)
80270ec: d8800015 stw r2,0(sp)
80270f0: e1fffd17 ldw r7,-12(fp)
80270f4: e1bffc17 ldw r6,-16(fp)
80270f8: 01420174 movhi r5,2053
80270fc: 29688804 addi r5,r5,-24032
8027100: 01020174 movhi r4,2053
8027104: 21337d04 addi r4,r4,-12812
8027108: 8042d980 call 8042d98 <sprintf>
802710c: 00001306 br 802715c <print_uptime+0x124>
timetick, hours, minutes, seconds);
else if (hours)
8027110: e0bffd17 ldw r2,-12(fp)
8027114: 10000a26 beq r2,zero,8027140 <print_uptime+0x108>
sprintf(tistring, "%d hours, %dm:%ds", hours, minutes, seconds);
8027118: e0bfff17 ldw r2,-4(fp)
802711c: d8800015 stw r2,0(sp)
8027120: e1fffe17 ldw r7,-8(fp)
8027124: e1bffd17 ldw r6,-12(fp)
8027128: 01420174 movhi r5,2053
802712c: 29688e04 addi r5,r5,-24008
8027130: 01020174 movhi r4,2053
8027134: 21337d04 addi r4,r4,-12812
8027138: 8042d980 call 8042d98 <sprintf>
802713c: 00000706 br 802715c <print_uptime+0x124>
else
sprintf(tistring, "%d minutes, %d sec.", minutes, seconds);
8027140: e1ffff17 ldw r7,-4(fp)
8027144: e1bffe17 ldw r6,-8(fp)
8027148: 01420174 movhi r5,2053
802714c: 29689304 addi r5,r5,-23988
8027150: 01020174 movhi r4,2053
8027154: 21337d04 addi r4,r4,-12812
8027158: 8042d980 call 8042d98 <sprintf>
return tistring;
802715c: 00820174 movhi r2,2053
8027160: 10b37d04 addi r2,r2,-12812
}
8027164: e037883a mov sp,fp
8027168: dfc00117 ldw ra,4(sp)
802716c: df000017 ldw fp,0(sp)
8027170: dec00204 addi sp,sp,8
8027174: f800283a ret
08027178 <panic>:
/* allow to be ifdeffed out on systems which already have a panic */
#ifndef PANIC_ALREADY
void
panic(char * msg)
{
8027178: defffd04 addi sp,sp,-12
802717c: dfc00215 stw ra,8(sp)
8027180: df000115 stw fp,4(sp)
8027184: df000104 addi fp,sp,4
8027188: e13fff15 stw r4,-4(fp)
dprintf("panic: %s\n", msg);
802718c: e17fff17 ldw r5,-4(fp)
8027190: 01020174 movhi r4,2053
8027194: 21289804 addi r4,r4,-23968
8027198: 8002c780 call 8002c78 <printf>
dtrap(); /* try to hook debugger */
802719c: 8028cd40 call 8028cd4 <dtrap>
netexit(1); /* try to clean up */
80271a0: 01000044 movi r4,1
80271a4: 803c5e80 call 803c5e8 <netexit>
}
80271a8: 0001883a nop
80271ac: e037883a mov sp,fp
80271b0: dfc00117 ldw ra,4(sp)
80271b4: df000017 ldw fp,0(sp)
80271b8: dec00204 addi sp,sp,8
80271bc: f800283a ret
080271c0 <print_eth>:
char eth_prt_buf[18]; /* buffer for return */
char *
print_eth(char * addr, char spacer)
{
80271c0: defffb04 addi sp,sp,-20
80271c4: df000415 stw fp,16(sp)
80271c8: df000404 addi fp,sp,16
80271cc: e13ffd15 stw r4,-12(fp)
80271d0: 2805883a mov r2,r5
80271d4: e0bffc05 stb r2,-16(fp)
int i;
char * out = eth_prt_buf;
80271d8: 008201b4 movhi r2,2054
80271dc: 10b78d04 addi r2,r2,-8652
80271e0: e0bffe15 stw r2,-8(fp)
/* loop through 6 bytes of ethernet address */
for (i = 0; i < 6; i++)
80271e4: e03fff15 stw zero,-4(fp)
80271e8: 00003f06 br 80272e8 <print_eth+0x128>
{
/* high nibble */
*out = (char)(((*addr >> 4) & 0x0f) + 0x30);
80271ec: e0bffd17 ldw r2,-12(fp)
80271f0: 10800003 ldbu r2,0(r2)
80271f4: 10803fcc andi r2,r2,255
80271f8: 1004d13a srli r2,r2,4
80271fc: 10800c04 addi r2,r2,48
8027200: 1007883a mov r3,r2
8027204: e0bffe17 ldw r2,-8(fp)
8027208: 10c00005 stb r3,0(r2)
if (*out > '9') /* need to make it A-F? */
802720c: e0bffe17 ldw r2,-8(fp)
8027210: 10800003 ldbu r2,0(r2)
8027214: 10803fcc andi r2,r2,255
8027218: 1080201c xori r2,r2,128
802721c: 10bfe004 addi r2,r2,-128
8027220: 10800e90 cmplti r2,r2,58
8027224: 1000061e bne r2,zero,8027240 <print_eth+0x80>
(*out) += 7;
8027228: e0bffe17 ldw r2,-8(fp)
802722c: 10800003 ldbu r2,0(r2)
8027230: 108001c4 addi r2,r2,7
8027234: 1007883a mov r3,r2
8027238: e0bffe17 ldw r2,-8(fp)
802723c: 10c00005 stb r3,0(r2)
out++;
8027240: e0bffe17 ldw r2,-8(fp)
8027244: 10800044 addi r2,r2,1
8027248: e0bffe15 stw r2,-8(fp)
/* low nibble */
*out = (char)((*addr & 0x0f) + 0x30); /* low nibble to digit */
802724c: e0bffd17 ldw r2,-12(fp)
8027250: 10800003 ldbu r2,0(r2)
8027254: 108003cc andi r2,r2,15
8027258: 10800c04 addi r2,r2,48
802725c: 1007883a mov r3,r2
8027260: e0bffe17 ldw r2,-8(fp)
8027264: 10c00005 stb r3,0(r2)
if (*out > '9') /* need to make it A-F? */
8027268: e0bffe17 ldw r2,-8(fp)
802726c: 10800003 ldbu r2,0(r2)
8027270: 10803fcc andi r2,r2,255
8027274: 1080201c xori r2,r2,128
8027278: 10bfe004 addi r2,r2,-128
802727c: 10800e90 cmplti r2,r2,58
8027280: 1000061e bne r2,zero,802729c <print_eth+0xdc>
(*out) += 7; /* eg 0x3a -> 0x41 ('A') */
8027284: e0bffe17 ldw r2,-8(fp)
8027288: 10800003 ldbu r2,0(r2)
802728c: 108001c4 addi r2,r2,7
8027290: 1007883a mov r3,r2
8027294: e0bffe17 ldw r2,-8(fp)
8027298: 10c00005 stb r3,0(r2)
out++;
802729c: e0bffe17 ldw r2,-8(fp)
80272a0: 10800044 addi r2,r2,1
80272a4: e0bffe15 stw r2,-8(fp)
/* optional spacer character */
if (spacer && i < 5)
80272a8: e0bffc07 ldb r2,-16(fp)
80272ac: 10000826 beq r2,zero,80272d0 <print_eth+0x110>
80272b0: e0bfff17 ldw r2,-4(fp)
80272b4: 10800148 cmpgei r2,r2,5
80272b8: 1000051e bne r2,zero,80272d0 <print_eth+0x110>
*out++ = spacer;
80272bc: e0bffe17 ldw r2,-8(fp)
80272c0: 10c00044 addi r3,r2,1
80272c4: e0fffe15 stw r3,-8(fp)
80272c8: e0fffc03 ldbu r3,-16(fp)
80272cc: 10c00005 stb r3,0(r2)
addr++;
80272d0: e0bffd17 ldw r2,-12(fp)
80272d4: 10800044 addi r2,r2,1
80272d8: e0bffd15 stw r2,-12(fp)
for (i = 0; i < 6; i++)
80272dc: e0bfff17 ldw r2,-4(fp)
80272e0: 10800044 addi r2,r2,1
80272e4: e0bfff15 stw r2,-4(fp)
80272e8: e0bfff17 ldw r2,-4(fp)
80272ec: 10800190 cmplti r2,r2,6
80272f0: 103fbe1e bne r2,zero,80271ec <print_eth+0x2c>
}
*out = 0;
80272f4: e0bffe17 ldw r2,-8(fp)
80272f8: 10000005 stb zero,0(r2)
return eth_prt_buf;
80272fc: 008201b4 movhi r2,2054
8027300: 10b78d04 addi r2,r2,-8652
}
8027304: e037883a mov sp,fp
8027308: df000017 ldw fp,0(sp)
802730c: dec00104 addi sp,sp,4
8027310: f800283a ret
08027314 <uslash>:
* RETURNS: pointer to formatted text
*/
char *
uslash(char * path)
{
8027314: defffd04 addi sp,sp,-12
8027318: df000215 stw fp,8(sp)
802731c: df000204 addi fp,sp,8
8027320: e13ffe15 stw r4,-8(fp)
char * cp;
for (cp = path; *cp; cp++)
8027324: e0bffe17 ldw r2,-8(fp)
8027328: e0bfff15 stw r2,-4(fp)
802732c: 00000d06 br 8027364 <uslash+0x50>
if (*cp == '\\')
8027330: e0bfff17 ldw r2,-4(fp)
8027334: 10800003 ldbu r2,0(r2)
8027338: 10803fcc andi r2,r2,255
802733c: 1080201c xori r2,r2,128
8027340: 10bfe004 addi r2,r2,-128
8027344: 10801718 cmpnei r2,r2,92
8027348: 1000031e bne r2,zero,8027358 <uslash+0x44>
*cp = '/';
802734c: e0bfff17 ldw r2,-4(fp)
8027350: 00c00bc4 movi r3,47
8027354: 10c00005 stb r3,0(r2)
for (cp = path; *cp; cp++)
8027358: e0bfff17 ldw r2,-4(fp)
802735c: 10800044 addi r2,r2,1
8027360: e0bfff15 stw r2,-4(fp)
8027364: e0bfff17 ldw r2,-4(fp)
8027368: 10800003 ldbu r2,0(r2)
802736c: 10803fcc andi r2,r2,255
8027370: 1080201c xori r2,r2,128
8027374: 10bfe004 addi r2,r2,-128
8027378: 103fed1e bne r2,zero,8027330 <uslash+0x1c>
return path;
802737c: e0bffe17 ldw r2,-8(fp)
}
8027380: e037883a mov sp,fp
8027384: df000017 ldw fp,0(sp)
8027388: dec00104 addi sp,sp,4
802738c: f800283a ret
08027390 <ns_printf>:
*/
#ifndef ns_printf
int
ns_printf(void * vio, char * format, ...)
{
8027390: defff304 addi sp,sp,-52
8027394: dfc00a15 stw ra,40(sp)
8027398: df000915 stw fp,36(sp)
802739c: dc400815 stw r17,32(sp)
80273a0: dc000715 stw r16,28(sp)
80273a4: df000904 addi fp,sp,36
80273a8: e13ff815 stw r4,-32(fp)
80273ac: e17ff715 stw r5,-36(fp)
80273b0: e1800215 stw r6,8(fp)
80273b4: e1c00315 stw r7,12(fp)
char * outbuf=NULL;
80273b8: e03ffc15 stw zero,-16(fp)
int ret_value ;
int buf_size = MAXIOSIZE ;
80273bc: 00802704 movi r2,156
80273c0: e0bffd15 stw r2,-12(fp)
GEN_IO pio = (GEN_IO)vio; /* convert void* to our IO device type */
80273c4: e0bff817 ldw r2,-32(fp)
80273c8: e0bffb15 stw r2,-20(fp)
int * next_arg=(int *) &format;
next_arg += sizeof(char *)/sizeof(int) ;
#endif /* NATIVE_PRINTF || PRINTF_STRING */
/* a NULL pio means just dump the output to stdout */
if (pio == NULL)
80273cc: e0bffb17 ldw r2,-20(fp)
80273d0: 1000091e bne r2,zero,80273f8 <ns_printf+0x68>
{
#ifdef NATIVE_PRINTF
/* use the target system's ANSI routines */
va_start(argList,format);
80273d4: e0800204 addi r2,fp,8
80273d8: e0bff915 stw r2,-28(fp)
ret_value = vprintf(format,argList);
80273dc: e0bff917 ldw r2,-28(fp)
80273e0: 100b883a mov r5,r2
80273e4: e13ff717 ldw r4,-36(fp)
80273e8: 80454580 call 8045458 <vprintf>
80273ec: e0bffa15 stw r2,-24(fp)
va_end(argList);
return ret_value;
80273f0: e0bffa17 ldw r2,-24(fp)
80273f4: 00003b06 br 80274e4 <ns_printf+0x154>
return strlen(format);
#endif /* NATIVE_PRINTF */
}
/* Check if the output function is set */
if (pio->out == NULL)
80273f8: e0bffb17 ldw r2,-20(fp)
80273fc: 10800117 ldw r2,4(r2)
8027400: 1000021e bne r2,zero,802740c <ns_printf+0x7c>
{
/* Programming mistake. Output function not set. */
return -1;
8027404: 00bfffc4 movi r2,-1
8027408: 00003606 br 80274e4 <ns_printf+0x154>
/* Allocate memory for the output string
* If the format string is greater than MAXIOSIZE, then
* we surely need to allocate a bigger block
*/
ret_value = strlen(format);
802740c: e13ff717 ldw r4,-36(fp)
8027410: 8002dac0 call 8002dac <strlen>
8027414: e0bffa15 stw r2,-24(fp)
if (ret_value >= MAXIOSIZE)
8027418: e0bffa17 ldw r2,-24(fp)
802741c: 10802710 cmplti r2,r2,156
8027420: 1000041e bne r2,zero,8027434 <ns_printf+0xa4>
{
buf_size += ret_value ;
8027424: e0fffd17 ldw r3,-12(fp)
8027428: e0bffa17 ldw r2,-24(fp)
802742c: 1885883a add r2,r3,r2
8027430: e0bffd15 stw r2,-12(fp)
}
outbuf=(char *)npalloc(buf_size);
8027434: e0bffd17 ldw r2,-12(fp)
8027438: 1009883a mov r4,r2
802743c: 802982c0 call 802982c <npalloc>
8027440: e0bffc15 stw r2,-16(fp)
if (outbuf == NULL)
8027444: e0bffc17 ldw r2,-16(fp)
8027448: 1000021e bne r2,zero,8027454 <ns_printf+0xc4>
{
return -2;
802744c: 00bfff84 movi r2,-2
8027450: 00002406 br 80274e4 <ns_printf+0x154>
/* Now populate the output string */
#ifdef NATIVE_PRINTF
/* use the target system's ANSI routines */
va_start(argList,format);
8027454: e0800204 addi r2,fp,8
8027458: e0bff915 stw r2,-28(fp)
ret_value = vsprintf(outbuf,format,argList);
802745c: e0bff917 ldw r2,-28(fp)
8027460: 100d883a mov r6,r2
8027464: e17ff717 ldw r5,-36(fp)
8027468: e13ffc17 ldw r4,-16(fp)
802746c: 80454d00 call 80454d0 <vsprintf>
8027470: e0bffa15 stw r2,-24(fp)
#endif /* PRINTF_STDARG */
#endif /* NATIVE_PRINTF */
#ifdef NATIVE_PRINTF
/* Check if we have overwritten the output buffer */
if ((int)strlen(outbuf) > buf_size)
8027474: e13ffc17 ldw r4,-16(fp)
8027478: 8002dac0 call 8002dac <strlen>
802747c: 1007883a mov r3,r2
8027480: e0bffd17 ldw r2,-12(fp)
8027484: 10c0080e bge r2,r3,80274a8 <ns_printf+0x118>
*/
/* Yes , we have overwritten. Truncate the output string.
* Some memory in the heap has been corrupted, but it is too
* late to rectify.
*/
panic("ns_printf:Buffer overflow");
8027488: 01020174 movhi r4,2053
802748c: 21289b04 addi r4,r4,-23956
8027490: 80271780 call 8027178 <panic>
outbuf[buf_size-1]=0; /* Null terminate the string */
8027494: e0bffd17 ldw r2,-12(fp)
8027498: 10bfffc4 addi r2,r2,-1
802749c: e0fffc17 ldw r3,-16(fp)
80274a0: 1885883a add r2,r3,r2
80274a4: 10000005 stb zero,0(r2)
}
#endif
ret_value =(pio->out)(pio->id,outbuf,strlen(outbuf)) ;
80274a8: e0bffb17 ldw r2,-20(fp)
80274ac: 14000117 ldw r16,4(r2)
80274b0: e0bffb17 ldw r2,-20(fp)
80274b4: 14400217 ldw r17,8(r2)
80274b8: e13ffc17 ldw r4,-16(fp)
80274bc: 8002dac0 call 8002dac <strlen>
80274c0: 100d883a mov r6,r2
80274c4: e17ffc17 ldw r5,-16(fp)
80274c8: 8809883a mov r4,r17
80274cc: 803ee83a callr r16
80274d0: e0bffa15 stw r2,-24(fp)
/* Free memory for the output string */
npfree(outbuf);
80274d4: e13ffc17 ldw r4,-16(fp)
80274d8: 80298600 call 8029860 <npfree>
/* since ns_printf() can get called repeatedly down in the bowels
* of a single command interpretting function, spin tk_yield() so
* that some packets get a chance to get received
*/
tk_yield();
80274dc: 8027ce40 call 8027ce4 <tk_yield>
return ret_value ;
80274e0: e0bffa17 ldw r2,-24(fp)
}
80274e4: e6fffe04 addi sp,fp,-8
80274e8: dfc00317 ldw ra,12(sp)
80274ec: df000217 ldw fp,8(sp)
80274f0: dc400117 ldw r17,4(sp)
80274f4: dc000017 ldw r16,0(sp)
80274f8: dec00604 addi sp,sp,24
80274fc: f800283a ret
08027500 <std_out>:
*
* RETURNS: Number of bytes send to standard output.
*/
int std_out(long s, char * buf, int len)
{
8027500: defffb04 addi sp,sp,-20
8027504: dfc00415 stw ra,16(sp)
8027508: df000315 stw fp,12(sp)
802750c: df000304 addi fp,sp,12
8027510: e13fff15 stw r4,-4(fp)
8027514: e17ffe15 stw r5,-8(fp)
8027518: e1bffd15 stw r6,-12(fp)
/* puts(buf); - This does newline expansion return
* write(0,buf,len); - This doesn't printf(buf); - This has
* problems when printf format strings (eg %s) is part of data.
*/
printf("%s",buf);
802751c: e17ffe17 ldw r5,-8(fp)
8027520: 01020174 movhi r4,2053
8027524: 2128a204 addi r4,r4,-23928
8027528: 8002c780 call 8002c78 <printf>
USE_ARG(s);
return len;
802752c: e0bffd17 ldw r2,-12(fp)
}
8027530: e037883a mov sp,fp
8027534: dfc00117 ldw ra,4(sp)
8027538: df000017 ldw fp,0(sp)
802753c: dec00204 addi sp,sp,8
8027540: f800283a ret
08027544 <con_page>:
* RETURNS: 1 if we got a break, 0 to keep printing
*/
int
con_page(void * vio, int lines)
{
8027544: defffa04 addi sp,sp,-24
8027548: dfc00515 stw ra,20(sp)
802754c: df000415 stw fp,16(sp)
8027550: df000404 addi fp,sp,16
8027554: e13ffd15 stw r4,-12(fp)
8027558: e17ffc15 stw r5,-16(fp)
int ch;
GEN_IO pio = (GEN_IO)vio; /* convert void* to our IO device type */
802755c: e0bffd17 ldw r2,-12(fp)
8027560: e0bfff15 stw r2,-4(fp)
if (lines % 20 == 0) /* Time to get user input */
8027564: e0bffc17 ldw r2,-16(fp)
8027568: 01400504 movi r5,20
802756c: 1009883a mov r4,r2
8027570: 800cf800 call 800cf80 <__modsi3>
8027574: 1000231e bne r2,zero,8027604 <con_page+0xc0>
{
if (pio && pio->getch) /*if i/p func is supplied*/
8027578: e0bfff17 ldw r2,-4(fp)
802757c: 10002126 beq r2,zero,8027604 <con_page+0xc0>
8027580: e0bfff17 ldw r2,-4(fp)
8027584: 10800317 ldw r2,12(r2)
8027588: 10001e26 beq r2,zero,8027604 <con_page+0xc0>
{
ns_printf(pio,"....press any key for more (ESC to break)....");
802758c: 01420174 movhi r5,2053
8027590: 2968a304 addi r5,r5,-23924
8027594: e13fff17 ldw r4,-4(fp)
8027598: 80273900 call 8027390 <ns_printf>
do
{
ch = (pio->getch)(pio->id);
802759c: e0bfff17 ldw r2,-4(fp)
80275a0: 10800317 ldw r2,12(r2)
80275a4: e0ffff17 ldw r3,-4(fp)
80275a8: 18c00217 ldw r3,8(r3)
80275ac: 1809883a mov r4,r3
80275b0: 103ee83a callr r2
80275b4: e0bffe15 stw r2,-8(fp)
if (ch == 0)
80275b8: e0bffe17 ldw r2,-8(fp)
80275bc: 1000011e bne r2,zero,80275c4 <con_page+0x80>
tk_yield(); /* Give timeslice to other processes */
80275c0: 8027ce40 call 8027ce4 <tk_yield>
} while (ch == 0) ;
80275c4: e0bffe17 ldw r2,-8(fp)
80275c8: 103ff426 beq r2,zero,802759c <con_page+0x58>
/* if there is fatal error, we don't want to do any I/O */
if (ch == -1) /* fatal error */
80275cc: e0bffe17 ldw r2,-8(fp)
80275d0: 10bfffd8 cmpnei r2,r2,-1
80275d4: 1000021e bne r2,zero,80275e0 <con_page+0x9c>
return 1 ;
80275d8: 00800044 movi r2,1
80275dc: 00000a06 br 8027608 <con_page+0xc4>
ns_printf(pio,"\n");
80275e0: 01420174 movhi r5,2053
80275e4: 29688404 addi r5,r5,-24048
80275e8: e13fff17 ldw r4,-4(fp)
80275ec: 80273900 call 8027390 <ns_printf>
if (ch == 27) /* ESC key pressed */
80275f0: e0bffe17 ldw r2,-8(fp)
80275f4: 108006d8 cmpnei r2,r2,27
80275f8: 1000021e bne r2,zero,8027604 <con_page+0xc0>
return 1 ;
80275fc: 00800044 movi r2,1
8027600: 00000106 br 8027608 <con_page+0xc4>
}
}
return 0;
8027604: 0005883a mov r2,zero
}
8027608: e037883a mov sp,fp
802760c: dfc00117 ldw ra,4(sp)
8027610: df000017 ldw fp,0(sp)
8027614: dec00204 addi sp,sp,8
8027618: f800283a ret
0802761c <parse_args>:
char **parse_args(char *buf, int argc, int *pargc_index)
{
802761c: defff704 addi sp,sp,-36
8027620: dfc00815 stw ra,32(sp)
8027624: df000715 stw fp,28(sp)
8027628: df000704 addi fp,sp,28
802762c: e13ffb15 stw r4,-20(fp)
8027630: e17ffa15 stw r5,-24(fp)
8027634: e1bff915 stw r6,-28(fp)
/* This routine assumes buf is a null terminated string */
int i;
int len;
char *bp = buf;
8027638: e0bffb17 ldw r2,-20(fp)
802763c: e0bffe15 stw r2,-8(fp)
char **pargv = NULL;
8027640: e03ffd15 stw zero,-12(fp)
*pargc_index = 0;
8027644: e0bff917 ldw r2,-28(fp)
8027648: 10000015 stw zero,0(r2)
if (buf == NULL)
802764c: e0bffb17 ldw r2,-20(fp)
8027650: 1000021e bne r2,zero,802765c <parse_args+0x40>
{
return (NULL);
8027654: 0005883a mov r2,zero
8027658: 00006906 br 8027800 <parse_args+0x1e4>
}
len = strlen(buf);
802765c: e13ffb17 ldw r4,-20(fp)
8027660: 8002dac0 call 8002dac <strlen>
8027664: e0bffc15 stw r2,-16(fp)
if (len <= 0)
8027668: e0bffc17 ldw r2,-16(fp)
802766c: 00800216 blt zero,r2,8027678 <parse_args+0x5c>
{
return (NULL);
8027670: 0005883a mov r2,zero
8027674: 00006206 br 8027800 <parse_args+0x1e4>
}
pargv = (char **) npalloc(argc * sizeof(char *));
8027678: e0bffa17 ldw r2,-24(fp)
802767c: 100490ba slli r2,r2,2
8027680: 1009883a mov r4,r2
8027684: 802982c0 call 802982c <npalloc>
8027688: e0bffd15 stw r2,-12(fp)
if (pargv == NULL)
802768c: e0bffd17 ldw r2,-12(fp)
8027690: 1000051e bne r2,zero,80276a8 <parse_args+0x8c>
{
return (NULL);
8027694: 0005883a mov r2,zero
8027698: 00005906 br 8027800 <parse_args+0x1e4>
}
/* skip the initial blanks if any */
while (*bp == ' ')
{
bp++;
802769c: e0bffe17 ldw r2,-8(fp)
80276a0: 10800044 addi r2,r2,1
80276a4: e0bffe15 stw r2,-8(fp)
while (*bp == ' ')
80276a8: e0bffe17 ldw r2,-8(fp)
80276ac: 10800003 ldbu r2,0(r2)
80276b0: 10803fcc andi r2,r2,255
80276b4: 1080201c xori r2,r2,128
80276b8: 10bfe004 addi r2,r2,-128
80276bc: 10800820 cmpeqi r2,r2,32
80276c0: 103ff61e bne r2,zero,802769c <parse_args+0x80>
}
while ((*bp != '\0') && ((*pargc_index) < argc))
80276c4: 00002e06 br 8027780 <parse_args+0x164>
{
pargv[(*pargc_index)] = bp;
80276c8: e0bff917 ldw r2,-28(fp)
80276cc: 10800017 ldw r2,0(r2)
80276d0: 100490ba slli r2,r2,2
80276d4: e0fffd17 ldw r3,-12(fp)
80276d8: 1885883a add r2,r3,r2
80276dc: e0fffe17 ldw r3,-8(fp)
80276e0: 10c00015 stw r3,0(r2)
(*pargc_index)++;
80276e4: e0bff917 ldw r2,-28(fp)
80276e8: 10800017 ldw r2,0(r2)
80276ec: 10c00044 addi r3,r2,1
80276f0: e0bff917 ldw r2,-28(fp)
80276f4: 10c00015 stw r3,0(r2)
while (*bp != ' ' && *bp != '\0')
80276f8: 00000306 br 8027708 <parse_args+0xec>
{
bp++;
80276fc: e0bffe17 ldw r2,-8(fp)
8027700: 10800044 addi r2,r2,1
8027704: e0bffe15 stw r2,-8(fp)
while (*bp != ' ' && *bp != '\0')
8027708: e0bffe17 ldw r2,-8(fp)
802770c: 10800003 ldbu r2,0(r2)
8027710: 10803fcc andi r2,r2,255
8027714: 1080201c xori r2,r2,128
8027718: 10bfe004 addi r2,r2,-128
802771c: 10800820 cmpeqi r2,r2,32
8027720: 10000a1e bne r2,zero,802774c <parse_args+0x130>
8027724: e0bffe17 ldw r2,-8(fp)
8027728: 10800003 ldbu r2,0(r2)
802772c: 10803fcc andi r2,r2,255
8027730: 1080201c xori r2,r2,128
8027734: 10bfe004 addi r2,r2,-128
8027738: 103ff01e bne r2,zero,80276fc <parse_args+0xe0>
}
while (*bp == ' ' && *bp != '\0')
802773c: 00000306 br 802774c <parse_args+0x130>
{
bp++;
8027740: e0bffe17 ldw r2,-8(fp)
8027744: 10800044 addi r2,r2,1
8027748: e0bffe15 stw r2,-8(fp)
while (*bp == ' ' && *bp != '\0')
802774c: e0bffe17 ldw r2,-8(fp)
8027750: 10800003 ldbu r2,0(r2)
8027754: 10803fcc andi r2,r2,255
8027758: 1080201c xori r2,r2,128
802775c: 10bfe004 addi r2,r2,-128
8027760: 10800818 cmpnei r2,r2,32
8027764: 1000061e bne r2,zero,8027780 <parse_args+0x164>
8027768: e0bffe17 ldw r2,-8(fp)
802776c: 10800003 ldbu r2,0(r2)
8027770: 10803fcc andi r2,r2,255
8027774: 1080201c xori r2,r2,128
8027778: 10bfe004 addi r2,r2,-128
802777c: 103ff01e bne r2,zero,8027740 <parse_args+0x124>
while ((*bp != '\0') && ((*pargc_index) < argc))
8027780: e0bffe17 ldw r2,-8(fp)
8027784: 10800003 ldbu r2,0(r2)
8027788: 10803fcc andi r2,r2,255
802778c: 1080201c xori r2,r2,128
8027790: 10bfe004 addi r2,r2,-128
8027794: 10000426 beq r2,zero,80277a8 <parse_args+0x18c>
8027798: e0bff917 ldw r2,-28(fp)
802779c: 10c00017 ldw r3,0(r2)
80277a0: e0bffa17 ldw r2,-24(fp)
80277a4: 18bfc816 blt r3,r2,80276c8 <parse_args+0xac>
}
}
for (i = 0; i < len; i++)
80277a8: e03fff15 stw zero,-4(fp)
80277ac: 00001006 br 80277f0 <parse_args+0x1d4>
{
if (buf[i] == ' ')
80277b0: e0bfff17 ldw r2,-4(fp)
80277b4: e0fffb17 ldw r3,-20(fp)
80277b8: 1885883a add r2,r3,r2
80277bc: 10800003 ldbu r2,0(r2)
80277c0: 10803fcc andi r2,r2,255
80277c4: 1080201c xori r2,r2,128
80277c8: 10bfe004 addi r2,r2,-128
80277cc: 10800818 cmpnei r2,r2,32
80277d0: 1000041e bne r2,zero,80277e4 <parse_args+0x1c8>
buf[i] = '\0';
80277d4: e0bfff17 ldw r2,-4(fp)
80277d8: e0fffb17 ldw r3,-20(fp)
80277dc: 1885883a add r2,r3,r2
80277e0: 10000005 stb zero,0(r2)
for (i = 0; i < len; i++)
80277e4: e0bfff17 ldw r2,-4(fp)
80277e8: 10800044 addi r2,r2,1
80277ec: e0bfff15 stw r2,-4(fp)
80277f0: e0ffff17 ldw r3,-4(fp)
80277f4: e0bffc17 ldw r2,-16(fp)
80277f8: 18bfed16 blt r3,r2,80277b0 <parse_args+0x194>
{
printf("pargv[%d] = %s\n", i, pargv[i]);
}
#endif
return (pargv);
80277fc: e0bffd17 ldw r2,-12(fp)
}
8027800: e037883a mov sp,fp
8027804: dfc00117 ldw ra,4(sp)
8027808: df000017 ldw fp,0(sp)
802780c: dec00204 addi sp,sp,8
8027810: f800283a ret
08027814 <netmain>:
* RETURNS:
*/
int
netmain(void)
{
8027814: defffc04 addi sp,sp,-16
8027818: dfc00315 stw ra,12(sp)
802781c: df000215 stw fp,8(sp)
8027820: df000204 addi fp,sp,8
int i;
int e;
iniche_net_ready = FALSE;
8027824: d0206f15 stw zero,-32324(gp)
e = prep_modules();
8027828: 8038a5c0 call 8038a5c <prep_modules>
802782c: e0bffe15 stw r2,-8(fp)
/* Create the threads for net, timer, and apps */
for (i = 0; i < num_net_tasks; i++)
8027830: e03fff15 stw zero,-4(fp)
8027834: 00001a06 br 80278a0 <netmain+0x8c>
{
e = TK_NEWTASK(&nettasks[i]);
8027838: e0bfff17 ldw r2,-4(fp)
802783c: 10c00624 muli r3,r2,24
8027840: 00820174 movhi r2,2053
8027844: 10b1ec04 addi r2,r2,-14416
8027848: 1885883a add r2,r3,r2
802784c: 1009883a mov r4,r2
8027850: 80290740 call 8029074 <TK_NEWTASK>
8027854: e0bffe15 stw r2,-8(fp)
if (e != 0)
8027858: e0bffe17 ldw r2,-8(fp)
802785c: 10000d26 beq r2,zero,8027894 <netmain+0x80>
{
dprintf("task create error\n");
8027860: 01020174 movhi r4,2053
8027864: 2128b504 addi r4,r4,-23852
8027868: 8002d9c0 call 8002d9c <puts>
panic((char *)&nettasks[i].name);
802786c: e0bfff17 ldw r2,-4(fp)
8027870: 10800624 muli r2,r2,24
8027874: 10c00104 addi r3,r2,4
8027878: 00820174 movhi r2,2053
802787c: 10b1ec04 addi r2,r2,-14416
8027880: 1885883a add r2,r3,r2
8027884: 1009883a mov r4,r2
8027888: 80271780 call 8027178 <panic>
return -1; /* compiler warnings */
802788c: 00bfffc4 movi r2,-1
8027890: 00001306 br 80278e0 <netmain+0xcc>
for (i = 0; i < num_net_tasks; i++)
8027894: e0bfff17 ldw r2,-4(fp)
8027898: 10800044 addi r2,r2,1
802789c: e0bfff15 stw r2,-4(fp)
80278a0: d0a01417 ldw r2,-32688(gp)
80278a4: e0ffff17 ldw r3,-4(fp)
80278a8: 18bfe316 blt r3,r2,8027838 <netmain+0x24>
}
}
e = create_apptasks();
80278ac: 8038e380 call 8038e38 <create_apptasks>
80278b0: e0bffe15 stw r2,-8(fp)
if (e != 0)
80278b4: e0bffe17 ldw r2,-8(fp)
80278b8: 10000826 beq r2,zero,80278dc <netmain+0xc8>
{
dprintf("task create error\n");
80278bc: 01020174 movhi r4,2053
80278c0: 2128b504 addi r4,r4,-23852
80278c4: 8002d9c0 call 8002d9c <puts>
panic("netmain");
80278c8: 01020174 movhi r4,2053
80278cc: 2128ba04 addi r4,r4,-23832
80278d0: 80271780 call 8027178 <panic>
return -1; /* compiler warnings */
80278d4: 00bfffc4 movi r2,-1
80278d8: 00000106 br 80278e0 <netmain+0xcc>
#ifdef MAIN_TASK_IS_NET
tk_netmain(TK_NETMAINPARM);
panic("net task return");
return -1;
#else
return 0;
80278dc: 0005883a mov r2,zero
#endif
#endif /* NO_INET_STACK */
}
80278e0: e037883a mov sp,fp
80278e4: dfc00117 ldw ra,4(sp)
80278e8: df000017 ldw fp,0(sp)
80278ec: dec00204 addi sp,sp,8
80278f0: f800283a ret
080278f4 <tk_netmain>:
* RETURNS: n/a
*/
#ifndef NO_INET_STACK
TK_ENTRY(tk_netmain)
{
80278f4: defffc04 addi sp,sp,-16
80278f8: dfc00315 stw ra,12(sp)
80278fc: df000215 stw fp,8(sp)
8027900: df000204 addi fp,sp,8
8027904: e13ffe15 stw r4,-8(fp)
netmain_init(); /* initialize all modules */
8027908: 80386dc0 call 80386dc <netmain_init>
iniche_net_ready = TRUE; /* let the other threads spin */
802790c: 00800044 movi r2,1
8027910: d0a06f15 stw r2,-32324(gp)
for (;;)
{
TK_NETRX_BLOCK();
8027914: d0a08017 ldw r2,-32256(gp)
8027918: e0ffffc4 addi r3,fp,-1
802791c: 180d883a mov r6,r3
8027920: 01401904 movi r5,100
8027924: 1009883a mov r4,r2
8027928: 8015a600 call 8015a60 <OSSemPend>
802792c: e0bfffc3 ldbu r2,-1(fp)
8027930: 10803fcc andi r2,r2,255
8027934: 10000526 beq r2,zero,802794c <tk_netmain+0x58>
8027938: e0bfffc3 ldbu r2,-1(fp)
802793c: 10803fcc andi r2,r2,255
8027940: 108002a0 cmpeqi r2,r2,10
8027944: 1000011e bne r2,zero,802794c <tk_netmain+0x58>
8027948: 8028cd40 call 8028cd4 <dtrap>
netmain_wakes++; /* count wakeups */
802794c: d0a06d17 ldw r2,-32332(gp)
8027950: 10800044 addi r2,r2,1
8027954: d0a06d15 stw r2,-32332(gp)
/* see if there's newly received network packets */
if (rcvdq.q_len)
8027958: 008201b4 movhi r2,2054
802795c: 10b6ad17 ldw r2,-9548(r2)
8027960: 103fec26 beq r2,zero,8027914 <tk_netmain+0x20>
pktdemux();
8027964: 80249c40 call 80249c4 <pktdemux>
TK_NETRX_BLOCK();
8027968: 003fea06 br 8027914 <tk_netmain+0x20>
0802796c <tk_nettick>:
extern int dhc_second(void);
#endif
#ifndef NO_INET_TICK
TK_ENTRY(tk_nettick)
{
802796c: defffd04 addi sp,sp,-12
8027970: dfc00215 stw ra,8(sp)
8027974: df000115 stw fp,4(sp)
8027978: df000104 addi fp,sp,4
802797c: e13fff15 stw r4,-4(fp)
/* wait till the stack is initialized */
while (!iniche_net_ready)
8027980: 00000206 br 802798c <tk_nettick+0x20>
* run to restart it.
*/
#ifdef DHCP_CLIENT
dhc_second();
#endif
TK_SLEEP(1);
8027984: 01000084 movi r4,2
8027988: 801730c0 call 801730c <OSTimeDly>
while (!iniche_net_ready)
802798c: d0a06f17 ldw r2,-32324(gp)
8027990: 103ffc26 beq r2,zero,8027984 <tk_nettick+0x18>
}
for (;;)
{
TK_SLEEP(SYS_SHORT_SLEEP);
8027994: 01000084 movi r4,2
8027998: 801730c0 call 801730c <OSTimeDly>
nettick_wakes++; /* count wakeups */
802799c: d0a06e17 ldw r2,-32328(gp)
80279a0: 10800044 addi r2,r2,1
80279a4: d0a06e15 stw r2,-32328(gp)
inet_timer(); /* let various timeouts occur */
80279a8: 8038ab00 call 8038ab0 <inet_timer>
TK_SLEEP(SYS_SHORT_SLEEP);
80279ac: 003ff906 br 8027994 <tk_nettick+0x28>
080279b0 <TK_OSTimeDly>:
u_char TK_OSTaskQuery(void);
void TK_OSTimeDly(void)
{
80279b0: defffe04 addi sp,sp,-8
80279b4: dfc00115 stw ra,4(sp)
80279b8: df000015 stw fp,0(sp)
80279bc: d839883a mov fp,sp
OSTimeDly(2);
80279c0: 01000084 movi r4,2
80279c4: 801730c0 call 801730c <OSTimeDly>
}
80279c8: 0001883a nop
80279cc: e037883a mov sp,fp
80279d0: dfc00117 ldw ra,4(sp)
80279d4: df000017 ldw fp,0(sp)
80279d8: dec00204 addi sp,sp,8
80279dc: f800283a ret
080279e0 <TK_OSTaskResume>:
void TK_OSTaskResume(u_char * Id)
{
80279e0: defffc04 addi sp,sp,-16
80279e4: dfc00315 stw ra,12(sp)
80279e8: df000215 stw fp,8(sp)
80279ec: df000204 addi fp,sp,8
80279f0: e13ffe15 stw r4,-8(fp)
INT8U err;
err = OSTaskResume(*Id);
80279f4: e0bffe17 ldw r2,-8(fp)
80279f8: 10800003 ldbu r2,0(r2)
80279fc: 10803fcc andi r2,r2,255
8027a00: 1009883a mov r4,r2
8027a04: 8016ec00 call 8016ec0 <OSTaskResume>
8027a08: e0bfffc5 stb r2,-1(fp)
#ifdef NPDEBUG
if ((err != OS_NO_ERR) && (err != OS_TASK_NOT_SUSPENDED))
8027a0c: e0bfffc3 ldbu r2,-1(fp)
8027a10: 10000a26 beq r2,zero,8027a3c <TK_OSTaskResume+0x5c>
8027a14: e0bfffc3 ldbu r2,-1(fp)
8027a18: 10801120 cmpeqi r2,r2,68
8027a1c: 1000071e bne r2,zero,8027a3c <TK_OSTaskResume+0x5c>
{
dprintf("ChronOS API call failure, to Resume Suspended Task!\n");
8027a20: 01020174 movhi r4,2053
8027a24: 2128bc04 addi r4,r4,-23824
8027a28: 8002d9c0 call 8002d9c <puts>
dtrap();
8027a2c: 8028cd40 call 8028cd4 <dtrap>
panic("TK_OSTaskResume");
8027a30: 01020174 movhi r4,2053
8027a34: 2128c904 addi r4,r4,-23772
8027a38: 80271780 call 8027178 <panic>
}
#endif
}
8027a3c: 0001883a nop
8027a40: e037883a mov sp,fp
8027a44: dfc00117 ldw ra,4(sp)
8027a48: df000017 ldw fp,0(sp)
8027a4c: dec00204 addi sp,sp,8
8027a50: f800283a ret
08027a54 <tcp_sleep>:
*
* RETURN: none
*/
void
tcp_sleep(void * event)
{
8027a54: defffb04 addi sp,sp,-20
8027a58: dfc00415 stw ra,16(sp)
8027a5c: df000315 stw fp,12(sp)
8027a60: df000304 addi fp,sp,12
8027a64: e13ffd15 stw r4,-12(fp)
int i;
INT8U err;
for (i = 0; i < GLOBWAKE_SZ; i++)
8027a68: e03fff15 stw zero,-4(fp)
8027a6c: 00003d06 br 8027b64 <tcp_sleep+0x110>
{
if (global_TCPwakeup_set[i].soc_event == NULL)
8027a70: e0bfff17 ldw r2,-4(fp)
8027a74: 10c00324 muli r3,r2,12
8027a78: 008201b4 movhi r2,2054
8027a7c: 1885883a add r2,r3,r2
8027a80: 10b82017 ldw r2,-8064(r2)
8027a84: 1000341e bne r2,zero,8027b58 <tcp_sleep+0x104>
{
global_TCPwakeup_set[i].soc_event = event;
8027a88: e0bfff17 ldw r2,-4(fp)
8027a8c: 11000324 muli r4,r2,12
8027a90: e0fffd17 ldw r3,-12(fp)
8027a94: 008201b4 movhi r2,2054
8027a98: 2085883a add r2,r4,r2
8027a9c: 10f82015 stw r3,-8064(r2)
global_TCPwakeup_set[i].ctick = cticks;
8027aa0: d0e07d17 ldw r3,-32268(gp)
8027aa4: e0bfff17 ldw r2,-4(fp)
8027aa8: 11000324 muli r4,r2,12
8027aac: 008201b4 movhi r2,2054
8027ab0: 2085883a add r2,r4,r2
8027ab4: 10f81f15 stw r3,-8068(r2)
if (i > global_TCPwakeup_setIndx)
8027ab8: d0e07c17 ldw r3,-32272(gp)
8027abc: e0bfff17 ldw r2,-4(fp)
8027ac0: 1880020e bge r3,r2,8027acc <tcp_sleep+0x78>
global_TCPwakeup_setIndx = i;
8027ac4: e0bfff17 ldw r2,-4(fp)
8027ac8: d0a07c15 stw r2,-32272(gp)
tcp_sleep_count++;
8027acc: d0a07817 ldw r2,-32288(gp)
8027ad0: 10800044 addi r2,r2,1
8027ad4: d0a07815 stw r2,-32288(gp)
/* Give up the lock before going to sleep. This can
* potentially cause a context switch to the task
* signaling the event.
*/
UNLOCK_NET_RESOURCE(NET_RESID);
8027ad8: 0009883a mov r4,zero
8027adc: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
/* don't wait forever in case we miss the event */
OSSemPend(global_TCPwakeup_set[i].semaphore, TPS, &err);
8027ae0: e0bfff17 ldw r2,-4(fp)
8027ae4: 10c00324 muli r3,r2,12
8027ae8: 008201b4 movhi r2,2054
8027aec: 1885883a add r2,r3,r2
8027af0: 10b82117 ldw r2,-8060(r2)
8027af4: e0fffec4 addi r3,fp,-5
8027af8: 180d883a mov r6,r3
8027afc: 01401904 movi r5,100
8027b00: 1009883a mov r4,r2
8027b04: 8015a600 call 8015a60 <OSSemPend>
if (err == 10)
8027b08: e0bffec3 ldbu r2,-5(fp)
8027b0c: 10803fcc andi r2,r2,255
8027b10: 10800298 cmpnei r2,r2,10
8027b14: 10000d1e bne r2,zero,8027b4c <tcp_sleep+0xf8>
{
++tcp_sleep_timeout;
8027b18: d0a07117 ldw r2,-32316(gp)
8027b1c: 10800044 addi r2,r2,1
8027b20: d0a07115 stw r2,-32316(gp)
/* clear the entry */
global_TCPwakeup_set[i].ctick = 0;
8027b24: e0bfff17 ldw r2,-4(fp)
8027b28: 10c00324 muli r3,r2,12
8027b2c: 008201b4 movhi r2,2054
8027b30: 1885883a add r2,r3,r2
8027b34: 10381f15 stw zero,-8068(r2)
global_TCPwakeup_set[i].soc_event = NULL;
8027b38: e0bfff17 ldw r2,-4(fp)
8027b3c: 10c00324 muli r3,r2,12
8027b40: 008201b4 movhi r2,2054
8027b44: 1885883a add r2,r3,r2
8027b48: 10382015 stw zero,-8064(r2)
}
/* Regain the lock */
LOCK_NET_RESOURCE(NET_RESID);
8027b4c: 0009883a mov r4,zero
8027b50: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
8027b54: 00000d06 br 8027b8c <tcp_sleep+0x138>
for (i = 0; i < GLOBWAKE_SZ; i++)
8027b58: e0bfff17 ldw r2,-4(fp)
8027b5c: 10800044 addi r2,r2,1
8027b60: e0bfff15 stw r2,-4(fp)
8027b64: e0bfff17 ldw r2,-4(fp)
8027b68: 10800510 cmplti r2,r2,20
8027b6c: 103fc01e bne r2,zero,8027a70 <tcp_sleep+0x1c>
/* The table is full. Try calling TK_YIELD() and hope for the best.
* The user should increase the size of the table.
* We'll record the max index for debugging purposes.
*/
global_TCPwakeup_setIndx = i;
8027b70: e0bfff17 ldw r2,-4(fp)
8027b74: d0a07c15 stw r2,-32272(gp)
UNLOCK_NET_RESOURCE(NET_RESID);
8027b78: 0009883a mov r4,zero
8027b7c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
TK_YIELD();
8027b80: 8027ce40 call 8027ce4 <tk_yield>
LOCK_NET_RESOURCE(NET_RESID);
8027b84: 0009883a mov r4,zero
8027b88: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
}
8027b8c: e037883a mov sp,fp
8027b90: dfc00117 ldw ra,4(sp)
8027b94: df000017 ldw fp,0(sp)
8027b98: dec00204 addi sp,sp,8
8027b9c: f800283a ret
08027ba0 <tcp_wakeup>:
*
* RETURN: none
*/
void
tcp_wakeup(void *event)
{
8027ba0: defffc04 addi sp,sp,-16
8027ba4: dfc00315 stw ra,12(sp)
8027ba8: df000215 stw fp,8(sp)
8027bac: df000204 addi fp,sp,8
8027bb0: e13ffe15 stw r4,-8(fp)
int i;
OSSchedLock();
8027bb4: 80109080 call 8010908 <OSSchedLock>
for (i = 0; i < GLOBWAKE_SZ; i++)
8027bb8: e03fff15 stw zero,-4(fp)
8027bbc: 00002406 br 8027c50 <tcp_wakeup+0xb0>
{
if ((global_TCPwakeup_set[i].ctick != 0) &&
8027bc0: e0bfff17 ldw r2,-4(fp)
8027bc4: 10c00324 muli r3,r2,12
8027bc8: 008201b4 movhi r2,2054
8027bcc: 1885883a add r2,r3,r2
8027bd0: 10b81f17 ldw r2,-8068(r2)
8027bd4: 10001b26 beq r2,zero,8027c44 <tcp_wakeup+0xa4>
(global_TCPwakeup_set[i].soc_event == event))
8027bd8: e0bfff17 ldw r2,-4(fp)
8027bdc: 10c00324 muli r3,r2,12
8027be0: 008201b4 movhi r2,2054
8027be4: 1885883a add r2,r3,r2
8027be8: 10b82017 ldw r2,-8064(r2)
if ((global_TCPwakeup_set[i].ctick != 0) &&
8027bec: e0fffe17 ldw r3,-8(fp)
8027bf0: 1880141e bne r3,r2,8027c44 <tcp_wakeup+0xa4>
{
/* signal the event */
OSSemPost(global_TCPwakeup_set[i].semaphore);
8027bf4: e0bfff17 ldw r2,-4(fp)
8027bf8: 10c00324 muli r3,r2,12
8027bfc: 008201b4 movhi r2,2054
8027c00: 1885883a add r2,r3,r2
8027c04: 10b82117 ldw r2,-8060(r2)
8027c08: 1009883a mov r4,r2
8027c0c: 8015d840 call 8015d84 <OSSemPost>
/* clear the entry */
global_TCPwakeup_set[i].ctick = 0;
8027c10: e0bfff17 ldw r2,-4(fp)
8027c14: 10c00324 muli r3,r2,12
8027c18: 008201b4 movhi r2,2054
8027c1c: 1885883a add r2,r3,r2
8027c20: 10381f15 stw zero,-8068(r2)
global_TCPwakeup_set[i].soc_event = NULL;
8027c24: e0bfff17 ldw r2,-4(fp)
8027c28: 10c00324 muli r3,r2,12
8027c2c: 008201b4 movhi r2,2054
8027c30: 1885883a add r2,r3,r2
8027c34: 10382015 stw zero,-8064(r2)
tcp_wakeup_count++;
8027c38: d0a07917 ldw r2,-32284(gp)
8027c3c: 10800044 addi r2,r2,1
8027c40: d0a07915 stw r2,-32284(gp)
for (i = 0; i < GLOBWAKE_SZ; i++)
8027c44: e0bfff17 ldw r2,-4(fp)
8027c48: 10800044 addi r2,r2,1
8027c4c: e0bfff15 stw r2,-4(fp)
8027c50: e0bfff17 ldw r2,-4(fp)
8027c54: 10800510 cmplti r2,r2,20
8027c58: 103fd91e bne r2,zero,8027bc0 <tcp_wakeup+0x20>
}
}
OSSchedUnlock();
8027c5c: 80109940 call 8010994 <OSSchedUnlock>
}
8027c60: 0001883a nop
8027c64: e037883a mov sp,fp
8027c68: dfc00117 ldw ra,4(sp)
8027c6c: df000017 ldw fp,0(sp)
8027c70: dec00204 addi sp,sp,8
8027c74: f800283a ret
08027c78 <TK_OSTaskQuery>:
u_char TK_OSTaskQuery(void)
{
8027c78: deffe204 addi sp,sp,-120
8027c7c: dfc01d15 stw ra,116(sp)
8027c80: df001c15 stw fp,112(sp)
8027c84: df001c04 addi fp,sp,112
OS_TCB task_data;
INT8U err, task_prio;
err = OSTaskQuery(OS_PRIO_SELF, &task_data);
8027c88: e0bfe404 addi r2,fp,-112
8027c8c: 100b883a mov r5,r2
8027c90: 01003fc4 movi r4,255
8027c94: 80172200 call 8017220 <OSTaskQuery>
8027c98: e0bfffc5 stb r2,-1(fp)
if (err == OS_NO_ERR)
8027c9c: e0bfffc3 ldbu r2,-1(fp)
8027ca0: 1000041e bne r2,zero,8027cb4 <TK_OSTaskQuery+0x3c>
{
task_prio = task_data.OSTCBPrio;
8027ca4: e0bff083 ldbu r2,-62(fp)
8027ca8: e0bfff85 stb r2,-2(fp)
dprintf("ChronOS API call failure, unable to identify task!");
panic("TK_OSTaskQuery");
return 0;
}
return task_prio;
8027cac: e0bfff83 ldbu r2,-2(fp)
8027cb0: 00000706 br 8027cd0 <TK_OSTaskQuery+0x58>
dprintf("ChronOS API call failure, unable to identify task!");
8027cb4: 01020174 movhi r4,2053
8027cb8: 2128cd04 addi r4,r4,-23756
8027cbc: 8002c780 call 8002c78 <printf>
panic("TK_OSTaskQuery");
8027cc0: 01020174 movhi r4,2053
8027cc4: 2128da04 addi r4,r4,-23704
8027cc8: 80271780 call 8027178 <panic>
return 0;
8027ccc: 0005883a mov r2,zero
}
8027cd0: e037883a mov sp,fp
8027cd4: dfc00117 ldw ra,4(sp)
8027cd8: df000017 ldw fp,0(sp)
8027cdc: dec00204 addi sp,sp,8
8027ce0: f800283a ret
08027ce4 <tk_yield>:
void
tk_yield(void)
{
8027ce4: defffe04 addi sp,sp,-8
8027ce8: dfc00115 stw ra,4(sp)
8027cec: df000015 stw fp,0(sp)
8027cf0: d839883a mov fp,sp
/* To ensure cycles to the lower priority tasks we should really
* delay by two ticks, but that really hurts performance on some
* long-tick targets. One tick works better overall....
*/
OSTimeDly(1);
8027cf4: 01000044 movi r4,1
8027cf8: 801730c0 call 801730c <OSTimeDly>
}
8027cfc: 0001883a nop
8027d00: e037883a mov sp,fp
8027d04: dfc00117 ldw ra,4(sp)
8027d08: df000017 ldw fp,0(sp)
8027d0c: dec00204 addi sp,sp,8
8027d10: f800283a ret
08027d14 <tk_stats>:
extern struct inet_taskinfo * nettask;
extern int num_net_tasks;
int
tk_stats(void * pio)
{
8027d14: deffef04 addi sp,sp,-68
8027d18: dfc01015 stw ra,64(sp)
8027d1c: df000f15 stw fp,60(sp)
8027d20: df000f04 addi fp,sp,60
8027d24: e13ff215 stw r4,-56(fp)
int stackuse;
char name[OS_TASK_NAME_SIZE+1];
INT8U err;
ns_printf(pio, "ChronOS RTOS stats:\n");
8027d28: 01420174 movhi r5,2053
8027d2c: 2968de04 addi r5,r5,-23688
8027d30: e13ff217 ldw r4,-56(fp)
8027d34: 80273900 call 8027390 <ns_printf>
#ifdef NO_INICHE_EXTENSIONS
ns_printf(pio, "Context switches; Delay: %lu\n",
8027d38: d0a04f17 ldw r2,-32452(gp)
8027d3c: 100d883a mov r6,r2
8027d40: 01420174 movhi r5,2053
8027d44: 2968e404 addi r5,r5,-23664
8027d48: e13ff217 ldw r4,-56(fp)
8027d4c: 80273900 call 8027390 <ns_printf>
#else
ns_printf(pio, "Context switches; Delay: %lu, Interrupt: %lu\n",
OSCtxSwCtr, OSCtxIntCtr);
#endif
ns_printf(pio, " name prio. state wakeups stack-size stack-use \n");
8027d50: 01420174 movhi r5,2053
8027d54: 2968ec04 addi r5,r5,-23632
8027d58: e13ff217 ldw r4,-56(fp)
8027d5c: 80273900 call 8027390 <ns_printf>
for (t = 0; t <= OS_LOWEST_PRIO ; t++)
8027d60: e03fff15 stw zero,-4(fp)
8027d64: 00005006 br 8027ea8 <tk_stats+0x194>
{
/* get pointer to TCB and see if entry is in use and not a mutex */
tcb = OSTCBPrioTbl[t];
8027d68: e0bfff17 ldw r2,-4(fp)
8027d6c: 100690ba slli r3,r2,2
8027d70: 008201b4 movhi r2,2054
8027d74: 1885883a add r2,r3,r2
8027d78: 10b55d17 ldw r2,-10892(r2)
8027d7c: e0bffd15 stw r2,-12(fp)
if ((tcb == NULL) || (tcb == (OS_TCB *)1))
8027d80: e0bffd17 ldw r2,-12(fp)
8027d84: 10004426 beq r2,zero,8027e98 <tk_stats+0x184>
8027d88: e0bffd17 ldw r2,-12(fp)
8027d8c: 10800058 cmpnei r2,r2,1
8027d90: 10004126 beq r2,zero,8027e98 <tk_stats+0x184>
continue;
OSTaskNameGet(tcb->OSTCBPrio, (INT8U *)&name, &err);
8027d94: e0bffd17 ldw r2,-12(fp)
8027d98: 10800c83 ldbu r2,50(r2)
8027d9c: 10803fcc andi r2,r2,255
8027da0: e13ff384 addi r4,fp,-50
8027da4: e0fff3c4 addi r3,fp,-49
8027da8: 200d883a mov r6,r4
8027dac: 180b883a mov r5,r3
8027db0: 1009883a mov r4,r2
8027db4: 8016c2c0 call 8016c2c <OSTaskNameGet>
#ifdef NO_INICHE_EXTENSIONS
ns_printf(pio, "%15s %2d 0x%04x, --- ",
name, tcb->OSTCBPrio, tcb->OSTCBStat);
8027db8: e0bffd17 ldw r2,-12(fp)
8027dbc: 10800c83 ldbu r2,50(r2)
ns_printf(pio, "%15s %2d 0x%04x, --- ",
8027dc0: 11003fcc andi r4,r2,255
name, tcb->OSTCBPrio, tcb->OSTCBStat);
8027dc4: e0bffd17 ldw r2,-12(fp)
8027dc8: 10800c03 ldbu r2,48(r2)
ns_printf(pio, "%15s %2d 0x%04x, --- ",
8027dcc: 10803fcc andi r2,r2,255
8027dd0: e0fff3c4 addi r3,fp,-49
8027dd4: d8800015 stw r2,0(sp)
8027dd8: 200f883a mov r7,r4
8027ddc: 180d883a mov r6,r3
8027de0: 01420174 movhi r5,2053
8027de4: 2968fc04 addi r5,r5,-23568
8027de8: e13ff217 ldw r4,-56(fp)
8027dec: 80273900 call 8027390 <ns_printf>
/* Find lowest non-zero value in stack so we can estimate the
* unused portion. Subtracting this from size gives us the used
* portion of the stack.
*/
#if OS_TASK_CREATE_EXT_EN > 0
if(tcb->OSTCBStkBottom && tcb->OSTCBStkSize)
8027df0: e0bffd17 ldw r2,-12(fp)
8027df4: 10800217 ldw r2,8(r2)
8027df8: 10002226 beq r2,zero,8027e84 <tk_stats+0x170>
8027dfc: e0bffd17 ldw r2,-12(fp)
8027e00: 10800317 ldw r2,12(r2)
8027e04: 10001f26 beq r2,zero,8027e84 <tk_stats+0x170>
{
sp = tcb->OSTCBStkBottom + 1;
8027e08: e0bffd17 ldw r2,-12(fp)
8027e0c: 10800217 ldw r2,8(r2)
8027e10: 10800104 addi r2,r2,4
8027e14: e0bffe15 stw r2,-8(fp)
while(*sp == 0)
8027e18: 00000306 br 8027e28 <tk_stats+0x114>
sp++;
8027e1c: e0bffe17 ldw r2,-8(fp)
8027e20: 10800104 addi r2,r2,4
8027e24: e0bffe15 stw r2,-8(fp)
while(*sp == 0)
8027e28: e0bffe17 ldw r2,-8(fp)
8027e2c: 10800017 ldw r2,0(r2)
8027e30: 103ffa26 beq r2,zero,8027e1c <tk_stats+0x108>
/* This OS traditionally keeps the size in OS_STK (int) units rather
* than bytes, so convert back to bytes for display.
*/
stackuse = (tcb->OSTCBStkSize - (sp - tcb->OSTCBStkBottom)) * sizeof(OS_STK);
8027e34: e0bffd17 ldw r2,-12(fp)
8027e38: 10800317 ldw r2,12(r2)
8027e3c: e0fffd17 ldw r3,-12(fp)
8027e40: 18c00217 ldw r3,8(r3)
8027e44: e13ffe17 ldw r4,-8(fp)
8027e48: 20c7c83a sub r3,r4,r3
8027e4c: 1807d0ba srai r3,r3,2
8027e50: 10c5c83a sub r2,r2,r3
8027e54: 100490ba slli r2,r2,2
8027e58: e0bffc15 stw r2,-16(fp)
ns_printf(pio, "%6d, %6d\n",
tcb->OSTCBStkSize * sizeof(OS_STK), stackuse);
8027e5c: e0bffd17 ldw r2,-12(fp)
8027e60: 10800317 ldw r2,12(r2)
ns_printf(pio, "%6d, %6d\n",
8027e64: 100490ba slli r2,r2,2
8027e68: e1fffc17 ldw r7,-16(fp)
8027e6c: 100d883a mov r6,r2
8027e70: 01420174 movhi r5,2053
8027e74: 29690404 addi r5,r5,-23536
8027e78: e13ff217 ldw r4,-56(fp)
8027e7c: 80273900 call 8027390 <ns_printf>
8027e80: 00000606 br 8027e9c <tk_stats+0x188>
}
else
#endif
{
ns_printf(pio, "No stack data\n");
8027e84: 01420174 movhi r5,2053
8027e88: 29690804 addi r5,r5,-23520
8027e8c: e13ff217 ldw r4,-56(fp)
8027e90: 80273900 call 8027390 <ns_printf>
8027e94: 00000106 br 8027e9c <tk_stats+0x188>
continue;
8027e98: 0001883a nop
for (t = 0; t <= OS_LOWEST_PRIO ; t++)
8027e9c: e0bfff17 ldw r2,-4(fp)
8027ea0: 10800044 addi r2,r2,1
8027ea4: e0bfff15 stw r2,-4(fp)
8027ea8: e0bfff17 ldw r2,-4(fp)
8027eac: 10800550 cmplti r2,r2,21
8027eb0: 103fad1e bne r2,zero,8027d68 <tk_stats+0x54>
}
}
ns_printf(pio, "tcp_sleep_count = %lu, tcp_wakeup_count = %lu\n",
8027eb4: d0a07817 ldw r2,-32288(gp)
8027eb8: d0e07917 ldw r3,-32284(gp)
8027ebc: 180f883a mov r7,r3
8027ec0: 100d883a mov r6,r2
8027ec4: 01420174 movhi r5,2053
8027ec8: 29690c04 addi r5,r5,-23504
8027ecc: e13ff217 ldw r4,-56(fp)
8027ed0: 80273900 call 8027390 <ns_printf>
tcp_sleep_count, tcp_wakeup_count);
ns_printf(pio, "global_TCPwakeup_setIndx = %d, tcp_sleep_timeout = %lu\n",
8027ed4: d0a07c17 ldw r2,-32272(gp)
8027ed8: d0e07117 ldw r3,-32316(gp)
8027edc: 180f883a mov r7,r3
8027ee0: 100d883a mov r6,r2
8027ee4: 01420174 movhi r5,2053
8027ee8: 29691804 addi r5,r5,-23456
8027eec: e13ff217 ldw r4,-56(fp)
8027ef0: 80273900 call 8027390 <ns_printf>
global_TCPwakeup_setIndx, tcp_sleep_timeout);
return 0;
8027ef4: 0005883a mov r2,zero
}
8027ef8: e037883a mov sp,fp
8027efc: dfc00117 ldw ra,4(sp)
8027f00: df000017 ldw fp,0(sp)
8027f04: dec00204 addi sp,sp,8
8027f08: f800283a ret
08027f0c <icmpEcho>:
int
icmpEcho(ip_addr host, /* host to ping - 32 bit, network-endian */
char * data, /* ping data, NULL if don't care */
unsigned datalen, /* length of data to attach to ping request */
unshort pingseq) /* ping sequence number */
{
8027f0c: defff504 addi sp,sp,-44
8027f10: dfc00a15 stw ra,40(sp)
8027f14: df000915 stw fp,36(sp)
8027f18: df000904 addi fp,sp,36
8027f1c: e13ffa15 stw r4,-24(fp)
8027f20: e17ff915 stw r5,-28(fp)
8027f24: e1bff815 stw r6,-32(fp)
8027f28: 3805883a mov r2,r7
8027f2c: e0bff70d sth r2,-36(fp)
PACKET p;
int ip_err;
struct ping * e;
struct ip * pip;
LOCK_NET_RESOURCE(FREEQ_RESID);
8027f30: 01000084 movi r4,2
8027f34: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
p = pk_alloc(PINGHDRSLEN + datalen);
8027f38: e0bff817 ldw r2,-32(fp)
8027f3c: 10800b04 addi r2,r2,44
8027f40: 1009883a mov r4,r2
8027f44: 80284340 call 8028434 <pk_alloc>
8027f48: e0bffe15 stw r2,-8(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8027f4c: 01000084 movi r4,2
8027f50: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (!p)
8027f54: e0bffe17 ldw r2,-8(fp)
8027f58: 1000081e bne r2,zero,8027f7c <icmpEcho+0x70>
{
#ifdef NPDEBUG
if (NDEBUG & IPTRACE)
8027f5c: d0a06617 ldw r2,-32360(gp)
8027f60: 1080800c andi r2,r2,512
8027f64: 10000326 beq r2,zero,8027f74 <icmpEcho+0x68>
dprintf("icmp: can't alloc packet\n");
8027f68: 01020174 movhi r4,2053
8027f6c: 21292d04 addi r4,r4,-23372
8027f70: 8002d9c0 call 8002d9c <puts>
#endif
return(ENP_NOBUFFER);
8027f74: 00bffac4 movi r2,-21
8027f78: 00008606 br 8028194 <icmpEcho+0x288>
}
p->nb_prot = p->nb_buff + PINGHDRSLEN;
8027f7c: e0bffe17 ldw r2,-8(fp)
8027f80: 10800117 ldw r2,4(r2)
8027f84: 10c00b04 addi r3,r2,44
8027f88: e0bffe17 ldw r2,-8(fp)
8027f8c: 10c00315 stw r3,12(r2)
p->nb_plen = datalen;
8027f90: e0bffe17 ldw r2,-8(fp)
8027f94: e0fff817 ldw r3,-32(fp)
8027f98: 10c00415 stw r3,16(r2)
p->fhost = host;
8027f9c: e0bffe17 ldw r2,-8(fp)
8027fa0: e0fffa17 ldw r3,-24(fp)
8027fa4: 10c00715 stw r3,28(r2)
if(host == 0xFFFFFFFF) /* broadcast? */
8027fa8: e0bffa17 ldw r2,-24(fp)
8027fac: 10bfffd8 cmpnei r2,r2,-1
8027fb0: 1000041e bne r2,zero,8027fc4 <icmpEcho+0xb8>
p->net = nets[0]; /* then use first iface */
8027fb4: 008201b4 movhi r2,2054
8027fb8: 10f77017 ldw r3,-8768(r2)
8027fbc: e0bffe17 ldw r2,-8(fp)
8027fc0: 10c00615 stw r3,24(r2)
/* copy in data field */
if (data)
8027fc4: e0bff917 ldw r2,-28(fp)
8027fc8: 10000726 beq r2,zero,8027fe8 <icmpEcho+0xdc>
{
MEMCPY(p->nb_prot, data, datalen);
8027fcc: e0bffe17 ldw r2,-8(fp)
8027fd0: 10800317 ldw r2,12(r2)
8027fd4: e1bff817 ldw r6,-32(fp)
8027fd8: e17ff917 ldw r5,-28(fp)
8027fdc: 1009883a mov r4,r2
8027fe0: 80086b80 call 80086b8 <memcpy>
8027fe4: 00001706 br 8028044 <icmpEcho+0x138>
}
else /* caller didn't specify data */
{
unsigned donedata;
strcpy(p->nb_prot, pingdata);
8027fe8: e0bffe17 ldw r2,-8(fp)
8027fec: 10800317 ldw r2,12(r2)
8027ff0: d0e01517 ldw r3,-32684(gp)
8027ff4: 180b883a mov r5,r3
8027ff8: 1009883a mov r4,r2
8027ffc: 8042f600 call 8042f60 <strcpy>
donedata = (unsigned)strlen(pingdata);
8028000: d0a01517 ldw r2,-32684(gp)
8028004: 1009883a mov r4,r2
8028008: 8002dac0 call 8002dac <strlen>
802800c: e0bfff15 stw r2,-4(fp)
while (donedata < datalen)
8028010: 00000906 br 8028038 <icmpEcho+0x12c>
{
*(p->nb_prot + donedata) = (char)((donedata) & 0x00FF);
8028014: e0bffe17 ldw r2,-8(fp)
8028018: 10c00317 ldw r3,12(r2)
802801c: e0bfff17 ldw r2,-4(fp)
8028020: 1885883a add r2,r3,r2
8028024: e0ffff17 ldw r3,-4(fp)
8028028: 10c00005 stb r3,0(r2)
donedata++;
802802c: e0bfff17 ldw r2,-4(fp)
8028030: 10800044 addi r2,r2,1
8028034: e0bfff15 stw r2,-4(fp)
while (donedata < datalen)
8028038: e0ffff17 ldw r3,-4(fp)
802803c: e0bff817 ldw r2,-32(fp)
8028040: 18bff436 bltu r3,r2,8028014 <icmpEcho+0x108>
}
}
/* adjust packet pointers to icmp ping header */
p->nb_prot -= sizeof(struct ping);
8028044: e0bffe17 ldw r2,-8(fp)
8028048: 10800317 ldw r2,12(r2)
802804c: 10fffe04 addi r3,r2,-8
8028050: e0bffe17 ldw r2,-8(fp)
8028054: 10c00315 stw r3,12(r2)
p->nb_plen += sizeof(struct ping);
8028058: e0bffe17 ldw r2,-8(fp)
802805c: 10800417 ldw r2,16(r2)
8028060: 10c00204 addi r3,r2,8
8028064: e0bffe17 ldw r2,-8(fp)
8028068: 10c00415 stw r3,16(r2)
/* fill in icmp ping header */
e = (struct ping *)p->nb_prot;
802806c: e0bffe17 ldw r2,-8(fp)
8028070: 10800317 ldw r2,12(r2)
8028074: e0bffd15 stw r2,-12(fp)
e->ptype = ECHOREQ;
8028078: e0bffd17 ldw r2,-12(fp)
802807c: 00c00204 movi r3,8
8028080: 10c00005 stb r3,0(r2)
e->pcode = 0;
8028084: e0bffd17 ldw r2,-12(fp)
8028088: 10000045 stb zero,1(r2)
e->pid = 0;
802808c: e0bffd17 ldw r2,-12(fp)
8028090: 1000010d sth zero,4(r2)
e->pseq = pingseq;
8028094: e0bffd17 ldw r2,-12(fp)
8028098: e0fff70b ldhu r3,-36(fp)
802809c: 10c0018d sth r3,6(r2)
/* Calculate the checksum */
e->pchksum = 0;
80280a0: e0bffd17 ldw r2,-12(fp)
80280a4: 1000008d sth zero,2(r2)
if (datalen & 1) /* if data size is odd, pad with a zero */
80280a8: e0bff817 ldw r2,-32(fp)
80280ac: 1080004c andi r2,r2,1
80280b0: 10000526 beq r2,zero,80280c8 <icmpEcho+0x1bc>
*((char*)(e+1) + datalen) = 0;
80280b4: e0bffd17 ldw r2,-12(fp)
80280b8: 10c00204 addi r3,r2,8
80280bc: e0bff817 ldw r2,-32(fp)
80280c0: 1885883a add r2,r3,r2
80280c4: 10000005 stb zero,0(r2)
e->pchksum = ~cksum(e, (ICMPSIZE+datalen+1)>>1);
80280c8: e0bff817 ldw r2,-32(fp)
80280cc: 10800244 addi r2,r2,9
80280d0: 1004d07a srli r2,r2,1
80280d4: 100b883a mov r5,r2
80280d8: e13ffd17 ldw r4,-12(fp)
80280dc: 8026d7c0 call 8026d7c <cksum>
80280e0: 0084303a nor r2,zero,r2
80280e4: 1007883a mov r3,r2
80280e8: e0bffd17 ldw r2,-12(fp)
80280ec: 10c0008d sth r3,2(r2)
/* need to fill in IP addresses at this layer too */
pip = (struct ip *)(p->nb_prot - sizeof(struct ip));
80280f0: e0bffe17 ldw r2,-8(fp)
80280f4: 10800317 ldw r2,12(r2)
80280f8: 10bffb04 addi r2,r2,-20
80280fc: e0bffc15 stw r2,-16(fp)
pip->ip_src = ip_mymach(host);
8028100: e13ffa17 ldw r4,-24(fp)
8028104: 803b0280 call 803b028 <ip_mymach>
8028108: 1007883a mov r3,r2
802810c: e0bffc17 ldw r2,-16(fp)
8028110: 10c00315 stw r3,12(r2)
pip->ip_dest = host;
8028114: e0bffc17 ldw r2,-16(fp)
8028118: e0fffa17 ldw r3,-24(fp)
802811c: 10c00415 stw r3,16(r2)
LOCK_NET_RESOURCE(NET_RESID);
8028120: 0009883a mov r4,zero
8028124: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
ip_err = ip_write(ICMP_PROT, p); /* send down to IP layer */
8028128: e17ffe17 ldw r5,-8(fp)
802812c: 01000044 movi r4,1
8028130: 803a9e80 call 803a9e8 <ip_write>
8028134: e0bffb15 stw r2,-20(fp)
UNLOCK_NET_RESOURCE(NET_RESID);
8028138: 0009883a mov r4,zero
802813c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
/* Errors are negative. A zero means send was OK. a positive number
* usually means we had to ARP. Assume this will work and count a send.
*/
if(ip_err < 0)
8028140: e0bffb17 ldw r2,-20(fp)
8028144: 1000080e bge r2,zero,8028168 <icmpEcho+0x25c>
{
#ifdef NPDEBUG
if (NDEBUG & NETERR)
8028148: d0a06617 ldw r2,-32360(gp)
802814c: 1080020c andi r2,r2,8
8028150: 10000326 beq r2,zero,8028160 <icmpEcho+0x254>
dprintf("icmp: can't send echo request\n");
8028154: 01020174 movhi r4,2053
8028158: 21293404 addi r4,r4,-23344
802815c: 8002d9c0 call 8002d9c <puts>
#endif
/* rfc 1156 seems to say not to count these. (pg 48) -JB- */
/* LOCK_NET_RESOURCE(FREEQ_RESID); */
/* pk_free(p); */
/* UNLOCK_NET_RESOURCE(FREEQ_RESID); */
return(ip_err);
8028160: e0bffb17 ldw r2,-20(fp)
8028164: 00000b06 br 8028194 <icmpEcho+0x288>
}
/* fall to here if we sent echo request OK */
icmp_mib.icmpOutMsgs++;
8028168: 008201b4 movhi r2,2054
802816c: 10b94217 ldw r2,-6904(r2)
8028170: 10c00044 addi r3,r2,1
8028174: 008201b4 movhi r2,2054
8028178: 10f94215 stw r3,-6904(r2)
icmp_mib.icmpOutEchos++;
802817c: 008201b4 movhi r2,2054
8028180: 10b94917 ldw r2,-6876(r2)
8028184: 10c00044 addi r3,r2,1
8028188: 008201b4 movhi r2,2054
802818c: 10f94915 stw r3,-6876(r2)
return(0);
8028190: 0005883a mov r2,zero
}
8028194: e037883a mov sp,fp
8028198: dfc00117 ldw ra,4(sp)
802819c: df000017 ldw fp,0(sp)
80281a0: dec00204 addi sp,sp,8
80281a4: f800283a ret
080281a8 <pk_init>:
* for a PACKET buffer or a data buffer fails, or if there is an inconsistency
* between (bigbufs + lilbufs) and MAXPACKETS) it returns -1.
*/
int pk_init (void)
{
80281a8: defff804 addi sp,sp,-32
80281ac: dfc00715 stw ra,28(sp)
80281b0: df000615 stw fp,24(sp)
80281b4: df000604 addi fp,sp,24
PACKET packet;
unsigned i;
unsigned numpkts = bigbufs + lilbufs;
80281b8: d0e01817 ldw r3,-32672(gp)
80281bc: d0a01617 ldw r2,-32680(gp)
80281c0: 1885883a add r2,r3,r2
80281c4: e0bffc15 stw r2,-16(fp)
u_char align_req;
#ifdef ALIGN_BUFS
align_req = ALIGN_BUFS;
#else
align_req = 0;
80281c8: e03ffbc5 stb zero,-17(fp)
#endif
for (i = 0; i < numpkts; i++)
80281cc: e03fff15 stw zero,-4(fp)
80281d0: 00007806 br 80283b4 <pk_init+0x20c>
{
packet = (PACKET)NB_ALLOC(sizeof(struct netbuf));
80281d4: 01000d04 movi r4,52
80281d8: 802982c0 call 802982c <npalloc>
80281dc: e0bffa15 stw r2,-24(fp)
if (packet == NULL)
80281e0: e0bffa17 ldw r2,-24(fp)
80281e4: 10008026 beq r2,zero,80283e8 <pk_init+0x240>
goto no_pkt_buf;
#ifdef NPDEBUG
if (i >= MAXPACKETS)
80281e8: e0bfff17 ldw r2,-4(fp)
80281ec: 10800f30 cmpltui r2,r2,60
80281f0: 1000051e bne r2,zero,8028208 <pk_init+0x60>
{
dprintf("pk_init: bad define\n");
80281f4: 01020174 movhi r4,2053
80281f8: 21293c04 addi r4,r4,-23312
80281fc: 8002d9c0 call 8002d9c <puts>
return -1;
8028200: 00bfffc4 movi r2,-1
8028204: 00008606 br 8028420 <pk_init+0x278>
}
pktlog[i] = packet; /* save for debugging */
8028208: e0bfff17 ldw r2,-4(fp)
802820c: 100890ba slli r4,r2,2
8028210: e0fffa17 ldw r3,-24(fp)
8028214: 008201b4 movhi r2,2054
8028218: 2085883a add r2,r4,r2
802821c: 10f79f15 stw r3,-8580(r2)
#endif
packet->nb_tstamp = 0L;
8028220: e0bffa17 ldw r2,-24(fp)
8028224: 10000515 stw zero,20(r2)
if (i < bigbufs)
8028228: d0a01817 ldw r2,-32672(gp)
802822c: e0ffff17 ldw r3,-4(fp)
8028230: 18802f2e bgeu r3,r2,80282f0 <pk_init+0x148>
#ifdef NPDEBUG
{
int j;
/* for DEBUG compiles, bracket the data area with special chars */
packet->nb_buff = (char *)BB_ALLOC(bigbufsiz+ALIGN_TYPE+1);
8028234: d0a01917 ldw r2,-32668(gp)
8028238: 10800144 addi r2,r2,5
802823c: 1009883a mov r4,r2
8028240: 80298a00 call 80298a0 <ncpalloc>
8028244: 1007883a mov r3,r2
8028248: e0bffa17 ldw r2,-24(fp)
802824c: 10c00115 stw r3,4(r2)
if (!(packet->nb_buff))
8028250: e0bffa17 ldw r2,-24(fp)
8028254: 10800117 ldw r2,4(r2)
8028258: 10006526 beq r2,zero,80283f0 <pk_init+0x248>
goto no_pkt_buf;
/* Add memory markers for sanity check */
for(j = 0; j < ALIGN_TYPE; j++)
802825c: e03ffe15 stw zero,-8(fp)
8028260: 00000906 br 8028288 <pk_init+0xe0>
*(packet->nb_buff + j) = 'M'; /* MMs at start of buf */
8028264: e0bffa17 ldw r2,-24(fp)
8028268: 10c00117 ldw r3,4(r2)
802826c: e0bffe17 ldw r2,-8(fp)
8028270: 1885883a add r2,r3,r2
8028274: 00c01344 movi r3,77
8028278: 10c00005 stb r3,0(r2)
for(j = 0; j < ALIGN_TYPE; j++)
802827c: e0bffe17 ldw r2,-8(fp)
8028280: 10800044 addi r2,r2,1
8028284: e0bffe15 stw r2,-8(fp)
8028288: e0bffe17 ldw r2,-8(fp)
802828c: 10800110 cmplti r2,r2,4
8028290: 103ff41e bne r2,zero,8028264 <pk_init+0xbc>
*(packet->nb_buff + bigbufsiz + ALIGN_TYPE) = 'M';
8028294: e0bffa17 ldw r2,-24(fp)
8028298: 10c00117 ldw r3,4(r2)
802829c: d0a01917 ldw r2,-32668(gp)
80282a0: 10800104 addi r2,r2,4
80282a4: 1885883a add r2,r3,r2
80282a8: 00c01344 movi r3,77
80282ac: 10c00005 stb r3,0(r2)
packet->nb_buff += ALIGN_TYPE; /* bump buf past MMs */
80282b0: e0bffa17 ldw r2,-24(fp)
80282b4: 10800117 ldw r2,4(r2)
80282b8: 10c00104 addi r3,r2,4
80282bc: e0bffa17 ldw r2,-24(fp)
80282c0: 10c00115 stw r3,4(r2)
#ifdef ALIGN_BUFS
/* align start of buffer pointer to desired offset */
packet->nb_buff += (ALIGN_BUFS - (((u_long) packet->nb_buff) & (ALIGN_BUFS - 1)));
#endif
#endif
if (!(packet->nb_buff))
80282c4: e0bffa17 ldw r2,-24(fp)
80282c8: 10800117 ldw r2,4(r2)
80282cc: 10004a26 beq r2,zero,80283f8 <pk_init+0x250>
goto no_pkt_buf;
packet->nb_blen = bigbufsiz;
80282d0: d0e01917 ldw r3,-32668(gp)
80282d4: e0bffa17 ldw r2,-24(fp)
80282d8: 10c00215 stw r3,8(r2)
q_add(&bigfreeq, packet); /* save it in big pkt free queue */
80282dc: e17ffa17 ldw r5,-24(fp)
80282e0: 010201b4 movhi r4,2054
80282e4: 2137db04 addi r4,r4,-8340
80282e8: 80289900 call 8028990 <putq>
80282ec: 00002e06 br 80283a8 <pk_init+0x200>
#ifdef NPDEBUG
{
int j;
/* for DEBUG compiles, bracket the data area with special chars */
packet->nb_buff = (char *)LB_ALLOC(lilbufsiz+ALIGN_TYPE+1);
80282f0: d0a01717 ldw r2,-32676(gp)
80282f4: 10800144 addi r2,r2,5
80282f8: 1009883a mov r4,r2
80282fc: 80298a00 call 80298a0 <ncpalloc>
8028300: 1007883a mov r3,r2
8028304: e0bffa17 ldw r2,-24(fp)
8028308: 10c00115 stw r3,4(r2)
if (!(packet->nb_buff))
802830c: e0bffa17 ldw r2,-24(fp)
8028310: 10800117 ldw r2,4(r2)
8028314: 10003a26 beq r2,zero,8028400 <pk_init+0x258>
goto no_pkt_buf;
/* Add memory markers for sanity check */
for(j = 0; j < ALIGN_TYPE; j++)
8028318: e03ffd15 stw zero,-12(fp)
802831c: 00000906 br 8028344 <pk_init+0x19c>
*(packet->nb_buff + j) = 'M'; /* MMs at start of buf */
8028320: e0bffa17 ldw r2,-24(fp)
8028324: 10c00117 ldw r3,4(r2)
8028328: e0bffd17 ldw r2,-12(fp)
802832c: 1885883a add r2,r3,r2
8028330: 00c01344 movi r3,77
8028334: 10c00005 stb r3,0(r2)
for(j = 0; j < ALIGN_TYPE; j++)
8028338: e0bffd17 ldw r2,-12(fp)
802833c: 10800044 addi r2,r2,1
8028340: e0bffd15 stw r2,-12(fp)
8028344: e0bffd17 ldw r2,-12(fp)
8028348: 10800110 cmplti r2,r2,4
802834c: 103ff41e bne r2,zero,8028320 <pk_init+0x178>
*(packet->nb_buff + lilbufsiz + ALIGN_TYPE) = 'M';
8028350: e0bffa17 ldw r2,-24(fp)
8028354: 10c00117 ldw r3,4(r2)
8028358: d0a01717 ldw r2,-32676(gp)
802835c: 10800104 addi r2,r2,4
8028360: 1885883a add r2,r3,r2
8028364: 00c01344 movi r3,77
8028368: 10c00005 stb r3,0(r2)
packet->nb_buff += ALIGN_TYPE;
802836c: e0bffa17 ldw r2,-24(fp)
8028370: 10800117 ldw r2,4(r2)
8028374: 10c00104 addi r3,r2,4
8028378: e0bffa17 ldw r2,-24(fp)
802837c: 10c00115 stw r3,4(r2)
#ifdef ALIGN_BUFS
/* align start of buffer pointer to desired offset */
packet->nb_buff += (ALIGN_BUFS - (((u_long) packet->nb_buff) & (ALIGN_BUFS - 1)));
#endif
#endif
if (!(packet->nb_buff))
8028380: e0bffa17 ldw r2,-24(fp)
8028384: 10800117 ldw r2,4(r2)
8028388: 10001f26 beq r2,zero,8028408 <pk_init+0x260>
goto no_pkt_buf;
packet->nb_blen = lilbufsiz;
802838c: d0e01717 ldw r3,-32676(gp)
8028390: e0bffa17 ldw r2,-24(fp)
8028394: 10c00215 stw r3,8(r2)
q_add(&lilfreeq, packet); /* save it in little free queue */
8028398: e17ffa17 ldw r5,-24(fp)
802839c: 010201b4 movhi r4,2054
80283a0: 21379604 addi r4,r4,-8616
80283a4: 80289900 call 8028990 <putq>
for (i = 0; i < numpkts; i++)
80283a8: e0bfff17 ldw r2,-4(fp)
80283ac: 10800044 addi r2,r2,1
80283b0: e0bfff15 stw r2,-4(fp)
80283b4: e0ffff17 ldw r3,-4(fp)
80283b8: e0bffc17 ldw r2,-16(fp)
80283bc: 18bf8536 bltu r3,r2,80281d4 <pk_init+0x2c>
}
}
bigfreeq.q_min = bigbufs;
80283c0: d0a01817 ldw r2,-32672(gp)
80283c4: 1007883a mov r3,r2
80283c8: 008201b4 movhi r2,2054
80283cc: 10f7df15 stw r3,-8324(r2)
lilfreeq.q_min = lilbufs;
80283d0: d0a01617 ldw r2,-32680(gp)
80283d4: 1007883a mov r3,r2
80283d8: 008201b4 movhi r2,2054
80283dc: 10f79a15 stw r3,-8600(r2)
heap_curr_mem_hi_watermark = 0;
/* set the heap's access type to blocking */
heap_type = HEAP_ACCESS_BLOCKING;
#endif
return 0;
80283e0: 0005883a mov r2,zero
80283e4: 00000e06 br 8028420 <pk_init+0x278>
goto no_pkt_buf;
80283e8: 0001883a nop
80283ec: 00000706 br 802840c <pk_init+0x264>
goto no_pkt_buf;
80283f0: 0001883a nop
80283f4: 00000506 br 802840c <pk_init+0x264>
goto no_pkt_buf;
80283f8: 0001883a nop
80283fc: 00000306 br 802840c <pk_init+0x264>
goto no_pkt_buf;
8028400: 0001883a nop
8028404: 00000106 br 802840c <pk_init+0x264>
goto no_pkt_buf;
8028408: 0001883a nop
no_pkt_buf:
#ifdef NPDEBUG
dprintf("Netinit: calloc failed getting buffer %d\n", i);
802840c: e17fff17 ldw r5,-4(fp)
8028410: 01020174 movhi r4,2053
8028414: 21294104 addi r4,r4,-23292
8028418: 8002c780 call 8002c78 <printf>
#endif
return(-1);
802841c: 00bfffc4 movi r2,-1
}
8028420: e037883a mov sp,fp
8028424: dfc00117 ldw ra,4(sp)
8028428: df000017 ldw fp,0(sp)
802842c: dec00204 addi sp,sp,8
8028430: f800283a ret
08028434 <pk_alloc>:
* OUTPUT: 0 if the request cannot be satisfied, or a pointer to the struct
* netbuf structure that corresponds to the just allocated data buffer.
*/
PACKET pk_alloc(unsigned len)
{
8028434: defffc04 addi sp,sp,-16
8028438: dfc00315 stw ra,12(sp)
802843c: df000215 stw fp,8(sp)
8028440: df000204 addi fp,sp,8
8028444: e13ffe15 stw r4,-8(fp)
PACKET p;
if (len > bigbufsiz) /* caller wants oversize buffer? */
8028448: d0e01917 ldw r3,-32668(gp)
802844c: e0bffe17 ldw r2,-8(fp)
8028450: 1880022e bgeu r3,r2,802845c <pk_alloc+0x28>
{
#ifdef HEAPBUFS
if ((p = pk_alloc_heapbuf (len)) == NULL)
return NULL;
#else
return(NULL);
8028454: 0005883a mov r2,zero
8028458: 00002106 br 80284e0 <pk_alloc+0xac>
#endif
}
else
{
if ((len > lilbufsiz) || (lilfreeq.q_len == 0)) /* must use a big buffer */
802845c: d0e01717 ldw r3,-32676(gp)
8028460: e0bffe17 ldw r2,-8(fp)
8028464: 18800336 bltu r3,r2,8028474 <pk_alloc+0x40>
8028468: 008201b4 movhi r2,2054
802846c: 10b79817 ldw r2,-8608(r2)
8028470: 1000051e bne r2,zero,8028488 <pk_alloc+0x54>
p = (PACKET)getq(&bigfreeq);
8028474: 010201b4 movhi r4,2054
8028478: 2137db04 addi r4,r4,-8340
802847c: 80288d80 call 80288d8 <getq>
8028480: e0bfff15 stw r2,-4(fp)
8028484: 00000406 br 8028498 <pk_alloc+0x64>
else
p = (PACKET)getq(&lilfreeq);
8028488: 010201b4 movhi r4,2054
802848c: 21379604 addi r4,r4,-8616
8028490: 80288d80 call 80288d8 <getq>
8028494: e0bfff15 stw r2,-4(fp)
if (!p)
8028498: e0bfff17 ldw r2,-4(fp)
802849c: 1000021e bne r2,zero,80284a8 <pk_alloc+0x74>
return NULL;
80284a0: 0005883a mov r2,zero
80284a4: 00000e06 br 80284e0 <pk_alloc+0xac>
}
p->nb_prot = p->nb_buff + MaxLnh; /* point past biggest mac header */
80284a8: e0bfff17 ldw r2,-4(fp)
80284ac: 10800117 ldw r2,4(r2)
80284b0: d0e06417 ldw r3,-32368(gp)
80284b4: 10c7883a add r3,r2,r3
80284b8: e0bfff17 ldw r2,-4(fp)
80284bc: 10c00315 stw r3,12(r2)
p->nb_plen = 0; /* no protocol data there yet */
80284c0: e0bfff17 ldw r2,-4(fp)
80284c4: 10000415 stw zero,16(r2)
p->net = NULL;
80284c8: e0bfff17 ldw r2,-4(fp)
80284cc: 10000615 stw zero,24(r2)
p->nexthop = NULL; /* no next hop */
p->nb_pmtu = 1240; /* Set minimum IPv6 Path MTU */
#endif /* IP_V6 */
#endif /* LINKED_PKTS */
p->inuse = 1; /* initially buffer in use by 1 user */
80284d0: e0bfff17 ldw r2,-4(fp)
80284d4: 00c00044 movi r3,1
80284d8: 10c00915 stw r3,36(r2)
/* note that 'type' and 'fhost' fields are not set in pk_alloc () */
return(p);
80284dc: e0bfff17 ldw r2,-4(fp)
}
80284e0: e037883a mov sp,fp
80284e4: dfc00117 ldw ra,4(sp)
80284e8: df000017 ldw fp,0(sp)
80284ec: dec00204 addi sp,sp,8
80284f0: f800283a ret
080284f4 <pk_validate>:
* OUTPUT: 0 if the buffer being freed was successfully validated, or
* -1 if the validation failed.
*/
int pk_validate(PACKET pkt) /* check if pk_free() can free the pkt */
{
80284f4: defffb04 addi sp,sp,-20
80284f8: dfc00415 stw ra,16(sp)
80284fc: df000315 stw fp,12(sp)
8028500: df000304 addi fp,sp,12
8028504: e13ffd15 stw r4,-12(fp)
/* If packet link is non-zero, then this packet is
* part of a chain and deleted this packet would break
* the chain and cause memory leak for subsequent pkts.
* Note that heapbufs do not use the 'next' field at all.
*/
if ((pkt->next) && (pkt->inuse >= 1))
8028508: e0bffd17 ldw r2,-12(fp)
802850c: 10800017 ldw r2,0(r2)
8028510: 10000c26 beq r2,zero,8028544 <pk_validate+0x50>
8028514: e0bffd17 ldw r2,-12(fp)
8028518: 10800917 ldw r2,36(r2)
802851c: 10000926 beq r2,zero,8028544 <pk_validate+0x50>
{
INCR_SHARED_VAR (memestats, INCONSISTENT_LOCATION_ERR, 1);
8028520: 8028e940 call 8028e94 <irq_Mask>
8028524: 008201b4 movhi r2,2054
8028528: 10b79e17 ldw r2,-8584(r2)
802852c: 10c00044 addi r3,r2,1
8028530: 008201b4 movhi r2,2054
8028534: 10f79e15 stw r3,-8584(r2)
8028538: 8028ef40 call 8028ef4 <irq_Unmask>
return -1;
802853c: 00bfffc4 movi r2,-1
8028540: 00007c06 br 8028734 <pk_validate+0x240>
}
else
#endif /* HEAPBUFS */
{
/* check if the packet is already in a freeq */
if (pkt->nb_blen == bigbufsiz) /* check in bigfreeq */
8028544: e0bffd17 ldw r2,-12(fp)
8028548: 10c00217 ldw r3,8(r2)
802854c: d0a01917 ldw r2,-32668(gp)
8028550: 18801d1e bne r3,r2,80285c8 <pk_validate+0xd4>
{
ENTER_CRIT_SECTION(&bigfreeq);
8028554: 8028e940 call 8028e94 <irq_Mask>
for (p=(PACKET)bigfreeq.q_head; p; p = p->next)
8028558: 008201b4 movhi r2,2054
802855c: 10b7db17 ldw r2,-8340(r2)
8028560: e0bfff15 stw r2,-4(fp)
8028564: 00001406 br 80285b8 <pk_validate+0xc4>
if (p == pkt)
8028568: e0ffff17 ldw r3,-4(fp)
802856c: e0bffd17 ldw r2,-12(fp)
8028570: 18800e1e bne r3,r2,80285ac <pk_validate+0xb8>
{
dprintf("pk_free: buffer %p already in bigfreeq\n", pkt);
8028574: e17ffd17 ldw r5,-12(fp)
8028578: 01020174 movhi r4,2053
802857c: 21294c04 addi r4,r4,-23248
8028580: 8002c780 call 8002c78 <printf>
EXIT_CRIT_SECTION(&bigfreeq);
8028584: 8028ef40 call 8028ef4 <irq_Unmask>
INCR_SHARED_VAR (memestats, MULTIPLE_FREE_ERR, 1);
8028588: 8028e940 call 8028e94 <irq_Mask>
802858c: 008201b4 movhi r2,2054
8028590: 10b79d17 ldw r2,-8588(r2)
8028594: 10c00044 addi r3,r2,1
8028598: 008201b4 movhi r2,2054
802859c: 10f79d15 stw r3,-8588(r2)
80285a0: 8028ef40 call 8028ef4 <irq_Unmask>
return -1;
80285a4: 00bfffc4 movi r2,-1
80285a8: 00006206 br 8028734 <pk_validate+0x240>
for (p=(PACKET)bigfreeq.q_head; p; p = p->next)
80285ac: e0bfff17 ldw r2,-4(fp)
80285b0: 10800017 ldw r2,0(r2)
80285b4: e0bfff15 stw r2,-4(fp)
80285b8: e0bfff17 ldw r2,-4(fp)
80285bc: 103fea1e bne r2,zero,8028568 <pk_validate+0x74>
}
EXIT_CRIT_SECTION(&bigfreeq);
80285c0: 8028ef40 call 8028ef4 <irq_Unmask>
80285c4: 00002a06 br 8028670 <pk_validate+0x17c>
}
else if (pkt->nb_blen == lilbufsiz) /* check in lilfreeq */
80285c8: e0bffd17 ldw r2,-12(fp)
80285cc: 10c00217 ldw r3,8(r2)
80285d0: d0a01717 ldw r2,-32676(gp)
80285d4: 18801d1e bne r3,r2,802864c <pk_validate+0x158>
{
ENTER_CRIT_SECTION(&lilfreeq);
80285d8: 8028e940 call 8028e94 <irq_Mask>
for (p=(PACKET)lilfreeq.q_head; p; p = p->next)
80285dc: 008201b4 movhi r2,2054
80285e0: 10b79617 ldw r2,-8616(r2)
80285e4: e0bfff15 stw r2,-4(fp)
80285e8: 00001406 br 802863c <pk_validate+0x148>
if (p == pkt)
80285ec: e0ffff17 ldw r3,-4(fp)
80285f0: e0bffd17 ldw r2,-12(fp)
80285f4: 18800e1e bne r3,r2,8028630 <pk_validate+0x13c>
{
dprintf("pk_free: buffer %p already in lilfreeq\n", pkt);
80285f8: e17ffd17 ldw r5,-12(fp)
80285fc: 01020174 movhi r4,2053
8028600: 21295604 addi r4,r4,-23208
8028604: 8002c780 call 8002c78 <printf>
EXIT_CRIT_SECTION(&lilfreeq);
8028608: 8028ef40 call 8028ef4 <irq_Unmask>
INCR_SHARED_VAR (memestats, MULTIPLE_FREE_ERR, 1);
802860c: 8028e940 call 8028e94 <irq_Mask>
8028610: 008201b4 movhi r2,2054
8028614: 10b79d17 ldw r2,-8588(r2)
8028618: 10c00044 addi r3,r2,1
802861c: 008201b4 movhi r2,2054
8028620: 10f79d15 stw r3,-8588(r2)
8028624: 8028ef40 call 8028ef4 <irq_Unmask>
return -1;
8028628: 00bfffc4 movi r2,-1
802862c: 00004106 br 8028734 <pk_validate+0x240>
for (p=(PACKET)lilfreeq.q_head; p; p = p->next)
8028630: e0bfff17 ldw r2,-4(fp)
8028634: 10800017 ldw r2,0(r2)
8028638: e0bfff15 stw r2,-4(fp)
802863c: e0bfff17 ldw r2,-4(fp)
8028640: 103fea1e bne r2,zero,80285ec <pk_validate+0xf8>
}
EXIT_CRIT_SECTION(&lilfreeq);
8028644: 8028ef40 call 8028ef4 <irq_Unmask>
8028648: 00000906 br 8028670 <pk_validate+0x17c>
}
else
{
/* log an error */
INCR_SHARED_VAR (memestats, BAD_REGULAR_BUF_LEN_ERR, 1);
802864c: 8028e940 call 8028e94 <irq_Mask>
8028650: 008201b4 movhi r2,2054
8028654: 10b79b17 ldw r2,-8596(r2)
8028658: 10c00044 addi r3,r2,1
802865c: 008201b4 movhi r2,2054
8028660: 10f79b15 stw r3,-8596(r2)
8028664: 8028ef40 call 8028ef4 <irq_Unmask>
return -1;
8028668: 00bfffc4 movi r2,-1
802866c: 00003106 br 8028734 <pk_validate+0x240>
}
#ifdef NPDEBUG
/* check for corruption of memory markers (the guard bands are only
* present when NPDEBUG is defined) */
for (j = ALIGN_TYPE; j > 0; j--)
8028670: 00800104 movi r2,4
8028674: e0bffe15 stw r2,-8(fp)
8028678: 00001706 br 80286d8 <pk_validate+0x1e4>
{
if (*(pkt->nb_buff - j) != 'M')
802867c: e0bffd17 ldw r2,-12(fp)
8028680: 10c00117 ldw r3,4(r2)
8028684: e0bffe17 ldw r2,-8(fp)
8028688: 0085c83a sub r2,zero,r2
802868c: 1885883a add r2,r3,r2
8028690: 10800003 ldbu r2,0(r2)
8028694: 10803fcc andi r2,r2,255
8028698: 1080201c xori r2,r2,128
802869c: 10bfe004 addi r2,r2,-128
80286a0: 10801360 cmpeqi r2,r2,77
80286a4: 1000091e bne r2,zero,80286cc <pk_validate+0x1d8>
{
INCR_SHARED_VAR (memestats, GUARD_BAND_VIOLATED_ERR, 1);
80286a8: 8028e940 call 8028e94 <irq_Mask>
80286ac: 008201b4 movhi r2,2054
80286b0: 10b79c17 ldw r2,-8592(r2)
80286b4: 10c00044 addi r3,r2,1
80286b8: 008201b4 movhi r2,2054
80286bc: 10f79c15 stw r3,-8592(r2)
80286c0: 8028ef40 call 8028ef4 <irq_Unmask>
return -1;
80286c4: 00bfffc4 movi r2,-1
80286c8: 00001a06 br 8028734 <pk_validate+0x240>
for (j = ALIGN_TYPE; j > 0; j--)
80286cc: e0bffe17 ldw r2,-8(fp)
80286d0: 10bfffc4 addi r2,r2,-1
80286d4: e0bffe15 stw r2,-8(fp)
80286d8: e0bffe17 ldw r2,-8(fp)
80286dc: 00bfe716 blt zero,r2,802867c <pk_validate+0x188>
}
}
if (*(pkt->nb_buff + pkt->nb_blen) != 'M')
80286e0: e0bffd17 ldw r2,-12(fp)
80286e4: 10c00117 ldw r3,4(r2)
80286e8: e0bffd17 ldw r2,-12(fp)
80286ec: 10800217 ldw r2,8(r2)
80286f0: 1885883a add r2,r3,r2
80286f4: 10800003 ldbu r2,0(r2)
80286f8: 10803fcc andi r2,r2,255
80286fc: 1080201c xori r2,r2,128
8028700: 10bfe004 addi r2,r2,-128
8028704: 10801360 cmpeqi r2,r2,77
8028708: 1000091e bne r2,zero,8028730 <pk_validate+0x23c>
{
INCR_SHARED_VAR (memestats, GUARD_BAND_VIOLATED_ERR, 1);
802870c: 8028e940 call 8028e94 <irq_Mask>
8028710: 008201b4 movhi r2,2054
8028714: 10b79c17 ldw r2,-8592(r2)
8028718: 10c00044 addi r3,r2,1
802871c: 008201b4 movhi r2,2054
8028720: 10f79c15 stw r3,-8592(r2)
8028724: 8028ef40 call 8028ef4 <irq_Unmask>
return -1;
8028728: 00bfffc4 movi r2,-1
802872c: 00000106 br 8028734 <pk_validate+0x240>
}
#endif /* NPDEBUG */
return 0;
8028730: 0005883a mov r2,zero
}
8028734: e037883a mov sp,fp
8028738: dfc00117 ldw ra,4(sp)
802873c: df000017 ldw fp,0(sp)
8028740: dec00204 addi sp,sp,8
8028744: f800283a ret
08028748 <pk_free>:
*
* OUTPUT: None.
*/
void pk_free(PACKET pkt) /* PACKET to place in free queue */
{
8028748: defffc04 addi sp,sp,-16
802874c: dfc00315 stw ra,12(sp)
8028750: df000215 stw fp,8(sp)
8028754: df000204 addi fp,sp,8
8028758: e13ffe15 stw r4,-8(fp)
PACKET pknext;
pknext = pkt->pk_next;
#endif /* LINKED_PKTS */
/* validate the pkt before freeing */
e = pk_validate(pkt);
802875c: e13ffe17 ldw r4,-8(fp)
8028760: 80284f40 call 80284f4 <pk_validate>
8028764: e0bfff15 stw r2,-4(fp)
if (e)
8028768: e0bfff17 ldw r2,-4(fp)
802876c: 1000191e bne r2,zero,80287d4 <pk_free+0x8c>
continue; /* skip this pkt, examine the next pkt */
}
#endif
return;
}
if (pkt->inuse-- > 1) /* more than 1 owner? */
8028770: e0bffe17 ldw r2,-8(fp)
8028774: 10800917 ldw r2,36(r2)
8028778: 113fffc4 addi r4,r2,-1
802877c: e0fffe17 ldw r3,-8(fp)
8028780: 19000915 stw r4,36(r3)
8028784: 108000b0 cmpltui r2,r2,2
8028788: 10001426 beq r2,zero,80287dc <pk_free+0x94>
pk_free_heapbuf (pkt);
}
else
#endif /* HEAPBUFS */
{
if (pkt->nb_blen == bigbufsiz)
802878c: e0bffe17 ldw r2,-8(fp)
8028790: 10c00217 ldw r3,8(r2)
8028794: d0a01917 ldw r2,-32668(gp)
8028798: 1880051e bne r3,r2,80287b0 <pk_free+0x68>
q_add(&bigfreeq, (qp)pkt);
802879c: e17ffe17 ldw r5,-8(fp)
80287a0: 010201b4 movhi r4,2054
80287a4: 2137db04 addi r4,r4,-8340
80287a8: 80289900 call 8028990 <putq>
80287ac: 00000c06 br 80287e0 <pk_free+0x98>
else if (pkt->nb_blen == lilbufsiz)
80287b0: e0bffe17 ldw r2,-8(fp)
80287b4: 10c00217 ldw r3,8(r2)
80287b8: d0a01717 ldw r2,-32676(gp)
80287bc: 1880081e bne r3,r2,80287e0 <pk_free+0x98>
q_add(&lilfreeq, (qp)pkt);
80287c0: e17ffe17 ldw r5,-8(fp)
80287c4: 010201b4 movhi r4,2054
80287c8: 21379604 addi r4,r4,-8616
80287cc: 80289900 call 8028990 <putq>
80287d0: 00000306 br 80287e0 <pk_free+0x98>
return;
80287d4: 0001883a nop
80287d8: 00000106 br 80287e0 <pk_free+0x98>
return; /* packet was cloned, don't delete yet */
80287dc: 0001883a nop
#ifdef LINKED_PKTS
pkt = pknext;
}
#endif
}
80287e0: e037883a mov sp,fp
80287e4: dfc00117 ldw ra,4(sp)
80287e8: df000017 ldw fp,0(sp)
80287ec: dec00204 addi sp,sp,8
80287f0: f800283a ret
080287f4 <pk_get_max_intrsafe_buf_len>:
*
* OUTPUT: This function always returns the length of a big buffer (bigbufsiz).
*/
unsigned pk_get_max_intrsafe_buf_len(void)
{
80287f4: deffff04 addi sp,sp,-4
80287f8: df000015 stw fp,0(sp)
80287fc: d839883a mov fp,sp
return bigbufsiz;
8028800: d0a01917 ldw r2,-32668(gp)
}
8028804: e037883a mov sp,fp
8028808: df000017 ldw fp,0(sp)
802880c: dec00104 addi sp,sp,4
8028810: f800283a ret
08028814 <dump_buf_estats>:
*
* OUTPUT: This function always returns 0.
*/
int dump_buf_estats (void * pio)
{
8028814: defff904 addi sp,sp,-28
8028818: dfc00615 stw ra,24(sp)
802881c: df000515 stw fp,20(sp)
8028820: df000504 addi fp,sp,20
8028824: e13ffb15 stw r4,-20(fp)
u_long mlocal [MEMERR_NUM_STATS];
LOCK_NET_RESOURCE(FREEQ_RESID);
8028828: 01000084 movi r4,2
802882c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
ENTER_CRIT_SECTION(&memestats);
8028830: 8028e940 call 8028e94 <irq_Mask>
MEMCPY (&mlocal, &memestats, sizeof(memestats));
8028834: 008201b4 movhi r2,2054
8028838: 10b79b17 ldw r2,-8596(r2)
802883c: e0bffc15 stw r2,-16(fp)
8028840: 008201b4 movhi r2,2054
8028844: 10b79c17 ldw r2,-8592(r2)
8028848: e0bffd15 stw r2,-12(fp)
802884c: 008201b4 movhi r2,2054
8028850: 10b79d17 ldw r2,-8588(r2)
8028854: e0bffe15 stw r2,-8(fp)
8028858: 008201b4 movhi r2,2054
802885c: 10b79e17 ldw r2,-8584(r2)
8028860: e0bfff15 stw r2,-4(fp)
EXIT_CRIT_SECTION(&memestats);
8028864: 8028ef40 call 8028ef4 <irq_Unmask>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8028868: 01000084 movi r4,2
802886c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
ns_printf(pio, "Regular buffer error statistics:\n");
8028870: 01420174 movhi r5,2053
8028874: 29696004 addi r5,r5,-23168
8028878: e13ffb17 ldw r4,-20(fp)
802887c: 80273900 call 8027390 <ns_printf>
ns_printf(pio, "Bad buffer length %lu, Guard band violations %lu\n",mlocal[BAD_REGULAR_BUF_LEN_ERR],mlocal[GUARD_BAND_VIOLATED_ERR]);
8028880: e0bffc17 ldw r2,-16(fp)
8028884: e0fffd17 ldw r3,-12(fp)
8028888: 180f883a mov r7,r3
802888c: 100d883a mov r6,r2
8028890: 01420174 movhi r5,2053
8028894: 29696904 addi r5,r5,-23132
8028898: e13ffb17 ldw r4,-20(fp)
802889c: 80273900 call 8027390 <ns_printf>
ns_printf(pio, "Multiple frees %lu, Inconsistent location %lu\n",mlocal[MULTIPLE_FREE_ERR],mlocal[INCONSISTENT_LOCATION_ERR]);
80288a0: e0bffe17 ldw r2,-8(fp)
80288a4: e0ffff17 ldw r3,-4(fp)
80288a8: 180f883a mov r7,r3
80288ac: 100d883a mov r6,r2
80288b0: 01420174 movhi r5,2053
80288b4: 29697604 addi r5,r5,-23080
80288b8: e13ffb17 ldw r4,-20(fp)
80288bc: 80273900 call 8027390 <ns_printf>
return 0;
80288c0: 0005883a mov r2,zero
}
80288c4: e037883a mov sp,fp
80288c8: dfc00117 ldw ra,4(sp)
80288cc: df000017 ldw fp,0(sp)
80288d0: dec00204 addi sp,sp,8
80288d4: f800283a ret
080288d8 <getq>:
* RETURNS: pointer to the first element if any, or 0 if the queue is empty.
*/
void*
getq(queue * q)
{
80288d8: defffc04 addi sp,sp,-16
80288dc: dfc00315 stw ra,12(sp)
80288e0: df000215 stw fp,8(sp)
80288e4: df000204 addi fp,sp,8
80288e8: e13ffe15 stw r4,-8(fp)
q_elt temp; /* temp for result */
ENTER_CRIT_SECTION(q); /* shut off ints, save old state */
80288ec: 8028e940 call 8028e94 <irq_Mask>
LOCKNET_CHECK(q); /* make sure queue is protected */
if ((temp = q->q_head) == 0) /* queue empty? */
80288f0: e0bffe17 ldw r2,-8(fp)
80288f4: 10800017 ldw r2,0(r2)
80288f8: e0bfff15 stw r2,-4(fp)
80288fc: e0bfff17 ldw r2,-4(fp)
8028900: 1000031e bne r2,zero,8028910 <getq+0x38>
{
EXIT_CRIT_SECTION(q);
8028904: 8028ef40 call 8028ef4 <irq_Unmask>
return (0); /* yes, show none */
8028908: 0005883a mov r2,zero
802890c: 00001b06 br 802897c <getq+0xa4>
}
q->q_head = temp->qe_next; /* else unlink */
8028910: e0bfff17 ldw r2,-4(fp)
8028914: 10c00017 ldw r3,0(r2)
8028918: e0bffe17 ldw r2,-8(fp)
802891c: 10c00015 stw r3,0(r2)
temp->qe_next = 0; /* avoid dangling pointers */
8028920: e0bfff17 ldw r2,-4(fp)
8028924: 10000015 stw zero,0(r2)
if (q->q_head == 0) /* queue empty? */
8028928: e0bffe17 ldw r2,-8(fp)
802892c: 10800017 ldw r2,0(r2)
8028930: 1000021e bne r2,zero,802893c <getq+0x64>
q->q_tail = 0; /* yes, update tail pointer too */
8028934: e0bffe17 ldw r2,-8(fp)
8028938: 10000115 stw zero,4(r2)
q->q_len--; /* update queue length */
802893c: e0bffe17 ldw r2,-8(fp)
8028940: 10800217 ldw r2,8(r2)
8028944: 10ffffc4 addi r3,r2,-1
8028948: e0bffe17 ldw r2,-8(fp)
802894c: 10c00215 stw r3,8(r2)
if (q->q_len < q->q_min)
8028950: e0bffe17 ldw r2,-8(fp)
8028954: 10c00217 ldw r3,8(r2)
8028958: e0bffe17 ldw r2,-8(fp)
802895c: 10800417 ldw r2,16(r2)
8028960: 1880040e bge r3,r2,8028974 <getq+0x9c>
q->q_min = q->q_len;
8028964: e0bffe17 ldw r2,-8(fp)
8028968: 10c00217 ldw r3,8(r2)
802896c: e0bffe17 ldw r2,-8(fp)
8028970: 10c00415 stw r3,16(r2)
QUEUE_CHECK(q); /* make sure queue is not corrupted */
EXIT_CRIT_SECTION(q); /* restore caller's int state */
8028974: 8028ef40 call 8028ef4 <irq_Unmask>
return ((void*)temp);
8028978: e0bfff17 ldw r2,-4(fp)
}
802897c: e037883a mov sp,fp
8028980: dfc00117 ldw ra,4(sp)
8028984: df000017 ldw fp,0(sp)
8028988: dec00204 addi sp,sp,8
802898c: f800283a ret
08028990 <putq>:
void
putq(
queue * q, /* the queue */
void * elt) /* element to delete */
{
8028990: defffc04 addi sp,sp,-16
8028994: dfc00315 stw ra,12(sp)
8028998: df000215 stw fp,8(sp)
802899c: df000204 addi fp,sp,8
80289a0: e13fff15 stw r4,-4(fp)
80289a4: e17ffe15 stw r5,-8(fp)
ENTER_CRIT_SECTION(q);
80289a8: 8028e940 call 8028e94 <irq_Mask>
LOCKNET_CHECK(q); /* make sure queue is protected */
q_addt(q, (qp)elt); /* use macro to do work */
80289ac: e0bffe17 ldw r2,-8(fp)
80289b0: 10000015 stw zero,0(r2)
80289b4: e0bfff17 ldw r2,-4(fp)
80289b8: 10800017 ldw r2,0(r2)
80289bc: 1000041e bne r2,zero,80289d0 <putq+0x40>
80289c0: e0bfff17 ldw r2,-4(fp)
80289c4: e0fffe17 ldw r3,-8(fp)
80289c8: 10c00015 stw r3,0(r2)
80289cc: 00000406 br 80289e0 <putq+0x50>
80289d0: e0bfff17 ldw r2,-4(fp)
80289d4: 10800117 ldw r2,4(r2)
80289d8: e0fffe17 ldw r3,-8(fp)
80289dc: 10c00015 stw r3,0(r2)
80289e0: e0bfff17 ldw r2,-4(fp)
80289e4: e0fffe17 ldw r3,-8(fp)
80289e8: 10c00115 stw r3,4(r2)
80289ec: e0bfff17 ldw r2,-4(fp)
80289f0: 10800217 ldw r2,8(r2)
80289f4: 10c00044 addi r3,r2,1
80289f8: e0bfff17 ldw r2,-4(fp)
80289fc: 10c00215 stw r3,8(r2)
8028a00: e0bfff17 ldw r2,-4(fp)
8028a04: 10800217 ldw r2,8(r2)
8028a08: e0ffff17 ldw r3,-4(fp)
8028a0c: 18c00317 ldw r3,12(r3)
8028a10: 1880040e bge r3,r2,8028a24 <putq+0x94>
8028a14: e0bfff17 ldw r2,-4(fp)
8028a18: 10c00217 ldw r3,8(r2)
8028a1c: e0bfff17 ldw r2,-4(fp)
8028a20: 10c00315 stw r3,12(r2)
QUEUE_CHECK(q); /* make sure queue is not corrupted */
EXIT_CRIT_SECTION(q); /* restore int state */
8028a24: 8028ef40 call 8028ef4 <irq_Unmask>
}
8028a28: 0001883a nop
8028a2c: e037883a mov sp,fp
8028a30: dfc00117 ldw ra,4(sp)
8028a34: df000017 ldw fp,0(sp)
8028a38: dec00204 addi sp,sp,8
8028a3c: f800283a ret
08028a40 <qdel>:
* RETURNS: Return pointer to queue member if found, else NULL.
*/
qp
qdel(queue * q, void * elt)
{
8028a40: defffa04 addi sp,sp,-24
8028a44: dfc00515 stw ra,20(sp)
8028a48: df000415 stw fp,16(sp)
8028a4c: df000404 addi fp,sp,16
8028a50: e13ffd15 stw r4,-12(fp)
8028a54: e17ffc15 stw r5,-16(fp)
qp qptr;
qp qlast;
/* search queue for element passed */
ENTER_CRIT_SECTION(q);
8028a58: 8028e940 call 8028e94 <irq_Mask>
qptr = q->q_head;
8028a5c: e0bffd17 ldw r2,-12(fp)
8028a60: 10800017 ldw r2,0(r2)
8028a64: e0bfff15 stw r2,-4(fp)
qlast = NULL;
8028a68: e03ffe15 stw zero,-8(fp)
while (qptr)
8028a6c: 00002b06 br 8028b1c <qdel+0xdc>
{
if (qptr == (qp)elt)
8028a70: e0ffff17 ldw r3,-4(fp)
8028a74: e0bffc17 ldw r2,-16(fp)
8028a78: 1880231e bne r3,r2,8028b08 <qdel+0xc8>
{
/* found our item; dequeue it */
if (qlast)
8028a7c: e0bffe17 ldw r2,-8(fp)
8028a80: 10000526 beq r2,zero,8028a98 <qdel+0x58>
qlast->qe_next = qptr->qe_next;
8028a84: e0bfff17 ldw r2,-4(fp)
8028a88: 10c00017 ldw r3,0(r2)
8028a8c: e0bffe17 ldw r2,-8(fp)
8028a90: 10c00015 stw r3,0(r2)
8028a94: 00000406 br 8028aa8 <qdel+0x68>
else /* item was at head of queqe */
q->q_head = qptr->qe_next;
8028a98: e0bfff17 ldw r2,-4(fp)
8028a9c: 10c00017 ldw r3,0(r2)
8028aa0: e0bffd17 ldw r2,-12(fp)
8028aa4: 10c00015 stw r3,0(r2)
/* fix queue tail pointer if needed */
if (q->q_tail == (qp)elt)
8028aa8: e0bffd17 ldw r2,-12(fp)
8028aac: 10800117 ldw r2,4(r2)
8028ab0: e0fffc17 ldw r3,-16(fp)
8028ab4: 1880031e bne r3,r2,8028ac4 <qdel+0x84>
q->q_tail = qlast;
8028ab8: e0bffd17 ldw r2,-12(fp)
8028abc: e0fffe17 ldw r3,-8(fp)
8028ac0: 10c00115 stw r3,4(r2)
/* fix queue counters */
q->q_len--;
8028ac4: e0bffd17 ldw r2,-12(fp)
8028ac8: 10800217 ldw r2,8(r2)
8028acc: 10ffffc4 addi r3,r2,-1
8028ad0: e0bffd17 ldw r2,-12(fp)
8028ad4: 10c00215 stw r3,8(r2)
if (q->q_len < q->q_min)
8028ad8: e0bffd17 ldw r2,-12(fp)
8028adc: 10c00217 ldw r3,8(r2)
8028ae0: e0bffd17 ldw r2,-12(fp)
8028ae4: 10800417 ldw r2,16(r2)
8028ae8: 1880040e bge r3,r2,8028afc <qdel+0xbc>
q->q_min = q->q_len;
8028aec: e0bffd17 ldw r2,-12(fp)
8028af0: 10c00217 ldw r3,8(r2)
8028af4: e0bffd17 ldw r2,-12(fp)
8028af8: 10c00415 stw r3,16(r2)
EXIT_CRIT_SECTION(q); /* restore int state */
8028afc: 8028ef40 call 8028ef4 <irq_Unmask>
return (qp)elt; /* success exit point */
8028b00: e0bffc17 ldw r2,-16(fp)
8028b04: 00000906 br 8028b2c <qdel+0xec>
}
qlast = qptr;
8028b08: e0bfff17 ldw r2,-4(fp)
8028b0c: e0bffe15 stw r2,-8(fp)
qptr = qptr->qe_next;
8028b10: e0bfff17 ldw r2,-4(fp)
8028b14: 10800017 ldw r2,0(r2)
8028b18: e0bfff15 stw r2,-4(fp)
while (qptr)
8028b1c: e0bfff17 ldw r2,-4(fp)
8028b20: 103fd31e bne r2,zero,8028a70 <qdel+0x30>
}
EXIT_CRIT_SECTION(q); /* restore int state */
8028b24: 8028ef40 call 8028ef4 <irq_Unmask>
return NULL; /* item not found in queue */
8028b28: 0005883a mov r2,zero
}
8028b2c: e037883a mov sp,fp
8028b30: dfc00117 ldw ra,4(sp)
8028b34: df000017 ldw fp,0(sp)
8028b38: dec00204 addi sp,sp,8
8028b3c: f800283a ret
08028b40 <asm_cksum>:
.text
.global asm_cksum
asm_cksum:
mov r2, zero /* accumulator = 0 */
8028b40: 0005883a mov r2,zero
ble r5, zero, done /* count <= 0 ? */
8028b44: 0140620e bge zero,r5,8028cd0 <done>
mov r6, zero /* carry accumulator */
8028b48: 000d883a mov r6,zero
andi r3, r4, 2 /* ptr 32-bit aligned? */
8028b4c: 20c0008c andi r3,r4,2
beq r3, zero, asm1
8028b50: 18000326 beq r3,zero,8028b60 <asm1>
ldhu r2, (r4) /* no - process first 16-bits */
8028b54: 2080000b ldhu r2,0(r4)
addi r4, r4, 2
8028b58: 21000084 addi r4,r4,2
subi r5, r5, 1
8028b5c: 297fffc4 addi r5,r5,-1
08028b60 <asm1>:
8028b60: 02c200f4 movhi r11,2051
/*
* adjust ptr by ((count/2) mod 16) * 4 bytes
* jump to location: loop0 - (count/2 mod 16) * 4 instructions
*/
asm1:
movia r11, loop0
8028b64: 5ae32304 addi r11,r11,-29556
andi r9, r5, 1 /* r9 = last halfword flag */
8028b68: 2a40004c andi r9,r5,1
srai r5, r5, 1 /* count = number of words */
8028b6c: 280bd07a srai r5,r5,1
andi r10, r5, 0xf /* modulo 16 */
8028b70: 2a8003cc andi r10,r5,15
slli r10, r10, 2 /* * 4 bytes per word */
8028b74: 501490ba slli r10,r10,2
add r4, r10, r4 /* adjust ptr */
8028b78: 5109883a add r4,r10,r4
slli r10, r10, 2 /* * 4 instructions per 4 bytes */
8028b7c: 501490ba slli r10,r10,2
sub r11, r11, r10
8028b80: 5a97c83a sub r11,r11,r10
jmp r11
8028b84: 5800683a jmp r11
08028b88 <loop>:
loop:
addi r4, r4, 64 /* increment data pointer */
8028b88: 21001004 addi r4,r4,64
ldw r7, -64(r4)
8028b8c: 21fff017 ldw r7,-64(r4)
add r2, r7, r2
8028b90: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028b94: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028b98: 418d883a add r6,r8,r6
ldw r7, -60(r4)
8028b9c: 21fff117 ldw r7,-60(r4)
add r2, r7, r2
8028ba0: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028ba4: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028ba8: 418d883a add r6,r8,r6
ldw r7, -56(r4)
8028bac: 21fff217 ldw r7,-56(r4)
add r2, r7, r2
8028bb0: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028bb4: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028bb8: 418d883a add r6,r8,r6
ldw r7, -52(r4)
8028bbc: 21fff317 ldw r7,-52(r4)
add r2, r7, r2
8028bc0: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028bc4: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028bc8: 418d883a add r6,r8,r6
ldw r7, -48(r4)
8028bcc: 21fff417 ldw r7,-48(r4)
add r2, r7, r2
8028bd0: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028bd4: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028bd8: 418d883a add r6,r8,r6
ldw r7, -44(r4)
8028bdc: 21fff517 ldw r7,-44(r4)
add r2, r7, r2
8028be0: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028be4: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028be8: 418d883a add r6,r8,r6
ldw r7, -40(r4)
8028bec: 21fff617 ldw r7,-40(r4)
add r2, r7, r2
8028bf0: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028bf4: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028bf8: 418d883a add r6,r8,r6
ldw r7, -36(r4)
8028bfc: 21fff717 ldw r7,-36(r4)
add r2, r7, r2
8028c00: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c04: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c08: 418d883a add r6,r8,r6
ldw r7, -32(r4)
8028c0c: 21fff817 ldw r7,-32(r4)
add r2, r7, r2
8028c10: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c14: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c18: 418d883a add r6,r8,r6
ldw r7, -28(r4)
8028c1c: 21fff917 ldw r7,-28(r4)
add r2, r7, r2
8028c20: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c24: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c28: 418d883a add r6,r8,r6
ldw r7, -24(r4)
8028c2c: 21fffa17 ldw r7,-24(r4)
add r2, r7, r2
8028c30: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c34: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c38: 418d883a add r6,r8,r6
ldw r7, -20(r4)
8028c3c: 21fffb17 ldw r7,-20(r4)
add r2, r7, r2
8028c40: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c44: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c48: 418d883a add r6,r8,r6
ldw r7, -16(r4)
8028c4c: 21fffc17 ldw r7,-16(r4)
add r2, r7, r2
8028c50: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c54: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c58: 418d883a add r6,r8,r6
ldw r7, -12(r4)
8028c5c: 21fffd17 ldw r7,-12(r4)
add r2, r7, r2
8028c60: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c64: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c68: 418d883a add r6,r8,r6
ldw r7, -8(r4)
8028c6c: 21fffe17 ldw r7,-8(r4)
add r2, r7, r2
8028c70: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c74: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c78: 418d883a add r6,r8,r6
ldw r7, -4(r4)
8028c7c: 21ffff17 ldw r7,-4(r4)
add r2, r7, r2
8028c80: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028c84: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028c88: 418d883a add r6,r8,r6
08028c8c <loop0>:
loop0:
subi r5, r5, 16
8028c8c: 297ffc04 addi r5,r5,-16
bge r5, zero, loop
8028c90: 283fbd0e bge r5,zero,8028b88 <loop>
/*
* process last halfword (if any)
*/
beq r9, zero, fold
8028c94: 48000426 beq r9,zero,8028ca8 <fold>
ldhu r7, 0(r4)
8028c98: 21c0000b ldhu r7,0(r4)
add r2, r7, r2
8028c9c: 3885883a add r2,r7,r2
cmpltu r8, r2, r7
8028ca0: 11d1803a cmpltu r8,r2,r7
add r6, r8, r6
8028ca4: 418d883a add r6,r8,r6
08028ca8 <fold>:
fold:
srli r7, r2, 16
8028ca8: 100ed43a srli r7,r2,16
andi r2, r2, 0xffff
8028cac: 10bfffcc andi r2,r2,65535
add r2, r7, r2 /* add the upper and lower halfwords */
8028cb0: 3885883a add r2,r7,r2
add r2, r6, r2 /* add the carries */
8028cb4: 3085883a add r2,r6,r2
/* the accumulator is 18 bits */
srli r7, r2, 16
8028cb8: 100ed43a srli r7,r2,16
andi r2, r2, 0xffff
8028cbc: 10bfffcc andi r2,r2,65535
add r2, r7, r2 /* add 2 carry bits to lower halfword */
8028cc0: 3885883a add r2,r7,r2
/* the accumulator is 17 bits */
srli r7, r2, 16
8028cc4: 100ed43a srli r7,r2,16
andi r2, r2, 0xffff
8028cc8: 10bfffcc andi r2,r2,65535
add r2, r7, r2 /* add carry to lower halfword */
8028ccc: 3885883a add r2,r7,r2
08028cd0 <done>:
done:
ret /* r2 = 16-bit checksum */
8028cd0: f800283a ret
08028cd4 <dtrap>:
void irq_Unmask(void);
/* dtrap() - function to trap to debugger */
void
dtrap(void)
{
8028cd4: defffe04 addi sp,sp,-8
8028cd8: dfc00115 stw ra,4(sp)
8028cdc: df000015 stw fp,0(sp)
8028ce0: d839883a mov fp,sp
printf("dtrap - needs breakpoint\n");
8028ce4: 01020174 movhi r4,2053
8028ce8: 21298204 addi r4,r4,-23032
8028cec: 8002d9c0 call 8002d9c <puts>
}
8028cf0: 0001883a nop
8028cf4: e037883a mov sp,fp
8028cf8: dfc00117 ldw ra,4(sp)
8028cfc: df000017 ldw fp,0(sp)
8028d00: dec00204 addi sp,sp,8
8028d04: f800283a ret
08028d08 <kbhit>:
int
kbhit()
{
8028d08: defffd04 addi sp,sp,-12
8028d0c: dfc00215 stw ra,8(sp)
8028d10: df000115 stw fp,4(sp)
8028d14: df000104 addi fp,sp,4
static int kbd_init = 0;
int kb;
if (!kbd_init)
8028d18: d0a07517 ldw r2,-32300(gp)
8028d1c: 10000b1e bne r2,zero,8028d4c <kbhit+0x44>
/* we really should read the flags, OR in O_NONBLOCK, and write
* the flags back to STDIN, but the NIOS-II/HAL implementation
* will only let us modify O_NONBLOCK and O_APPEND, so we'll
* just write the new flag value.
*/
if (fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK) != 0)
8028d20: 01900004 movi r6,16384
8028d24: 01400104 movi r5,4
8028d28: 0009883a mov r4,zero
8028d2c: 8038ed80 call 8038ed8 <fcntl>
8028d30: 10000426 beq r2,zero,8028d44 <kbhit+0x3c>
{
printf("F_SETFL failed.\n");
8028d34: 01020174 movhi r4,2053
8028d38: 21298904 addi r4,r4,-23004
8028d3c: 8002d9c0 call 8002d9c <puts>
dtrap();
8028d40: 8028cd40 call 8028cd4 <dtrap>
}
kbd_init = 1;
8028d44: 00800044 movi r2,1
8028d48: d0a07515 stw r2,-32300(gp)
}
/* we have to do a read to see if there is a character available.
* we save the character, if there was one, to be read later. */
if (kb_last == EOF)
8028d4c: d0a01a17 ldw r2,-32664(gp)
8028d50: 10bfffd8 cmpnei r2,r2,-1
8028d54: 1000081e bne r2,zero,8028d78 <kbhit+0x70>
{
kb = getchar();
8028d58: 8002c380 call 8002c38 <getchar>
8028d5c: e0bfff15 stw r2,-4(fp)
if (kb < 0) /* any error means no character present */
8028d60: e0bfff17 ldw r2,-4(fp)
8028d64: 1000020e bge r2,zero,8028d70 <kbhit+0x68>
return (FALSE);
8028d68: 0005883a mov r2,zero
8028d6c: 00000306 br 8028d7c <kbhit+0x74>
/* there was a character, and we read it. */
kb_last = kb;
8028d70: e0bfff17 ldw r2,-4(fp)
8028d74: d0a01a15 stw r2,-32664(gp)
}
return (TRUE);
8028d78: 00800044 movi r2,1
}
8028d7c: e037883a mov sp,fp
8028d80: dfc00117 ldw ra,4(sp)
8028d84: df000017 ldw fp,0(sp)
8028d88: dec00204 addi sp,sp,8
8028d8c: f800283a ret
08028d90 <getch>:
int
getch()
{
8028d90: defffd04 addi sp,sp,-12
8028d94: dfc00215 stw ra,8(sp)
8028d98: df000115 stw fp,4(sp)
8028d9c: df000104 addi fp,sp,4
int chr;
if(kb_last != EOF)
8028da0: d0a01a17 ldw r2,-32664(gp)
8028da4: 10bfffe0 cmpeqi r2,r2,-1
8028da8: 1000051e bne r2,zero,8028dc0 <getch+0x30>
{
chr = kb_last;
8028dac: d0a01a17 ldw r2,-32664(gp)
8028db0: e0bfff15 stw r2,-4(fp)
kb_last = EOF;
8028db4: 00bfffc4 movi r2,-1
8028db8: d0a01a15 stw r2,-32664(gp)
8028dbc: 00000206 br 8028dc8 <getch+0x38>
}
else
chr = getchar();
8028dc0: 8002c380 call 8002c38 <getchar>
8028dc4: e0bfff15 stw r2,-4(fp)
return chr;
8028dc8: e0bfff17 ldw r2,-4(fp)
}
8028dcc: e037883a mov sp,fp
8028dd0: dfc00117 ldw ra,4(sp)
8028dd4: df000017 ldw fp,0(sp)
8028dd8: dec00204 addi sp,sp,8
8028ddc: f800283a ret
08028de0 <clock_init>:
int OS_TPS;
int cticks_factor;
int cticks_initialized = 0;
void clock_init(void)
{
8028de0: deffff04 addi sp,sp,-4
8028de4: df000015 stw fp,0(sp)
8028de8: d839883a mov fp,sp
OS_TPS = OS_TICKS_PER_SEC;
8028dec: 00801904 movi r2,100
8028df0: d0a07715 stw r2,-32292(gp)
cticks_factor = 0;
8028df4: d0207615 stw zero,-32296(gp)
cticks = 0;
8028df8: d0207d15 stw zero,-32268(gp)
cticks_initialized = 1;
8028dfc: 00800044 movi r2,1
8028e00: d0a07215 stw r2,-32312(gp)
}
8028e04: 0001883a nop
8028e08: e037883a mov sp,fp
8028e0c: df000017 ldw fp,0(sp)
8028e10: dec00104 addi sp,sp,4
8028e14: f800283a ret
08028e18 <clock_c>:
/* undo effects of clock_init (i.e. restore ISR vector)
* NO OP since using RTOS's timer.
*/
void clock_c(void)
{
8028e18: deffff04 addi sp,sp,-4
8028e1c: df000015 stw fp,0(sp)
8028e20: d839883a mov fp,sp
/* null */ ;
}
8028e24: 0001883a nop
8028e28: e037883a mov sp,fp
8028e2c: df000017 ldw fp,0(sp)
8028e30: dec00104 addi sp,sp,4
8028e34: f800283a ret
08028e38 <cticks_hook>:
* Use the uCOS-II/Altera HAL BSP's timer and scale cticks as per TPS.
*/
void
cticks_hook(void)
{
8028e38: deffff04 addi sp,sp,-4
8028e3c: df000015 stw fp,0(sp)
8028e40: d839883a mov fp,sp
if (cticks_initialized)
8028e44: d0a07217 ldw r2,-32312(gp)
8028e48: 10000d26 beq r2,zero,8028e80 <cticks_hook+0x48>
{
cticks_factor += TPS;
8028e4c: d0a07617 ldw r2,-32296(gp)
8028e50: 10801904 addi r2,r2,100
8028e54: d0a07615 stw r2,-32296(gp)
if (cticks_factor >= OS_TPS)
8028e58: d0e07617 ldw r3,-32296(gp)
8028e5c: d0a07717 ldw r2,-32292(gp)
8028e60: 18800716 blt r3,r2,8028e80 <cticks_hook+0x48>
{
cticks++;
8028e64: d0a07d17 ldw r2,-32268(gp)
8028e68: 10800044 addi r2,r2,1
8028e6c: d0a07d15 stw r2,-32268(gp)
cticks_factor -= OS_TPS;
8028e70: d0e07617 ldw r3,-32296(gp)
8028e74: d0a07717 ldw r2,-32292(gp)
8028e78: 1885c83a sub r2,r3,r2
8028e7c: d0a07615 stw r2,-32296(gp)
#ifdef USE_LCD
update_display();
#endif
}
}
}
8028e80: 0001883a nop
8028e84: e037883a mov sp,fp
8028e88: df000017 ldw fp,0(sp)
8028e8c: dec00104 addi sp,sp,4
8028e90: f800283a ret
08028e94 <irq_Mask>:
* ENTER_CRIT_SECTION() and enable them in EXIT_CRIT_SECTION()
* because calls to ENTER_CRIT_SECTION() can be nested."
*/
void
irq_Mask(void)
{
8028e94: defffd04 addi sp,sp,-12
8028e98: df000215 stw fp,8(sp)
8028e9c: df000204 addi fp,sp,8
NIOS2_READ_STATUS (context);
8028ea0: 0005303a rdctl r2,status
8028ea4: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8028ea8: e0fffe17 ldw r3,-8(fp)
8028eac: 00bfff84 movi r2,-2
8028eb0: 1884703a and r2,r3,r2
8028eb4: 1001703a wrctl status,r2
return context;
8028eb8: e0bffe17 ldw r2,-8(fp)
alt_irq_context local_cpu_statusreg;
local_cpu_statusreg = alt_irq_disable_all();
8028ebc: e0bfff15 stw r2,-4(fp)
if (++irq_level == 1)
8028ec0: d0a07317 ldw r2,-32308(gp)
8028ec4: 10800044 addi r2,r2,1
8028ec8: d0a07315 stw r2,-32308(gp)
8028ecc: d0a07317 ldw r2,-32308(gp)
8028ed0: 10800058 cmpnei r2,r2,1
8028ed4: 1000021e bne r2,zero,8028ee0 <irq_Mask+0x4c>
{
cpu_statusreg = local_cpu_statusreg;
8028ed8: e0bfff17 ldw r2,-4(fp)
8028edc: d0a07415 stw r2,-32304(gp)
}
}
8028ee0: 0001883a nop
8028ee4: e037883a mov sp,fp
8028ee8: df000017 ldw fp,0(sp)
8028eec: dec00104 addi sp,sp,4
8028ef0: f800283a ret
08028ef4 <irq_Unmask>:
/* Re-Enable Interrupts */
void
irq_Unmask(void)
{
8028ef4: defffe04 addi sp,sp,-8
8028ef8: df000115 stw fp,4(sp)
8028efc: df000104 addi fp,sp,4
if (--irq_level == 0)
8028f00: d0a07317 ldw r2,-32308(gp)
8028f04: 10bfffc4 addi r2,r2,-1
8028f08: d0a07315 stw r2,-32308(gp)
8028f0c: d0a07317 ldw r2,-32308(gp)
8028f10: 1000041e bne r2,zero,8028f24 <irq_Unmask+0x30>
{
alt_irq_enable_all(cpu_statusreg);
8028f14: d0a07417 ldw r2,-32304(gp)
8028f18: e0bfff15 stw r2,-4(fp)
NIOS2_WRITE_STATUS (context);
8028f1c: e0bfff17 ldw r2,-4(fp)
8028f20: 1001703a wrctl status,r2
}
}
8028f24: 0001883a nop
8028f28: e037883a mov sp,fp
8028f2c: df000017 ldw fp,0(sp)
8028f30: dec00104 addi sp,sp,4
8028f34: f800283a ret
08028f38 <LOCK_NET_RESOURCE>:
extern void irq_Mask(void);
extern void irq_Unmask(void);
void
LOCK_NET_RESOURCE(int resid)
{
8028f38: defffb04 addi sp,sp,-20
8028f3c: dfc00415 stw ra,16(sp)
8028f40: df000315 stw fp,12(sp)
8028f44: df000304 addi fp,sp,12
8028f48: e13ffd15 stw r4,-12(fp)
INT8U error = 0;
8028f4c: e03ffec5 stb zero,-5(fp)
int errct = 0;
8028f50: e03fff15 stw zero,-4(fp)
if ((0 <= resid) && (resid <= MAX_RESID))
8028f54: e0bffd17 ldw r2,-12(fp)
8028f58: 10002016 blt r2,zero,8028fdc <LOCK_NET_RESOURCE+0xa4>
8028f5c: e0bffd17 ldw r2,-12(fp)
8028f60: 10800408 cmpgei r2,r2,16
8028f64: 10001d1e bne r2,zero,8028fdc <LOCK_NET_RESOURCE+0xa4>
{
do
{
OSSemPend(resid_semaphore[resid], 0, &error);
8028f68: e0bffd17 ldw r2,-12(fp)
8028f6c: 100690ba slli r3,r2,2
8028f70: 008201b4 movhi r2,2054
8028f74: 1885883a add r2,r3,r2
8028f78: 10b85b17 ldw r2,-7828(r2)
8028f7c: e0fffec4 addi r3,fp,-5
8028f80: 180d883a mov r6,r3
8028f84: 000b883a mov r5,zero
8028f88: 1009883a mov r4,r2
8028f8c: 8015a600 call 8015a60 <OSSemPend>
/*
* Sometimes we get a "timeout" error even though we passed a zero
* to indicate we'll wait forever. When this happens, try again:
*/
if ((error == 10) && (++errct > 1000))
8028f90: e0bffec3 ldbu r2,-5(fp)
8028f94: 10803fcc andi r2,r2,255
8028f98: 10800298 cmpnei r2,r2,10
8028f9c: 10000a1e bne r2,zero,8028fc8 <LOCK_NET_RESOURCE+0x90>
8028fa0: e0bfff17 ldw r2,-4(fp)
8028fa4: 10800044 addi r2,r2,1
8028fa8: e0bfff15 stw r2,-4(fp)
8028fac: e0bfff17 ldw r2,-4(fp)
8028fb0: 1080fa50 cmplti r2,r2,1001
8028fb4: 1000041e bne r2,zero,8028fc8 <LOCK_NET_RESOURCE+0x90>
{
panic("lock NET"); /* fatal */
8028fb8: 01020174 movhi r4,2053
8028fbc: 21298d04 addi r4,r4,-22988
8028fc0: 80271780 call 8027178 <panic>
8028fc4: 00000606 br 8028fe0 <LOCK_NET_RESOURCE+0xa8>
return;
}
} while (error == 10);
8028fc8: e0bffec3 ldbu r2,-5(fp)
8028fcc: 10803fcc andi r2,r2,255
8028fd0: 108002a0 cmpeqi r2,r2,10
8028fd4: 103fe41e bne r2,zero,8028f68 <LOCK_NET_RESOURCE+0x30>
if ((0 <= resid) && (resid <= MAX_RESID))
8028fd8: 00000106 br 8028fe0 <LOCK_NET_RESOURCE+0xa8>
}
else
dtrap();
8028fdc: 8028cd40 call 8028cd4 <dtrap>
}
8028fe0: e037883a mov sp,fp
8028fe4: dfc00117 ldw ra,4(sp)
8028fe8: df000017 ldw fp,0(sp)
8028fec: dec00204 addi sp,sp,8
8028ff0: f800283a ret
08028ff4 <UNLOCK_NET_RESOURCE>:
void
UNLOCK_NET_RESOURCE(int resid)
{
8028ff4: defffc04 addi sp,sp,-16
8028ff8: dfc00315 stw ra,12(sp)
8028ffc: df000215 stw fp,8(sp)
8029000: df000204 addi fp,sp,8
8029004: e13ffe15 stw r4,-8(fp)
INT8U error = 0;
8029008: e03fffc5 stb zero,-1(fp)
if ((0 <= resid) && (resid <= MAX_RESID))
802900c: e0bffe17 ldw r2,-8(fp)
8029010: 10001116 blt r2,zero,8029058 <UNLOCK_NET_RESOURCE+0x64>
8029014: e0bffe17 ldw r2,-8(fp)
8029018: 10800408 cmpgei r2,r2,16
802901c: 10000e1e bne r2,zero,8029058 <UNLOCK_NET_RESOURCE+0x64>
{
error = OSSemPost(resid_semaphore[resid]);
8029020: e0bffe17 ldw r2,-8(fp)
8029024: 100690ba slli r3,r2,2
8029028: 008201b4 movhi r2,2054
802902c: 1885883a add r2,r3,r2
8029030: 10b85b17 ldw r2,-7828(r2)
8029034: 1009883a mov r4,r2
8029038: 8015d840 call 8015d84 <OSSemPost>
802903c: e0bfffc5 stb r2,-1(fp)
if (error != OS_NO_ERR)
8029040: e0bfffc3 ldbu r2,-1(fp)
8029044: 10000526 beq r2,zero,802905c <UNLOCK_NET_RESOURCE+0x68>
{
panic("unlock NET");
8029048: 01020174 movhi r4,2053
802904c: 21299004 addi r4,r4,-22976
8029050: 80271780 call 8027178 <panic>
if (error != OS_NO_ERR)
8029054: 00000106 br 802905c <UNLOCK_NET_RESOURCE+0x68>
}
}
else
dtrap();
8029058: 8028cd40 call 8028cd4 <dtrap>
}
802905c: 0001883a nop
8029060: e037883a mov sp,fp
8029064: dfc00117 ldw ra,4(sp)
8029068: df000017 ldw fp,0(sp)
802906c: dec00204 addi sp,sp,8
8029070: f800283a ret
08029074 <TK_NEWTASK>:
extern long nettick_wakes;
int
TK_NEWTASK(struct inet_taskinfo * nettask)
{
8029074: deffee04 addi sp,sp,-72
8029078: dfc01115 stw ra,68(sp)
802907c: df001015 stw fp,64(sp)
8029080: df001004 addi fp,sp,64
8029084: e13ff515 stw r4,-44(fp)
INT8U error;
OS_STK * stack;
stack = (OS_STK*)npalloc(nettask->stacksize);
8029088: e0bff517 ldw r2,-44(fp)
802908c: 10800417 ldw r2,16(r2)
8029090: 1009883a mov r4,r2
8029094: 802982c0 call 802982c <npalloc>
8029098: e0bfff15 stw r2,-4(fp)
if(!stack)
802909c: e0bfff17 ldw r2,-4(fp)
80290a0: 1000031e bne r2,zero,80290b0 <TK_NEWTASK+0x3c>
panic("stack alloc");
80290a4: 01020174 movhi r4,2053
80290a8: 21299304 addi r4,r4,-22964
80290ac: 80271780 call 8027178 <panic>
#if OS_TASK_CREATE_EXT_EN > 0
error = OSTaskCreateExt(
80290b0: e0bff517 ldw r2,-44(fp)
80290b4: 12000217 ldw r8,8(r2)
nettask->entry,
NULL,
stack + (nettask->stacksize/sizeof(OS_STK)) - 1,
80290b8: e0bff517 ldw r2,-44(fp)
80290bc: 10800417 ldw r2,16(r2)
80290c0: 1007883a mov r3,r2
80290c4: 00bfff04 movi r2,-4
80290c8: 1884703a and r2,r3,r2
80290cc: 10bfff04 addi r2,r2,-4
error = OSTaskCreateExt(
80290d0: e0ffff17 ldw r3,-4(fp)
80290d4: 188b883a add r5,r3,r2
nettask->priority,
80290d8: e0bff517 ldw r2,-44(fp)
80290dc: 10800317 ldw r2,12(r2)
error = OSTaskCreateExt(
80290e0: 11803fcc andi r6,r2,255
nettask->priority,
80290e4: e0bff517 ldw r2,-44(fp)
80290e8: 10800317 ldw r2,12(r2)
error = OSTaskCreateExt(
80290ec: 10bfffcc andi r2,r2,65535
stack,
(INT32U)nettask->stacksize / sizeof(OS_STK),
80290f0: e0fff517 ldw r3,-44(fp)
80290f4: 18c00417 ldw r3,16(r3)
error = OSTaskCreateExt(
80290f8: 1806d0ba srli r3,r3,2
80290fc: 010000c4 movi r4,3
8029100: d9000415 stw r4,16(sp)
8029104: d8000315 stw zero,12(sp)
8029108: d8c00215 stw r3,8(sp)
802910c: e0ffff17 ldw r3,-4(fp)
8029110: d8c00115 stw r3,4(sp)
8029114: d8800015 stw r2,0(sp)
8029118: 300f883a mov r7,r6
802911c: 280d883a mov r6,r5
8029120: 000b883a mov r5,zero
8029124: 4009883a mov r4,r8
8029128: 801664c0 call 801664c <OSTaskCreateExt>
802912c: e0bffec5 stb r2,-5(fp)
stack + (nettask->stacksize/sizeof(OS_STK)) - 1,
nettask->priority);
#endif
/* If we go here, then there's another task using our priority */
/* Tell the user and exit with an error */
if (error == OS_PRIO_EXIST)
8029130: e0bffec3 ldbu r2,-5(fp)
8029134: 10803fcc andi r2,r2,255
8029138: 10800a18 cmpnei r2,r2,40
802913c: 10001c1e bne r2,zero,80291b0 <TK_NEWTASK+0x13c>
{
char curr_task[OS_TASK_NAME_SIZE];
INT8U err;
OSTaskNameGet(nettask->priority, (INT8U*)curr_task, &err);
8029140: e0bff517 ldw r2,-44(fp)
8029144: 10800317 ldw r2,12(r2)
8029148: 10803fcc andi r2,r2,255
802914c: e13ffe84 addi r4,fp,-6
8029150: e0fff684 addi r3,fp,-38
8029154: 200d883a mov r6,r4
8029158: 180b883a mov r5,r3
802915c: 1009883a mov r4,r2
8029160: 8016c2c0 call 8016c2c <OSTaskNameGet>
curr_task[OS_TASK_NAME_SIZE-1]=0;
8029164: e03ffe45 stb zero,-7(fp)
printf("Priority requested for task \"%s\" (Prio:%d) conflicts with "\
8029168: e0bff517 ldw r2,-44(fp)
802916c: 10c00117 ldw r3,4(r2)
8029170: e0bff517 ldw r2,-44(fp)
8029174: 11000317 ldw r4,12(r2)
8029178: e0bff517 ldw r2,-44(fp)
802917c: 10800317 ldw r2,12(r2)
8029180: e17ff684 addi r5,fp,-38
8029184: d8800015 stw r2,0(sp)
8029188: 280f883a mov r7,r5
802918c: 200d883a mov r6,r4
8029190: 180b883a mov r5,r3
8029194: 01020174 movhi r4,2053
8029198: 21299604 addi r4,r4,-22952
802919c: 8002c780 call 8002c78 <printf>
"already running task \"%s\" (Prio: %d)\n",
nettask->name, nettask->priority, curr_task, nettask->priority);
printf("You may wish to check your task priority settings in "\
80291a0: 01020174 movhi r4,2053
80291a4: 2129ae04 addi r4,r4,-22856
80291a8: 8002d9c0 call 8002d9c <puts>
80291ac: 00002006 br 8029230 <TK_NEWTASK+0x1bc>
"\"<bsp path>\\iniche\\src\\h\\nios2\\ipport.h\" against "\
"the priority settings in your application and recompile.\n\n");
}
else if (error == OS_PRIO_INVALID)
80291b0: e0bffec3 ldbu r2,-5(fp)
80291b4: 10803fcc andi r2,r2,255
80291b8: 10800a98 cmpnei r2,r2,42
80291bc: 10000e1e bne r2,zero,80291f8 <TK_NEWTASK+0x184>
{
printf("Priority requested for task \"%s\" (Prio:%d) exceeds "\
80291c0: e0bff517 ldw r2,-44(fp)
80291c4: 10c00117 ldw r3,4(r2)
80291c8: e0bff517 ldw r2,-44(fp)
80291cc: 10800317 ldw r2,12(r2)
80291d0: 01c00504 movi r7,20
80291d4: 100d883a mov r6,r2
80291d8: 180b883a mov r5,r3
80291dc: 01020174 movhi r4,2053
80291e0: 2129d604 addi r4,r4,-22696
80291e4: 8002c780 call 8002c78 <printf>
"available priority levels in the system (OS_LOWEST_PRIO = %d)\n\n",
nettask->name, nettask->priority, OS_LOWEST_PRIO);
printf("Please modify the tasks priority level, or modify the "\
80291e8: 01020174 movhi r4,2053
80291ec: 2129f304 addi r4,r4,-22580
80291f0: 8002d9c0 call 8002d9c <puts>
80291f4: 00000e06 br 8029230 <TK_NEWTASK+0x1bc>
"\"Lowest assignable priority\" setting in the MicroC/OS-II "\
"component\n");
}
else if (error != OS_NO_ERR)
80291f8: e0bffec3 ldbu r2,-5(fp)
80291fc: 10803fcc andi r2,r2,255
8029200: 10000b26 beq r2,zero,8029230 <TK_NEWTASK+0x1bc>
{ /* All other errors are fatal */
printf("Task create error /(MicroC/OS-II error code:%d/) on %s\n",
8029204: e0bffec3 ldbu r2,-5(fp)
8029208: 10c03fcc andi r3,r2,255
802920c: e0bff517 ldw r2,-44(fp)
8029210: 10800117 ldw r2,4(r2)
8029214: 100d883a mov r6,r2
8029218: 180b883a mov r5,r3
802921c: 01020174 movhi r4,2053
8029220: 212a1204 addi r4,r4,-22456
8029224: 8002c780 call 8002c78 <printf>
error, nettask->name);
return (-1);
8029228: 00bfffc4 movi r2,-1
802922c: 00001c06 br 80292a0 <TK_NEWTASK+0x22c>
}
/* Include the task name, so that uc/osII (os aware) debuggers can
* display it.
*/
OSTaskNameSet(nettask->priority, (INT8U*)&nettask->name[0], &error);
8029230: e0bff517 ldw r2,-44(fp)
8029234: 10800317 ldw r2,12(r2)
8029238: 10c03fcc andi r3,r2,255
802923c: e0bff517 ldw r2,-44(fp)
8029240: 10800117 ldw r2,4(r2)
8029244: e13ffec4 addi r4,fp,-5
8029248: 200d883a mov r6,r4
802924c: 100b883a mov r5,r2
8029250: 1809883a mov r4,r3
8029254: 8016d640 call 8016d64 <OSTaskNameSet>
nettask->stackbase = (char*)stack;
8029258: e0bff517 ldw r2,-44(fp)
802925c: e0ffff17 ldw r3,-4(fp)
8029260: 10c00515 stw r3,20(r2)
*nettask->tk_ptr = (INT8U)nettask->priority;
8029264: e0bff517 ldw r2,-44(fp)
8029268: 10c00317 ldw r3,12(r2)
802926c: e0bff517 ldw r2,-44(fp)
8029270: 10800017 ldw r2,0(r2)
8029274: 10c00005 stb r3,0(r2)
printf("Created \"%s\" task (Prio: %d)\n",
8029278: e0bff517 ldw r2,-44(fp)
802927c: 10c00117 ldw r3,4(r2)
8029280: e0bff517 ldw r2,-44(fp)
8029284: 10800317 ldw r2,12(r2)
8029288: 100d883a mov r6,r2
802928c: 180b883a mov r5,r3
8029290: 01020174 movhi r4,2053
8029294: 212a2004 addi r4,r4,-22400
8029298: 8002c780 call 8002c78 <printf>
(char *)nettask->name, nettask->priority);
return (0);
802929c: 0005883a mov r2,zero
}
80292a0: e037883a mov sp,fp
80292a4: dfc00117 ldw ra,4(sp)
80292a8: df000017 ldw fp,0(sp)
80292ac: dec00204 addi sp,sp,8
80292b0: f800283a ret
080292b4 <wait_app_sem>:
* event (e.g., configuration inputs from user, initiation of a new session,
* or a periodic timeout notification.
*/
void
wait_app_sem(unsigned long semid)
{
80292b4: defffb04 addi sp,sp,-20
80292b8: dfc00415 stw ra,16(sp)
80292bc: df000315 stw fp,12(sp)
80292c0: df000304 addi fp,sp,12
80292c4: e13ffd15 stw r4,-12(fp)
INT8U error = 0;
80292c8: e03ffec5 stb zero,-5(fp)
int errct = 0;
80292cc: e03fff15 stw zero,-4(fp)
if ((0 <= semid) && (semid <= MAX_SEMID))
80292d0: e0bffd17 ldw r2,-12(fp)
80292d4: 108001a8 cmpgeui r2,r2,6
80292d8: 10001d1e bne r2,zero,8029350 <wait_app_sem+0x9c>
{
do
{
OSSemPend(app_semaphore[semid], 0, &error);
80292dc: e0bffd17 ldw r2,-12(fp)
80292e0: 100690ba slli r3,r2,2
80292e4: 008201b4 movhi r2,2054
80292e8: 1885883a add r2,r3,r2
80292ec: 10b86b17 ldw r2,-7764(r2)
80292f0: e0fffec4 addi r3,fp,-5
80292f4: 180d883a mov r6,r3
80292f8: 000b883a mov r5,zero
80292fc: 1009883a mov r4,r2
8029300: 8015a600 call 8015a60 <OSSemPend>
/*
* Sometimes we get a "timeout" error even though we passed a zero
* to indicate we'll wait forever. When this happens, try again:
*/
if ((error == 10) && (++errct > 1000))
8029304: e0bffec3 ldbu r2,-5(fp)
8029308: 10803fcc andi r2,r2,255
802930c: 10800298 cmpnei r2,r2,10
8029310: 10000a1e bne r2,zero,802933c <wait_app_sem+0x88>
8029314: e0bfff17 ldw r2,-4(fp)
8029318: 10800044 addi r2,r2,1
802931c: e0bfff15 stw r2,-4(fp)
8029320: e0bfff17 ldw r2,-4(fp)
8029324: 1080fa50 cmplti r2,r2,1001
8029328: 1000041e bne r2,zero,802933c <wait_app_sem+0x88>
{
panic("lock NET"); /* fatal */
802932c: 01020174 movhi r4,2053
8029330: 21298d04 addi r4,r4,-22988
8029334: 80271780 call 8027178 <panic>
8029338: 00000606 br 8029354 <wait_app_sem+0xa0>
return;
}
} while (error == 10);
802933c: e0bffec3 ldbu r2,-5(fp)
8029340: 10803fcc andi r2,r2,255
8029344: 108002a0 cmpeqi r2,r2,10
8029348: 103fe41e bne r2,zero,80292dc <wait_app_sem+0x28>
802934c: 00000106 br 8029354 <wait_app_sem+0xa0>
}
else
dtrap();
8029350: 8028cd40 call 8028cd4 <dtrap>
}
8029354: e037883a mov sp,fp
8029358: dfc00117 ldw ra,4(sp)
802935c: df000017 ldw fp,0(sp)
8029360: dec00204 addi sp,sp,8
8029364: f800283a ret
08029368 <post_app_sem>:
* notification. It signals the corresponding application event.
*/
void
post_app_sem(unsigned long semid)
{
8029368: defffc04 addi sp,sp,-16
802936c: dfc00315 stw ra,12(sp)
8029370: df000215 stw fp,8(sp)
8029374: df000204 addi fp,sp,8
8029378: e13ffe15 stw r4,-8(fp)
INT8U error;
if ((0 <= semid) && (semid <= MAX_SEMID))
802937c: e0bffe17 ldw r2,-8(fp)
8029380: 108001a8 cmpgeui r2,r2,6
8029384: 10000e1e bne r2,zero,80293c0 <post_app_sem+0x58>
{
error = OSSemPost(app_semaphore[semid]);
8029388: e0bffe17 ldw r2,-8(fp)
802938c: 100690ba slli r3,r2,2
8029390: 008201b4 movhi r2,2054
8029394: 1885883a add r2,r3,r2
8029398: 10b86b17 ldw r2,-7764(r2)
802939c: 1009883a mov r4,r2
80293a0: 8015d840 call 8015d84 <OSSemPost>
80293a4: e0bfffc5 stb r2,-1(fp)
if (error != OS_NO_ERR)
80293a8: e0bfffc3 ldbu r2,-1(fp)
80293ac: 10000526 beq r2,zero,80293c4 <post_app_sem+0x5c>
{
panic("unlock NET");
80293b0: 01020174 movhi r4,2053
80293b4: 21299004 addi r4,r4,-22976
80293b8: 80271780 call 8027178 <panic>
}
}
else
dtrap();
}
80293bc: 00000106 br 80293c4 <post_app_sem+0x5c>
dtrap();
80293c0: 8028cd40 call 8028cd4 <dtrap>
}
80293c4: 0001883a nop
80293c8: e037883a mov sp,fp
80293cc: dfc00117 ldw ra,4(sp)
80293d0: df000017 ldw fp,0(sp)
80293d4: dec00204 addi sp,sp,8
80293d8: f800283a ret
080293dc <alt_iniche_init>:
#ifndef SUPERLOOP
extern OS_EVENT *resid_semaphore[MAX_RESID+1];
void alt_iniche_init(void)
{
80293dc: defffd04 addi sp,sp,-12
80293e0: dfc00215 stw ra,8(sp)
80293e4: df000115 stw fp,4(sp)
80293e8: df000104 addi fp,sp,4
int i;
/* initialize the npalloc() heap semaphore */
mheap_sem_ptr = OSSemCreate(1);
80293ec: 01000044 movi r4,1
80293f0: 80157740 call 8015774 <OSSemCreate>
80293f4: d0a07f15 stw r2,-32260(gp)
if (!mheap_sem_ptr)
80293f8: d0a07f17 ldw r2,-32260(gp)
80293fc: 1000031e bne r2,zero,802940c <alt_iniche_init+0x30>
panic("mheap_sem_ptr create err");
8029400: 01020174 movhi r4,2053
8029404: 212a2804 addi r4,r4,-22368
8029408: 80271780 call 8027178 <panic>
rcvdq_sem_ptr = OSSemCreate(0);
802940c: 0009883a mov r4,zero
8029410: 80157740 call 8015774 <OSSemCreate>
8029414: d0a08015 stw r2,-32256(gp)
if (!rcvdq_sem_ptr)
8029418: d0a08017 ldw r2,-32256(gp)
802941c: 1000031e bne r2,zero,802942c <alt_iniche_init+0x50>
panic("rcvdq_sem_ptr create err");
8029420: 01020174 movhi r4,2053
8029424: 212a2f04 addi r4,r4,-22340
8029428: 80271780 call 8027178 <panic>
#ifdef OS_PREEMPTIVE
for (i = 0; i <= MAX_RESID; i++)
802942c: e03fff15 stw zero,-4(fp)
8029430: 00001406 br 8029484 <alt_iniche_init+0xa8>
{
resid_semaphore[i] = OSSemCreate(1);
8029434: 01000044 movi r4,1
8029438: 80157740 call 8015774 <OSSemCreate>
802943c: 1009883a mov r4,r2
8029440: e0bfff17 ldw r2,-4(fp)
8029444: 100690ba slli r3,r2,2
8029448: 008201b4 movhi r2,2054
802944c: 1885883a add r2,r3,r2
8029450: 11385b15 stw r4,-7828(r2)
if (!resid_semaphore[i])
8029454: e0bfff17 ldw r2,-4(fp)
8029458: 100690ba slli r3,r2,2
802945c: 008201b4 movhi r2,2054
8029460: 1885883a add r2,r3,r2
8029464: 10b85b17 ldw r2,-7828(r2)
8029468: 1000031e bne r2,zero,8029478 <alt_iniche_init+0x9c>
panic("resid_semaphore create err");
802946c: 01020174 movhi r4,2053
8029470: 212a3604 addi r4,r4,-22312
8029474: 80271780 call 8027178 <panic>
for (i = 0; i <= MAX_RESID; i++)
8029478: e0bfff17 ldw r2,-4(fp)
802947c: 10800044 addi r2,r2,1
8029480: e0bfff15 stw r2,-4(fp)
8029484: e0bfff17 ldw r2,-4(fp)
8029488: 10800410 cmplti r2,r2,16
802948c: 103fe91e bne r2,zero,8029434 <alt_iniche_init+0x58>
}
for (i = 0; i <= MAX_SEMID; i++)
8029490: e03fff15 stw zero,-4(fp)
8029494: 00001406 br 80294e8 <alt_iniche_init+0x10c>
{
app_semaphore[i] = OSSemCreate(1);
8029498: 01000044 movi r4,1
802949c: 80157740 call 8015774 <OSSemCreate>
80294a0: 1009883a mov r4,r2
80294a4: e0bfff17 ldw r2,-4(fp)
80294a8: 100690ba slli r3,r2,2
80294ac: 008201b4 movhi r2,2054
80294b0: 1885883a add r2,r3,r2
80294b4: 11386b15 stw r4,-7764(r2)
if (!app_semaphore[i])
80294b8: e0bfff17 ldw r2,-4(fp)
80294bc: 100690ba slli r3,r2,2
80294c0: 008201b4 movhi r2,2054
80294c4: 1885883a add r2,r3,r2
80294c8: 10b86b17 ldw r2,-7764(r2)
80294cc: 1000031e bne r2,zero,80294dc <alt_iniche_init+0x100>
panic("app_semaphore create err");
80294d0: 01020174 movhi r4,2053
80294d4: 212a3d04 addi r4,r4,-22284
80294d8: 80271780 call 8027178 <panic>
for (i = 0; i <= MAX_SEMID; i++)
80294dc: e0bfff17 ldw r2,-4(fp)
80294e0: 10800044 addi r2,r2,1
80294e4: e0bfff15 stw r2,-4(fp)
80294e8: e0bfff17 ldw r2,-4(fp)
80294ec: 10800190 cmplti r2,r2,6
80294f0: 103fe91e bne r2,zero,8029498 <alt_iniche_init+0xbc>
#ifndef TCPWAKE_RTOS
/*
* clear global_TCPwakeup_set
*/
for (i = 0; i < GLOBWAKE_SZ; i++)
80294f4: e03fff15 stw zero,-4(fp)
80294f8: 00001e06 br 8029574 <alt_iniche_init+0x198>
{
global_TCPwakeup_set[i].ctick = 0;
80294fc: e0bfff17 ldw r2,-4(fp)
8029500: 10c00324 muli r3,r2,12
8029504: 008201b4 movhi r2,2054
8029508: 1885883a add r2,r3,r2
802950c: 10381f15 stw zero,-8068(r2)
global_TCPwakeup_set[i].soc_event = NULL;
8029510: e0bfff17 ldw r2,-4(fp)
8029514: 10c00324 muli r3,r2,12
8029518: 008201b4 movhi r2,2054
802951c: 1885883a add r2,r3,r2
8029520: 10382015 stw zero,-8064(r2)
global_TCPwakeup_set[i].semaphore = OSSemCreate(0);
8029524: 0009883a mov r4,zero
8029528: 80157740 call 8015774 <OSSemCreate>
802952c: 1009883a mov r4,r2
8029530: e0bfff17 ldw r2,-4(fp)
8029534: 10c00324 muli r3,r2,12
8029538: 008201b4 movhi r2,2054
802953c: 1885883a add r2,r3,r2
8029540: 11382115 stw r4,-8060(r2)
if (!global_TCPwakeup_set[i].semaphore)
8029544: e0bfff17 ldw r2,-4(fp)
8029548: 10c00324 muli r3,r2,12
802954c: 008201b4 movhi r2,2054
8029550: 1885883a add r2,r3,r2
8029554: 10b82117 ldw r2,-8060(r2)
8029558: 1000031e bne r2,zero,8029568 <alt_iniche_init+0x18c>
panic("globwake_semaphore create err");
802955c: 01020174 movhi r4,2053
8029560: 212a4404 addi r4,r4,-22256
8029564: 80271780 call 8027178 <panic>
for (i = 0; i < GLOBWAKE_SZ; i++)
8029568: e0bfff17 ldw r2,-4(fp)
802956c: 10800044 addi r2,r2,1
8029570: e0bfff15 stw r2,-4(fp)
8029574: e0bfff17 ldw r2,-4(fp)
8029578: 10800510 cmplti r2,r2,20
802957c: 103fdf1e bne r2,zero,80294fc <alt_iniche_init+0x120>
}
global_TCPwakeup_setIndx = 0;
8029580: d0207c15 stw zero,-32272(gp)
#endif /* TCPWAKE_RTOS */
}
8029584: 0001883a nop
8029588: e037883a mov sp,fp
802958c: dfc00117 ldw ra,4(sp)
8029590: df000017 ldw fp,0(sp)
8029594: dec00204 addi sp,sp,8
8029598: f800283a ret
0802959c <pre_task_setup>:
* Return NULL if OK, else brief error message
*/
char *
pre_task_setup()
{
802959c: deffff04 addi sp,sp,-4
80295a0: df000015 stw fp,0(sp)
80295a4: d839883a mov fp,sp
write_leds(0);
write_7seg_raw(0x0000);
#endif
/* preset buffer counts; may be overridden from command line */
bigbufs = MAXBIGPKTS;
80295a8: 00800784 movi r2,30
80295ac: d0a01815 stw r2,-32672(gp)
lilbufs = MAXLILPKTS;
80295b0: 00800784 movi r2,30
80295b4: d0a01615 stw r2,-32680(gp)
bigbufsiz = BIGBUFSIZE;
80295b8: 00818004 movi r2,1536
80295bc: d0a01915 stw r2,-32668(gp)
lilbufsiz = LILBUFSIZE;
80295c0: 00802004 movi r2,128
80295c4: d0a01715 stw r2,-32676(gp)
/* Install callback to prep_armintcp from prep_ifaces() */
port_prep = prep_armintcp;
80295c8: 008200f4 movhi r2,2051
80295cc: 10a58204 addi r2,r2,-27128
80295d0: d0a09615 stw r2,-32168(gp)
#endif /* NOTDEF */
#endif /* USE_PPP */
return NULL;
80295d4: 0005883a mov r2,zero
}
80295d8: e037883a mov sp,fp
80295dc: df000017 ldw fp,0(sp)
80295e0: dec00104 addi sp,sp,4
80295e4: f800283a ret
080295e8 <post_task_setup>:
* Return NULL if OK, else brief error message
*/
char *
post_task_setup()
{
80295e8: deffff04 addi sp,sp,-4
80295ec: df000015 stw fp,0(sp)
80295f0: d839883a mov fp,sp
return NULL;
80295f4: 0005883a mov r2,zero
}
80295f8: e037883a mov sp,fp
80295fc: df000017 ldw fp,0(sp)
8029600: dec00104 addi sp,sp,4
8029604: f800283a ret
08029608 <prep_armintcp>:
#endif /* INCLUDE_NVPARMS */
int
prep_armintcp(int ifaces_found)
{
8029608: defffd04 addi sp,sp,-12
802960c: dfc00215 stw ra,8(sp)
8029610: df000115 stw fp,4(sp)
8029614: df000104 addi fp,sp,4
8029618: e13fff15 stw r4,-4(fp)
* Call iniche_devices_init, in alt_iniche_dev.c,
* to step through all devices and all their respective
* low-level initialization routines.
*/
#ifdef ALT_INICHE
ifaces_found = iniche_devices_init(ifaces_found);
802961c: e13fff17 ldw r4,-4(fp)
8029620: 8022aa80 call 8022aa8 <iniche_devices_init>
8029624: e0bfff15 stw r2,-4(fp)
#ifdef USE_SLIP
ifaces_found = prep_slip(ifaces_found);
#endif
return ifaces_found;
8029628: e0bfff17 ldw r2,-4(fp)
}
802962c: e037883a mov sp,fp
8029630: dfc00117 ldw ra,4(sp)
8029634: df000017 ldw fp,0(sp)
8029638: dec00204 addi sp,sp,8
802963c: f800283a ret
08029640 <npalloc_base>:
#endif
char *
npalloc_base(unsigned size, int cacheable)
{
8029640: defff804 addi sp,sp,-32
8029644: dfc00715 stw ra,28(sp)
8029648: df000615 stw fp,24(sp)
802964c: df000604 addi fp,sp,24
8029650: e13ffb15 stw r4,-20(fp)
8029654: e17ffa15 stw r5,-24(fp)
char * ptr;
void *(*alloc_rtn)(size_t size) = cacheable ? malloc : alt_uncached_malloc;
8029658: e0bffa17 ldw r2,-24(fp)
802965c: 10000326 beq r2,zero,802966c <npalloc_base+0x2c>
8029660: 00820134 movhi r2,2052
8029664: 108b2604 addi r2,r2,11416
8029668: 00000206 br 8029674 <npalloc_base+0x34>
802966c: 00820134 movhi r2,2052
8029670: 10a02904 addi r2,r2,-32604
8029674: e0bffe15 stw r2,-8(fp)
#ifdef UCOS_II
INT8U err;
#endif
#ifdef UCOS_II
OSSemPend(mheap_sem_ptr, 0, &err);
8029678: d0a07f17 ldw r2,-32260(gp)
802967c: e0fffcc4 addi r3,fp,-13
8029680: 180d883a mov r6,r3
8029684: 000b883a mov r5,zero
8029688: 1009883a mov r4,r2
802968c: 8015a600 call 8015a60 <OSSemPend>
if(err)
8029690: e0bffcc3 ldbu r2,-13(fp)
8029694: 10803fcc andi r2,r2,255
8029698: 10001626 beq r2,zero,80296f4 <npalloc_base+0xb4>
{
int errct = 0;
802969c: e03fff15 stw zero,-4(fp)
/* sometimes we get a "timeout" error even though we passed a zero
* to indicate we'll wait forever. When this happens, try again:
*/
while(err == 10)
80296a0: 00001006 br 80296e4 <npalloc_base+0xa4>
{
if(errct++ > 1000)
80296a4: e0bfff17 ldw r2,-4(fp)
80296a8: 10c00044 addi r3,r2,1
80296ac: e0ffff15 stw r3,-4(fp)
80296b0: 1080fa50 cmplti r2,r2,1001
80296b4: 1000051e bne r2,zero,80296cc <npalloc_base+0x8c>
{
panic("npalloc"); /* fatal? */
80296b8: 01020174 movhi r4,2053
80296bc: 212a4c04 addi r4,r4,-22224
80296c0: 80271780 call 8027178 <panic>
return NULL;
80296c4: 0005883a mov r2,zero
80296c8: 00001b06 br 8029738 <npalloc_base+0xf8>
}
OSSemPend(mheap_sem_ptr, 0, &err);
80296cc: d0a07f17 ldw r2,-32260(gp)
80296d0: e0fffcc4 addi r3,fp,-13
80296d4: 180d883a mov r6,r3
80296d8: 000b883a mov r5,zero
80296dc: 1009883a mov r4,r2
80296e0: 8015a600 call 8015a60 <OSSemPend>
while(err == 10)
80296e4: e0bffcc3 ldbu r2,-13(fp)
80296e8: 10803fcc andi r2,r2,255
80296ec: 108002a0 cmpeqi r2,r2,10
80296f0: 103fec1e bne r2,zero,80296a4 <npalloc_base+0x64>
#endif
#ifdef MEM_WRAPPERS
ptr = wrap_alloc(size, alloc_rtn);
#else
ptr = (*alloc_rtn)(size);
80296f4: e0bffe17 ldw r2,-8(fp)
80296f8: e13ffb17 ldw r4,-20(fp)
80296fc: 103ee83a callr r2
8029700: e0bffd15 stw r2,-12(fp)
#endif
#ifdef UCOS_II
err = OSSemPost(mheap_sem_ptr);
8029704: d0a07f17 ldw r2,-32260(gp)
8029708: 1009883a mov r4,r2
802970c: 8015d840 call 8015d84 <OSSemPost>
8029710: e0bffcc5 stb r2,-13(fp)
#endif
if(!ptr)
8029714: e0bffd17 ldw r2,-12(fp)
8029718: 1000021e bne r2,zero,8029724 <npalloc_base+0xe4>
return NULL;
802971c: 0005883a mov r2,zero
8029720: 00000506 br 8029738 <npalloc_base+0xf8>
MEMSET(ptr, 0, size);
8029724: e1bffb17 ldw r6,-20(fp)
8029728: 000b883a mov r5,zero
802972c: e13ffd17 ldw r4,-12(fp)
8029730: 80088e40 call 80088e4 <memset>
return ptr;
8029734: e0bffd17 ldw r2,-12(fp)
}
8029738: e037883a mov sp,fp
802973c: dfc00117 ldw ra,4(sp)
8029740: df000017 ldw fp,0(sp)
8029744: dec00204 addi sp,sp,8
8029748: f800283a ret
0802974c <npfree_base>:
void
npfree_base(void *ptr, int cacheable)
{
802974c: defff904 addi sp,sp,-28
8029750: dfc00615 stw ra,24(sp)
8029754: df000515 stw fp,20(sp)
8029758: df000504 addi fp,sp,20
802975c: e13ffc15 stw r4,-16(fp)
8029760: e17ffb15 stw r5,-20(fp)
void (*free_rtn)(void *ptr) = cacheable ? free : alt_uncached_free;
8029764: e0bffb17 ldw r2,-20(fp)
8029768: 10000326 beq r2,zero,8029778 <npfree_base+0x2c>
802976c: 00820134 movhi r2,2052
8029770: 108b2a04 addi r2,r2,11432
8029774: 00000206 br 8029780 <npfree_base+0x34>
8029778: 00820134 movhi r2,2052
802977c: 10a01804 addi r2,r2,-32672
8029780: e0bffe15 stw r2,-8(fp)
#ifdef UCOS_II
INT8U err;
OSSemPend(mheap_sem_ptr, 0, &err);
8029784: d0a07f17 ldw r2,-32260(gp)
8029788: e0fffdc4 addi r3,fp,-9
802978c: 180d883a mov r6,r3
8029790: 000b883a mov r5,zero
8029794: 1009883a mov r4,r2
8029798: 8015a600 call 8015a60 <OSSemPend>
if (err)
802979c: e0bffdc3 ldbu r2,-9(fp)
80297a0: 10803fcc andi r2,r2,255
80297a4: 10001526 beq r2,zero,80297fc <npfree_base+0xb0>
{
int errct = 0;
80297a8: e03fff15 stw zero,-4(fp)
/* sometimes we get a "timeout" error even though we passed a zero
* to indicate we'll wait forever. When this happens, try again:
*/
while (err == 10)
80297ac: 00000f06 br 80297ec <npfree_base+0xa0>
{
if (errct++ > 1000)
80297b0: e0bfff17 ldw r2,-4(fp)
80297b4: 10c00044 addi r3,r2,1
80297b8: e0ffff15 stw r3,-4(fp)
80297bc: 1080fa50 cmplti r2,r2,1001
80297c0: 1000041e bne r2,zero,80297d4 <npfree_base+0x88>
{
panic("npfree"); /* fatal? */
80297c4: 01020174 movhi r4,2053
80297c8: 212a4e04 addi r4,r4,-22216
80297cc: 80271780 call 8027178 <panic>
80297d0: 00001106 br 8029818 <npfree_base+0xcc>
return;
}
OSSemPend(mheap_sem_ptr, 0, &err);
80297d4: d0a07f17 ldw r2,-32260(gp)
80297d8: e0fffdc4 addi r3,fp,-9
80297dc: 180d883a mov r6,r3
80297e0: 000b883a mov r5,zero
80297e4: 1009883a mov r4,r2
80297e8: 8015a600 call 8015a60 <OSSemPend>
while (err == 10)
80297ec: e0bffdc3 ldbu r2,-9(fp)
80297f0: 10803fcc andi r2,r2,255
80297f4: 108002a0 cmpeqi r2,r2,10
80297f8: 103fed1e bne r2,zero,80297b0 <npfree_base+0x64>
}
#ifdef MEM_WRAPPERS
wrap_free((char*)ptr, free_rtn);
#else
(*free_rtn)(ptr);
80297fc: e0bffe17 ldw r2,-8(fp)
8029800: e13ffc17 ldw r4,-16(fp)
8029804: 103ee83a callr r2
#endif
err = OSSemPost(mheap_sem_ptr);
8029808: d0a07f17 ldw r2,-32260(gp)
802980c: 1009883a mov r4,r2
8029810: 8015d840 call 8015d84 <OSSemPost>
8029814: e0bffdc5 stb r2,-9(fp)
#else
(*free_rtn)(ptr);
#endif
#endif
}
8029818: e037883a mov sp,fp
802981c: dfc00117 ldw ra,4(sp)
8029820: df000017 ldw fp,0(sp)
8029824: dec00204 addi sp,sp,8
8029828: f800283a ret
0802982c <npalloc>:
char *
npalloc(unsigned size)
{
802982c: defffd04 addi sp,sp,-12
8029830: dfc00215 stw ra,8(sp)
8029834: df000115 stw fp,4(sp)
8029838: df000104 addi fp,sp,4
802983c: e13fff15 stw r4,-4(fp)
return npalloc_base(size, 1);
8029840: 01400044 movi r5,1
8029844: e13fff17 ldw r4,-4(fp)
8029848: 80296400 call 8029640 <npalloc_base>
}
802984c: e037883a mov sp,fp
8029850: dfc00117 ldw ra,4(sp)
8029854: df000017 ldw fp,0(sp)
8029858: dec00204 addi sp,sp,8
802985c: f800283a ret
08029860 <npfree>:
void
npfree(void *ptr)
{
8029860: defffd04 addi sp,sp,-12
8029864: dfc00215 stw ra,8(sp)
8029868: df000115 stw fp,4(sp)
802986c: df000104 addi fp,sp,4
8029870: e13fff15 stw r4,-4(fp)
if(ptr) {
8029874: e0bfff17 ldw r2,-4(fp)
8029878: 10000326 beq r2,zero,8029888 <npfree+0x28>
npfree_base(ptr, 1);
802987c: 01400044 movi r5,1
8029880: e13fff17 ldw r4,-4(fp)
8029884: 802974c0 call 802974c <npfree_base>
}
}
8029888: 0001883a nop
802988c: e037883a mov sp,fp
8029890: dfc00117 ldw ra,4(sp)
8029894: df000017 ldw fp,0(sp)
8029898: dec00204 addi sp,sp,8
802989c: f800283a ret
080298a0 <ncpalloc>:
* contains macro definitions that assign specific memory
* allocation calls to these routines.
*/
#ifdef ALT_INICHE
char * ncpalloc(unsigned size)
{
80298a0: defffd04 addi sp,sp,-12
80298a4: dfc00215 stw ra,8(sp)
80298a8: df000115 stw fp,4(sp)
80298ac: df000104 addi fp,sp,4
80298b0: e13fff15 stw r4,-4(fp)
return npalloc_base(size, 0);
80298b4: 000b883a mov r5,zero
80298b8: e13fff17 ldw r4,-4(fp)
80298bc: 80296400 call 8029640 <npalloc_base>
}
80298c0: e037883a mov sp,fp
80298c4: dfc00117 ldw ra,4(sp)
80298c8: df000017 ldw fp,0(sp)
80298cc: dec00204 addi sp,sp,8
80298d0: f800283a ret
080298d4 <ncpfree>:
void ncpfree(void *ptr)
{
80298d4: defffd04 addi sp,sp,-12
80298d8: dfc00215 stw ra,8(sp)
80298dc: df000115 stw fp,4(sp)
80298e0: df000104 addi fp,sp,4
80298e4: e13fff15 stw r4,-4(fp)
if(ptr) {
80298e8: e0bfff17 ldw r2,-4(fp)
80298ec: 10000326 beq r2,zero,80298fc <ncpfree+0x28>
npfree_base(ptr, 0);
80298f0: 000b883a mov r5,zero
80298f4: e13fff17 ldw r4,-4(fp)
80298f8: 802974c0 call 802974c <npfree_base>
}
}
80298fc: 0001883a nop
8029900: e037883a mov sp,fp
8029904: dfc00117 ldw ra,4(sp)
8029908: df000017 ldw fp,0(sp)
802990c: dec00204 addi sp,sp,8
8029910: f800283a ret
08029914 <pffindtype>:
* RETURNS:
*/
struct protosw *
pffindtype(int domain, int type)
{
8029914: defffc04 addi sp,sp,-16
8029918: dfc00315 stw ra,12(sp)
802991c: df000215 stw fp,8(sp)
8029920: df000204 addi fp,sp,8
8029924: e13fff15 stw r4,-4(fp)
8029928: e17ffe15 stw r5,-8(fp)
/* check that the passed domain is vaid for the build */
if (domain != AF_INET)
802992c: e0bfff17 ldw r2,-4(fp)
8029930: 108000a0 cmpeqi r2,r2,2
8029934: 1000031e bne r2,zero,8029944 <pffindtype+0x30>
{
#ifdef IP_V6
if(domain != AF_INET6)
#endif
{
dtrap(); /* programming error */
8029938: 8028cd40 call 8028cd4 <dtrap>
return NULL;
802993c: 0005883a mov r2,zero
8029940: 00001306 br 8029990 <pffindtype+0x7c>
}
}
if (type == SOCK_STREAM)
8029944: e0bffe17 ldw r2,-8(fp)
8029948: 10800058 cmpnei r2,r2,1
802994c: 1000031e bne r2,zero,802995c <pffindtype+0x48>
return &tcp_protosw;
8029950: 00820174 movhi r2,2053
8029954: 10b1f804 addi r2,r2,-14368
8029958: 00000d06 br 8029990 <pffindtype+0x7c>
#ifdef UDP_SOCKETS
else if(type == SOCK_DGRAM)
802995c: e0bffe17 ldw r2,-8(fp)
8029960: 10800098 cmpnei r2,r2,2
8029964: 1000031e bne r2,zero,8029974 <pffindtype+0x60>
return &udp_protosw;
8029968: 00820174 movhi r2,2053
802996c: 10b1fe04 addi r2,r2,-14344
8029970: 00000706 br 8029990 <pffindtype+0x7c>
#endif /* UDP_SOCKETS */
#ifdef IP_RAW
else if(type == SOCK_RAW)
8029974: e0bffe17 ldw r2,-8(fp)
8029978: 108000d8 cmpnei r2,r2,3
802997c: 1000031e bne r2,zero,802998c <pffindtype+0x78>
return &rawip_protosw;
8029980: 00820174 movhi r2,2053
8029984: 10b20404 addi r2,r2,-14320
8029988: 00000106 br 8029990 <pffindtype+0x7c>
#endif /* IP_RAW */
else
return NULL;
802998c: 0005883a mov r2,zero
}
8029990: e037883a mov sp,fp
8029994: dfc00117 ldw ra,4(sp)
8029998: df000017 ldw fp,0(sp)
802999c: dec00204 addi sp,sp,8
80299a0: f800283a ret
080299a4 <pffindproto>:
* RETURNS:
*/
struct protosw *
pffindproto(int domain, int protocol, int type)
{
80299a4: defffb04 addi sp,sp,-20
80299a8: dfc00415 stw ra,16(sp)
80299ac: df000315 stw fp,12(sp)
80299b0: df000304 addi fp,sp,12
80299b4: e13fff15 stw r4,-4(fp)
80299b8: e17ffe15 stw r5,-8(fp)
80299bc: e1bffd15 stw r6,-12(fp)
#ifdef IP_RAW
if (type == SOCK_RAW)
80299c0: e0bffd17 ldw r2,-12(fp)
80299c4: 108000d8 cmpnei r2,r2,3
80299c8: 1000041e bne r2,zero,80299dc <pffindproto+0x38>
return(pffindtype(domain, type));
80299cc: e17ffd17 ldw r5,-12(fp)
80299d0: e13fff17 ldw r4,-4(fp)
80299d4: 80299140 call 8029914 <pffindtype>
80299d8: 00002006 br 8029a5c <pffindproto+0xb8>
#endif
switch (protocol)
80299dc: e0bffe17 ldw r2,-8(fp)
80299e0: 108001a0 cmpeqi r2,r2,6
80299e4: 1000061e bne r2,zero,8029a00 <pffindproto+0x5c>
80299e8: e0bffe17 ldw r2,-8(fp)
80299ec: 10800460 cmpeqi r2,r2,17
80299f0: 1000091e bne r2,zero,8029a18 <pffindproto+0x74>
80299f4: e0bffe17 ldw r2,-8(fp)
80299f8: 10001026 beq r2,zero,8029a3c <pffindproto+0x98>
80299fc: 00000c06 br 8029a30 <pffindproto+0x8c>
{
#ifdef BSD_SOCKETS
case IPPROTO_TCP:
if (type == SOCK_STREAM)
8029a00: e0bffd17 ldw r2,-12(fp)
8029a04: 10800058 cmpnei r2,r2,1
8029a08: 10000e26 beq r2,zero,8029a44 <pffindproto+0xa0>
break;
/* IPPROTO_TCP protocol on non-SOCK_STREAM type socket */
dtrap();
8029a0c: 8028cd40 call 8028cd4 <dtrap>
return NULL;
8029a10: 0005883a mov r2,zero
8029a14: 00001106 br 8029a5c <pffindproto+0xb8>
case IPPROTO_UDP:
if (type == SOCK_DGRAM)
8029a18: e0bffd17 ldw r2,-12(fp)
8029a1c: 10800098 cmpnei r2,r2,2
8029a20: 10000a26 beq r2,zero,8029a4c <pffindproto+0xa8>
break;
/* IPPROTO_UDP protocol on non-SOCK_DGRAM type socket */
dtrap();
8029a24: 8028cd40 call 8028cd4 <dtrap>
return NULL;
8029a28: 0005883a mov r2,zero
8029a2c: 00000b06 br 8029a5c <pffindproto+0xb8>
case 0:
/* let protocol default based on socket type */
break;
default:
/* unknown/unsupported protocol on socket */
dtrap();
8029a30: 8028cd40 call 8028cd4 <dtrap>
return NULL;
8029a34: 0005883a mov r2,zero
8029a38: 00000806 br 8029a5c <pffindproto+0xb8>
break;
8029a3c: 0001883a nop
8029a40: 00000306 br 8029a50 <pffindproto+0xac>
break;
8029a44: 0001883a nop
8029a48: 00000106 br 8029a50 <pffindproto+0xac>
break;
8029a4c: 0001883a nop
}
return(pffindtype(domain, type)); /* map to findtype */
8029a50: e17ffd17 ldw r5,-12(fp)
8029a54: e13fff17 ldw r4,-4(fp)
8029a58: 80299140 call 8029914 <pffindtype>
}
8029a5c: e037883a mov sp,fp
8029a60: dfc00117 ldw ra,4(sp)
8029a64: df000017 ldw fp,0(sp)
8029a68: dec00204 addi sp,sp,8
8029a6c: f800283a ret
08029a70 <m_getnbuf>:
* RETURNS:
*/
struct mbuf *
m_getnbuf(int type, int len)
{
8029a70: defffa04 addi sp,sp,-24
8029a74: dfc00515 stw ra,20(sp)
8029a78: df000415 stw fp,16(sp)
8029a7c: df000404 addi fp,sp,16
8029a80: e13ffd15 stw r4,-12(fp)
8029a84: e17ffc15 stw r5,-16(fp)
struct mbuf * m;
PACKET pkt = NULL;
8029a88: e03fff15 stw zero,-4(fp)
#ifdef NPDEBUG
if (type < MT_RXDATA || type > MT_IFADDR)
8029a8c: e0bffd17 ldw r2,-12(fp)
8029a90: 0080030e bge zero,r2,8029aa0 <m_getnbuf+0x30>
8029a94: e0bffd17 ldw r2,-12(fp)
8029a98: 10800390 cmplti r2,r2,14
8029a9c: 1000011e bne r2,zero,8029aa4 <m_getnbuf+0x34>
{
dtrap(); /* is this OK? */
8029aa0: 8028cd40 call 8028cd4 <dtrap>
}
#endif
/* if caller has data (len >= 0), we need to allocate
* a packet buffer; else all we need is the mbuf */
if (len != 0)
8029aa4: e0bffc17 ldw r2,-16(fp)
8029aa8: 10000d26 beq r2,zero,8029ae0 <m_getnbuf+0x70>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
8029aac: 01000084 movi r4,2
8029ab0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pkt = pk_alloc(len + HDRSLEN);
8029ab4: e0bffc17 ldw r2,-16(fp)
8029ab8: 10800e04 addi r2,r2,56
8029abc: 1009883a mov r4,r2
8029ac0: 80284340 call 8028434 <pk_alloc>
8029ac4: e0bfff15 stw r2,-4(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8029ac8: 01000084 movi r4,2
8029acc: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (!pkt)
8029ad0: e0bfff17 ldw r2,-4(fp)
8029ad4: 1000021e bne r2,zero,8029ae0 <m_getnbuf+0x70>
return NULL;
8029ad8: 0005883a mov r2,zero
8029adc: 00004106 br 8029be4 <m_getnbuf+0x174>
}
m = (struct mbuf *)getq(&mfreeq);
8029ae0: 010201b4 movhi r4,2054
8029ae4: 21388a04 addi r4,r4,-7640
8029ae8: 80288d80 call 80288d8 <getq>
8029aec: e0bffe15 stw r2,-8(fp)
if (!m)
8029af0: e0bffe17 ldw r2,-8(fp)
8029af4: 10000a1e bne r2,zero,8029b20 <m_getnbuf+0xb0>
{
if (pkt)
8029af8: e0bfff17 ldw r2,-4(fp)
8029afc: 10000626 beq r2,zero,8029b18 <m_getnbuf+0xa8>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
8029b00: 01000084 movi r4,2
8029b04: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
8029b08: e13fff17 ldw r4,-4(fp)
8029b0c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8029b10: 01000084 movi r4,2
8029b14: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
return NULL;
8029b18: 0005883a mov r2,zero
8029b1c: 00003106 br 8029be4 <m_getnbuf+0x174>
}
m->m_type = type;
8029b20: e0bffe17 ldw r2,-8(fp)
8029b24: e0fffd17 ldw r3,-12(fp)
8029b28: 10c00815 stw r3,32(r2)
if (len == 0)
8029b2c: e0bffc17 ldw r2,-16(fp)
8029b30: 1000071e bne r2,zero,8029b50 <m_getnbuf+0xe0>
{
m->pkt = NULL;
8029b34: e0bffe17 ldw r2,-8(fp)
8029b38: 10000115 stw zero,4(r2)
m->m_base = NULL; /* caller better fill these in! */
8029b3c: e0bffe17 ldw r2,-8(fp)
8029b40: 10000415 stw zero,16(r2)
m->m_memsz = 0;
8029b44: e0bffe17 ldw r2,-8(fp)
8029b48: 10000515 stw zero,20(r2)
8029b4c: 00001506 br 8029ba4 <m_getnbuf+0x134>
}
else
{
m->pkt = pkt;
8029b50: e0bffe17 ldw r2,-8(fp)
8029b54: e0ffff17 ldw r3,-4(fp)
8029b58: 10c00115 stw r3,4(r2)
/* set m_data to the part where tcp data should go */
m->m_base = m->m_data = pkt->nb_prot = pkt->nb_buff + HDRSLEN;
8029b5c: e0bfff17 ldw r2,-4(fp)
8029b60: 10800117 ldw r2,4(r2)
8029b64: 10c00e04 addi r3,r2,56
8029b68: e0bfff17 ldw r2,-4(fp)
8029b6c: 10c00315 stw r3,12(r2)
8029b70: e0bfff17 ldw r2,-4(fp)
8029b74: 10c00317 ldw r3,12(r2)
8029b78: e0bffe17 ldw r2,-8(fp)
8029b7c: 10c00315 stw r3,12(r2)
8029b80: e0bffe17 ldw r2,-8(fp)
8029b84: 10c00317 ldw r3,12(r2)
8029b88: e0bffe17 ldw r2,-8(fp)
8029b8c: 10c00415 stw r3,16(r2)
m->m_memsz = pkt->nb_blen - HDRSLEN;
8029b90: e0bfff17 ldw r2,-4(fp)
8029b94: 10800217 ldw r2,8(r2)
8029b98: 10fff204 addi r3,r2,-56
8029b9c: e0bffe17 ldw r2,-8(fp)
8029ba0: 10c00515 stw r3,20(r2)
}
m->m_len = 0;
8029ba4: e0bffe17 ldw r2,-8(fp)
8029ba8: 10000215 stw zero,8(r2)
m->m_next = m->m_act = NULL;
8029bac: e0bffe17 ldw r2,-8(fp)
8029bb0: 10000715 stw zero,28(r2)
8029bb4: e0bffe17 ldw r2,-8(fp)
8029bb8: 10c00717 ldw r3,28(r2)
8029bbc: e0bffe17 ldw r2,-8(fp)
8029bc0: 10c00615 stw r3,24(r2)
mbstat.allocs++; /* maintain local statistics */
8029bc4: d0a08317 ldw r2,-32244(gp)
8029bc8: 10800044 addi r2,r2,1
8029bcc: d0a08315 stw r2,-32244(gp)
putq(&mbufq, (qp)m);
8029bd0: e17ffe17 ldw r5,-8(fp)
8029bd4: 010201b4 movhi r4,2054
8029bd8: 21388504 addi r4,r4,-7660
8029bdc: 80289900 call 8028990 <putq>
return m;
8029be0: e0bffe17 ldw r2,-8(fp)
}
8029be4: e037883a mov sp,fp
8029be8: dfc00117 ldw ra,4(sp)
8029bec: df000017 ldw fp,0(sp)
8029bf0: dec00204 addi sp,sp,8
8029bf4: f800283a ret
08029bf8 <m_free>:
*/
struct mbuf *
m_free(struct mbuf * m)
{
8029bf8: defffc04 addi sp,sp,-16
8029bfc: dfc00315 stw ra,12(sp)
8029c00: df000215 stw fp,8(sp)
8029c04: df000204 addi fp,sp,8
8029c08: e13ffe15 stw r4,-8(fp)
struct mbuf * nextptr;
#ifdef NPDEBUG
if (mbufq.q_len < 1)
8029c0c: 008201b4 movhi r2,2054
8029c10: 10b88717 ldw r2,-7652(r2)
8029c14: 00800316 blt zero,r2,8029c24 <m_free+0x2c>
panic("mfree: q_len");
8029c18: 01020174 movhi r4,2053
8029c1c: 212a5004 addi r4,r4,-22208
8029c20: 80271780 call 8027178 <panic>
if (m->m_type < MT_RXDATA || m->m_type > MT_IFADDR)
8029c24: e0bffe17 ldw r2,-8(fp)
8029c28: 10800817 ldw r2,32(r2)
8029c2c: 0080040e bge zero,r2,8029c40 <m_free+0x48>
8029c30: e0bffe17 ldw r2,-8(fp)
8029c34: 10800817 ldw r2,32(r2)
8029c38: 10800390 cmplti r2,r2,14
8029c3c: 10000a1e bne r2,zero,8029c68 <m_free+0x70>
{
if (m->m_type == MT_FREE)
8029c40: e0bffe17 ldw r2,-8(fp)
8029c44: 10800817 ldw r2,32(r2)
8029c48: 1000041e bne r2,zero,8029c5c <m_free+0x64>
{
dtrap(); /* debug double free of mbuf by tcp_in() */
8029c4c: 8028cd40 call 8028cd4 <dtrap>
return m->m_next; /* seems harmless, though.... */
8029c50: e0bffe17 ldw r2,-8(fp)
8029c54: 10800617 ldw r2,24(r2)
8029c58: 00002306 br 8029ce8 <m_free+0xf0>
}
else
panic("m_free: type");
8029c5c: 01020174 movhi r4,2053
8029c60: 212a5404 addi r4,r4,-22192
8029c64: 80271780 call 8027178 <panic>
}
#endif /* NPDEBUG */
nextptr = m->m_next; /* remember value to return */
8029c68: e0bffe17 ldw r2,-8(fp)
8029c6c: 10800617 ldw r2,24(r2)
8029c70: e0bfff15 stw r2,-4(fp)
if (qdel(&mbufq, m) == NULL)
8029c74: e17ffe17 ldw r5,-8(fp)
8029c78: 010201b4 movhi r4,2054
8029c7c: 21388504 addi r4,r4,-7660
8029c80: 8028a400 call 8028a40 <qdel>
8029c84: 1000031e bne r2,zero,8029c94 <m_free+0x9c>
panic("m_free: missing");
8029c88: 01020174 movhi r4,2053
8029c8c: 212a5804 addi r4,r4,-22176
8029c90: 80271780 call 8027178 <panic>
m->m_type = MT_FREE; /* this may seem silly, but helps error checking */
8029c94: e0bffe17 ldw r2,-8(fp)
8029c98: 10000815 stw zero,32(r2)
if (m->pkt)
8029c9c: e0bffe17 ldw r2,-8(fp)
8029ca0: 10800117 ldw r2,4(r2)
8029ca4: 10000826 beq r2,zero,8029cc8 <m_free+0xd0>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
8029ca8: 01000084 movi r4,2
8029cac: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(m->pkt); /* free up the netport buffer */
8029cb0: e0bffe17 ldw r2,-8(fp)
8029cb4: 10800117 ldw r2,4(r2)
8029cb8: 1009883a mov r4,r2
8029cbc: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8029cc0: 01000084 movi r4,2
8029cc4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
mbstat.frees++;
8029cc8: d0a08417 ldw r2,-32240(gp)
8029ccc: 10800044 addi r2,r2,1
8029cd0: d0a08415 stw r2,-32240(gp)
putq(&mfreeq, (qp)m);
8029cd4: e17ffe17 ldw r5,-8(fp)
8029cd8: 010201b4 movhi r4,2054
8029cdc: 21388a04 addi r4,r4,-7640
8029ce0: 80289900 call 8028990 <putq>
return nextptr;
8029ce4: e0bfff17 ldw r2,-4(fp)
}
8029ce8: e037883a mov sp,fp
8029cec: dfc00117 ldw ra,4(sp)
8029cf0: df000017 ldw fp,0(sp)
8029cf4: dec00204 addi sp,sp,8
8029cf8: f800283a ret
08029cfc <m_freem>:
* RETURNS:
*/
void
m_freem(struct mbuf * m)
{
8029cfc: defffd04 addi sp,sp,-12
8029d00: dfc00215 stw ra,8(sp)
8029d04: df000115 stw fp,4(sp)
8029d08: df000104 addi fp,sp,4
8029d0c: e13fff15 stw r4,-4(fp)
while (m != NULL)
8029d10: 00000306 br 8029d20 <m_freem+0x24>
m = m_free(m);
8029d14: e13fff17 ldw r4,-4(fp)
8029d18: 8029bf80 call 8029bf8 <m_free>
8029d1c: e0bfff15 stw r2,-4(fp)
while (m != NULL)
8029d20: e0bfff17 ldw r2,-4(fp)
8029d24: 103ffb1e bne r2,zero,8029d14 <m_freem+0x18>
}
8029d28: 0001883a nop
8029d2c: e037883a mov sp,fp
8029d30: dfc00117 ldw ra,4(sp)
8029d34: df000017 ldw fp,0(sp)
8029d38: dec00204 addi sp,sp,8
8029d3c: f800283a ret
08029d40 <m_copy>:
* RETURNS:
*/
struct mbuf *
m_copy(struct mbuf * m, int off, int len)
{
8029d40: defff704 addi sp,sp,-36
8029d44: dfc00815 stw ra,32(sp)
8029d48: df000715 stw fp,28(sp)
8029d4c: df000704 addi fp,sp,28
8029d50: e13ffb15 stw r4,-20(fp)
8029d54: e17ffa15 stw r5,-24(fp)
8029d58: e1bff915 stw r6,-28(fp)
struct mbuf * nb, * head, * tail;
int tocopy;
if (len == 0) /* nothing to do */
8029d5c: e0bff917 ldw r2,-28(fp)
8029d60: 1000021e bne r2,zero,8029d6c <m_copy+0x2c>
return NULL;
8029d64: 0005883a mov r2,zero
8029d68: 0000a606 br 802a004 <m_copy+0x2c4>
#ifdef NPDEBUG
/* sanity test parms */
if (off < 0 || (len < 0 && len != M_COPYALL))
8029d6c: e0bffa17 ldw r2,-24(fp)
8029d70: 10000516 blt r2,zero,8029d88 <m_copy+0x48>
8029d74: e0bff917 ldw r2,-28(fp)
8029d78: 1000180e bge r2,zero,8029ddc <m_copy+0x9c>
8029d7c: e0bff917 ldw r2,-28(fp)
8029d80: 10bfffe0 cmpeqi r2,r2,-1
8029d84: 1000151e bne r2,zero,8029ddc <m_copy+0x9c>
{
dtrap();
8029d88: 8028cd40 call 8028cd4 <dtrap>
return NULL;
8029d8c: 0005883a mov r2,zero
8029d90: 00009c06 br 802a004 <m_copy+0x2c4>
#endif /* NPDEBUG */
/* move forward through mbuf q to "off" point */
while (off > 0)
{
if (!m)
8029d94: e0bffb17 ldw r2,-20(fp)
8029d98: 1000031e bne r2,zero,8029da8 <m_copy+0x68>
{
dtrap();
8029d9c: 8028cd40 call 8028cd4 <dtrap>
return NULL;
8029da0: 0005883a mov r2,zero
8029da4: 00009706 br 802a004 <m_copy+0x2c4>
}
if (off < (int)m->m_len)
8029da8: e0bffb17 ldw r2,-20(fp)
8029dac: 10800217 ldw r2,8(r2)
8029db0: 1007883a mov r3,r2
8029db4: e0bffa17 ldw r2,-24(fp)
8029db8: 10c00b16 blt r2,r3,8029de8 <m_copy+0xa8>
break;
off -= m->m_len;
8029dbc: e0fffa17 ldw r3,-24(fp)
8029dc0: e0bffb17 ldw r2,-20(fp)
8029dc4: 10800217 ldw r2,8(r2)
8029dc8: 1885c83a sub r2,r3,r2
8029dcc: e0bffa15 stw r2,-24(fp)
m = m->m_next;
8029dd0: e0bffb17 ldw r2,-20(fp)
8029dd4: 10800617 ldw r2,24(r2)
8029dd8: e0bffb15 stw r2,-20(fp)
while (off > 0)
8029ddc: e0bffa17 ldw r2,-24(fp)
8029de0: 00bfec16 blt zero,r2,8029d94 <m_copy+0x54>
8029de4: 00000106 br 8029dec <m_copy+0xac>
break;
8029de8: 0001883a nop
}
head = tail = NULL;
8029dec: e03ffd15 stw zero,-12(fp)
8029df0: e0bffd17 ldw r2,-12(fp)
8029df4: e0bffe15 stw r2,-8(fp)
while (len > 0)
8029df8: 00007806 br 8029fdc <m_copy+0x29c>
{
if (m == NULL) /* at end of queue? */
8029dfc: e0bffb17 ldw r2,-20(fp)
8029e00: 1000051e bne r2,zero,8029e18 <m_copy+0xd8>
{
panic("m_copy: bad len");
8029e04: 01020174 movhi r4,2053
8029e08: 212a5c04 addi r4,r4,-22160
8029e0c: 80271780 call 8027178 <panic>
return NULL;
8029e10: 0005883a mov r2,zero
8029e14: 00007b06 br 802a004 <m_copy+0x2c4>
}
tocopy = (int)MIN(len, (int)(m->m_len - off));
8029e18: e0bffb17 ldw r2,-20(fp)
8029e1c: 10c00217 ldw r3,8(r2)
8029e20: e0bffa17 ldw r2,-24(fp)
8029e24: 1885c83a sub r2,r3,r2
8029e28: 1007883a mov r3,r2
8029e2c: e0bff917 ldw r2,-28(fp)
8029e30: 1880010e bge r3,r2,8029e38 <m_copy+0xf8>
8029e34: 1805883a mov r2,r3
8029e38: e0bffc15 stw r2,-16(fp)
* ALIGN_TYPE, so if the offset isn't aligned, we must
* copy the buffer instead of cloning it.
* Also, don't permit multiple clones; they sometimes
* lead to corrupted data.
*/
if ((off & (ALIGN_TYPE - 1)) ||
8029e3c: e0bffa17 ldw r2,-24(fp)
8029e40: 108000cc andi r2,r2,3
8029e44: 1000051e bne r2,zero,8029e5c <m_copy+0x11c>
(m->pkt->inuse != 1))
8029e48: e0bffb17 ldw r2,-20(fp)
8029e4c: 10800117 ldw r2,4(r2)
8029e50: 10800917 ldw r2,36(r2)
if ((off & (ALIGN_TYPE - 1)) ||
8029e54: 10800060 cmpeqi r2,r2,1
8029e58: 1000211e bne r2,zero,8029ee0 <m_copy+0x1a0>
{
if ((nb = m_getwithdata (m->m_type, tocopy)) == NULL)
8029e5c: e0bffb17 ldw r2,-20(fp)
8029e60: 10800817 ldw r2,32(r2)
8029e64: e17ffc17 ldw r5,-16(fp)
8029e68: 1009883a mov r4,r2
8029e6c: 8029a700 call 8029a70 <m_getnbuf>
8029e70: e0bfff15 stw r2,-4(fp)
8029e74: e0bfff17 ldw r2,-4(fp)
8029e78: 10005c26 beq r2,zero,8029fec <m_copy+0x2ac>
goto nospace;
MEMCPY(nb->m_data, m->m_data+off, tocopy);
8029e7c: e0bfff17 ldw r2,-4(fp)
8029e80: 11000317 ldw r4,12(r2)
8029e84: e0bffb17 ldw r2,-20(fp)
8029e88: 10c00317 ldw r3,12(r2)
8029e8c: e0bffa17 ldw r2,-24(fp)
8029e90: 1885883a add r2,r3,r2
8029e94: e0fffc17 ldw r3,-16(fp)
8029e98: 180d883a mov r6,r3
8029e9c: 100b883a mov r5,r2
8029ea0: 80086b80 call 80086b8 <memcpy>
nb->m_len = tocopy; /* set length of data we just moved into new mbuf */
8029ea4: e0fffc17 ldw r3,-16(fp)
8029ea8: e0bfff17 ldw r2,-4(fp)
8029eac: 10c00215 stw r3,8(r2)
tcpstat.tcps_mcopies++;
8029eb0: 008201b4 movhi r2,2054
8029eb4: 10b8d217 ldw r2,-7352(r2)
8029eb8: 10c00044 addi r3,r2,1
8029ebc: 008201b4 movhi r2,2054
8029ec0: 10f8d215 stw r3,-7352(r2)
tcpstat.tcps_mcopiedbytes += tocopy;
8029ec4: 008201b4 movhi r2,2054
8029ec8: 10f8d417 ldw r3,-7344(r2)
8029ecc: e0bffc17 ldw r2,-16(fp)
8029ed0: 1887883a add r3,r3,r2
8029ed4: 008201b4 movhi r2,2054
8029ed8: 10f8d415 stw r3,-7344(r2)
8029edc: 00002d06 br 8029f94 <m_copy+0x254>
{
/* Rather than memcpy every mbuf's data, "clone" the data by
* making a duplicate of the mbufs involved and bumping the
* inuse count of the actual packet structs
*/
if ((nb = m_getwithdata (m->m_type, 0)) == NULL)
8029ee0: e0bffb17 ldw r2,-20(fp)
8029ee4: 10800817 ldw r2,32(r2)
8029ee8: 000b883a mov r5,zero
8029eec: 1009883a mov r4,r2
8029ef0: 8029a700 call 8029a70 <m_getnbuf>
8029ef4: e0bfff15 stw r2,-4(fp)
8029ef8: e0bfff17 ldw r2,-4(fp)
8029efc: 10003d26 beq r2,zero,8029ff4 <m_copy+0x2b4>
goto nospace;
m->pkt->inuse++; /* bump pkt use count to clone it */
8029f00: e0bffb17 ldw r2,-20(fp)
8029f04: 10800117 ldw r2,4(r2)
8029f08: 10c00917 ldw r3,36(r2)
8029f0c: 18c00044 addi r3,r3,1
8029f10: 10c00915 stw r3,36(r2)
/* set up new mbuf with pointers to cloned packet */
nb->pkt = m->pkt;
8029f14: e0bffb17 ldw r2,-20(fp)
8029f18: 10c00117 ldw r3,4(r2)
8029f1c: e0bfff17 ldw r2,-4(fp)
8029f20: 10c00115 stw r3,4(r2)
nb->m_base = m->m_base;
8029f24: e0bffb17 ldw r2,-20(fp)
8029f28: 10c00417 ldw r3,16(r2)
8029f2c: e0bfff17 ldw r2,-4(fp)
8029f30: 10c00415 stw r3,16(r2)
nb->m_memsz = m->m_memsz;
8029f34: e0bffb17 ldw r2,-20(fp)
8029f38: 10c00517 ldw r3,20(r2)
8029f3c: e0bfff17 ldw r2,-4(fp)
8029f40: 10c00515 stw r3,20(r2)
nb->m_data = m->m_data + off;
8029f44: e0bffb17 ldw r2,-20(fp)
8029f48: 10c00317 ldw r3,12(r2)
8029f4c: e0bffa17 ldw r2,-24(fp)
8029f50: 1887883a add r3,r3,r2
8029f54: e0bfff17 ldw r2,-4(fp)
8029f58: 10c00315 stw r3,12(r2)
nb->m_len = tocopy;
8029f5c: e0fffc17 ldw r3,-16(fp)
8029f60: e0bfff17 ldw r2,-4(fp)
8029f64: 10c00215 stw r3,8(r2)
tcpstat.tcps_mclones++;
8029f68: 008201b4 movhi r2,2054
8029f6c: 10b8d317 ldw r2,-7348(r2)
8029f70: 10c00044 addi r3,r2,1
8029f74: 008201b4 movhi r2,2054
8029f78: 10f8d315 stw r3,-7348(r2)
tcpstat.tcps_mclonedbytes += tocopy;
8029f7c: 008201b4 movhi r2,2054
8029f80: 10f8d517 ldw r3,-7340(r2)
8029f84: e0bffc17 ldw r2,-16(fp)
8029f88: 1887883a add r3,r3,r2
8029f8c: 008201b4 movhi r2,2054
8029f90: 10f8d515 stw r3,-7340(r2)
}
len -= tocopy;
8029f94: e0fff917 ldw r3,-28(fp)
8029f98: e0bffc17 ldw r2,-16(fp)
8029f9c: 1885c83a sub r2,r3,r2
8029fa0: e0bff915 stw r2,-28(fp)
off = 0;
8029fa4: e03ffa15 stw zero,-24(fp)
if (tail) /* head & tail are set by first pass thru loop */
8029fa8: e0bffd17 ldw r2,-12(fp)
8029fac: 10000426 beq r2,zero,8029fc0 <m_copy+0x280>
tail->m_next = nb;
8029fb0: e0bffd17 ldw r2,-12(fp)
8029fb4: e0ffff17 ldw r3,-4(fp)
8029fb8: 10c00615 stw r3,24(r2)
8029fbc: 00000206 br 8029fc8 <m_copy+0x288>
else
head = nb;
8029fc0: e0bfff17 ldw r2,-4(fp)
8029fc4: e0bffe15 stw r2,-8(fp)
tail = nb; /* always make new mbuf the tail */
8029fc8: e0bfff17 ldw r2,-4(fp)
8029fcc: e0bffd15 stw r2,-12(fp)
m = m->m_next;
8029fd0: e0bffb17 ldw r2,-20(fp)
8029fd4: 10800617 ldw r2,24(r2)
8029fd8: e0bffb15 stw r2,-20(fp)
while (len > 0)
8029fdc: e0bff917 ldw r2,-28(fp)
8029fe0: 00bf8616 blt zero,r2,8029dfc <m_copy+0xbc>
}
return head;
8029fe4: e0bffe17 ldw r2,-8(fp)
8029fe8: 00000606 br 802a004 <m_copy+0x2c4>
goto nospace;
8029fec: 0001883a nop
8029ff0: 00000106 br 8029ff8 <m_copy+0x2b8>
goto nospace;
8029ff4: 0001883a nop
nospace:
m_freem (head);
8029ff8: e13ffe17 ldw r4,-8(fp)
8029ffc: 8029cfc0 call 8029cfc <m_freem>
return NULL;
802a000: 0005883a mov r2,zero
}
802a004: e037883a mov sp,fp
802a008: dfc00117 ldw ra,4(sp)
802a00c: df000017 ldw fp,0(sp)
802a010: dec00204 addi sp,sp,8
802a014: f800283a ret
0802a018 <m_adj>:
* RETURNS:
*/
void
m_adj(struct mbuf * mp, int len)
{
802a018: defffb04 addi sp,sp,-20
802a01c: df000415 stw fp,16(sp)
802a020: df000404 addi fp,sp,16
802a024: e13ffd15 stw r4,-12(fp)
802a028: e17ffc15 stw r5,-16(fp)
struct mbuf * m;
int count;
if ((m = mp) == NULL)
802a02c: e0bffd17 ldw r2,-12(fp)
802a030: e0bfff15 stw r2,-4(fp)
802a034: e0bfff17 ldw r2,-4(fp)
802a038: 10006226 beq r2,zero,802a1c4 <m_adj+0x1ac>
return;
if (len >= 0)
802a03c: e0bffc17 ldw r2,-16(fp)
802a040: 10002216 blt r2,zero,802a0cc <m_adj+0xb4>
{
while (m != NULL && len > 0)
802a044: 00001c06 br 802a0b8 <m_adj+0xa0>
{
if (m->m_len <= (unsigned)len)
802a048: e0bfff17 ldw r2,-4(fp)
802a04c: 10800217 ldw r2,8(r2)
802a050: e0fffc17 ldw r3,-16(fp)
802a054: 18800b36 bltu r3,r2,802a084 <m_adj+0x6c>
{
len -= m->m_len;
802a058: e0fffc17 ldw r3,-16(fp)
802a05c: e0bfff17 ldw r2,-4(fp)
802a060: 10800217 ldw r2,8(r2)
802a064: 1885c83a sub r2,r3,r2
802a068: e0bffc15 stw r2,-16(fp)
m->m_len = 0;
802a06c: e0bfff17 ldw r2,-4(fp)
802a070: 10000215 stw zero,8(r2)
m = m->m_next;
802a074: e0bfff17 ldw r2,-4(fp)
802a078: 10800617 ldw r2,24(r2)
802a07c: e0bfff15 stw r2,-4(fp)
802a080: 00000d06 br 802a0b8 <m_adj+0xa0>
}
else
{
m->m_len -= len;
802a084: e0bfff17 ldw r2,-4(fp)
802a088: 10c00217 ldw r3,8(r2)
802a08c: e0bffc17 ldw r2,-16(fp)
802a090: 1887c83a sub r3,r3,r2
802a094: e0bfff17 ldw r2,-4(fp)
802a098: 10c00215 stw r3,8(r2)
m->m_data += len;
802a09c: e0bfff17 ldw r2,-4(fp)
802a0a0: 10c00317 ldw r3,12(r2)
802a0a4: e0bffc17 ldw r2,-16(fp)
802a0a8: 1887883a add r3,r3,r2
802a0ac: e0bfff17 ldw r2,-4(fp)
802a0b0: 10c00315 stw r3,12(r2)
break;
802a0b4: 00004406 br 802a1c8 <m_adj+0x1b0>
while (m != NULL && len > 0)
802a0b8: e0bfff17 ldw r2,-4(fp)
802a0bc: 10004226 beq r2,zero,802a1c8 <m_adj+0x1b0>
802a0c0: e0bffc17 ldw r2,-16(fp)
802a0c4: 00bfe016 blt zero,r2,802a048 <m_adj+0x30>
802a0c8: 00003f06 br 802a1c8 <m_adj+0x1b0>
* calculating its length and finding the last mbuf.
* If the adjustment only affects this mbuf, then just
* adjust and return. Otherwise, rescan and truncate
* after the remaining size.
*/
len = -len;
802a0cc: e0bffc17 ldw r2,-16(fp)
802a0d0: 0085c83a sub r2,zero,r2
802a0d4: e0bffc15 stw r2,-16(fp)
count = 0;
802a0d8: e03ffe15 stw zero,-8(fp)
for (;;)
{
count += m->m_len;
802a0dc: e0bfff17 ldw r2,-4(fp)
802a0e0: 10c00217 ldw r3,8(r2)
802a0e4: e0bffe17 ldw r2,-8(fp)
802a0e8: 1885883a add r2,r3,r2
802a0ec: e0bffe15 stw r2,-8(fp)
if (m->m_next == (struct mbuf *)0)
802a0f0: e0bfff17 ldw r2,-4(fp)
802a0f4: 10800617 ldw r2,24(r2)
802a0f8: 10000426 beq r2,zero,802a10c <m_adj+0xf4>
break;
m = m->m_next;
802a0fc: e0bfff17 ldw r2,-4(fp)
802a100: 10800617 ldw r2,24(r2)
802a104: e0bfff15 stw r2,-4(fp)
count += m->m_len;
802a108: 003ff406 br 802a0dc <m_adj+0xc4>
break;
802a10c: 0001883a nop
}
if (m->m_len >= (unsigned)len)
802a110: e0bfff17 ldw r2,-4(fp)
802a114: 10c00217 ldw r3,8(r2)
802a118: e0bffc17 ldw r2,-16(fp)
802a11c: 18800736 bltu r3,r2,802a13c <m_adj+0x124>
{
m->m_len -= len;
802a120: e0bfff17 ldw r2,-4(fp)
802a124: 10c00217 ldw r3,8(r2)
802a128: e0bffc17 ldw r2,-16(fp)
802a12c: 1887c83a sub r3,r3,r2
802a130: e0bfff17 ldw r2,-4(fp)
802a134: 10c00215 stw r3,8(r2)
return;
802a138: 00002306 br 802a1c8 <m_adj+0x1b0>
}
count -= len;
802a13c: e0fffe17 ldw r3,-8(fp)
802a140: e0bffc17 ldw r2,-16(fp)
802a144: 1885c83a sub r2,r3,r2
802a148: e0bffe15 stw r2,-8(fp)
/*
* Correct length for chain is "count".
* Find the mbuf with last data, adjust its length,
* and toss data from remaining mbufs on chain.
*/
for (m = mp; m; m = m->m_next)
802a14c: e0bffd17 ldw r2,-12(fp)
802a150: e0bfff15 stw r2,-4(fp)
802a154: 00001006 br 802a198 <m_adj+0x180>
{
if (m->m_len >= (unsigned)count)
802a158: e0bfff17 ldw r2,-4(fp)
802a15c: 10c00217 ldw r3,8(r2)
802a160: e0bffe17 ldw r2,-8(fp)
802a164: 18800436 bltu r3,r2,802a178 <m_adj+0x160>
{
m->m_len = count;
802a168: e0fffe17 ldw r3,-8(fp)
802a16c: e0bfff17 ldw r2,-4(fp)
802a170: 10c00215 stw r3,8(r2)
break;
802a174: 00000a06 br 802a1a0 <m_adj+0x188>
}
count -= m->m_len;
802a178: e0fffe17 ldw r3,-8(fp)
802a17c: e0bfff17 ldw r2,-4(fp)
802a180: 10800217 ldw r2,8(r2)
802a184: 1885c83a sub r2,r3,r2
802a188: e0bffe15 stw r2,-8(fp)
for (m = mp; m; m = m->m_next)
802a18c: e0bfff17 ldw r2,-4(fp)
802a190: 10800617 ldw r2,24(r2)
802a194: e0bfff15 stw r2,-4(fp)
802a198: e0bfff17 ldw r2,-4(fp)
802a19c: 103fee1e bne r2,zero,802a158 <m_adj+0x140>
}
while ((m = m->m_next) != (struct mbuf *)NULL)
802a1a0: 00000206 br 802a1ac <m_adj+0x194>
m->m_len = 0;
802a1a4: e0bfff17 ldw r2,-4(fp)
802a1a8: 10000215 stw zero,8(r2)
while ((m = m->m_next) != (struct mbuf *)NULL)
802a1ac: e0bfff17 ldw r2,-4(fp)
802a1b0: 10800617 ldw r2,24(r2)
802a1b4: e0bfff15 stw r2,-4(fp)
802a1b8: e0bfff17 ldw r2,-4(fp)
802a1bc: 103ff91e bne r2,zero,802a1a4 <m_adj+0x18c>
802a1c0: 00000106 br 802a1c8 <m_adj+0x1b0>
return;
802a1c4: 0001883a nop
}
}
802a1c8: e037883a mov sp,fp
802a1cc: df000017 ldw fp,0(sp)
802a1d0: dec00104 addi sp,sp,4
802a1d4: f800283a ret
0802a1d8 <mbuf_len>:
* RETURNS:
*/
int
mbuf_len (struct mbuf * m)
{
802a1d8: defffd04 addi sp,sp,-12
802a1dc: df000215 stw fp,8(sp)
802a1e0: df000204 addi fp,sp,8
802a1e4: e13ffe15 stw r4,-8(fp)
int len = 0;
802a1e8: e03fff15 stw zero,-4(fp)
while (m)
802a1ec: 00000806 br 802a210 <mbuf_len+0x38>
{
len += m->m_len;
802a1f0: e0bffe17 ldw r2,-8(fp)
802a1f4: 10c00217 ldw r3,8(r2)
802a1f8: e0bfff17 ldw r2,-4(fp)
802a1fc: 1885883a add r2,r3,r2
802a200: e0bfff15 stw r2,-4(fp)
m = m->m_next;
802a204: e0bffe17 ldw r2,-8(fp)
802a208: 10800617 ldw r2,24(r2)
802a20c: e0bffe15 stw r2,-8(fp)
while (m)
802a210: e0bffe17 ldw r2,-8(fp)
802a214: 103ff61e bne r2,zero,802a1f0 <mbuf_len+0x18>
}
return len;
802a218: e0bfff17 ldw r2,-4(fp)
}
802a21c: e037883a mov sp,fp
802a220: df000017 ldw fp,0(sp)
802a224: dec00104 addi sp,sp,4
802a228: f800283a ret
0802a22c <dtom>:
* RETURNS:
*/
struct mbuf *
dtom(void * data)
{
802a22c: defffb04 addi sp,sp,-20
802a230: dfc00415 stw ra,16(sp)
802a234: df000315 stw fp,12(sp)
802a238: df000304 addi fp,sp,12
802a23c: e13ffd15 stw r4,-12(fp)
qp qptr;
struct mbuf * m;
for (qptr = mbufq.q_head; qptr; qptr = qptr->qe_next)
802a240: 008201b4 movhi r2,2054
802a244: 10b88517 ldw r2,-7660(r2)
802a248: e0bfff15 stw r2,-4(fp)
802a24c: 00001206 br 802a298 <dtom+0x6c>
{
m = (struct mbuf *)qptr;
802a250: e0bfff17 ldw r2,-4(fp)
802a254: e0bffe15 stw r2,-8(fp)
if (IN_RANGE(m->m_base, m->m_memsz, (char*)data))
802a258: e0bffe17 ldw r2,-8(fp)
802a25c: 10800417 ldw r2,16(r2)
802a260: e0fffd17 ldw r3,-12(fp)
802a264: 18800936 bltu r3,r2,802a28c <dtom+0x60>
802a268: e0bffe17 ldw r2,-8(fp)
802a26c: 10c00417 ldw r3,16(r2)
802a270: e0bffe17 ldw r2,-8(fp)
802a274: 10800517 ldw r2,20(r2)
802a278: 1885883a add r2,r3,r2
802a27c: e0fffd17 ldw r3,-12(fp)
802a280: 1880022e bgeu r3,r2,802a28c <dtom+0x60>
return (struct mbuf *)qptr;
802a284: e0bfff17 ldw r2,-4(fp)
802a288: 00000906 br 802a2b0 <dtom+0x84>
for (qptr = mbufq.q_head; qptr; qptr = qptr->qe_next)
802a28c: e0bfff17 ldw r2,-4(fp)
802a290: 10800017 ldw r2,0(r2)
802a294: e0bfff15 stw r2,-4(fp)
802a298: e0bfff17 ldw r2,-4(fp)
802a29c: 103fec1e bne r2,zero,802a250 <dtom+0x24>
else
continue;
}
panic("dtom"); /* data not found in any "in use" mbuf */
802a2a0: 01020174 movhi r4,2053
802a2a4: 212a6004 addi r4,r4,-22144
802a2a8: 80271780 call 8027178 <panic>
return NULL;
802a2ac: 0005883a mov r2,zero
}
802a2b0: e037883a mov sp,fp
802a2b4: dfc00117 ldw ra,4(sp)
802a2b8: df000017 ldw fp,0(sp)
802a2bc: dec00204 addi sp,sp,8
802a2c0: f800283a ret
0802a2c4 <remque>:
};
void
remque (void * arg)
{
802a2c4: defffd04 addi sp,sp,-12
802a2c8: df000215 stw fp,8(sp)
802a2cc: df000204 addi fp,sp,8
802a2d0: e13ffe15 stw r4,-8(fp)
struct bsdq * old;
old = (struct bsdq *)arg;
802a2d4: e0bffe17 ldw r2,-8(fp)
802a2d8: e0bfff15 stw r2,-4(fp)
if (!old->prev) return;
802a2dc: e0bfff17 ldw r2,-4(fp)
802a2e0: 10800117 ldw r2,4(r2)
802a2e4: 10000e26 beq r2,zero,802a320 <remque+0x5c>
old->prev->next = old->next;
802a2e8: e0bfff17 ldw r2,-4(fp)
802a2ec: 10800117 ldw r2,4(r2)
802a2f0: e0ffff17 ldw r3,-4(fp)
802a2f4: 18c00017 ldw r3,0(r3)
802a2f8: 10c00015 stw r3,0(r2)
if (old->next)
802a2fc: e0bfff17 ldw r2,-4(fp)
802a300: 10800017 ldw r2,0(r2)
802a304: 10000726 beq r2,zero,802a324 <remque+0x60>
old->next->prev = old->prev;
802a308: e0bfff17 ldw r2,-4(fp)
802a30c: 10800017 ldw r2,0(r2)
802a310: e0ffff17 ldw r3,-4(fp)
802a314: 18c00117 ldw r3,4(r3)
802a318: 10c00115 stw r3,4(r2)
802a31c: 00000106 br 802a324 <remque+0x60>
if (!old->prev) return;
802a320: 0001883a nop
}
802a324: e037883a mov sp,fp
802a328: df000017 ldw fp,0(sp)
802a32c: dec00104 addi sp,sp,4
802a330: f800283a ret
0802a334 <insque>:
* RETURNS:
*/
void
insque(void * n, void * p)
{
802a334: defffb04 addi sp,sp,-20
802a338: df000415 stw fp,16(sp)
802a33c: df000404 addi fp,sp,16
802a340: e13ffd15 stw r4,-12(fp)
802a344: e17ffc15 stw r5,-16(fp)
struct bsdq * newe, * prev;
newe = (struct bsdq *)n;
802a348: e0bffd17 ldw r2,-12(fp)
802a34c: e0bfff15 stw r2,-4(fp)
prev = (struct bsdq *)p;
802a350: e0bffc17 ldw r2,-16(fp)
802a354: e0bffe15 stw r2,-8(fp)
newe->next = prev->next;
802a358: e0bffe17 ldw r2,-8(fp)
802a35c: 10c00017 ldw r3,0(r2)
802a360: e0bfff17 ldw r2,-4(fp)
802a364: 10c00015 stw r3,0(r2)
newe->prev = prev;
802a368: e0bfff17 ldw r2,-4(fp)
802a36c: e0fffe17 ldw r3,-8(fp)
802a370: 10c00115 stw r3,4(r2)
prev->next = newe;
802a374: e0bffe17 ldw r2,-8(fp)
802a378: e0ffff17 ldw r3,-4(fp)
802a37c: 10c00015 stw r3,0(r2)
if (newe->next)
802a380: e0bfff17 ldw r2,-4(fp)
802a384: 10800017 ldw r2,0(r2)
802a388: 10000426 beq r2,zero,802a39c <insque+0x68>
newe->next->prev = newe;
802a38c: e0bfff17 ldw r2,-4(fp)
802a390: 10800017 ldw r2,0(r2)
802a394: e0ffff17 ldw r3,-4(fp)
802a398: 10c00115 stw r3,4(r2)
}
802a39c: 0001883a nop
802a3a0: e037883a mov sp,fp
802a3a4: df000017 ldw fp,0(sp)
802a3a8: dec00104 addi sp,sp,4
802a3ac: f800283a ret
0802a3b0 <nptcp_init>:
* RETURNS: Returns 0 if OK, else non-zero error code.
*/
int
nptcp_init()
{
802a3b0: defffb04 addi sp,sp,-20
802a3b4: dfc00415 stw ra,16(sp)
802a3b8: df000315 stw fp,12(sp)
802a3bc: df000304 addi fp,sp,12
* buffers, soreceive() can't complete and the packet buffers stay
* on the queue, so we allocate 3 extra mbufs in the hope that
* this will allow soreceive() to complete and free up the packet
* buffers. yes, its kind of an ugly hack and 3 is a wild guess.
*/
unsigned bufcount = (lilbufs + bigbufs) * 2 + 3;
802a3c0: d0e01617 ldw r3,-32680(gp)
802a3c4: d0a01817 ldw r2,-32672(gp)
802a3c8: 1885883a add r2,r3,r2
802a3cc: 1085883a add r2,r2,r2
802a3d0: 108000c4 addi r2,r2,3
802a3d4: e0bffe15 stw r2,-8(fp)
struct mbuf * m; /* scratch mbuf for mfreeq init */
MEMSET(&soq, 0, sizeof(soq)); /* Set socket queue to NULLs */
802a3d8: 01800504 movi r6,20
802a3dc: 000b883a mov r5,zero
802a3e0: 010201b4 movhi r4,2054
802a3e4: 21387104 addi r4,r4,-7740
802a3e8: 80088e40 call 80088e4 <memset>
MEMSET(&mbufq, 0, sizeof(mbufq));
802a3ec: 01800504 movi r6,20
802a3f0: 000b883a mov r5,zero
802a3f4: 010201b4 movhi r4,2054
802a3f8: 21388504 addi r4,r4,-7660
802a3fc: 80088e40 call 80088e4 <memset>
MEMSET(&mfreeq, 0, sizeof(mfreeq));
802a400: 01800504 movi r6,20
802a404: 000b883a mov r5,zero
802a408: 010201b4 movhi r4,2054
802a40c: 21388a04 addi r4,r4,-7640
802a410: 80088e40 call 80088e4 <memset>
for (i = 0; i < (int)bufcount; i++)
802a414: e03fff15 stw zero,-4(fp)
802a418: 00001506 br 802a470 <nptcp_init+0xc0>
{
m = MBU_ALLOC(sizeof(struct mbuf));
802a41c: 01000904 movi r4,36
802a420: 802982c0 call 802982c <npalloc>
802a424: e0bffd15 stw r2,-12(fp)
if (!m) /* malloc error, bail out */
802a428: e0bffd17 ldw r2,-12(fp)
802a42c: 1000031e bne r2,zero,802a43c <nptcp_init+0x8c>
panic("tcpinit");
802a430: 01020174 movhi r4,2053
802a434: 212a6204 addi r4,r4,-22136
802a438: 80271780 call 8027178 <panic>
m->m_type = MT_FREE;
802a43c: e0bffd17 ldw r2,-12(fp)
802a440: 10000815 stw zero,32(r2)
m->m_len = 0;
802a444: e0bffd17 ldw r2,-12(fp)
802a448: 10000215 stw zero,8(r2)
m->m_data = NULL;
802a44c: e0bffd17 ldw r2,-12(fp)
802a450: 10000315 stw zero,12(r2)
putq(&mfreeq, (qp)m);
802a454: e17ffd17 ldw r5,-12(fp)
802a458: 010201b4 movhi r4,2054
802a45c: 21388a04 addi r4,r4,-7640
802a460: 80289900 call 8028990 <putq>
for (i = 0; i < (int)bufcount; i++)
802a464: e0bfff17 ldw r2,-4(fp)
802a468: 10800044 addi r2,r2,1
802a46c: e0bfff15 stw r2,-4(fp)
802a470: e0bffe17 ldw r2,-8(fp)
802a474: e0ffff17 ldw r3,-4(fp)
802a478: 18bfe816 blt r3,r2,802a41c <nptcp_init+0x6c>
}
mfreeq.q_min = (int)bufcount; /* this should match q_max and q_len */
802a47c: e0fffe17 ldw r3,-8(fp)
802a480: 008201b4 movhi r2,2054
802a484: 10f88e15 stw r3,-7624(r2)
tcpmib.tcpRtoAlgorithm = 4; /* Van Jacobson's algorithm */
tcpmib.tcpRtoMin = TCPTV_MIN * 1000; /* PR_SLOWHZ */
tcpmib.tcpRtoMax = TCPTV_REXMTMAX * 1000; /* PR_SLOWHZ */
#endif
tcp_init(); /* call the BSD init in tcp_usr.c */
802a488: 80349f80 call 80349f8 <tcp_init>
#ifdef TCP_MENUS
install_menu(&tcpmenu[0]);
#endif /* IN_MENUS */
return 0; /* good return */
802a48c: 0005883a mov r2,zero
}
802a490: e037883a mov sp,fp
802a494: dfc00117 ldw ra,4(sp)
802a498: df000017 ldw fp,0(sp)
802a49c: dec00204 addi sp,sp,8
802a4a0: f800283a ret
0802a4a4 <tcp_rcv>:
#ifdef IP_V4
int
tcp_rcv(PACKET pkt) /* NOTE: pkt has nb_prot pointing to IP header */
{
802a4a4: defff904 addi sp,sp,-28
802a4a8: dfc00615 stw ra,24(sp)
802a4ac: df000515 stw fp,20(sp)
802a4b0: df000504 addi fp,sp,20
802a4b4: e13ffb15 stw r4,-20(fp)
/* For TCP, the netport IP layer is modified to set nb_prot to the
* start of the IP header (not TCP). We need to do some further
* mods which the BSD code expects:
*/
bip = (struct ip *)pkt->nb_prot; /* get ip header */
802a4b8: e0bffb17 ldw r2,-20(fp)
802a4bc: 10800317 ldw r2,12(r2)
802a4c0: e0bfff15 stw r2,-4(fp)
len = ntohs(bip->ip_len); /* get length in local endian */
802a4c4: e0bfff17 ldw r2,-4(fp)
802a4c8: 1080008b ldhu r2,2(r2)
802a4cc: 10bfffcc andi r2,r2,65535
802a4d0: 1004d23a srli r2,r2,8
802a4d4: 1007883a mov r3,r2
802a4d8: e0bfff17 ldw r2,-4(fp)
802a4dc: 1080008b ldhu r2,2(r2)
802a4e0: 10bfffcc andi r2,r2,65535
802a4e4: 1004923a slli r2,r2,8
802a4e8: 1884b03a or r2,r3,r2
802a4ec: e0bffe8d sth r2,-6(fp)
/* verify checksum of received packet */
tcpp = (struct tcphdr *)ip_data(bip);
802a4f0: e0bfff17 ldw r2,-4(fp)
802a4f4: 10800003 ldbu r2,0(r2)
802a4f8: 10803fcc andi r2,r2,255
802a4fc: 100490ba slli r2,r2,2
802a500: 10800f0c andi r2,r2,60
802a504: e0ffff17 ldw r3,-4(fp)
802a508: 1885883a add r2,r3,r2
802a50c: e0bffd15 stw r2,-12(fp)
if (tcp_cksum(bip) != tcpp->th_sum)
802a510: e13fff17 ldw r4,-4(fp)
802a514: 80400c00 call 80400c0 <tcp_cksum>
802a518: 1007883a mov r3,r2
802a51c: e0bffd17 ldw r2,-12(fp)
802a520: 1080040b ldhu r2,16(r2)
802a524: 18ffffcc andi r3,r3,65535
802a528: 10bfffcc andi r2,r2,65535
802a52c: 18801226 beq r3,r2,802a578 <tcp_rcv+0xd4>
{
TCP_MIB_INC(tcpInErrs); /* keep MIB stats */
802a530: 008201b4 movhi r2,2054
802a534: 10b88317 ldw r2,-7668(r2)
802a538: 10c00044 addi r3,r2,1
802a53c: 008201b4 movhi r2,2054
802a540: 10f88315 stw r3,-7668(r2)
tcpstat.tcps_rcvbadsum++; /* keep BSD stats */
802a544: 008201b4 movhi r2,2054
802a548: 10b8c017 ldw r2,-7424(r2)
802a54c: 10c00044 addi r3,r2,1
802a550: 008201b4 movhi r2,2054
802a554: 10f8c015 stw r3,-7424(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
802a558: 01000084 movi r4,2
802a55c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt); /* punt packet */
802a560: e13ffb17 ldw r4,-20(fp)
802a564: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802a568: 01000084 movi r4,2
802a56c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_BAD_HEADER;
802a570: 00bff804 movi r2,-32
802a574: 00003306 br 802a644 <tcp_rcv+0x1a0>
}
m_in = m_getnbuf(MT_RXDATA, 0);
802a578: 000b883a mov r5,zero
802a57c: 01000044 movi r4,1
802a580: 8029a700 call 8029a70 <m_getnbuf>
802a584: e0bffc15 stw r2,-16(fp)
if (!m_in){
802a588: e0bffc17 ldw r2,-16(fp)
802a58c: 1000081e bne r2,zero,802a5b0 <tcp_rcv+0x10c>
LOCK_NET_RESOURCE(FREEQ_RESID);
802a590: 01000084 movi r4,2
802a594: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(pkt);
802a598: e13ffb17 ldw r4,-20(fp)
802a59c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802a5a0: 01000084 movi r4,2
802a5a4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_RESOURCE;
802a5a8: 00bffa84 movi r2,-22
802a5ac: 00002506 br 802a644 <tcp_rcv+0x1a0>
}
IN_PROFILER(PF_TCP, PF_ENTRY); /* measure time in TCP */
/* subtract IP header length from total IP packet length */
len -= ((unshort)(bip->ip_ver_ihl & 0x0f) << 2);
802a5b0: e0bfff17 ldw r2,-4(fp)
802a5b4: 10800003 ldbu r2,0(r2)
802a5b8: 10803fcc andi r2,r2,255
802a5bc: 100490ba slli r2,r2,2
802a5c0: 10800f0c andi r2,r2,60
802a5c4: 1007883a mov r3,r2
802a5c8: e0bffe8b ldhu r2,-6(fp)
802a5cc: 10c5c83a sub r2,r2,r3
802a5d0: e0bffe8d sth r2,-6(fp)
bip->ip_len = len; /* put TCP length in struct for TCP code to use */
802a5d4: e0bfff17 ldw r2,-4(fp)
802a5d8: e0fffe8b ldhu r3,-6(fp)
802a5dc: 10c0008d sth r3,2(r2)
/* set mbuf to point to start of IP header (not TCP) */
m_in->pkt = pkt;
802a5e0: e0bffc17 ldw r2,-16(fp)
802a5e4: e0fffb17 ldw r3,-20(fp)
802a5e8: 10c00115 stw r3,4(r2)
m_in->m_data = pkt->nb_prot;
802a5ec: e0bffb17 ldw r2,-20(fp)
802a5f0: 10c00317 ldw r3,12(r2)
802a5f4: e0bffc17 ldw r2,-16(fp)
802a5f8: 10c00315 stw r3,12(r2)
m_in->m_len = pkt->nb_plen;
802a5fc: e0bffb17 ldw r2,-20(fp)
802a600: 10c00417 ldw r3,16(r2)
802a604: e0bffc17 ldw r2,-16(fp)
802a608: 10c00215 stw r3,8(r2)
m_in->m_base = pkt->nb_buff; /* ??? */
802a60c: e0bffb17 ldw r2,-20(fp)
802a610: 10c00117 ldw r3,4(r2)
802a614: e0bffc17 ldw r2,-16(fp)
802a618: 10c00415 stw r3,16(r2)
m_in->m_memsz = pkt->nb_blen; /* ??? */
802a61c: e0bffb17 ldw r2,-20(fp)
802a620: 10c00217 ldw r3,8(r2)
802a624: e0bffc17 ldw r2,-16(fp)
802a628: 10c00515 stw r3,20(r2)
tcp_input(m_in, pkt->net);
802a62c: e0bffb17 ldw r2,-20(fp)
802a630: 10800617 ldw r2,24(r2)
802a634: 100b883a mov r5,r2
802a638: e13ffc17 ldw r4,-16(fp)
802a63c: 80310500 call 8031050 <tcp_input>
IN_PROFILER(PF_TCP, PF_EXIT); /* measure time in TCP */
return 0;
802a640: 0005883a mov r2,zero
}
802a644: e037883a mov sp,fp
802a648: dfc00117 ldw ra,4(sp)
802a64c: df000017 ldw fp,0(sp)
802a650: dec00204 addi sp,sp,8
802a654: f800283a ret
0802a658 <ip_output>:
* RETURNS:
*/
int
ip_output(struct mbuf * data, struct ip_socopts * so_optsPack) /* mbuf chain with data to send */
{
802a658: defff404 addi sp,sp,-48
802a65c: dfc00b15 stw ra,44(sp)
802a660: df000a15 stw fp,40(sp)
802a664: df000a04 addi fp,sp,40
802a668: e13ff715 stw r4,-36(fp)
802a66c: e17ff615 stw r5,-40(fp)
* little copying as possible. Typically the mbufs will be either
* 1) a single mbuf with iptcp header info only (e.g.tcp ACK
* packet), or 2) iptcp header with data mbuf chained to it, or 3)
* #2) with a tiny option data mbuf between header and data.
*/
if ((data->m_next))
802a670: e0bff717 ldw r2,-36(fp)
802a674: 10800617 ldw r2,24(r2)
802a678: 10010226 beq r2,zero,802aa84 <ip_output+0x42c>
{
m1 = data;
802a67c: e0bff717 ldw r2,-36(fp)
802a680: e0bfff15 stw r2,-4(fp)
m2 = data->m_next;
802a684: e0bff717 ldw r2,-36(fp)
802a688: 10800617 ldw r2,24(r2)
802a68c: e0bffe15 stw r2,-8(fp)
/* If m2 is small (e.g. options), copy it to m1 and free it */
while (m2 && (m2->m_len < 10))
802a690: 00003306 br 802a760 <ip_output+0x108>
{
pkt = m1->pkt;
802a694: e0bfff17 ldw r2,-4(fp)
802a698: 10800117 ldw r2,4(r2)
802a69c: e0bffb15 stw r2,-20(fp)
if ((pkt->nb_buff + pkt->nb_blen) > /* make sure m2 will fit in m1 */
802a6a0: e0bffb17 ldw r2,-20(fp)
802a6a4: 10c00117 ldw r3,4(r2)
802a6a8: e0bffb17 ldw r2,-20(fp)
802a6ac: 10800217 ldw r2,8(r2)
802a6b0: 1885883a add r2,r3,r2
(m1->m_data + m1->m_len + m2->m_len))
802a6b4: e0ffff17 ldw r3,-4(fp)
802a6b8: 19000317 ldw r4,12(r3)
802a6bc: e0ffff17 ldw r3,-4(fp)
802a6c0: 19400217 ldw r5,8(r3)
802a6c4: e0fffe17 ldw r3,-8(fp)
802a6c8: 18c00217 ldw r3,8(r3)
802a6cc: 28c7883a add r3,r5,r3
802a6d0: 20c7883a add r3,r4,r3
if ((pkt->nb_buff + pkt->nb_blen) > /* make sure m2 will fit in m1 */
802a6d4: 1880292e bgeu r3,r2,802a77c <ip_output+0x124>
{
MEMCPY((m1->m_data + m1->m_len), m2->m_data, m2->m_len);
802a6d8: e0bfff17 ldw r2,-4(fp)
802a6dc: 10c00317 ldw r3,12(r2)
802a6e0: e0bfff17 ldw r2,-4(fp)
802a6e4: 10800217 ldw r2,8(r2)
802a6e8: 1887883a add r3,r3,r2
802a6ec: e0bffe17 ldw r2,-8(fp)
802a6f0: 11000317 ldw r4,12(r2)
802a6f4: e0bffe17 ldw r2,-8(fp)
802a6f8: 10800217 ldw r2,8(r2)
802a6fc: 100d883a mov r6,r2
802a700: 200b883a mov r5,r4
802a704: 1809883a mov r4,r3
802a708: 80086b80 call 80086b8 <memcpy>
m1->m_len += m2->m_len;
802a70c: e0bfff17 ldw r2,-4(fp)
802a710: 10c00217 ldw r3,8(r2)
802a714: e0bffe17 ldw r2,-8(fp)
802a718: 10800217 ldw r2,8(r2)
802a71c: 1887883a add r3,r3,r2
802a720: e0bfff17 ldw r2,-4(fp)
802a724: 10c00215 stw r3,8(r2)
m1->m_next = m2->m_next;
802a728: e0bffe17 ldw r2,-8(fp)
802a72c: 10c00617 ldw r3,24(r2)
802a730: e0bfff17 ldw r2,-4(fp)
802a734: 10c00615 stw r3,24(r2)
m_free(m2); /* free this m2.... */
802a738: e13ffe17 ldw r4,-8(fp)
802a73c: 8029bf80 call 8029bf8 <m_free>
m2 = m1->m_next; /* ...and thread the next one */
802a740: e0bfff17 ldw r2,-4(fp)
802a744: 10800617 ldw r2,24(r2)
802a748: e0bffe15 stw r2,-8(fp)
tcpstat.tcps_oappends++;
802a74c: 008201b4 movhi r2,2054
802a750: 10b8d717 ldw r2,-7332(r2)
802a754: 10c00044 addi r3,r2,1
802a758: 008201b4 movhi r2,2054
802a75c: 10f8d715 stw r3,-7332(r2)
while (m2 && (m2->m_len < 10))
802a760: e0bffe17 ldw r2,-8(fp)
802a764: 10005726 beq r2,zero,802a8c4 <ip_output+0x26c>
802a768: e0bffe17 ldw r2,-8(fp)
802a76c: 10800217 ldw r2,8(r2)
802a770: 108002b0 cmpltui r2,r2,10
802a774: 103fc71e bne r2,zero,802a694 <ip_output+0x3c>
802a778: 00005206 br 802a8c4 <ip_output+0x26c>
}
else /* if won't fit, fall to next copy */
break;
802a77c: 0001883a nop
}
while (m2) /* If we still have two or more buffers, more copying: */
802a780: 00005006 br 802a8c4 <ip_output+0x26c>
{
/* try prepending m1 to m2, first see if it fits: */
e = m2->m_data - m2->pkt->nb_buff; /* e is prepend space */
802a784: e0bffe17 ldw r2,-8(fp)
802a788: 10c00317 ldw r3,12(r2)
802a78c: e0bffe17 ldw r2,-8(fp)
802a790: 10800117 ldw r2,4(r2)
802a794: 10800117 ldw r2,4(r2)
802a798: 1885c83a sub r2,r3,r2
802a79c: e0bffa15 stw r2,-24(fp)
if (e < MaxLnh)
802a7a0: d0a06417 ldw r2,-32368(gp)
802a7a4: e0fffa17 ldw r3,-24(fp)
802a7a8: 1880090e bge r3,r2,802a7d0 <ip_output+0x178>
{
#ifdef NPDEBUG
dprintf("nptcp: MaxLnh:%d, e:%d\n", MaxLnh, e);
802a7ac: d0a06417 ldw r2,-32368(gp)
802a7b0: e1bffa17 ldw r6,-24(fp)
802a7b4: 100b883a mov r5,r2
802a7b8: 01020174 movhi r4,2053
802a7bc: 212a6404 addi r4,r4,-22128
802a7c0: 8002c780 call 8002c78 <printf>
#endif
panic("tcp_out:mbuf-nbuf"); /* sanity check */
802a7c4: 01020174 movhi r4,2053
802a7c8: 212a6a04 addi r4,r4,-22104
802a7cc: 80271780 call 8027178 <panic>
}
if ((m1->m_len < (unsigned)(e - MaxLnh)) /* leave room for MAC */
802a7d0: e0bfff17 ldw r2,-4(fp)
802a7d4: 10800217 ldw r2,8(r2)
802a7d8: d0e06417 ldw r3,-32368(gp)
802a7dc: e13ffa17 ldw r4,-24(fp)
802a7e0: 20c7c83a sub r3,r4,r3
802a7e4: 10c0392e bgeu r2,r3,802a8cc <ip_output+0x274>
&& ((m1->m_len & (ALIGN_TYPE - 1)) == 0) /* and stay aligned */
802a7e8: e0bfff17 ldw r2,-4(fp)
802a7ec: 10800217 ldw r2,8(r2)
802a7f0: 108000cc andi r2,r2,3
802a7f4: 1000351e bne r2,zero,802a8cc <ip_output+0x274>
&& ((m2->m_data - m2->pkt->nb_buff) == HDRSLEN)) /* be at start */
802a7f8: e0bffe17 ldw r2,-8(fp)
802a7fc: 10c00317 ldw r3,12(r2)
802a800: e0bffe17 ldw r2,-8(fp)
802a804: 10800117 ldw r2,4(r2)
802a808: 10800117 ldw r2,4(r2)
802a80c: 1885c83a sub r2,r3,r2
802a810: 10800e18 cmpnei r2,r2,56
802a814: 10002d1e bne r2,zero,802a8cc <ip_output+0x274>
{
MEMCPY((m2->m_data - m1->m_len), m1->m_data, m1->m_len);
802a818: e0bffe17 ldw r2,-8(fp)
802a81c: 10c00317 ldw r3,12(r2)
802a820: e0bfff17 ldw r2,-4(fp)
802a824: 10800217 ldw r2,8(r2)
802a828: 0085c83a sub r2,zero,r2
802a82c: 1887883a add r3,r3,r2
802a830: e0bfff17 ldw r2,-4(fp)
802a834: 11000317 ldw r4,12(r2)
802a838: e0bfff17 ldw r2,-4(fp)
802a83c: 10800217 ldw r2,8(r2)
802a840: 100d883a mov r6,r2
802a844: 200b883a mov r5,r4
802a848: 1809883a mov r4,r3
802a84c: 80086b80 call 80086b8 <memcpy>
m2->m_data -= m1->m_len; /* fix target to reflect prepend */
802a850: e0bffe17 ldw r2,-8(fp)
802a854: 10c00317 ldw r3,12(r2)
802a858: e0bfff17 ldw r2,-4(fp)
802a85c: 10800217 ldw r2,8(r2)
802a860: 0085c83a sub r2,zero,r2
802a864: 1887883a add r3,r3,r2
802a868: e0bffe17 ldw r2,-8(fp)
802a86c: 10c00315 stw r3,12(r2)
m2->m_len += m1->m_len;
802a870: e0bffe17 ldw r2,-8(fp)
802a874: 10c00217 ldw r3,8(r2)
802a878: e0bfff17 ldw r2,-4(fp)
802a87c: 10800217 ldw r2,8(r2)
802a880: 1887883a add r3,r3,r2
802a884: e0bffe17 ldw r2,-8(fp)
802a888: 10c00215 stw r3,8(r2)
m_free(m1); /* free head (copied) mbuf */
802a88c: e13fff17 ldw r4,-4(fp)
802a890: 8029bf80 call 8029bf8 <m_free>
data = m1 = m2; /* move other mbufs up the chain */
802a894: e0bffe17 ldw r2,-8(fp)
802a898: e0bfff15 stw r2,-4(fp)
802a89c: e0bfff17 ldw r2,-4(fp)
802a8a0: e0bff715 stw r2,-36(fp)
m2 = m2->m_next; /* loop to while(m2) test */
802a8a4: e0bffe17 ldw r2,-8(fp)
802a8a8: 10800617 ldw r2,24(r2)
802a8ac: e0bffe15 stw r2,-8(fp)
tcpstat.tcps_oprepends++;
802a8b0: 008201b4 movhi r2,2054
802a8b4: 10b8d617 ldw r2,-7336(r2)
802a8b8: 10c00044 addi r3,r2,1
802a8bc: 008201b4 movhi r2,2054
802a8c0: 10f8d615 stw r3,-7336(r2)
while (m2) /* If we still have two or more buffers, more copying: */
802a8c4: e0bffe17 ldw r2,-8(fp)
802a8c8: 103fae1e bne r2,zero,802a784 <ip_output+0x12c>
}
else /* if won't fit, fall to next copy */
break;
}
if (m2) /* If all else fails, brute force copy: */
802a8cc: e0bffe17 ldw r2,-8(fp)
802a8d0: 10006c26 beq r2,zero,802aa84 <ip_output+0x42c>
{
total = 0;
802a8d4: e03ffc15 stw zero,-16(fp)
for (mtmp = m1; mtmp; mtmp = mtmp->m_next)
802a8d8: e0bfff17 ldw r2,-4(fp)
802a8dc: e0bffd15 stw r2,-12(fp)
802a8e0: 00000806 br 802a904 <ip_output+0x2ac>
total += mtmp->m_len;
802a8e4: e0bffd17 ldw r2,-12(fp)
802a8e8: 10c00217 ldw r3,8(r2)
802a8ec: e0bffc17 ldw r2,-16(fp)
802a8f0: 1885883a add r2,r3,r2
802a8f4: e0bffc15 stw r2,-16(fp)
for (mtmp = m1; mtmp; mtmp = mtmp->m_next)
802a8f8: e0bffd17 ldw r2,-12(fp)
802a8fc: 10800617 ldw r2,24(r2)
802a900: e0bffd15 stw r2,-12(fp)
802a904: e0bffd17 ldw r2,-12(fp)
802a908: 103ff61e bne r2,zero,802a8e4 <ip_output+0x28c>
LOCK_NET_RESOURCE(FREEQ_RESID);
802a90c: 01000084 movi r4,2
802a910: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pkt = pk_alloc(total + HDRSLEN);
802a914: e0bffc17 ldw r2,-16(fp)
802a918: 10800e04 addi r2,r2,56
802a91c: 1009883a mov r4,r2
802a920: 80284340 call 8028434 <pk_alloc>
802a924: e0bffb15 stw r2,-20(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802a928: 01000084 movi r4,2
802a92c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (!pkt)
802a930: e0bffb17 ldw r2,-20(fp)
802a934: 1000021e bne r2,zero,802a940 <ip_output+0x2e8>
return ENOBUFS;
802a938: 00801a44 movi r2,105
802a93c: 0000a306 br 802abcc <ip_output+0x574>
pkt->nb_prot = pkt->nb_buff + MaxLnh;
802a940: e0bffb17 ldw r2,-20(fp)
802a944: 10800117 ldw r2,4(r2)
802a948: d0e06417 ldw r3,-32368(gp)
802a94c: 10c7883a add r3,r2,r3
802a950: e0bffb17 ldw r2,-20(fp)
802a954: 10c00315 stw r3,12(r2)
mtmp = m1;
802a958: e0bfff17 ldw r2,-4(fp)
802a95c: e0bffd15 stw r2,-12(fp)
while (mtmp)
802a960: 00002706 br 802aa00 <ip_output+0x3a8>
{
MEMCPY(pkt->nb_prot, mtmp->m_data, mtmp->m_len);
802a964: e0bffb17 ldw r2,-20(fp)
802a968: 10c00317 ldw r3,12(r2)
802a96c: e0bffd17 ldw r2,-12(fp)
802a970: 11000317 ldw r4,12(r2)
802a974: e0bffd17 ldw r2,-12(fp)
802a978: 10800217 ldw r2,8(r2)
802a97c: 100d883a mov r6,r2
802a980: 200b883a mov r5,r4
802a984: 1809883a mov r4,r3
802a988: 80086b80 call 80086b8 <memcpy>
pkt->nb_prot += mtmp->m_len;
802a98c: e0bffb17 ldw r2,-20(fp)
802a990: 10c00317 ldw r3,12(r2)
802a994: e0bffd17 ldw r2,-12(fp)
802a998: 10800217 ldw r2,8(r2)
802a99c: 1887883a add r3,r3,r2
802a9a0: e0bffb17 ldw r2,-20(fp)
802a9a4: 10c00315 stw r3,12(r2)
pkt->nb_plen += mtmp->m_len;
802a9a8: e0bffb17 ldw r2,-20(fp)
802a9ac: 10c00417 ldw r3,16(r2)
802a9b0: e0bffd17 ldw r2,-12(fp)
802a9b4: 10800217 ldw r2,8(r2)
802a9b8: 1887883a add r3,r3,r2
802a9bc: e0bffb17 ldw r2,-20(fp)
802a9c0: 10c00415 stw r3,16(r2)
m2 = mtmp;
802a9c4: e0bffd17 ldw r2,-12(fp)
802a9c8: e0bffe15 stw r2,-8(fp)
mtmp = mtmp->m_next;
802a9cc: e0bffd17 ldw r2,-12(fp)
802a9d0: 10800617 ldw r2,24(r2)
802a9d4: e0bffd15 stw r2,-12(fp)
if (m2 != data) /* save original head */
802a9d8: e0fffe17 ldw r3,-8(fp)
802a9dc: e0bff717 ldw r2,-36(fp)
802a9e0: 18800226 beq r3,r2,802a9ec <ip_output+0x394>
m_free(m2);
802a9e4: e13ffe17 ldw r4,-8(fp)
802a9e8: 8029bf80 call 8029bf8 <m_free>
tcpstat.tcps_ocopies++;
802a9ec: 008201b4 movhi r2,2054
802a9f0: 10b8d817 ldw r2,-7328(r2)
802a9f4: 10c00044 addi r3,r2,1
802a9f8: 008201b4 movhi r2,2054
802a9fc: 10f8d815 stw r3,-7328(r2)
while (mtmp)
802aa00: e0bffd17 ldw r2,-12(fp)
802aa04: 103fd71e bne r2,zero,802a964 <ip_output+0x30c>
}
pkt->nb_prot -= total; /* fix data pointer */
802aa08: e0bffb17 ldw r2,-20(fp)
802aa0c: 10c00317 ldw r3,12(r2)
802aa10: e0bffc17 ldw r2,-16(fp)
802aa14: 0085c83a sub r2,zero,r2
802aa18: 1887883a add r3,r3,r2
802aa1c: e0bffb17 ldw r2,-20(fp)
802aa20: 10c00315 stw r3,12(r2)
/* release the original mbufs packet install the new one */
LOCK_NET_RESOURCE(FREEQ_RESID);
802aa24: 01000084 movi r4,2
802aa28: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(data->pkt);
802aa2c: e0bff717 ldw r2,-36(fp)
802aa30: 10800117 ldw r2,4(r2)
802aa34: 1009883a mov r4,r2
802aa38: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802aa3c: 01000084 movi r4,2
802aa40: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
data->pkt = pkt;
802aa44: e0bff717 ldw r2,-36(fp)
802aa48: e0fffb17 ldw r3,-20(fp)
802aa4c: 10c00115 stw r3,4(r2)
data->m_len = pkt->nb_plen;
802aa50: e0bffb17 ldw r2,-20(fp)
802aa54: 10c00417 ldw r3,16(r2)
802aa58: e0bff717 ldw r2,-36(fp)
802aa5c: 10c00215 stw r3,8(r2)
data->m_next = NULL;
802aa60: e0bff717 ldw r2,-36(fp)
802aa64: 10000615 stw zero,24(r2)
data->m_data = pkt->nb_prot;
802aa68: e0bffb17 ldw r2,-20(fp)
802aa6c: 10c00317 ldw r3,12(r2)
802aa70: e0bff717 ldw r2,-36(fp)
802aa74: 10c00315 stw r3,12(r2)
data->m_len = total;
802aa78: e0fffc17 ldw r3,-16(fp)
802aa7c: e0bff717 ldw r2,-36(fp)
802aa80: 10c00215 stw r3,8(r2)
}
}
if ((data->m_data < (data->pkt->nb_buff + MaxLnh)))
802aa84: e0bff717 ldw r2,-36(fp)
802aa88: 10c00317 ldw r3,12(r2)
802aa8c: e0bff717 ldw r2,-36(fp)
802aa90: 10800117 ldw r2,4(r2)
802aa94: 10800117 ldw r2,4(r2)
802aa98: d1206417 ldw r4,-32368(gp)
802aa9c: 1105883a add r2,r2,r4
802aaa0: 1880032e bgeu r3,r2,802aab0 <ip_output+0x458>
panic("ip_output: overflow");
802aaa4: 01020174 movhi r4,2053
802aaa8: 212a6f04 addi r4,r4,-22084
802aaac: 80271780 call 8027178 <panic>
pkt = data->pkt;
802aab0: e0bff717 ldw r2,-36(fp)
802aab4: 10800117 ldw r2,4(r2)
802aab8: e0bffb15 stw r2,-20(fp)
/* do we have options? */
if (so_optsPack)
802aabc: e0bff617 ldw r2,-40(fp)
802aac0: 10000326 beq r2,zero,802aad0 <ip_output+0x478>
pkt->soxopts = so_optsPack; /* yup */
802aac4: e0bffb17 ldw r2,-20(fp)
802aac8: e0fff617 ldw r3,-40(fp)
802aacc: 10c00c15 stw r3,48(r2)
panic("ip_output: no so_optsPack for the IPv6 scope");
}
#endif
/* fill in dest host for IP layer */
bip = (struct ip *)data->m_data;
802aad0: e0bff717 ldw r2,-36(fp)
802aad4: 10800317 ldw r2,12(r2)
802aad8: e0bff915 stw r2,-28(fp)
pkt->fhost = bip->ip_dest;
802aadc: e0bff917 ldw r2,-28(fp)
802aae0: 10c00417 ldw r3,16(r2)
802aae4: e0bffb17 ldw r2,-20(fp)
802aae8: 10c00715 stw r3,28(r2)
/* make enough IP header for cksum calculation */
bip->ip_ver_ihl = 0x45;
802aaec: e0bff917 ldw r2,-28(fp)
802aaf0: 00c01144 movi r3,69
802aaf4: 10c00005 stb r3,0(r2)
bip->ip_len = htons(bip->ip_len); /* make net endian for calculation */
802aaf8: e0bff917 ldw r2,-28(fp)
802aafc: 1080008b ldhu r2,2(r2)
802ab00: 10bfffcc andi r2,r2,65535
802ab04: 1004d23a srli r2,r2,8
802ab08: 1007883a mov r3,r2
802ab0c: e0bff917 ldw r2,-28(fp)
802ab10: 1080008b ldhu r2,2(r2)
802ab14: 10bfffcc andi r2,r2,65535
802ab18: 1004923a slli r2,r2,8
802ab1c: 1884b03a or r2,r3,r2
802ab20: 1007883a mov r3,r2
802ab24: e0bff917 ldw r2,-28(fp)
802ab28: 10c0008d sth r3,2(r2)
tcpp = (struct tcphdr *)ip_data(bip);
802ab2c: e0bff917 ldw r2,-28(fp)
802ab30: 10800003 ldbu r2,0(r2)
802ab34: 10803fcc andi r2,r2,255
802ab38: 100490ba slli r2,r2,2
802ab3c: 10800f0c andi r2,r2,60
802ab40: e0fff917 ldw r3,-28(fp)
802ab44: 1885883a add r2,r3,r2
802ab48: e0bff815 stw r2,-32(fp)
#ifdef CSUM_DEMO
if (!(tcpp->th_flags & TH_SYN))
tcpp->th_flags |= TH_PUSH; /* force the PSH flag in TCP hdr */
#endif
tcpp->th_sum = tcp_cksum(bip);
802ab4c: e13ff917 ldw r4,-28(fp)
802ab50: 80400c00 call 80400c0 <tcp_cksum>
802ab54: 1007883a mov r3,r2
802ab58: e0bff817 ldw r2,-32(fp)
802ab5c: 10c0040d sth r3,16(r2)
pkt->nb_prot = (char*)(bip + 1); /* point past IP header */
802ab60: e0bff917 ldw r2,-28(fp)
802ab64: 10c00504 addi r3,r2,20
802ab68: e0bffb17 ldw r2,-20(fp)
802ab6c: 10c00315 stw r3,12(r2)
pkt->nb_plen = data->m_len - sizeof(struct ip);
802ab70: e0bff717 ldw r2,-36(fp)
802ab74: 10800217 ldw r2,8(r2)
802ab78: 10fffb04 addi r3,r2,-20
802ab7c: e0bffb17 ldw r2,-20(fp)
802ab80: 10c00415 stw r3,16(r2)
e = ip_write(IPPROTO_TCP, pkt);
802ab84: e17ffb17 ldw r5,-20(fp)
802ab88: 01000184 movi r4,6
802ab8c: 803a9e80 call 803a9e8 <ip_write>
802ab90: e0bffa15 stw r2,-24(fp)
/* ip_write() is now responsable for data->pkt, so... */
data->pkt = NULL;
802ab94: e0bff717 ldw r2,-36(fp)
802ab98: 10000115 stw zero,4(r2)
m_freem(data);
802ab9c: e13ff717 ldw r4,-36(fp)
802aba0: 8029cfc0 call 8029cfc <m_freem>
if (e < 0)
802aba4: e0bffa17 ldw r2,-24(fp)
802aba8: 1000070e bge r2,zero,802abc8 <ip_output+0x570>
{
/* don't report dropped sends, it causes socket applications to
bail when a TCP retry will fix the problem */
if (e == SEND_DROPPED)
802abac: e0bffa17 ldw r2,-24(fp)
802abb0: 10bffa98 cmpnei r2,r2,-22
802abb4: 1000021e bne r2,zero,802abc0 <ip_output+0x568>
return 0;
802abb8: 0005883a mov r2,zero
802abbc: 00000306 br 802abcc <ip_output+0x574>
return e;
802abc0: e0bffa17 ldw r2,-24(fp)
802abc4: 00000106 br 802abcc <ip_output+0x574>
}
else
return 0;
802abc8: 0005883a mov r2,zero
}
802abcc: e037883a mov sp,fp
802abd0: dfc00117 ldw ra,4(sp)
802abd4: df000017 ldw fp,0(sp)
802abd8: dec00204 addi sp,sp,8
802abdc: f800283a ret
0802abe0 <in_broadcast>:
* RETURNS: TRUE if broadcast, else FALSE
*/
int
in_broadcast(u_long ipaddr) /* passed in net endian */
{
802abe0: defffe04 addi sp,sp,-8
802abe4: df000115 stw fp,4(sp)
802abe8: df000104 addi fp,sp,4
802abec: e13fff15 stw r4,-4(fp)
if (ipaddr == 0xffffffff)
802abf0: e0bfff17 ldw r2,-4(fp)
802abf4: 10bfffd8 cmpnei r2,r2,-1
802abf8: 1000021e bne r2,zero,802ac04 <in_broadcast+0x24>
return TRUE;
802abfc: 00800044 movi r2,1
802ac00: 00000106 br 802ac08 <in_broadcast+0x28>
return FALSE;
802ac04: 0005883a mov r2,zero
}
802ac08: e037883a mov sp,fp
802ac0c: df000017 ldw fp,0(sp)
802ac10: dec00104 addi sp,sp,4
802ac14: f800283a ret
0802ac18 <np_stripoptions>:
* RETURNS: void
*/
void
np_stripoptions(struct ip * ti, struct mbuf * m)
{
802ac18: defffb04 addi sp,sp,-20
802ac1c: dfc00415 stw ra,16(sp)
802ac20: df000315 stw fp,12(sp)
802ac24: df000304 addi fp,sp,12
802ac28: e13ffe15 stw r4,-8(fp)
802ac2c: e17ffd15 stw r5,-12(fp)
int ihlen;
/* get the IP header length in octets */
ihlen = (ti->ip_ver_ihl & 0x0f) << 2;
802ac30: e0bffe17 ldw r2,-8(fp)
802ac34: 10800003 ldbu r2,0(r2)
802ac38: 10803fcc andi r2,r2,255
802ac3c: 100490ba slli r2,r2,2
802ac40: 10800f0c andi r2,r2,60
802ac44: e0bfff15 stw r2,-4(fp)
/* if it's <= 20 octets, there are no IP header options to strip */
if (ihlen <= 20)
802ac48: e0bfff17 ldw r2,-4(fp)
802ac4c: 10800548 cmpgei r2,r2,21
802ac50: 10002726 beq r2,zero,802acf0 <np_stripoptions+0xd8>
return;
/* figure out how much to strip: we want to keep the 20-octet IP header */
ihlen -= 20;
802ac54: e0bfff17 ldw r2,-4(fp)
802ac58: 10bffb04 addi r2,r2,-20
802ac5c: e0bfff15 stw r2,-4(fp)
/* remove the stripped options from the IP datagram length */
ti->ip_len -= ihlen;
802ac60: e0bffe17 ldw r2,-8(fp)
802ac64: 1080008b ldhu r2,2(r2)
802ac68: e0ffff17 ldw r3,-4(fp)
802ac6c: 10c5c83a sub r2,r2,r3
802ac70: 1007883a mov r3,r2
802ac74: e0bffe17 ldw r2,-8(fp)
802ac78: 10c0008d sth r3,2(r2)
/* and from the IP header length (which will be 5*4 octets long) */
ti->ip_ver_ihl = (ti->ip_ver_ihl & 0xf0) | 5;
802ac7c: e0bffe17 ldw r2,-8(fp)
802ac80: 10800003 ldbu r2,0(r2)
802ac84: 1007883a mov r3,r2
802ac88: 00bffc04 movi r2,-16
802ac8c: 1884703a and r2,r3,r2
802ac90: 10800154 ori r2,r2,5
802ac94: 1007883a mov r3,r2
802ac98: e0bffe17 ldw r2,-8(fp)
802ac9c: 10c00005 stb r3,0(r2)
/* move the 20-octet IP header up against the IP payload */
MEMMOVE( ((char*)ti) + ihlen, ti, 20);
802aca0: e0bfff17 ldw r2,-4(fp)
802aca4: e0fffe17 ldw r3,-8(fp)
802aca8: 1885883a add r2,r3,r2
802acac: 01800504 movi r6,20
802acb0: e17ffe17 ldw r5,-8(fp)
802acb4: 1009883a mov r4,r2
802acb8: 80087b80 call 80087b8 <memmove>
m->m_len -= ihlen;
802acbc: e0bffd17 ldw r2,-12(fp)
802acc0: 10c00217 ldw r3,8(r2)
802acc4: e0bfff17 ldw r2,-4(fp)
802acc8: 1887c83a sub r3,r3,r2
802accc: e0bffd17 ldw r2,-12(fp)
802acd0: 10c00215 stw r3,8(r2)
m->m_data += ihlen;
802acd4: e0bffd17 ldw r2,-12(fp)
802acd8: 10c00317 ldw r3,12(r2)
802acdc: e0bfff17 ldw r2,-4(fp)
802ace0: 1887883a add r3,r3,r2
802ace4: e0bffd17 ldw r2,-12(fp)
802ace8: 10c00315 stw r3,12(r2)
802acec: 00000106 br 802acf4 <np_stripoptions+0xdc>
return;
802acf0: 0001883a nop
}
802acf4: e037883a mov sp,fp
802acf8: dfc00117 ldw ra,4(sp)
802acfc: df000017 ldw fp,0(sp)
802ad00: dec00204 addi sp,sp,8
802ad04: f800283a ret
0802ad08 <so_icmpdu>:
* RETURNS:
*/
void
so_icmpdu(PACKET p, struct destun * pdp)
{
802ad08: defff304 addi sp,sp,-52
802ad0c: dfc00c15 stw ra,48(sp)
802ad10: df000b15 stw fp,44(sp)
802ad14: df000b04 addi fp,sp,44
802ad18: e13ff815 stw r4,-32(fp)
802ad1c: e17ff715 stw r5,-36(fp)
struct inpcb * inp;
struct socket * so;
struct tcpcb * tp;
/* extract information about packet which generated DU */
fhost = htonl(pdp->dip.ip_dest);
802ad20: e0bff717 ldw r2,-36(fp)
802ad24: 10800617 ldw r2,24(r2)
802ad28: 1006d63a srli r3,r2,24
802ad2c: e0bff717 ldw r2,-36(fp)
802ad30: 10800617 ldw r2,24(r2)
802ad34: 1004d23a srli r2,r2,8
802ad38: 10bfc00c andi r2,r2,65280
802ad3c: 1886b03a or r3,r3,r2
802ad40: e0bff717 ldw r2,-36(fp)
802ad44: 10800617 ldw r2,24(r2)
802ad48: 1004923a slli r2,r2,8
802ad4c: 10803fec andhi r2,r2,255
802ad50: 1886b03a or r3,r3,r2
802ad54: e0bff717 ldw r2,-36(fp)
802ad58: 10800617 ldw r2,24(r2)
802ad5c: 1004963a slli r2,r2,24
802ad60: 1884b03a or r2,r3,r2
802ad64: e0bffe15 stw r2,-8(fp)
lhost = htonl(pdp->dip.ip_src);
802ad68: e0bff717 ldw r2,-36(fp)
802ad6c: 10800517 ldw r2,20(r2)
802ad70: 1006d63a srli r3,r2,24
802ad74: e0bff717 ldw r2,-36(fp)
802ad78: 10800517 ldw r2,20(r2)
802ad7c: 1004d23a srli r2,r2,8
802ad80: 10bfc00c andi r2,r2,65280
802ad84: 1886b03a or r3,r3,r2
802ad88: e0bff717 ldw r2,-36(fp)
802ad8c: 10800517 ldw r2,20(r2)
802ad90: 1004923a slli r2,r2,8
802ad94: 10803fec andhi r2,r2,255
802ad98: 1886b03a or r3,r3,r2
802ad9c: e0bff717 ldw r2,-36(fp)
802ada0: 10800517 ldw r2,20(r2)
802ada4: 1004963a slli r2,r2,24
802ada8: 1884b03a or r2,r3,r2
802adac: e0bffd15 stw r2,-12(fp)
lport = htons(*(unshort*)(&pdp->ddata[0]));
802adb0: e0bff717 ldw r2,-36(fp)
802adb4: 10800704 addi r2,r2,28
802adb8: 1080000b ldhu r2,0(r2)
802adbc: 10bfffcc andi r2,r2,65535
802adc0: 1004d23a srli r2,r2,8
802adc4: 1007883a mov r3,r2
802adc8: e0bff717 ldw r2,-36(fp)
802adcc: 10800704 addi r2,r2,28
802add0: 1080000b ldhu r2,0(r2)
802add4: 10bfffcc andi r2,r2,65535
802add8: 1004923a slli r2,r2,8
802addc: 1884b03a or r2,r3,r2
802ade0: e0bffc8d sth r2,-14(fp)
fport = htons(*(unshort*)(&pdp->ddata[2]));
802ade4: e0bff717 ldw r2,-36(fp)
802ade8: 10800784 addi r2,r2,30
802adec: 1080000b ldhu r2,0(r2)
802adf0: 10bfffcc andi r2,r2,65535
802adf4: 1004d23a srli r2,r2,8
802adf8: 1007883a mov r3,r2
802adfc: e0bff717 ldw r2,-36(fp)
802ae00: 10800784 addi r2,r2,30
802ae04: 1080000b ldhu r2,0(r2)
802ae08: 10bfffcc andi r2,r2,65535
802ae0c: 1004923a slli r2,r2,8
802ae10: 1884b03a or r2,r3,r2
802ae14: e0bffc0d sth r2,-16(fp)
#ifndef IP_PMTU
/* if it's a datagram-too-big message, ignore it -- As the
* build isn't using PMTU Discovery this packet is most
* probably a Denial of Service Attack.
*/
if(pdp->dcode == DSTFRAG)
802ae18: e0bff717 ldw r2,-36(fp)
802ae1c: 10800043 ldbu r2,1(r2)
802ae20: 10803fcc andi r2,r2,255
802ae24: 1080201c xori r2,r2,128
802ae28: 10bfe004 addi r2,r2,-128
802ae2c: 10800118 cmpnei r2,r2,4
802ae30: 10006e26 beq r2,zero,802afec <so_icmpdu+0x2e4>
goto done;
}
#endif /* IP_PMTU */
/* if it's a TCP connection, clean it up */
if (pdp->dip.ip_prot == TCPTP)
802ae34: e0bff717 ldw r2,-36(fp)
802ae38: 10800443 ldbu r2,17(r2)
802ae3c: 10803fcc andi r2,r2,255
802ae40: 10800198 cmpnei r2,r2,6
802ae44: 1000221e bne r2,zero,802aed0 <so_icmpdu+0x1c8>
{
/* find associated data structs and socket */
inp = in_pcblookup(&tcb, fhost, fport, lhost, lport, INPLOOKUP_WILDCARD);
802ae48: e13ffc0b ldhu r4,-16(fp)
802ae4c: e0bffc8b ldhu r2,-14(fp)
802ae50: 00c00044 movi r3,1
802ae54: d8c00115 stw r3,4(sp)
802ae58: d8800015 stw r2,0(sp)
802ae5c: e1fffd17 ldw r7,-12(fp)
802ae60: 200d883a mov r6,r4
802ae64: e17ffe17 ldw r5,-8(fp)
802ae68: 010201b4 movhi r4,2054
802ae6c: 21389904 addi r4,r4,-7580
802ae70: 8040b600 call 8040b60 <in_pcblookup>
802ae74: e0bffb15 stw r2,-20(fp)
if (inp == 0)
802ae78: e0bffb17 ldw r2,-20(fp)
802ae7c: 10005d26 beq r2,zero,802aff4 <so_icmpdu+0x2ec>
goto done;
so = inp->inp_socket;
802ae80: e0bffb17 ldw r2,-20(fp)
802ae84: 10800817 ldw r2,32(r2)
802ae88: e0bffa15 stw r2,-24(fp)
if (so == 0)
802ae8c: e0bffa17 ldw r2,-24(fp)
802ae90: 10005a26 beq r2,zero,802affc <so_icmpdu+0x2f4>
goto done;
tp = intotcpcb(inp);
802ae94: e0bffb17 ldw r2,-20(fp)
802ae98: 10800917 ldw r2,36(r2)
802ae9c: e0bff915 stw r2,-28(fp)
if (tp)
802aea0: e0bff917 ldw r2,-28(fp)
802aea4: 10000626 beq r2,zero,802aec0 <so_icmpdu+0x1b8>
{
if (tp->t_state <= TCPS_LISTEN)
802aea8: e0bff917 ldw r2,-28(fp)
802aeac: 10800217 ldw r2,8(r2)
802aeb0: 10800088 cmpgei r2,r2,2
802aeb4: 10005326 beq r2,zero,802b004 <so_icmpdu+0x2fc>
goto done;
}
}
#endif
tcp_close(tp);
802aeb8: e13ff917 ldw r4,-28(fp)
802aebc: 80350e80 call 80350e8 <tcp_close>
}
so->so_error = ECONNREFUSED; /* set error for socket owner */
802aec0: e0bffa17 ldw r2,-24(fp)
802aec4: 00c01bc4 movi r3,111
802aec8: 10c00615 stw r3,24(r2)
802aecc: 00005406 br 802b020 <so_icmpdu+0x318>
}
#ifdef UDP_SOCKETS /* this sockets layer supports UDP too */
else if(pdp->dip.ip_prot == UDP_PROT)
802aed0: e0bff717 ldw r2,-36(fp)
802aed4: 10800443 ldbu r2,17(r2)
802aed8: 10803fcc andi r2,r2,255
802aedc: 10800458 cmpnei r2,r2,17
802aee0: 10004a1e bne r2,zero,802b00c <so_icmpdu+0x304>
{
UDPCONN tmp;
/* search udp table (which keeps hosts in net endian) */
for (tmp = firstudp; tmp; tmp = tmp->u_next)
802aee4: d0a09e17 ldw r2,-32136(gp)
802aee8: e0bfff15 stw r2,-4(fp)
802aeec: 00002106 br 802af74 <so_icmpdu+0x26c>
if ((tmp->u_fport == fport || tmp->u_fport == 0) &&
802aef0: e0bfff17 ldw r2,-4(fp)
802aef4: 1080020b ldhu r2,8(r2)
802aef8: e0fffc0b ldhu r3,-16(fp)
802aefc: 10bfffcc andi r2,r2,65535
802af00: 18800426 beq r3,r2,802af14 <so_icmpdu+0x20c>
802af04: e0bfff17 ldw r2,-4(fp)
802af08: 1080020b ldhu r2,8(r2)
802af0c: 10bfffcc andi r2,r2,65535
802af10: 1000151e bne r2,zero,802af68 <so_icmpdu+0x260>
(tmp->u_fhost == htonl(fhost)) &&
802af14: e0bfff17 ldw r2,-4(fp)
802af18: 10c00417 ldw r3,16(r2)
802af1c: e0bffe17 ldw r2,-8(fp)
802af20: 1008d63a srli r4,r2,24
802af24: e0bffe17 ldw r2,-8(fp)
802af28: 1004d23a srli r2,r2,8
802af2c: 10bfc00c andi r2,r2,65280
802af30: 2088b03a or r4,r4,r2
802af34: e0bffe17 ldw r2,-8(fp)
802af38: 1004923a slli r2,r2,8
802af3c: 10803fec andhi r2,r2,255
802af40: 2088b03a or r4,r4,r2
802af44: e0bffe17 ldw r2,-8(fp)
802af48: 1004963a slli r2,r2,24
802af4c: 2084b03a or r2,r4,r2
if ((tmp->u_fport == fport || tmp->u_fport == 0) &&
802af50: 1880051e bne r3,r2,802af68 <so_icmpdu+0x260>
(tmp->u_lport == lport))
802af54: e0bfff17 ldw r2,-4(fp)
802af58: 1080018b ldhu r2,6(r2)
(tmp->u_fhost == htonl(fhost)) &&
802af5c: e0fffc8b ldhu r3,-14(fp)
802af60: 10bfffcc andi r2,r2,65535
802af64: 18800626 beq r3,r2,802af80 <so_icmpdu+0x278>
for (tmp = firstudp; tmp; tmp = tmp->u_next)
802af68: e0bfff17 ldw r2,-4(fp)
802af6c: 10800017 ldw r2,0(r2)
802af70: e0bfff15 stw r2,-4(fp)
802af74: e0bfff17 ldw r2,-4(fp)
802af78: 103fdd1e bne r2,zero,802aef0 <so_icmpdu+0x1e8>
802af7c: 00000106 br 802af84 <so_icmpdu+0x27c>
{
break; /* found our UDP table entry */
802af80: 0001883a nop
}
if (!tmp)
802af84: e0bfff17 ldw r2,-4(fp)
802af88: 10002226 beq r2,zero,802b014 <so_icmpdu+0x30c>
goto done;
so = (struct socket *)tmp->u_data;
802af8c: e0bfff17 ldw r2,-4(fp)
802af90: 10800617 ldw r2,24(r2)
802af94: e0bffa15 stw r2,-24(fp)
/* May be non-socket (lightweight) UDP connection. */
if (so->so_type != SOCK_DGRAM)
802af98: e0bffa17 ldw r2,-24(fp)
802af9c: 10800983 ldbu r2,38(r2)
802afa0: 10803fcc andi r2,r2,255
802afa4: 1080201c xori r2,r2,128
802afa8: 10bfe004 addi r2,r2,-128
802afac: 108000a0 cmpeqi r2,r2,2
802afb0: 10001a26 beq r2,zero,802b01c <so_icmpdu+0x314>
goto done;
so->so_error = ECONNREFUSED; /* set error for socket owner */
802afb4: e0bffa17 ldw r2,-24(fp)
802afb8: 00c01bc4 movi r3,111
802afbc: 10c00615 stw r3,24(r2)
/* do a select() notify on socket here */
sorwakeup(so);
802afc0: e0bffa17 ldw r2,-24(fp)
802afc4: 10800a04 addi r2,r2,40
802afc8: 100b883a mov r5,r2
802afcc: e13ffa17 ldw r4,-24(fp)
802afd0: 802f94c0 call 802f94c <sbwakeup>
sowwakeup(so);
802afd4: e0bffa17 ldw r2,-24(fp)
802afd8: 10801204 addi r2,r2,72
802afdc: 100b883a mov r5,r2
802afe0: e13ffa17 ldw r4,-24(fp)
802afe4: 802f94c0 call 802f94c <sbwakeup>
802afe8: 00000d06 br 802b020 <so_icmpdu+0x318>
goto done;
802afec: 0001883a nop
802aff0: 00000b06 br 802b020 <so_icmpdu+0x318>
goto done;
802aff4: 0001883a nop
802aff8: 00000906 br 802b020 <so_icmpdu+0x318>
goto done;
802affc: 0001883a nop
802b000: 00000706 br 802b020 <so_icmpdu+0x318>
goto done;
802b004: 0001883a nop
802b008: 00000506 br 802b020 <so_icmpdu+0x318>
}
#endif /* UDP_SOCKETS */
else
goto done;
802b00c: 0001883a nop
802b010: 00000306 br 802b020 <so_icmpdu+0x318>
goto done;
802b014: 0001883a nop
802b018: 00000106 br 802b020 <so_icmpdu+0x318>
goto done;
802b01c: 0001883a nop
if (pdp->dcode == DSTFRAG)
pmtucache_set(pdp->dip.ip_dest, htons(pdp->dno2));
#endif /* IP_PMTU */
done:
LOCK_NET_RESOURCE(FREEQ_RESID);
802b020: 01000084 movi r4,2
802b024: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p); /* done with original packet */
802b028: e13ff817 ldw r4,-32(fp)
802b02c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
802b030: 01000084 movi r4,2
802b034: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return;
802b038: 0001883a nop
}
802b03c: e037883a mov sp,fp
802b040: dfc00117 ldw ra,4(sp)
802b044: df000017 ldw fp,0(sp)
802b048: dec00204 addi sp,sp,8
802b04c: f800283a ret
0802b050 <tcp_tick>:
unsigned long nextslow = 0L; /* next slow tcp timer time */
static int in_tcptick = 0; /* reentry gaurd */
void
tcp_tick()
{
802b050: defffe04 addi sp,sp,-8
802b054: dfc00115 stw ra,4(sp)
802b058: df000015 stw fp,0(sp)
802b05c: d839883a mov fp,sp
/* guard against re-entry */
if (in_tcptick)
802b060: d0a08217 ldw r2,-32248(gp)
802b064: 1000121e bne r2,zero,802b0b0 <tcp_tick+0x60>
return;
in_tcptick++;
802b068: d0a08217 ldw r2,-32248(gp)
802b06c: 10800044 addi r2,r2,1
802b070: d0a08215 stw r2,-32248(gp)
LOCK_NET_RESOURCE(NET_RESID);
802b074: 0009883a mov r4,zero
802b078: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
if (cticks >= nextslow) /* time to do it again */
802b07c: d0e07d17 ldw r3,-32268(gp)
802b080: d0a08117 ldw r2,-32252(gp)
802b084: 18800436 bltu r3,r2,802b098 <tcp_tick+0x48>
{
tcp_slowtimo(); /* call routine in BSD tcp_timr.c */
802b088: 80353080 call 8035308 <tcp_slowtimo>
#ifdef CSUM_DEMO
nextslow = cticks + (TPS/5); /* another 200 ms */
#else
nextslow = cticks + (TPS/2); /* another 500 ms */
802b08c: d0a07d17 ldw r2,-32268(gp)
802b090: 10800c84 addi r2,r2,50
802b094: d0a08115 stw r2,-32252(gp)
#ifdef DO_DELAY_ACKS
tcp_fasttimo();
#endif /* DO_DELAY_ACKS */
UNLOCK_NET_RESOURCE(NET_RESID);
802b098: 0009883a mov r4,zero
802b09c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
in_tcptick--;
802b0a0: d0a08217 ldw r2,-32248(gp)
802b0a4: 10bfffc4 addi r2,r2,-1
802b0a8: d0a08215 stw r2,-32248(gp)
802b0ac: 00000106 br 802b0b4 <tcp_tick+0x64>
return;
802b0b0: 0001883a nop
}
802b0b4: e037883a mov sp,fp
802b0b8: dfc00117 ldw ra,4(sp)
802b0bc: df000017 ldw fp,0(sp)
802b0c0: dec00204 addi sp,sp,8
802b0c4: f800283a ret
0802b0c8 <rawip_lookup>:
* or NULL if no matching raw IP endpoint is found.
*/
struct ipraw_ep *
rawip_lookup(struct socket * so)
{
802b0c8: defffd04 addi sp,sp,-12
802b0cc: df000215 stw fp,8(sp)
802b0d0: df000204 addi fp,sp,8
802b0d4: e13ffe15 stw r4,-8(fp)
struct ipraw_ep * tmp;
for (tmp = ipraw_eps; tmp; tmp = tmp->ipr_next)
802b0d8: d0a09b17 ldw r2,-32148(gp)
802b0dc: e0bfff15 stw r2,-4(fp)
802b0e0: 00000906 br 802b108 <rawip_lookup+0x40>
if (tmp->ipr_data == (void*)so)
802b0e4: e0bfff17 ldw r2,-4(fp)
802b0e8: 10800417 ldw r2,16(r2)
802b0ec: e0fffe17 ldw r3,-8(fp)
802b0f0: 1880021e bne r3,r2,802b0fc <rawip_lookup+0x34>
return (tmp);
802b0f4: e0bfff17 ldw r2,-4(fp)
802b0f8: 00000606 br 802b114 <rawip_lookup+0x4c>
for (tmp = ipraw_eps; tmp; tmp = tmp->ipr_next)
802b0fc: e0bfff17 ldw r2,-4(fp)
802b100: 10800017 ldw r2,0(r2)
802b104: e0bfff15 stw r2,-4(fp)
802b108: e0bfff17 ldw r2,-4(fp)
802b10c: 103ff51e bne r2,zero,802b0e4 <rawip_lookup+0x1c>
return NULL; /* didn't find it */
802b110: 0005883a mov r2,zero
}
802b114: e037883a mov sp,fp
802b118: df000017 ldw fp,0(sp)
802b11c: dec00104 addi sp,sp,4
802b120: f800283a ret
0802b124 <rawip_soinput>:
* indicates that the packet has not been accepted.
*/
int
rawip_soinput(PACKET pkt, void * so_ptr)
{
802b124: defff504 addi sp,sp,-44
802b128: dfc00a15 stw ra,40(sp)
802b12c: df000915 stw fp,36(sp)
802b130: df000904 addi fp,sp,36
802b134: e13ff815 stw r4,-32(fp)
802b138: e17ff715 stw r5,-36(fp)
struct mbuf * m_in; /* packet/data mbuf */
struct socket * so = (struct socket *)so_ptr;
802b13c: e0bff717 ldw r2,-36(fp)
802b140: e0bfff15 stw r2,-4(fp)
struct sockaddr_in sin;
LOCK_NET_RESOURCE(NET_RESID);
802b144: 0009883a mov r4,zero
802b148: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/* make sure we're not flooding input buffers */
if ((so->so_rcv.sb_cc + pkt->nb_plen) >= so->so_rcv.sb_hiwat)
802b14c: e0bfff17 ldw r2,-4(fp)
802b150: 10c00a17 ldw r3,40(r2)
802b154: e0bff817 ldw r2,-32(fp)
802b158: 10800417 ldw r2,16(r2)
802b15c: 1887883a add r3,r3,r2
802b160: e0bfff17 ldw r2,-4(fp)
802b164: 10800b17 ldw r2,44(r2)
802b168: 18800436 bltu r3,r2,802b17c <rawip_soinput+0x58>
{
UNLOCK_NET_RESOURCE(NET_RESID);
802b16c: 0009883a mov r4,zero
802b170: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENOBUFS;
802b174: 00801a44 movi r2,105
802b178: 00005606 br 802b2d4 <rawip_soinput+0x1b0>
}
/* alloc mbuf for received data */
m_in = m_getnbuf(MT_RXDATA, 0);
802b17c: 000b883a mov r5,zero
802b180: 01000044 movi r4,1
802b184: 8029a700 call 8029a70 <m_getnbuf>
802b188: e0bffe15 stw r2,-8(fp)
if (!m_in)
802b18c: e0bffe17 ldw r2,-8(fp)
802b190: 1000041e bne r2,zero,802b1a4 <rawip_soinput+0x80>
{
UNLOCK_NET_RESOURCE(NET_RESID);
802b194: 0009883a mov r4,zero
802b198: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENOBUFS;
802b19c: 00801a44 movi r2,105
802b1a0: 00004c06 br 802b2d4 <rawip_soinput+0x1b0>
}
/* set data mbuf to point to start of IP header */
m_in->pkt = pkt;
802b1a4: e0bffe17 ldw r2,-8(fp)
802b1a8: e0fff817 ldw r3,-32(fp)
802b1ac: 10c00115 stw r3,4(r2)
m_in->m_base = pkt->nb_buff;
802b1b0: e0bff817 ldw r2,-32(fp)
802b1b4: 10c00117 ldw r3,4(r2)
802b1b8: e0bffe17 ldw r2,-8(fp)
802b1bc: 10c00415 stw r3,16(r2)
m_in->m_memsz = pkt->nb_blen;
802b1c0: e0bff817 ldw r2,-32(fp)
802b1c4: 10c00217 ldw r3,8(r2)
802b1c8: e0bffe17 ldw r2,-8(fp)
802b1cc: 10c00515 stw r3,20(r2)
m_in->m_data = pkt->nb_prot;
802b1d0: e0bff817 ldw r2,-32(fp)
802b1d4: 10c00317 ldw r3,12(r2)
802b1d8: e0bffe17 ldw r2,-8(fp)
802b1dc: 10c00315 stw r3,12(r2)
m_in->m_len = pkt->nb_plen;
802b1e0: e0bff817 ldw r2,-32(fp)
802b1e4: 10c00417 ldw r3,16(r2)
802b1e8: e0bffe17 ldw r2,-8(fp)
802b1ec: 10c00215 stw r3,8(r2)
/* if this socket doesn't have IP_HDRINCL set, adjust the
* mbuf to skip past the IP header
*/
if (!(so->so_options & SO_HDRINCL))
802b1f0: e0bfff17 ldw r2,-4(fp)
802b1f4: 10800417 ldw r2,16(r2)
802b1f8: 1088000c andi r2,r2,8192
802b1fc: 1000131e bne r2,zero,802b24c <rawip_soinput+0x128>
{
unsigned int ihl =
(((struct ip *)(pkt->nb_prot))->ip_ver_ihl & 0x0f) << 2;
802b200: e0bff817 ldw r2,-32(fp)
802b204: 10800317 ldw r2,12(r2)
802b208: 10800003 ldbu r2,0(r2)
802b20c: 10803fcc andi r2,r2,255
802b210: 100490ba slli r2,r2,2
unsigned int ihl =
802b214: 10800f0c andi r2,r2,60
802b218: e0bffd15 stw r2,-12(fp)
m_in->m_data += ihl;
802b21c: e0bffe17 ldw r2,-8(fp)
802b220: 10c00317 ldw r3,12(r2)
802b224: e0bffd17 ldw r2,-12(fp)
802b228: 1887883a add r3,r3,r2
802b22c: e0bffe17 ldw r2,-8(fp)
802b230: 10c00315 stw r3,12(r2)
m_in->m_len -= ihl;
802b234: e0bffe17 ldw r2,-8(fp)
802b238: 10c00217 ldw r3,8(r2)
802b23c: e0bffd17 ldw r2,-12(fp)
802b240: 1887c83a sub r3,r3,r2
802b244: e0bffe17 ldw r2,-8(fp)
802b248: 10c00215 stw r3,8(r2)
}
/* fill in net address info for pass to socket append()ers */
sin.sin_addr.s_addr = pkt->fhost;
802b24c: e0bff817 ldw r2,-32(fp)
802b250: 10800717 ldw r2,28(r2)
802b254: e0bffa15 stw r2,-24(fp)
sin.sin_port = 0;
802b258: e03ff98d sth zero,-26(fp)
sin.sin_family = AF_INET;
802b25c: 00800084 movi r2,2
802b260: e0bff90d sth r2,-28(fp)
/* attempt to append address information to mbuf */
if (!sbappendaddr(&so->so_rcv, (struct sockaddr *)&sin, m_in))
802b264: e0bfff17 ldw r2,-4(fp)
802b268: 10800a04 addi r2,r2,40
802b26c: e0fff904 addi r3,fp,-28
802b270: e1bffe17 ldw r6,-8(fp)
802b274: 180b883a mov r5,r3
802b278: 1009883a mov r4,r2
802b27c: 802fc740 call 802fc74 <sbappendaddr>
802b280: 1000081e bne r2,zero,802b2a4 <rawip_soinput+0x180>
{
/* set the pkt field in the mbuf to NULL so m_free() below wont
* free the packet buffer, because that is left to the
* underlying stack
*/
m_in->pkt = NULL;
802b284: e0bffe17 ldw r2,-8(fp)
802b288: 10000115 stw zero,4(r2)
/* free only the mbuf itself */
m_free(m_in);
802b28c: e13ffe17 ldw r4,-8(fp)
802b290: 8029bf80 call 8029bf8 <m_free>
/* return error condition so caller can free the packet buffer */
UNLOCK_NET_RESOURCE(NET_RESID);
802b294: 0009883a mov r4,zero
802b298: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENOBUFS;
802b29c: 00801a44 movi r2,105
802b2a0: 00000c06 br 802b2d4 <rawip_soinput+0x1b0>
}
tcp_wakeup(&so->so_rcv); /* wake anyone waiting for this */
802b2a4: e0bfff17 ldw r2,-4(fp)
802b2a8: 10800a04 addi r2,r2,40
802b2ac: 1009883a mov r4,r2
802b2b0: 8027ba00 call 8027ba0 <tcp_wakeup>
sorwakeup(so); /* wake up selects too */
802b2b4: e0bfff17 ldw r2,-4(fp)
802b2b8: 10800a04 addi r2,r2,40
802b2bc: 100b883a mov r5,r2
802b2c0: e13fff17 ldw r4,-4(fp)
802b2c4: 802f94c0 call 802f94c <sbwakeup>
UNLOCK_NET_RESOURCE(NET_RESID);
802b2c8: 0009883a mov r4,zero
802b2cc: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return 0;
802b2d0: 0005883a mov r2,zero
}
802b2d4: e037883a mov sp,fp
802b2d8: dfc00117 ldw ra,4(sp)
802b2dc: df000017 ldw fp,0(sp)
802b2e0: dec00204 addi sp,sp,8
802b2e4: f800283a ret
0802b2e8 <rawip_usrreq>:
int
rawip_usrreq(struct socket * so,
struct mbuf * m,
struct mbuf * nam)
{
802b2e8: deffef04 addi sp,sp,-68
802b2ec: dfc01015 stw ra,64(sp)
802b2f0: df000f15 stw fp,60(sp)
802b2f4: dc000e15 stw r16,56(sp)
802b2f8: df000f04 addi fp,sp,60
802b2fc: e13ff415 stw r4,-48(fp)
802b300: e17ff315 stw r5,-52(fp)
802b304: e1bff215 stw r6,-56(fp)
u_char prot;
struct ip * pip;
int req;
NET ifp; /* ptr to network interface structure */
req = so->so_req; /* get request from socket struct */
802b308: e0bff417 ldw r2,-48(fp)
802b30c: 10800717 ldw r2,28(r2)
802b310: e0bffa15 stw r2,-24(fp)
switch (req)
802b314: e0bffa17 ldw r2,-24(fp)
802b318: 10800468 cmpgeui r2,r2,17
802b31c: 1001b91e bne r2,zero,802ba04 <rawip_usrreq+0x71c>
802b320: e0bffa17 ldw r2,-24(fp)
802b324: 100690ba slli r3,r2,2
802b328: 008200f4 movhi r2,2051
802b32c: 1885883a add r2,r3,r2
802b330: 10acce17 ldw r2,-19656(r2)
802b334: 1000683a jmp r2
802b338: 0802b37c xorhi zero,at,2765
802b33c: 0802b404 addi zero,at,2768
802b340: 0802b440 call 802b44 <OSCtxSw_SWITCH_PC+0x802b04>
802b344: 0802ba04 addi zero,at,2792
802b348: 0802b440 call 802b44 <OSCtxSw_SWITCH_PC+0x802b04>
802b34c: 0802ba04 addi zero,at,2792
802b350: 0802b9f8 rdprs zero,at,2791
802b354: 0802ba04 addi zero,at,2792
802b358: 0802b9f8 rdprs zero,at,2791
802b35c: 0802b5c8 cmpgei zero,at,2775
802b360: 0802ba04 addi zero,at,2792
802b364: 0802ba04 addi zero,at,2792
802b368: 0802ba04 addi zero,at,2792
802b36c: 0802ba04 addi zero,at,2792
802b370: 0802ba04 addi zero,at,2792
802b374: 0802b964 muli zero,at,2789
802b378: 0802b964 muli zero,at,2789
{
case PRU_ATTACH:
/* fake small windows so sockets asks us to move data */
so->so_rcv.sb_hiwat = so->so_snd.sb_hiwat =
ip_raw_maxalloc(so->so_options & SO_HDRINCL);
802b37c: e0bff417 ldw r2,-48(fp)
802b380: 10800417 ldw r2,16(r2)
802b384: 1088000c andi r2,r2,8192
802b388: 1009883a mov r4,r2
802b38c: 803cae00 call 803cae0 <ip_raw_maxalloc>
802b390: 1007883a mov r3,r2
so->so_rcv.sb_hiwat = so->so_snd.sb_hiwat =
802b394: e0bff417 ldw r2,-48(fp)
802b398: 10c01315 stw r3,76(r2)
802b39c: e0bff417 ldw r2,-48(fp)
802b3a0: 10c01317 ldw r3,76(r2)
802b3a4: e0bff417 ldw r2,-48(fp)
802b3a8: 10c00b15 stw r3,44(r2)
/* make a raw IP endpoint */
prot = (u_char)(MBUF2LONG(nam));
802b3ac: e0bff217 ldw r2,-56(fp)
802b3b0: e0bff9c5 stb r2,-25(fp)
/* unlock the net resource; IP will immediatly re-lock it */
UNLOCK_NET_RESOURCE(NET_RESID);
802b3b4: 0009883a mov r4,zero
802b3b8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
ep = ip_raw_open(prot, 0L, 0L, rawip_soinput, so);
802b3bc: e0fff9c3 ldbu r3,-25(fp)
802b3c0: e0bff417 ldw r2,-48(fp)
802b3c4: d8800015 stw r2,0(sp)
802b3c8: 01c200f4 movhi r7,2051
802b3cc: 39ec4904 addi r7,r7,-20188
802b3d0: 000d883a mov r6,zero
802b3d4: 000b883a mov r5,zero
802b3d8: 1809883a mov r4,r3
802b3dc: 803c63c0 call 803c63c <ip_raw_open>
802b3e0: e0bff815 stw r2,-32(fp)
LOCK_NET_RESOURCE(NET_RESID);
802b3e4: 0009883a mov r4,zero
802b3e8: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
if (!ep)
802b3ec: e0bff817 ldw r2,-32(fp)
802b3f0: 1000021e bne r2,zero,802b3fc <rawip_usrreq+0x114>
return(EINVAL);
802b3f4: 00800584 movi r2,22
802b3f8: 00018306 br 802ba08 <rawip_usrreq+0x720>
return 0;
802b3fc: 0005883a mov r2,zero
802b400: 00018106 br 802ba08 <rawip_usrreq+0x720>
case PRU_DETACH:
/* delete the raw IP endpoint */
ep = rawip_lookup(so);
802b404: e13ff417 ldw r4,-48(fp)
802b408: 802b0c80 call 802b0c8 <rawip_lookup>
802b40c: e0bff815 stw r2,-32(fp)
if (!ep)
802b410: e0bff817 ldw r2,-32(fp)
802b414: 1000021e bne r2,zero,802b420 <rawip_usrreq+0x138>
return(EINVAL);
802b418: 00800584 movi r2,22
802b41c: 00017a06 br 802ba08 <rawip_usrreq+0x720>
/* unlock the net resource; IP will immediatly re-lock it */
UNLOCK_NET_RESOURCE(NET_RESID);
802b420: 0009883a mov r4,zero
802b424: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
ip_raw_close(ep);
802b428: e13ff817 ldw r4,-32(fp)
802b42c: 803c7140 call 803c714 <ip_raw_close>
LOCK_NET_RESOURCE(NET_RESID);
802b430: 0009883a mov r4,zero
802b434: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
return 0;
802b438: 0005883a mov r2,zero
802b43c: 00017206 br 802ba08 <rawip_usrreq+0x720>
* a default address for sending
*/
/* fall through to shared bind logic */
case PRU_BIND:
/* do bind parameters lookups and tests */
if (nam == NULL)
802b440: e0bff217 ldw r2,-56(fp)
802b444: 1000021e bne r2,zero,802b450 <rawip_usrreq+0x168>
return(EINVAL);
802b448: 00800584 movi r2,22
802b44c: 00016e06 br 802ba08 <rawip_usrreq+0x720>
sin = mtod(nam, struct sockaddr_in *);
802b450: e0bff217 ldw r2,-56(fp)
802b454: 10800317 ldw r2,12(r2)
802b458: e0bff715 stw r2,-36(fp)
if (sin == NULL)
802b45c: e0bff717 ldw r2,-36(fp)
802b460: 1000021e bne r2,zero,802b46c <rawip_usrreq+0x184>
return(EINVAL);
802b464: 00800584 movi r2,22
802b468: 00016706 br 802ba08 <rawip_usrreq+0x720>
if (nam->m_len != sizeof (*sin))
802b46c: e0bff217 ldw r2,-56(fp)
802b470: 10800217 ldw r2,8(r2)
802b474: 10800420 cmpeqi r2,r2,16
802b478: 1000021e bne r2,zero,802b484 <rawip_usrreq+0x19c>
return(EINVAL);
802b47c: 00800584 movi r2,22
802b480: 00016106 br 802ba08 <rawip_usrreq+0x720>
ep = rawip_lookup(so);
802b484: e13ff417 ldw r4,-48(fp)
802b488: 802b0c80 call 802b0c8 <rawip_lookup>
802b48c: e0bff815 stw r2,-32(fp)
if (!ep)
802b490: e0bff817 ldw r2,-32(fp)
802b494: 1000021e bne r2,zero,802b4a0 <rawip_usrreq+0x1b8>
return(EINVAL);
802b498: 00800584 movi r2,22
802b49c: 00015a06 br 802ba08 <rawip_usrreq+0x720>
if (req == PRU_BIND)
802b4a0: e0bffa17 ldw r2,-24(fp)
802b4a4: 10800098 cmpnei r2,r2,2
802b4a8: 10001f1e bne r2,zero,802b528 <rawip_usrreq+0x240>
* if the caller-supplied address is INADDR_ANY,
* don't bind to a specific address; else,
* make sure the caller-supplied address is
* an interface IP address and if so, bind to that
*/
if (sin->sin_addr.s_addr == INADDR_ANY)
802b4ac: e0bff717 ldw r2,-36(fp)
802b4b0: 10800117 ldw r2,4(r2)
802b4b4: 1000021e bne r2,zero,802b4c0 <rawip_usrreq+0x1d8>
{
lhost = 0L;
802b4b8: e03ffc15 stw zero,-16(fp)
802b4bc: 00001606 br 802b518 <rawip_usrreq+0x230>
}
else
{
lhost = sin->sin_addr.s_addr;
802b4c0: e0bff717 ldw r2,-36(fp)
802b4c4: 10800117 ldw r2,4(r2)
802b4c8: e0bffc15 stw r2,-16(fp)
/* verify that lhost is a local interface address */
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802b4cc: 008201b4 movhi r2,2054
802b4d0: 10b6a617 ldw r2,-9576(r2)
802b4d4: e0bffb15 stw r2,-20(fp)
802b4d8: 00000706 br 802b4f8 <rawip_usrreq+0x210>
if (ifp->n_ipaddr == lhost)
802b4dc: e0bffb17 ldw r2,-20(fp)
802b4e0: 10800a17 ldw r2,40(r2)
802b4e4: e0fffc17 ldw r3,-16(fp)
802b4e8: 18800626 beq r3,r2,802b504 <rawip_usrreq+0x21c>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802b4ec: e0bffb17 ldw r2,-20(fp)
802b4f0: 10800017 ldw r2,0(r2)
802b4f4: e0bffb15 stw r2,-20(fp)
802b4f8: e0bffb17 ldw r2,-20(fp)
802b4fc: 103ff71e bne r2,zero,802b4dc <rawip_usrreq+0x1f4>
802b500: 00000106 br 802b508 <rawip_usrreq+0x220>
break;
802b504: 0001883a nop
if (ifp == NULL)
802b508: e0bffb17 ldw r2,-20(fp)
802b50c: 1000021e bne r2,zero,802b518 <rawip_usrreq+0x230>
return(EADDRNOTAVAIL);
802b510: 00801f44 movi r2,125
802b514: 00013c06 br 802ba08 <rawip_usrreq+0x720>
}
/* bind the endpoint */
ep->ipr_laddr = lhost;
802b518: e0bff817 ldw r2,-32(fp)
802b51c: e0fffc17 ldw r3,-16(fp)
802b520: 10c00115 stw r3,4(r2)
802b524: 00002606 br 802b5c0 <rawip_usrreq+0x2d8>
*
* if the caller-supplied address is INADDR_ANY,
* use the wildcard address; else, use the caller-
* supplied address
*/
if (sin->sin_addr.s_addr == INADDR_ANY)
802b528: e0bff717 ldw r2,-36(fp)
802b52c: 10800117 ldw r2,4(r2)
802b530: 1000021e bne r2,zero,802b53c <rawip_usrreq+0x254>
fhost = 0L;
802b534: e03ffd15 stw zero,-12(fp)
802b538: 00000306 br 802b548 <rawip_usrreq+0x260>
else
fhost = sin->sin_addr.s_addr;
802b53c: e0bff717 ldw r2,-36(fp)
802b540: 10800117 ldw r2,4(r2)
802b544: e0bffd15 stw r2,-12(fp)
/* connect the IP endpoint */
ep->ipr_faddr = fhost;
802b548: e0bff817 ldw r2,-32(fp)
802b54c: e0fffd17 ldw r3,-12(fp)
802b550: 10c00215 stw r3,8(r2)
/* mark the socket as connected or disconnected, as appropriate */
if (fhost != 0L) {
802b554: e0bffd17 ldw r2,-12(fp)
802b558: 10000e26 beq r2,zero,802b594 <rawip_usrreq+0x2ac>
so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
802b55c: e0bff417 ldw r2,-48(fp)
802b560: 10c0088b ldhu r3,34(r2)
802b564: 00bffcc4 movi r2,-13
802b568: 1884703a and r2,r3,r2
802b56c: 1007883a mov r3,r2
802b570: e0bff417 ldw r2,-48(fp)
802b574: 10c0088d sth r3,34(r2)
so->so_state |= SS_ISCONNECTED;
802b578: e0bff417 ldw r2,-48(fp)
802b57c: 1080088b ldhu r2,34(r2)
802b580: 10800094 ori r2,r2,2
802b584: 1007883a mov r3,r2
802b588: e0bff417 ldw r2,-48(fp)
802b58c: 10c0088d sth r3,34(r2)
802b590: 00000706 br 802b5b0 <rawip_usrreq+0x2c8>
}
else
{
so->so_state &= ~SS_ISCONNECTED;
802b594: e0bff417 ldw r2,-48(fp)
802b598: 10c0088b ldhu r3,34(r2)
802b59c: 00bfff44 movi r2,-3
802b5a0: 1884703a and r2,r3,r2
802b5a4: 1007883a mov r3,r2
802b5a8: e0bff417 ldw r2,-48(fp)
802b5ac: 10c0088d sth r3,34(r2)
}
/* since socket was in listen state, packets may be queued */
sbflush(&so->so_rcv); /* dump these now */
802b5b0: e0bff417 ldw r2,-48(fp)
802b5b4: 10800a04 addi r2,r2,40
802b5b8: 1009883a mov r4,r2
802b5bc: 803002c0 call 803002c <sbflush>
}
return 0;
802b5c0: 0005883a mov r2,zero
802b5c4: 00011006 br 802ba08 <rawip_usrreq+0x720>
case PRU_SEND:
/* do parameter lookups and tests */
if (!m) /* no data passed? */
802b5c8: e0bff317 ldw r2,-52(fp)
802b5cc: 1000021e bne r2,zero,802b5d8 <rawip_usrreq+0x2f0>
return(EINVAL);
802b5d0: 00800584 movi r2,22
802b5d4: 00010c06 br 802ba08 <rawip_usrreq+0x720>
ep = rawip_lookup(so);
802b5d8: e13ff417 ldw r4,-48(fp)
802b5dc: 802b0c80 call 802b0c8 <rawip_lookup>
802b5e0: e0bff815 stw r2,-32(fp)
if (!ep)
802b5e4: e0bff817 ldw r2,-32(fp)
802b5e8: 1000041e bne r2,zero,802b5fc <rawip_usrreq+0x314>
{
m_free(m);
802b5ec: e13ff317 ldw r4,-52(fp)
802b5f0: 8029bf80 call 8029bf8 <m_free>
/* may be bogus socket, but more likely the connection may
have closed due to ICMP dest unreachable from other side. */
return(ECONNREFUSED);
802b5f4: 00801bc4 movi r2,111
802b5f8: 00010306 br 802ba08 <rawip_usrreq+0x720>
}
if (nam == NULL) /* no sendto() info passed, must be send() */
802b5fc: e0bff217 ldw r2,-56(fp)
802b600: 10000b1e bne r2,zero,802b630 <rawip_usrreq+0x348>
{
if (!(so->so_state & SS_ISCONNECTED))
802b604: e0bff417 ldw r2,-48(fp)
802b608: 1080088b ldhu r2,34(r2)
802b60c: 10bfffcc andi r2,r2,65535
802b610: 1080008c andi r2,r2,2
802b614: 1000021e bne r2,zero,802b620 <rawip_usrreq+0x338>
return (ENOTCONN);
802b618: 00802004 movi r2,128
802b61c: 0000fa06 br 802ba08 <rawip_usrreq+0x720>
fhost = ep->ipr_faddr;
802b620: e0bff817 ldw r2,-32(fp)
802b624: 10800217 ldw r2,8(r2)
802b628: e0bffd15 stw r2,-12(fp)
802b62c: 00001406 br 802b680 <rawip_usrreq+0x398>
}
else
{
if (so->so_state & SS_ISCONNECTED)
802b630: e0bff417 ldw r2,-48(fp)
802b634: 1080088b ldhu r2,34(r2)
802b638: 10bfffcc andi r2,r2,65535
802b63c: 1080008c andi r2,r2,2
802b640: 10000226 beq r2,zero,802b64c <rawip_usrreq+0x364>
return (EISCONN);
802b644: 00801fc4 movi r2,127
802b648: 0000ef06 br 802ba08 <rawip_usrreq+0x720>
if (nam->m_len != sizeof (*sin))
802b64c: e0bff217 ldw r2,-56(fp)
802b650: 10800217 ldw r2,8(r2)
802b654: 10800420 cmpeqi r2,r2,16
802b658: 1000031e bne r2,zero,802b668 <rawip_usrreq+0x380>
{
dtrap();
802b65c: 8028cd40 call 8028cd4 <dtrap>
return (EINVAL);
802b660: 00800584 movi r2,22
802b664: 0000e806 br 802ba08 <rawip_usrreq+0x720>
}
sin = mtod(nam, struct sockaddr_in *);
802b668: e0bff217 ldw r2,-56(fp)
802b66c: 10800317 ldw r2,12(r2)
802b670: e0bff715 stw r2,-36(fp)
fhost = sin->sin_addr.s_addr;
802b674: e0bff717 ldw r2,-36(fp)
802b678: 10800117 ldw r2,4(r2)
802b67c: e0bffd15 stw r2,-12(fp)
/* since our pkt->nb_buff size is tied to max packet size, we
* assume our raw IP datagrams are always in one mbuf and that the
* mbuf -- but check anyway
*/
if (m->m_len > (unsigned)ip_raw_maxalloc(so->so_options & SO_HDRINCL))
802b680: e0bff317 ldw r2,-52(fp)
802b684: 14000217 ldw r16,8(r2)
802b688: e0bff417 ldw r2,-48(fp)
802b68c: 10800417 ldw r2,16(r2)
802b690: 1088000c andi r2,r2,8192
802b694: 1009883a mov r4,r2
802b698: 803cae00 call 803cae0 <ip_raw_maxalloc>
802b69c: 1400032e bgeu r2,r16,802b6ac <rawip_usrreq+0x3c4>
{
dtrap(); /* should never happen */
802b6a0: 8028cd40 call 8028cd4 <dtrap>
return EMSGSIZE; /* try to recover */
802b6a4: 00801e84 movi r2,122
802b6a8: 0000d706 br 802ba08 <rawip_usrreq+0x720>
}
/* get a packet buffer for send */
pkt = ip_raw_alloc(m->m_len, so->so_options & SO_HDRINCL);
802b6ac: e0bff317 ldw r2,-52(fp)
802b6b0: 10800217 ldw r2,8(r2)
802b6b4: 1007883a mov r3,r2
802b6b8: e0bff417 ldw r2,-48(fp)
802b6bc: 10800417 ldw r2,16(r2)
802b6c0: 1088000c andi r2,r2,8192
802b6c4: 100b883a mov r5,r2
802b6c8: 1809883a mov r4,r3
802b6cc: 803c9e40 call 803c9e4 <ip_raw_alloc>
802b6d0: e0bff615 stw r2,-40(fp)
if (!pkt)
802b6d4: e0bff617 ldw r2,-40(fp)
802b6d8: 1000041e bne r2,zero,802b6ec <rawip_usrreq+0x404>
{
m_free(m);
802b6dc: e13ff317 ldw r4,-52(fp)
802b6e0: 8029bf80 call 8029bf8 <m_free>
return ENOBUFS; /* report buffer shortages */
802b6e4: 00801a44 movi r2,105
802b6e8: 0000c706 br 802ba08 <rawip_usrreq+0x720>
}
MEMCPY(pkt->nb_prot, m->m_data, m->m_len);
802b6ec: e0bff617 ldw r2,-40(fp)
802b6f0: 10c00317 ldw r3,12(r2)
802b6f4: e0bff317 ldw r2,-52(fp)
802b6f8: 11000317 ldw r4,12(r2)
802b6fc: e0bff317 ldw r2,-52(fp)
802b700: 10800217 ldw r2,8(r2)
802b704: 100d883a mov r6,r2
802b708: 200b883a mov r5,r4
802b70c: 1809883a mov r4,r3
802b710: 80086b80 call 80086b8 <memcpy>
pkt->nb_plen = m->m_len;
802b714: e0bff317 ldw r2,-52(fp)
802b718: 10c00217 ldw r3,8(r2)
802b71c: e0bff617 ldw r2,-40(fp)
802b720: 10c00415 stw r3,16(r2)
/* finished with mbuf, free it now */
m_free(m);
802b724: e13ff317 ldw r4,-52(fp)
802b728: 8029bf80 call 8029bf8 <m_free>
pkt->fhost = fhost;
802b72c: e0bff617 ldw r2,-40(fp)
802b730: e0fffd17 ldw r3,-12(fp)
802b734: 10c00715 stw r3,28(r2)
* is up; if (after all that) we don't have an interface then we
* fail with error EADDRNOTAVAIL; and finally, if we're built
* for a single-homed configuration where there's only one
* interface, we might as well use it, so we do.
*/
if (fhost == 0xffffffff)
802b738: e0bffd17 ldw r2,-12(fp)
802b73c: 10bfffd8 cmpnei r2,r2,-1
802b740: 1000471e bne r2,zero,802b860 <rawip_usrreq+0x578>
{
#ifdef MULTI_HOMED
if (ep->ipr_laddr != 0L)
802b744: e0bff817 ldw r2,-32(fp)
802b748: 10800117 ldw r2,4(r2)
802b74c: 10000f26 beq r2,zero,802b78c <rawip_usrreq+0x4a4>
{
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802b750: 008201b4 movhi r2,2054
802b754: 10b6a617 ldw r2,-9576(r2)
802b758: e0bffb15 stw r2,-20(fp)
802b75c: 00000806 br 802b780 <rawip_usrreq+0x498>
if (ifp->n_ipaddr == ep->ipr_laddr)
802b760: e0bffb17 ldw r2,-20(fp)
802b764: 10c00a17 ldw r3,40(r2)
802b768: e0bff817 ldw r2,-32(fp)
802b76c: 10800117 ldw r2,4(r2)
802b770: 18801c26 beq r3,r2,802b7e4 <rawip_usrreq+0x4fc>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802b774: e0bffb17 ldw r2,-20(fp)
802b778: 10800017 ldw r2,0(r2)
802b77c: e0bffb15 stw r2,-20(fp)
802b780: e0bffb17 ldw r2,-20(fp)
802b784: 103ff61e bne r2,zero,802b760 <rawip_usrreq+0x478>
802b788: 00001906 br 802b7f0 <rawip_usrreq+0x508>
break;
}
else {
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802b78c: 008201b4 movhi r2,2054
802b790: 10b6a617 ldw r2,-9576(r2)
802b794: e0bffb15 stw r2,-20(fp)
802b798: 00000f06 br 802b7d8 <rawip_usrreq+0x4f0>
if ((ifp->n_flags & NF_BCAST) &&
802b79c: e0bffb17 ldw r2,-20(fp)
802b7a0: 10802a17 ldw r2,168(r2)
802b7a4: 1080004c andi r2,r2,1
802b7a8: 10000826 beq r2,zero,802b7cc <rawip_usrreq+0x4e4>
(ifp->n_mib) && (ifp->n_mib->ifAdminStatus == NI_UP))
802b7ac: e0bffb17 ldw r2,-20(fp)
802b7b0: 10802717 ldw r2,156(r2)
if ((ifp->n_flags & NF_BCAST) &&
802b7b4: 10000526 beq r2,zero,802b7cc <rawip_usrreq+0x4e4>
(ifp->n_mib) && (ifp->n_mib->ifAdminStatus == NI_UP))
802b7b8: e0bffb17 ldw r2,-20(fp)
802b7bc: 10802717 ldw r2,156(r2)
802b7c0: 10800617 ldw r2,24(r2)
802b7c4: 10800058 cmpnei r2,r2,1
802b7c8: 10000826 beq r2,zero,802b7ec <rawip_usrreq+0x504>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802b7cc: e0bffb17 ldw r2,-20(fp)
802b7d0: 10800017 ldw r2,0(r2)
802b7d4: e0bffb15 stw r2,-20(fp)
802b7d8: e0bffb17 ldw r2,-20(fp)
802b7dc: 103fef1e bne r2,zero,802b79c <rawip_usrreq+0x4b4>
802b7e0: 00000306 br 802b7f0 <rawip_usrreq+0x508>
break;
802b7e4: 0001883a nop
802b7e8: 00000106 br 802b7f0 <rawip_usrreq+0x508>
break;
802b7ec: 0001883a nop
}
if (ifp == NULL)
802b7f0: e0bffb17 ldw r2,-20(fp)
802b7f4: 1000171e bne r2,zero,802b854 <rawip_usrreq+0x56c>
{
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802b7f8: 008201b4 movhi r2,2054
802b7fc: 10b6a617 ldw r2,-9576(r2)
802b800: e0bffb15 stw r2,-20(fp)
802b804: 00000b06 br 802b834 <rawip_usrreq+0x54c>
if ((ifp->n_mib) && (ifp->n_mib->ifAdminStatus == NI_UP))
802b808: e0bffb17 ldw r2,-20(fp)
802b80c: 10802717 ldw r2,156(r2)
802b810: 10000526 beq r2,zero,802b828 <rawip_usrreq+0x540>
802b814: e0bffb17 ldw r2,-20(fp)
802b818: 10802717 ldw r2,156(r2)
802b81c: 10800617 ldw r2,24(r2)
802b820: 10800058 cmpnei r2,r2,1
802b824: 10000626 beq r2,zero,802b840 <rawip_usrreq+0x558>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
802b828: e0bffb17 ldw r2,-20(fp)
802b82c: 10800017 ldw r2,0(r2)
802b830: e0bffb15 stw r2,-20(fp)
802b834: e0bffb17 ldw r2,-20(fp)
802b838: 103ff31e bne r2,zero,802b808 <rawip_usrreq+0x520>
802b83c: 00000106 br 802b844 <rawip_usrreq+0x55c>
break;
802b840: 0001883a nop
if (ifp == NULL)
802b844: e0bffb17 ldw r2,-20(fp)
802b848: 1000021e bne r2,zero,802b854 <rawip_usrreq+0x56c>
return(EADDRNOTAVAIL);
802b84c: 00801f44 movi r2,125
802b850: 00006d06 br 802ba08 <rawip_usrreq+0x720>
}
pkt->net = ifp;
802b854: e0bff617 ldw r2,-40(fp)
802b858: e0fffb17 ldw r3,-20(fp)
802b85c: 10c00615 stw r3,24(r2)
#ifdef IP_MULTICAST
/* If the socket has an IP moptions structure for multicast options,
* place a pointer to this structure in the PACKET structure.
*/
if (so->inp_moptions)
802b860: e0bff417 ldw r2,-48(fp)
802b864: 10800317 ldw r2,12(r2)
802b868: 10000426 beq r2,zero,802b87c <rawip_usrreq+0x594>
pkt->imo = so->inp_moptions;
802b86c: e0bff417 ldw r2,-48(fp)
802b870: 10c00317 ldw r3,12(r2)
802b874: e0bff617 ldw r2,-40(fp)
802b878: 10c00b15 stw r3,44(r2)
#endif /* IP_MULTICAST */
if (so->so_options & SO_HDRINCL)
802b87c: e0bff417 ldw r2,-48(fp)
802b880: 10800417 ldw r2,16(r2)
802b884: 1088000c andi r2,r2,8192
802b888: 10000826 beq r2,zero,802b8ac <rawip_usrreq+0x5c4>
{
UNLOCK_NET_RESOURCE(NET_RESID);
802b88c: 0009883a mov r4,zero
802b890: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
e = ip_raw_write(pkt);
802b894: e13ff617 ldw r4,-40(fp)
802b898: 803af6c0 call 803af6c <ip_raw_write>
802b89c: e0bffe15 stw r2,-8(fp)
LOCK_NET_RESOURCE(NET_RESID);
802b8a0: 0009883a mov r4,zero
802b8a4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
802b8a8: 00002806 br 802b94c <rawip_usrreq+0x664>
}
else
{
pip = (struct ip *)(pkt->nb_prot - IPHSIZ);
802b8ac: e0bff617 ldw r2,-40(fp)
802b8b0: 10800317 ldw r2,12(r2)
802b8b4: 10bffb04 addi r2,r2,-20
802b8b8: e0bff515 stw r2,-44(fp)
if (ep->ipr_laddr)
802b8bc: e0bff817 ldw r2,-32(fp)
802b8c0: 10800117 ldw r2,4(r2)
802b8c4: 10000526 beq r2,zero,802b8dc <rawip_usrreq+0x5f4>
pip->ip_src = ep->ipr_laddr;
802b8c8: e0bff817 ldw r2,-32(fp)
802b8cc: 10c00117 ldw r3,4(r2)
802b8d0: e0bff517 ldw r2,-44(fp)
802b8d4: 10c00315 stw r3,12(r2)
802b8d8: 00000e06 br 802b914 <rawip_usrreq+0x62c>
else
{
if (fhost == 0xffffffff)
802b8dc: e0bffd17 ldw r2,-12(fp)
802b8e0: 10bfffd8 cmpnei r2,r2,-1
802b8e4: 1000061e bne r2,zero,802b900 <rawip_usrreq+0x618>
pip->ip_src = pkt->net->n_ipaddr;
802b8e8: e0bff617 ldw r2,-40(fp)
802b8ec: 10800617 ldw r2,24(r2)
802b8f0: 10c00a17 ldw r3,40(r2)
802b8f4: e0bff517 ldw r2,-44(fp)
802b8f8: 10c00315 stw r3,12(r2)
802b8fc: 00000506 br 802b914 <rawip_usrreq+0x62c>
else
pip->ip_src = ip_mymach(fhost);
802b900: e13ffd17 ldw r4,-12(fp)
802b904: 803b0280 call 803b028 <ip_mymach>
802b908: 1007883a mov r3,r2
802b90c: e0bff517 ldw r2,-44(fp)
802b910: 10c00315 stw r3,12(r2)
}
pip->ip_dest = fhost;
802b914: e0bff517 ldw r2,-44(fp)
802b918: e0fffd17 ldw r3,-12(fp)
802b91c: 10c00415 stw r3,16(r2)
UNLOCK_NET_RESOURCE(NET_RESID);
802b920: 0009883a mov r4,zero
802b924: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
e = ip_write(ep->ipr_prot, pkt);
802b928: e0bff817 ldw r2,-32(fp)
802b92c: 10800503 ldbu r2,20(r2)
802b930: 10803fcc andi r2,r2,255
802b934: e17ff617 ldw r5,-40(fp)
802b938: 1009883a mov r4,r2
802b93c: 803a9e80 call 803a9e8 <ip_write>
802b940: e0bffe15 stw r2,-8(fp)
LOCK_NET_RESOURCE(NET_RESID);
802b944: 0009883a mov r4,zero
802b948: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
}
if (e < 0)
802b94c: e0bffe17 ldw r2,-8(fp)
802b950: 1000020e bge r2,zero,802b95c <rawip_usrreq+0x674>
return(e);
802b954: e0bffe17 ldw r2,-8(fp)
802b958: 00002b06 br 802ba08 <rawip_usrreq+0x720>
return 0;
802b95c: 0005883a mov r2,zero
802b960: 00002906 br 802ba08 <rawip_usrreq+0x720>
case PRU_SOCKADDR:
/* fall through to share PRU_PEERADDR prefix */
case PRU_PEERADDR:
if (nam == NULL)
802b964: e0bff217 ldw r2,-56(fp)
802b968: 1000021e bne r2,zero,802b974 <rawip_usrreq+0x68c>
return(EINVAL);
802b96c: 00800584 movi r2,22
802b970: 00002506 br 802ba08 <rawip_usrreq+0x720>
sin = mtod(nam, struct sockaddr_in *);
802b974: e0bff217 ldw r2,-56(fp)
802b978: 10800317 ldw r2,12(r2)
802b97c: e0bff715 stw r2,-36(fp)
if (sin == NULL)
802b980: e0bff717 ldw r2,-36(fp)
802b984: 1000021e bne r2,zero,802b990 <rawip_usrreq+0x6a8>
return(EINVAL);
802b988: 00800584 movi r2,22
802b98c: 00001e06 br 802ba08 <rawip_usrreq+0x720>
ep = rawip_lookup(so);
802b990: e13ff417 ldw r4,-48(fp)
802b994: 802b0c80 call 802b0c8 <rawip_lookup>
802b998: e0bff815 stw r2,-32(fp)
if (!ep)
802b99c: e0bff817 ldw r2,-32(fp)
802b9a0: 1000021e bne r2,zero,802b9ac <rawip_usrreq+0x6c4>
return(EINVAL);
802b9a4: 00800584 movi r2,22
802b9a8: 00001706 br 802ba08 <rawip_usrreq+0x720>
sin->sin_port = 0;
802b9ac: e0bff717 ldw r2,-36(fp)
802b9b0: 1000008d sth zero,2(r2)
nam->m_len = sizeof(*sin);
802b9b4: e0bff217 ldw r2,-56(fp)
802b9b8: 00c00404 movi r3,16
802b9bc: 10c00215 stw r3,8(r2)
if (req == PRU_SOCKADDR)
802b9c0: e0bffa17 ldw r2,-24(fp)
802b9c4: 108003d8 cmpnei r2,r2,15
802b9c8: 1000051e bne r2,zero,802b9e0 <rawip_usrreq+0x6f8>
{
sin->sin_addr.s_addr = ep->ipr_laddr;
802b9cc: e0bff817 ldw r2,-32(fp)
802b9d0: 10c00117 ldw r3,4(r2)
802b9d4: e0bff717 ldw r2,-36(fp)
802b9d8: 10c00115 stw r3,4(r2)
802b9dc: 00000406 br 802b9f0 <rawip_usrreq+0x708>
}
else /* PRU_PEERADDR */
{
sin->sin_addr.s_addr = ep->ipr_faddr;
802b9e0: e0bff817 ldw r2,-32(fp)
802b9e4: 10c00217 ldw r3,8(r2)
802b9e8: e0bff717 ldw r2,-36(fp)
802b9ec: 10c00115 stw r3,4(r2)
}
return 0;
802b9f0: 0005883a mov r2,zero
802b9f4: 00000406 br 802ba08 <rawip_usrreq+0x720>
case PRU_DISCONNECT:
case PRU_RCVD:
dtrap();
802b9f8: 8028cd40 call 8028cd4 <dtrap>
return 0;
802b9fc: 0005883a mov r2,zero
802ba00: 00000106 br 802ba08 <rawip_usrreq+0x720>
case PRU_LISTEN: /* don't support these for raw IP */
case PRU_ACCEPT:
default:
return EOPNOTSUPP;
802ba04: 008017c4 movi r2,95
}
}
802ba08: e6ffff04 addi sp,fp,-4
802ba0c: dfc00217 ldw ra,8(sp)
802ba10: df000117 ldw fp,4(sp)
802ba14: dc000017 ldw r16,0(sp)
802ba18: dec00304 addi sp,sp,12
802ba1c: f800283a ret
0802ba20 <DOMAIN_CHECK>:
*/
#ifdef NPDEBUG
void
DOMAIN_CHECK(struct socket * so, int size)
{
802ba20: defffc04 addi sp,sp,-16
802ba24: dfc00315 stw ra,12(sp)
802ba28: df000215 stw fp,8(sp)
802ba2c: df000204 addi fp,sp,8
802ba30: e13fff15 stw r4,-4(fp)
802ba34: e17ffe15 stw r5,-8(fp)
#ifdef IP_V4
if((so->so_domain == AF_INET) &&
802ba38: e0bfff17 ldw r2,-4(fp)
802ba3c: 10800517 ldw r2,20(r2)
802ba40: 10800098 cmpnei r2,r2,2
802ba44: 1000041e bne r2,zero,802ba58 <DOMAIN_CHECK+0x38>
(size < sizeof(struct sockaddr_in)))
802ba48: e0bffe17 ldw r2,-8(fp)
if((so->so_domain == AF_INET) &&
802ba4c: 10800428 cmpgeui r2,r2,16
802ba50: 1000011e bne r2,zero,802ba58 <DOMAIN_CHECK+0x38>
{
dtrap(); /* programmer passed wrong structure */
802ba54: 8028cd40 call 8028cd4 <dtrap>
(size != sizeof(struct sockaddr_in6)))
{
dtrap(); /* programmer passed wrong structure */
}
#endif /* IP_V6 */
}
802ba58: 0001883a nop
802ba5c: e037883a mov sp,fp
802ba60: dfc00117 ldw ra,4(sp)
802ba64: df000017 ldw fp,0(sp)
802ba68: dec00204 addi sp,sp,8
802ba6c: f800283a ret
0802ba70 <t_socket>:
long
t_socket(int family,
int type,
int proto)
{
802ba70: defffa04 addi sp,sp,-24
802ba74: dfc00515 stw ra,20(sp)
802ba78: df000415 stw fp,16(sp)
802ba7c: df000404 addi fp,sp,16
802ba80: e13ffe15 stw r4,-8(fp)
802ba84: e17ffd15 stw r5,-12(fp)
802ba88: e1bffc15 stw r6,-16(fp)
struct socket * so;
INET_TRACE (INETM_SOCKET, ("SOCK:sock:family %d, typ %d, proto %d\n",
family, type, proto));
LOCK_NET_RESOURCE(NET_RESID);
802ba8c: 0009883a mov r4,zero
802ba90: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
if ((so = socreate (family, type, proto)) == NULL)
802ba94: e1bffc17 ldw r6,-16(fp)
802ba98: e17ffd17 ldw r5,-12(fp)
802ba9c: e13ffe17 ldw r4,-8(fp)
802baa0: 802d0500 call 802d050 <socreate>
802baa4: e0bfff15 stw r2,-4(fp)
802baa8: e0bfff17 ldw r2,-4(fp)
802baac: 1000041e bne r2,zero,802bac0 <t_socket+0x50>
{ /* can't really return error info since no socket.... */
UNLOCK_NET_RESOURCE(NET_RESID);
802bab0: 0009883a mov r4,zero
802bab4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802bab8: 00bfffc4 movi r2,-1
802babc: 00000706 br 802badc <t_socket+0x6c>
}
SOC_RANGE(so);
so->so_error = 0;
802bac0: e0bfff17 ldw r2,-4(fp)
802bac4: 10000615 stw zero,24(r2)
UNLOCK_NET_RESOURCE(NET_RESID);
802bac8: 0009883a mov r4,zero
802bacc: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SO2LONG(so);
802bad0: e0bfff17 ldw r2,-4(fp)
802bad4: 1004d0ba srli r2,r2,2
802bad8: 10800404 addi r2,r2,16
}
802badc: e037883a mov sp,fp
802bae0: dfc00117 ldw ra,4(sp)
802bae4: df000017 ldw fp,0(sp)
802bae8: dec00204 addi sp,sp,8
802baec: f800283a ret
0802baf0 <t_bind>:
int
t_bind (long s,
struct sockaddr * addr,
int addrlen)
{
802baf0: defff204 addi sp,sp,-56
802baf4: dfc00d15 stw ra,52(sp)
802baf8: df000c15 stw fp,48(sp)
802bafc: df000c04 addi fp,sp,48
802bb00: e13ff615 stw r4,-40(fp)
802bb04: e17ff515 stw r5,-44(fp)
802bb08: e1bff415 stw r6,-48(fp)
struct sockaddr sa;
struct sockaddr * sap;
struct socket * so;
int err;
so = LONG2SO(s); /* convert long to socket */
802bb0c: e0bff617 ldw r2,-40(fp)
802bb10: 10bffc04 addi r2,r2,-16
802bb14: 100490ba slli r2,r2,2
802bb18: e0bffd15 stw r2,-12(fp)
SOC_CHECK(so);
802bb1c: 008201b4 movhi r2,2054
802bb20: 10b87104 addi r2,r2,-7740
802bb24: e0bffe15 stw r2,-8(fp)
802bb28: 00000606 br 802bb44 <t_bind+0x54>
802bb2c: e0fffe17 ldw r3,-8(fp)
802bb30: e0bffd17 ldw r2,-12(fp)
802bb34: 18800626 beq r3,r2,802bb50 <t_bind+0x60>
802bb38: e0bffe17 ldw r2,-8(fp)
802bb3c: 10800017 ldw r2,0(r2)
802bb40: e0bffe15 stw r2,-8(fp)
802bb44: e0bffe17 ldw r2,-8(fp)
802bb48: 103ff81e bne r2,zero,802bb2c <t_bind+0x3c>
802bb4c: 00000106 br 802bb54 <t_bind+0x64>
802bb50: 0001883a nop
802bb54: e0fffe17 ldw r3,-8(fp)
802bb58: e0bffd17 ldw r2,-12(fp)
802bb5c: 18800326 beq r3,r2,802bb6c <t_bind+0x7c>
802bb60: 8028cd40 call 8028cd4 <dtrap>
802bb64: 00bfffc4 movi r2,-1
802bb68: 00003406 br 802bc3c <t_bind+0x14c>
DOMAIN_CHECK(so, addrlen);
802bb6c: e17ff417 ldw r5,-48(fp)
802bb70: e13ffd17 ldw r4,-12(fp)
802bb74: 802ba200 call 802ba20 <DOMAIN_CHECK>
so->so_error = 0;
802bb78: e0bffd17 ldw r2,-12(fp)
802bb7c: 10000615 stw zero,24(r2)
if (addr == (struct sockaddr *)NULL)
802bb80: e0bff517 ldw r2,-44(fp)
802bb84: 10000d1e bne r2,zero,802bbbc <t_bind+0xcc>
{
MEMSET ((void *)&sa, 0, sizeof(sa));
802bb88: e0bff704 addi r2,fp,-36
802bb8c: 01800404 movi r6,16
802bb90: 000b883a mov r5,zero
802bb94: 1009883a mov r4,r2
802bb98: 80088e40 call 80088e4 <memset>
addrlen = sizeof(sa);
802bb9c: 00800404 movi r2,16
802bba0: e0bff415 stw r2,-48(fp)
sa.sa_family = so->so_domain;
802bba4: e0bffd17 ldw r2,-12(fp)
802bba8: 10800517 ldw r2,20(r2)
802bbac: e0bff70d sth r2,-36(fp)
sap = &sa;
802bbb0: e0bff704 addi r2,fp,-36
802bbb4: e0bfff15 stw r2,-4(fp)
802bbb8: 00000206 br 802bbc4 <t_bind+0xd4>
} else
sap = addr;
802bbbc: e0bff517 ldw r2,-44(fp)
802bbc0: e0bfff15 stw r2,-4(fp)
if ((nam = sockargs (sap, addrlen, MT_SONAME)) == NULL)
802bbc4: 01800244 movi r6,9
802bbc8: e17ff417 ldw r5,-48(fp)
802bbcc: e13fff17 ldw r4,-4(fp)
802bbd0: 802cf300 call 802cf30 <sockargs>
802bbd4: e0bffc15 stw r2,-16(fp)
802bbd8: e0bffc17 ldw r2,-16(fp)
802bbdc: 1000051e bne r2,zero,802bbf4 <t_bind+0x104>
{
so->so_error = ENOMEM;
802bbe0: e0bffd17 ldw r2,-12(fp)
802bbe4: 00c00304 movi r3,12
802bbe8: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802bbec: 00bfffc4 movi r2,-1
802bbf0: 00001206 br 802bc3c <t_bind+0x14c>
}
LOCK_NET_RESOURCE(NET_RESID);
802bbf4: 0009883a mov r4,zero
802bbf8: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
err = sobind (so, nam);
802bbfc: e17ffc17 ldw r5,-16(fp)
802bc00: e13ffd17 ldw r4,-12(fp)
802bc04: 802d1f80 call 802d1f8 <sobind>
802bc08: e0bffb15 stw r2,-20(fp)
m_freem(nam);
802bc0c: e13ffc17 ldw r4,-16(fp)
802bc10: 8029cfc0 call 8029cfc <m_freem>
UNLOCK_NET_RESOURCE(NET_RESID);
802bc14: 0009883a mov r4,zero
802bc18: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (err)
802bc1c: e0bffb17 ldw r2,-20(fp)
802bc20: 10000526 beq r2,zero,802bc38 <t_bind+0x148>
{
so->so_error = err;
802bc24: e0bffd17 ldw r2,-12(fp)
802bc28: e0fffb17 ldw r3,-20(fp)
802bc2c: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802bc30: 00bfffc4 movi r2,-1
802bc34: 00000106 br 802bc3c <t_bind+0x14c>
}
return 0;
802bc38: 0005883a mov r2,zero
}
802bc3c: e037883a mov sp,fp
802bc40: dfc00117 ldw ra,4(sp)
802bc44: df000017 ldw fp,0(sp)
802bc48: dec00204 addi sp,sp,8
802bc4c: f800283a ret
0802bc50 <t_listen>:
*/
int
t_listen(long s,
int backlog)
{
802bc50: defff904 addi sp,sp,-28
802bc54: dfc00615 stw ra,24(sp)
802bc58: df000515 stw fp,20(sp)
802bc5c: df000504 addi fp,sp,20
802bc60: e13ffc15 stw r4,-16(fp)
802bc64: e17ffb15 stw r5,-20(fp)
struct socket * so;
int err;
so = LONG2SO(s); /* convert long to socket */
802bc68: e0bffc17 ldw r2,-16(fp)
802bc6c: 10bffc04 addi r2,r2,-16
802bc70: 100490ba slli r2,r2,2
802bc74: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802bc78: 008201b4 movhi r2,2054
802bc7c: 10b87104 addi r2,r2,-7740
802bc80: e0bfff15 stw r2,-4(fp)
802bc84: 00000606 br 802bca0 <t_listen+0x50>
802bc88: e0ffff17 ldw r3,-4(fp)
802bc8c: e0bffe17 ldw r2,-8(fp)
802bc90: 18800626 beq r3,r2,802bcac <t_listen+0x5c>
802bc94: e0bfff17 ldw r2,-4(fp)
802bc98: 10800017 ldw r2,0(r2)
802bc9c: e0bfff15 stw r2,-4(fp)
802bca0: e0bfff17 ldw r2,-4(fp)
802bca4: 103ff81e bne r2,zero,802bc88 <t_listen+0x38>
802bca8: 00000106 br 802bcb0 <t_listen+0x60>
802bcac: 0001883a nop
802bcb0: e0ffff17 ldw r3,-4(fp)
802bcb4: e0bffe17 ldw r2,-8(fp)
802bcb8: 18800326 beq r3,r2,802bcc8 <t_listen+0x78>
802bcbc: 8028cd40 call 8028cd4 <dtrap>
802bcc0: 00bfffc4 movi r2,-1
802bcc4: 00001206 br 802bd10 <t_listen+0xc0>
so->so_error = 0;
802bcc8: e0bffe17 ldw r2,-8(fp)
802bccc: 10000615 stw zero,24(r2)
INET_TRACE (INETM_SOCKET, ("SOCK:listen:qlen %d\n", backlog));
LOCK_NET_RESOURCE(NET_RESID);
802bcd0: 0009883a mov r4,zero
802bcd4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
err = solisten (so, backlog);
802bcd8: e17ffb17 ldw r5,-20(fp)
802bcdc: e13ffe17 ldw r4,-8(fp)
802bce0: 802d2540 call 802d254 <solisten>
802bce4: e0bffd15 stw r2,-12(fp)
UNLOCK_NET_RESOURCE(NET_RESID);
802bce8: 0009883a mov r4,zero
802bcec: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (err != 0)
802bcf0: e0bffd17 ldw r2,-12(fp)
802bcf4: 10000526 beq r2,zero,802bd0c <t_listen+0xbc>
{
so->so_error = err;
802bcf8: e0bffe17 ldw r2,-8(fp)
802bcfc: e0fffd17 ldw r3,-12(fp)
802bd00: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802bd04: 00bfffc4 movi r2,-1
802bd08: 00000106 br 802bd10 <t_listen+0xc0>
}
return 0;
802bd0c: 0005883a mov r2,zero
}
802bd10: e037883a mov sp,fp
802bd14: dfc00117 ldw ra,4(sp)
802bd18: df000017 ldw fp,0(sp)
802bd1c: dec00204 addi sp,sp,8
802bd20: f800283a ret
0802bd24 <t_accept>:
long
t_accept(long s,
struct sockaddr * addr,
int * addrlen)
{
802bd24: defff704 addi sp,sp,-36
802bd28: dfc00815 stw ra,32(sp)
802bd2c: df000715 stw fp,28(sp)
802bd30: df000704 addi fp,sp,28
802bd34: e13ffb15 stw r4,-20(fp)
802bd38: e17ffa15 stw r5,-24(fp)
802bd3c: e1bff915 stw r6,-28(fp)
char logbuf[10];
#endif
struct socket * so;
struct mbuf * nam;
so = LONG2SO(s);
802bd40: e0bffb17 ldw r2,-20(fp)
802bd44: 10bffc04 addi r2,r2,-16
802bd48: 100490ba slli r2,r2,2
802bd4c: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802bd50: 008201b4 movhi r2,2054
802bd54: 10b87104 addi r2,r2,-7740
802bd58: e0bfff15 stw r2,-4(fp)
802bd5c: 00000606 br 802bd78 <t_accept+0x54>
802bd60: e0ffff17 ldw r3,-4(fp)
802bd64: e0bffe17 ldw r2,-8(fp)
802bd68: 18800626 beq r3,r2,802bd84 <t_accept+0x60>
802bd6c: e0bfff17 ldw r2,-4(fp)
802bd70: 10800017 ldw r2,0(r2)
802bd74: e0bfff15 stw r2,-4(fp)
802bd78: e0bfff17 ldw r2,-4(fp)
802bd7c: 103ff81e bne r2,zero,802bd60 <t_accept+0x3c>
802bd80: 00000106 br 802bd88 <t_accept+0x64>
802bd84: 0001883a nop
802bd88: e0ffff17 ldw r3,-4(fp)
802bd8c: e0bffe17 ldw r2,-8(fp)
802bd90: 18800326 beq r3,r2,802bda0 <t_accept+0x7c>
802bd94: 8028cd40 call 8028cd4 <dtrap>
802bd98: 00bfffc4 movi r2,-1
802bd9c: 00007006 br 802bf60 <t_accept+0x23c>
DOMAIN_CHECK(so, *addrlen);
802bda0: e0bff917 ldw r2,-28(fp)
802bda4: 10800017 ldw r2,0(r2)
802bda8: 100b883a mov r5,r2
802bdac: e13ffe17 ldw r4,-8(fp)
802bdb0: 802ba200 call 802ba20 <DOMAIN_CHECK>
so->so_error = 0;
802bdb4: e0bffe17 ldw r2,-8(fp)
802bdb8: 10000615 stw zero,24(r2)
INET_TRACE (INETM_SOCKET,
("INET:accept:so %x so_qlen %d so_state %x\n", so, so->so_qlen, so->so_state));
if ((so->so_options & SO_ACCEPTCONN) == 0)
802bdbc: e0bffe17 ldw r2,-8(fp)
802bdc0: 10800417 ldw r2,16(r2)
802bdc4: 1080008c andi r2,r2,2
802bdc8: 1000051e bne r2,zero,802bde0 <t_accept+0xbc>
{
so->so_error = EINVAL;
802bdcc: e0bffe17 ldw r2,-8(fp)
802bdd0: 00c00584 movi r3,22
802bdd4: 10c00615 stw r3,24(r2)
#ifdef SOCKDEBUG
sprintf(logbuf, "t_accept[%d]: %d", __LINE__, so->so_error);
glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
return SOCKET_ERROR;
802bdd8: 00bfffc4 movi r2,-1
802bddc: 00006006 br 802bf60 <t_accept+0x23c>
}
if ((so->so_state & SS_NBIO) && so->so_qlen == 0)
802bde0: e0bffe17 ldw r2,-8(fp)
802bde4: 1080088b ldhu r2,34(r2)
802bde8: 10bfffcc andi r2,r2,65535
802bdec: 1080400c andi r2,r2,256
802bdf0: 10000b26 beq r2,zero,802be20 <t_accept+0xfc>
802bdf4: e0bffe17 ldw r2,-8(fp)
802bdf8: 10801e43 ldbu r2,121(r2)
802bdfc: 10803fcc andi r2,r2,255
802be00: 1080201c xori r2,r2,128
802be04: 10bfe004 addi r2,r2,-128
802be08: 1000051e bne r2,zero,802be20 <t_accept+0xfc>
{
so->so_error = EWOULDBLOCK;
802be0c: e0bffe17 ldw r2,-8(fp)
802be10: 00c002c4 movi r3,11
802be14: 10c00615 stw r3,24(r2)
#ifdef SOCKDEBUG
sprintf(logbuf, "t_accept[%d]: %d", __LINE__, so->so_error);
glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
return SOCKET_ERROR;
802be18: 00bfffc4 movi r2,-1
802be1c: 00005006 br 802bf60 <t_accept+0x23c>
}
LOCK_NET_RESOURCE(NET_RESID);
802be20: 0009883a mov r4,zero
802be24: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
while (so->so_qlen == 0 && so->so_error == 0)
802be28: 00001006 br 802be6c <t_accept+0x148>
{
if (so->so_state & SS_CANTRCVMORE)
802be2c: e0bffe17 ldw r2,-8(fp)
802be30: 1080088b ldhu r2,34(r2)
802be34: 10bfffcc andi r2,r2,65535
802be38: 1080080c andi r2,r2,32
802be3c: 10000726 beq r2,zero,802be5c <t_accept+0x138>
{
so->so_error = ECONNABORTED;
802be40: e0bffe17 ldw r2,-8(fp)
802be44: 00c01c44 movi r3,113
802be48: 10c00615 stw r3,24(r2)
UNLOCK_NET_RESOURCE(NET_RESID);
802be4c: 0009883a mov r4,zero
802be50: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802be54: 00bfffc4 movi r2,-1
802be58: 00004106 br 802bf60 <t_accept+0x23c>
}
tcp_sleep ((char *)&so->so_timeo);
802be5c: e0bffe17 ldw r2,-8(fp)
802be60: 10800904 addi r2,r2,36
802be64: 1009883a mov r4,r2
802be68: 8027a540 call 8027a54 <tcp_sleep>
while (so->so_qlen == 0 && so->so_error == 0)
802be6c: e0bffe17 ldw r2,-8(fp)
802be70: 10801e43 ldbu r2,121(r2)
802be74: 10803fcc andi r2,r2,255
802be78: 1080201c xori r2,r2,128
802be7c: 10bfe004 addi r2,r2,-128
802be80: 1000031e bne r2,zero,802be90 <t_accept+0x16c>
802be84: e0bffe17 ldw r2,-8(fp)
802be88: 10800617 ldw r2,24(r2)
802be8c: 103fe726 beq r2,zero,802be2c <t_accept+0x108>
}
if (so->so_error)
802be90: e0bffe17 ldw r2,-8(fp)
802be94: 10800617 ldw r2,24(r2)
802be98: 10000426 beq r2,zero,802beac <t_accept+0x188>
{
#ifdef SOCKDEBUG
sprintf(logbuf, "t_accept[%d]: %d", __LINE__, so->so_error);
glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
UNLOCK_NET_RESOURCE(NET_RESID);
802be9c: 0009883a mov r4,zero
802bea0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802bea4: 00bfffc4 movi r2,-1
802bea8: 00002d06 br 802bf60 <t_accept+0x23c>
}
nam = m_getwithdata (MT_SONAME, sizeof (struct sockaddr));
802beac: 01400404 movi r5,16
802beb0: 01000244 movi r4,9
802beb4: 8029a700 call 8029a70 <m_getnbuf>
802beb8: e0bffd15 stw r2,-12(fp)
if (nam == NULL)
802bebc: e0bffd17 ldw r2,-12(fp)
802bec0: 1000071e bne r2,zero,802bee0 <t_accept+0x1bc>
{
UNLOCK_NET_RESOURCE(NET_RESID);
802bec4: 0009883a mov r4,zero
802bec8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
so->so_error = ENOMEM;
802becc: e0bffe17 ldw r2,-8(fp)
802bed0: 00c00304 movi r3,12
802bed4: 10c00615 stw r3,24(r2)
#ifdef SOCKDEBUG
sprintf(logbuf, "t_accept[%d]: %d", __LINE__, so->so_error);
glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
return SOCKET_ERROR;
802bed8: 00bfffc4 movi r2,-1
802bedc: 00002006 br 802bf60 <t_accept+0x23c>
}
{
struct socket *aso = so->so_q;
802bee0: e0bffe17 ldw r2,-8(fp)
802bee4: 10801d17 ldw r2,116(r2)
802bee8: e0bffc15 stw r2,-16(fp)
if (soqremque (aso, 1) == 0)
802beec: 01400044 movi r5,1
802bef0: e13ffc17 ldw r4,-16(fp)
802bef4: 802f6ec0 call 802f6ec <soqremque>
802bef8: 1000031e bne r2,zero,802bf08 <t_accept+0x1e4>
panic("accept");
802befc: 01020174 movhi r4,2053
802bf00: 212a7404 addi r4,r4,-22064
802bf04: 80271780 call 8027178 <panic>
so = aso;
802bf08: e0bffc17 ldw r2,-16(fp)
802bf0c: e0bffe15 stw r2,-8(fp)
}
(void)soaccept (so, nam);
802bf10: e17ffd17 ldw r5,-12(fp)
802bf14: e13ffe17 ldw r4,-8(fp)
802bf18: 802d74c0 call 802d74c <soaccept>
INET_TRACE (INETM_SOCKET, ("INET:accept:done so %lx port %d addr %lx\n",
so, sin->sin_port, sin->sin_addr.s_addr));
}
#endif /* TRACE_INET */
/* return the addressing info in the passed structure */
if (addr != NULL)
802bf1c: e0bffa17 ldw r2,-24(fp)
802bf20: 10000826 beq r2,zero,802bf44 <t_accept+0x220>
MEMCPY(addr, nam->m_data, *addrlen);
802bf24: e0bffd17 ldw r2,-12(fp)
802bf28: 10c00317 ldw r3,12(r2)
802bf2c: e0bff917 ldw r2,-28(fp)
802bf30: 10800017 ldw r2,0(r2)
802bf34: 100d883a mov r6,r2
802bf38: 180b883a mov r5,r3
802bf3c: e13ffa17 ldw r4,-24(fp)
802bf40: 80086b80 call 80086b8 <memcpy>
m_freem (nam);
802bf44: e13ffd17 ldw r4,-12(fp)
802bf48: 8029cfc0 call 8029cfc <m_freem>
UNLOCK_NET_RESOURCE(NET_RESID);
802bf4c: 0009883a mov r4,zero
802bf50: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
SOC_RANGE(so);
return SO2LONG(so);
802bf54: e0bffe17 ldw r2,-8(fp)
802bf58: 1004d0ba srli r2,r2,2
802bf5c: 10800404 addi r2,r2,16
}
802bf60: e037883a mov sp,fp
802bf64: dfc00117 ldw ra,4(sp)
802bf68: df000017 ldw fp,0(sp)
802bf6c: dec00204 addi sp,sp,8
802bf70: f800283a ret
0802bf74 <t_connect>:
int
t_connect(long s,
struct sockaddr * addr,
int addrlen)
{
802bf74: defff804 addi sp,sp,-32
802bf78: dfc00715 stw ra,28(sp)
802bf7c: df000615 stw fp,24(sp)
802bf80: df000604 addi fp,sp,24
802bf84: e13ffc15 stw r4,-16(fp)
802bf88: e17ffb15 stw r5,-20(fp)
802bf8c: e1bffa15 stw r6,-24(fp)
struct socket * so;
struct mbuf * nam;
so = LONG2SO(s);
802bf90: e0bffc17 ldw r2,-16(fp)
802bf94: 10bffc04 addi r2,r2,-16
802bf98: 100490ba slli r2,r2,2
802bf9c: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802bfa0: 008201b4 movhi r2,2054
802bfa4: 10b87104 addi r2,r2,-7740
802bfa8: e0bfff15 stw r2,-4(fp)
802bfac: 00000606 br 802bfc8 <t_connect+0x54>
802bfb0: e0ffff17 ldw r3,-4(fp)
802bfb4: e0bffe17 ldw r2,-8(fp)
802bfb8: 18800626 beq r3,r2,802bfd4 <t_connect+0x60>
802bfbc: e0bfff17 ldw r2,-4(fp)
802bfc0: 10800017 ldw r2,0(r2)
802bfc4: e0bfff15 stw r2,-4(fp)
802bfc8: e0bfff17 ldw r2,-4(fp)
802bfcc: 103ff81e bne r2,zero,802bfb0 <t_connect+0x3c>
802bfd0: 00000106 br 802bfd8 <t_connect+0x64>
802bfd4: 0001883a nop
802bfd8: e0ffff17 ldw r3,-4(fp)
802bfdc: e0bffe17 ldw r2,-8(fp)
802bfe0: 18800326 beq r3,r2,802bff0 <t_connect+0x7c>
802bfe4: 8028cd40 call 8028cd4 <dtrap>
802bfe8: 00bfffc4 movi r2,-1
802bfec: 00007806 br 802c1d0 <t_connect+0x25c>
DOMAIN_CHECK(so, addrlen);
802bff0: e17ffa17 ldw r5,-24(fp)
802bff4: e13ffe17 ldw r4,-8(fp)
802bff8: 802ba200 call 802ba20 <DOMAIN_CHECK>
#ifdef NB_CONNECT
/* need to test non blocking connect bits in case this is a
poll of a previous request */
if (so->so_state & SS_NBIO)
802bffc: e0bffe17 ldw r2,-8(fp)
802c000: 1080088b ldhu r2,34(r2)
802c004: 10bfffcc andi r2,r2,65535
802c008: 1080400c andi r2,r2,256
802c00c: 10002426 beq r2,zero,802c0a0 <t_connect+0x12c>
{
if (so->so_state & SS_ISCONNECTING) /* still trying */
802c010: e0bffe17 ldw r2,-8(fp)
802c014: 1080088b ldhu r2,34(r2)
802c018: 10bfffcc andi r2,r2,65535
802c01c: 1080010c andi r2,r2,4
802c020: 10000526 beq r2,zero,802c038 <t_connect+0xc4>
{
so->so_error = EINPROGRESS;
802c024: e0bffe17 ldw r2,-8(fp)
802c028: 00c01dc4 movi r3,119
802c02c: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802c030: 00bfffc4 movi r2,-1
802c034: 00006606 br 802c1d0 <t_connect+0x25c>
}
if (so->so_state & SS_ISCONNECTED) /* connected OK */
802c038: e0bffe17 ldw r2,-8(fp)
802c03c: 1080088b ldhu r2,34(r2)
802c040: 10bfffcc andi r2,r2,65535
802c044: 1080008c andi r2,r2,2
802c048: 10000426 beq r2,zero,802c05c <t_connect+0xe8>
{
so->so_error = 0;
802c04c: e0bffe17 ldw r2,-8(fp)
802c050: 10000615 stw zero,24(r2)
return 0;
802c054: 0005883a mov r2,zero
802c058: 00005d06 br 802c1d0 <t_connect+0x25c>
}
if (so->so_state & SS_WASCONNECTING)
802c05c: e0bffe17 ldw r2,-8(fp)
802c060: 1080088b ldhu r2,34(r2)
802c064: 10bfffcc andi r2,r2,65535
802c068: 1088000c andi r2,r2,8192
802c06c: 10000c26 beq r2,zero,802c0a0 <t_connect+0x12c>
{
so->so_state &= ~SS_WASCONNECTING;
802c070: e0bffe17 ldw r2,-8(fp)
802c074: 10c0088b ldhu r3,34(r2)
802c078: 00b7ffc4 movi r2,-8193
802c07c: 1884703a and r2,r3,r2
802c080: 1007883a mov r3,r2
802c084: e0bffe17 ldw r2,-8(fp)
802c088: 10c0088d sth r3,34(r2)
if (so->so_error) /* connect error - maybe timeout */
802c08c: e0bffe17 ldw r2,-8(fp)
802c090: 10800617 ldw r2,24(r2)
802c094: 10000226 beq r2,zero,802c0a0 <t_connect+0x12c>
return SOCKET_ERROR;
802c098: 00bfffc4 movi r2,-1
802c09c: 00004c06 br 802c1d0 <t_connect+0x25c>
}
}
#endif /* NB_CONNECT */
so->so_error = 0;
802c0a0: e0bffe17 ldw r2,-8(fp)
802c0a4: 10000615 stw zero,24(r2)
if ((nam = sockargs (addr, addrlen, MT_SONAME))
802c0a8: 01800244 movi r6,9
802c0ac: e17ffa17 ldw r5,-24(fp)
802c0b0: e13ffb17 ldw r4,-20(fp)
802c0b4: 802cf300 call 802cf30 <sockargs>
802c0b8: e0bffd15 stw r2,-12(fp)
802c0bc: e0bffd17 ldw r2,-12(fp)
802c0c0: 1000051e bne r2,zero,802c0d8 <t_connect+0x164>
== NULL)
{
so->so_error = ENOMEM;
802c0c4: e0bffe17 ldw r2,-8(fp)
802c0c8: 00c00304 movi r3,12
802c0cc: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802c0d0: 00bfffc4 movi r2,-1
802c0d4: 00003e06 br 802c1d0 <t_connect+0x25c>
INET_TRACE (INETM_SOCKET, ("INET: connect, port %d addr %lx\n",
sin->sin_port, sin->sin_addr.s_addr));
}
#endif /* TRACE_DEBUG */
LOCK_NET_RESOURCE(NET_RESID);
802c0d8: 0009883a mov r4,zero
802c0dc: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
if ((so->so_error = soconnect (so, nam)) != 0)
802c0e0: e17ffd17 ldw r5,-12(fp)
802c0e4: e13ffe17 ldw r4,-8(fp)
802c0e8: 802d7e40 call 802d7e4 <soconnect>
802c0ec: 1007883a mov r3,r2
802c0f0: e0bffe17 ldw r2,-8(fp)
802c0f4: 10c00615 stw r3,24(r2)
802c0f8: e0bffe17 ldw r2,-8(fp)
802c0fc: 10800617 ldw r2,24(r2)
802c100: 10001b1e bne r2,zero,802c170 <t_connect+0x1fc>
goto bad;
#ifdef NB_CONNECT
/* need to test non blocking connect bits after soconnect() call */
if ((so->so_state & SS_NBIO)&& (so->so_state & SS_ISCONNECTING))
802c104: e0bffe17 ldw r2,-8(fp)
802c108: 1080088b ldhu r2,34(r2)
802c10c: 10bfffcc andi r2,r2,65535
802c110: 1080400c andi r2,r2,256
802c114: 10000d26 beq r2,zero,802c14c <t_connect+0x1d8>
802c118: e0bffe17 ldw r2,-8(fp)
802c11c: 1080088b ldhu r2,34(r2)
802c120: 10bfffcc andi r2,r2,65535
802c124: 1080010c andi r2,r2,4
802c128: 10000826 beq r2,zero,802c14c <t_connect+0x1d8>
{
so->so_error = EINPROGRESS;
802c12c: e0bffe17 ldw r2,-8(fp)
802c130: 00c01dc4 movi r3,119
802c134: 10c00615 stw r3,24(r2)
goto bad;
802c138: 00001006 br 802c17c <t_connect+0x208>
INET_TRACE (INETM_SOCKET, ("INET: connect, so %x so_state %x so_error %d\n",
so, so->so_state, so->so_error));
while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0)
{
tcp_sleep ((char *)&so->so_timeo);
802c13c: e0bffe17 ldw r2,-8(fp)
802c140: 10800904 addi r2,r2,36
802c144: 1009883a mov r4,r2
802c148: 8027a540 call 8027a54 <tcp_sleep>
while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0)
802c14c: e0bffe17 ldw r2,-8(fp)
802c150: 1080088b ldhu r2,34(r2)
802c154: 10bfffcc andi r2,r2,65535
802c158: 1080010c andi r2,r2,4
802c15c: 10000626 beq r2,zero,802c178 <t_connect+0x204>
802c160: e0bffe17 ldw r2,-8(fp)
802c164: 10800617 ldw r2,24(r2)
802c168: 103ff426 beq r2,zero,802c13c <t_connect+0x1c8>
}
bad:
802c16c: 00000206 br 802c178 <t_connect+0x204>
goto bad;
802c170: 0001883a nop
802c174: 00000106 br 802c17c <t_connect+0x208>
bad:
802c178: 0001883a nop
if (so->so_error != EINPROGRESS)
802c17c: e0bffe17 ldw r2,-8(fp)
802c180: 10800617 ldw r2,24(r2)
802c184: 10801de0 cmpeqi r2,r2,119
802c188: 1000071e bne r2,zero,802c1a8 <t_connect+0x234>
so->so_state &= ~(SS_ISCONNECTING|SS_WASCONNECTING);
802c18c: e0bffe17 ldw r2,-8(fp)
802c190: 10c0088b ldhu r3,34(r2)
802c194: 00b7fec4 movi r2,-8197
802c198: 1884703a and r2,r3,r2
802c19c: 1007883a mov r3,r2
802c1a0: e0bffe17 ldw r2,-8(fp)
802c1a4: 10c0088d sth r3,34(r2)
m_freem (nam);
802c1a8: e13ffd17 ldw r4,-12(fp)
802c1ac: 8029cfc0 call 8029cfc <m_freem>
UNLOCK_NET_RESOURCE(NET_RESID);
802c1b0: 0009883a mov r4,zero
802c1b4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (so->so_error)
802c1b8: e0bffe17 ldw r2,-8(fp)
802c1bc: 10800617 ldw r2,24(r2)
802c1c0: 10000226 beq r2,zero,802c1cc <t_connect+0x258>
{
/* printf("t_connect(): so_error = %d\n", so->so_error);*/
return SOCKET_ERROR;
802c1c4: 00bfffc4 movi r2,-1
802c1c8: 00000106 br 802c1d0 <t_connect+0x25c>
}
return 0;
802c1cc: 0005883a mov r2,zero
}
802c1d0: e037883a mov sp,fp
802c1d4: dfc00117 ldw ra,4(sp)
802c1d8: df000017 ldw fp,0(sp)
802c1dc: dec00204 addi sp,sp,8
802c1e0: f800283a ret
0802c1e4 <t_getpeername>:
* RETURNS:
*/
int
t_getpeername(long s, struct sockaddr * addr, int * addrlen)
{
802c1e4: defffb04 addi sp,sp,-20
802c1e8: dfc00415 stw ra,16(sp)
802c1ec: df000315 stw fp,12(sp)
802c1f0: df000304 addi fp,sp,12
802c1f4: e13fff15 stw r4,-4(fp)
802c1f8: e17ffe15 stw r5,-8(fp)
802c1fc: e1bffd15 stw r6,-12(fp)
return(t_getname(s, addr, addrlen, PRU_PEERADDR));
802c200: 01c00404 movi r7,16
802c204: e1bffd17 ldw r6,-12(fp)
802c208: e17ffe17 ldw r5,-8(fp)
802c20c: e13fff17 ldw r4,-4(fp)
802c210: 802c26c0 call 802c26c <t_getname>
}
802c214: e037883a mov sp,fp
802c218: dfc00117 ldw ra,4(sp)
802c21c: df000017 ldw fp,0(sp)
802c220: dec00204 addi sp,sp,8
802c224: f800283a ret
0802c228 <t_getsockname>:
* RETURNS:
*/
int
t_getsockname(long s, struct sockaddr * addr, int * addrlen)
{
802c228: defffb04 addi sp,sp,-20
802c22c: dfc00415 stw ra,16(sp)
802c230: df000315 stw fp,12(sp)
802c234: df000304 addi fp,sp,12
802c238: e13fff15 stw r4,-4(fp)
802c23c: e17ffe15 stw r5,-8(fp)
802c240: e1bffd15 stw r6,-12(fp)
return(t_getname(s, addr, addrlen, PRU_SOCKADDR));
802c244: 01c003c4 movi r7,15
802c248: e1bffd17 ldw r6,-12(fp)
802c24c: e17ffe17 ldw r5,-8(fp)
802c250: e13fff17 ldw r4,-4(fp)
802c254: 802c26c0 call 802c26c <t_getname>
}
802c258: e037883a mov sp,fp
802c25c: dfc00117 ldw ra,4(sp)
802c260: df000017 ldw fp,0(sp)
802c264: dec00204 addi sp,sp,8
802c268: f800283a ret
0802c26c <t_getname>:
* RETURNS:
*/
static int
t_getname(long s, struct sockaddr * addr, int * addrlen, int opcode)
{
802c26c: defff604 addi sp,sp,-40
802c270: dfc00915 stw ra,36(sp)
802c274: df000815 stw fp,32(sp)
802c278: df000804 addi fp,sp,32
802c27c: e13ffb15 stw r4,-20(fp)
802c280: e17ffa15 stw r5,-24(fp)
802c284: e1bff915 stw r6,-28(fp)
802c288: e1fff815 stw r7,-32(fp)
struct socket * so;
struct mbuf * m;
int err;
so = LONG2SO(s);
802c28c: e0bffb17 ldw r2,-20(fp)
802c290: 10bffc04 addi r2,r2,-16
802c294: 100490ba slli r2,r2,2
802c298: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802c29c: 008201b4 movhi r2,2054
802c2a0: 10b87104 addi r2,r2,-7740
802c2a4: e0bfff15 stw r2,-4(fp)
802c2a8: 00000606 br 802c2c4 <t_getname+0x58>
802c2ac: e0ffff17 ldw r3,-4(fp)
802c2b0: e0bffe17 ldw r2,-8(fp)
802c2b4: 18800626 beq r3,r2,802c2d0 <t_getname+0x64>
802c2b8: e0bfff17 ldw r2,-4(fp)
802c2bc: 10800017 ldw r2,0(r2)
802c2c0: e0bfff15 stw r2,-4(fp)
802c2c4: e0bfff17 ldw r2,-4(fp)
802c2c8: 103ff81e bne r2,zero,802c2ac <t_getname+0x40>
802c2cc: 00000106 br 802c2d4 <t_getname+0x68>
802c2d0: 0001883a nop
802c2d4: e0ffff17 ldw r3,-4(fp)
802c2d8: e0bffe17 ldw r2,-8(fp)
802c2dc: 18800326 beq r3,r2,802c2ec <t_getname+0x80>
802c2e0: 8028cd40 call 8028cd4 <dtrap>
802c2e4: 00bfffc4 movi r2,-1
802c2e8: 00005306 br 802c438 <t_getname+0x1cc>
so->so_error = 0;
802c2ec: e0bffe17 ldw r2,-8(fp)
802c2f0: 10000615 stw zero,24(r2)
INET_TRACE (INETM_SOCKET, ("INET:get[sock|peer]name so %x\n", so));
if((opcode == PRU_PEERADDR) && (so->so_state & SS_ISCONNECTED) == 0)
802c2f4: e0bff817 ldw r2,-32(fp)
802c2f8: 10800418 cmpnei r2,r2,16
802c2fc: 10000a1e bne r2,zero,802c328 <t_getname+0xbc>
802c300: e0bffe17 ldw r2,-8(fp)
802c304: 1080088b ldhu r2,34(r2)
802c308: 10bfffcc andi r2,r2,65535
802c30c: 1080008c andi r2,r2,2
802c310: 1000051e bne r2,zero,802c328 <t_getname+0xbc>
{
so->so_error = ENOTCONN;
802c314: e0bffe17 ldw r2,-8(fp)
802c318: 00c02004 movi r3,128
802c31c: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802c320: 00bfffc4 movi r2,-1
802c324: 00004406 br 802c438 <t_getname+0x1cc>
}
LOCK_NET_RESOURCE(NET_RESID);
802c328: 0009883a mov r4,zero
802c32c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
m = m_getwithdata (MT_SONAME, sizeof (struct sockaddr));
802c330: 01400404 movi r5,16
802c334: 01000244 movi r4,9
802c338: 8029a700 call 8029a70 <m_getnbuf>
802c33c: e0bffd15 stw r2,-12(fp)
if (m == NULL)
802c340: e0bffd17 ldw r2,-12(fp)
802c344: 1000071e bne r2,zero,802c364 <t_getname+0xf8>
{
so->so_error = ENOMEM;
802c348: e0bffe17 ldw r2,-8(fp)
802c34c: 00c00304 movi r3,12
802c350: 10c00615 stw r3,24(r2)
UNLOCK_NET_RESOURCE(NET_RESID);
802c354: 0009883a mov r4,zero
802c358: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802c35c: 00bfffc4 movi r2,-1
802c360: 00003506 br 802c438 <t_getname+0x1cc>
}
so->so_req = opcode;
802c364: e0bffe17 ldw r2,-8(fp)
802c368: e0fff817 ldw r3,-32(fp)
802c36c: 10c00715 stw r3,28(r2)
if ((err = (*so->so_proto->pr_usrreq)(so, 0, m)) != 0)
802c370: e0bffe17 ldw r2,-8(fp)
802c374: 10800217 ldw r2,8(r2)
802c378: 10800317 ldw r2,12(r2)
802c37c: e1bffd17 ldw r6,-12(fp)
802c380: 000b883a mov r5,zero
802c384: e13ffe17 ldw r4,-8(fp)
802c388: 103ee83a callr r2
802c38c: e0bffc15 stw r2,-16(fp)
802c390: e0bffc17 ldw r2,-16(fp)
802c394: 1000191e bne r2,zero,802c3fc <t_getname+0x190>
goto bad;
#ifdef IP_V4
if(so->so_domain == AF_INET)
802c398: e0bffe17 ldw r2,-8(fp)
802c39c: 10800517 ldw r2,20(r2)
802c3a0: 10800098 cmpnei r2,r2,2
802c3a4: 1000171e bne r2,zero,802c404 <t_getname+0x198>
{
if(*addrlen < sizeof(struct sockaddr_in))
802c3a8: e0bff917 ldw r2,-28(fp)
802c3ac: 10800017 ldw r2,0(r2)
802c3b0: 10800428 cmpgeui r2,r2,16
802c3b4: 1000071e bne r2,zero,802c3d4 <t_getname+0x168>
{
dtrap(); /* programming error */
802c3b8: 8028cd40 call 8028cd4 <dtrap>
m_freem(m);
802c3bc: e13ffd17 ldw r4,-12(fp)
802c3c0: 8029cfc0 call 8029cfc <m_freem>
UNLOCK_NET_RESOURCE(NET_RESID);
802c3c4: 0009883a mov r4,zero
802c3c8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return EINVAL;
802c3cc: 00800584 movi r2,22
802c3d0: 00001906 br 802c438 <t_getname+0x1cc>
}
MEMCPY(addr, m->m_data, sizeof(struct sockaddr_in));
802c3d4: e0bffd17 ldw r2,-12(fp)
802c3d8: 10800317 ldw r2,12(r2)
802c3dc: 01800404 movi r6,16
802c3e0: 100b883a mov r5,r2
802c3e4: e13ffa17 ldw r4,-24(fp)
802c3e8: 80086b80 call 80086b8 <memcpy>
*addrlen = sizeof(struct sockaddr_in);
802c3ec: e0bff917 ldw r2,-28(fp)
802c3f0: 00c00404 movi r3,16
802c3f4: 10c00015 stw r3,0(r2)
802c3f8: 00000306 br 802c408 <t_getname+0x19c>
goto bad;
802c3fc: 0001883a nop
802c400: 00000106 br 802c408 <t_getname+0x19c>
*addrlen = sizeof(struct sockaddr_in6);
}
#endif /* IP_V6 */
bad:
802c404: 0001883a nop
m_freem(m);
802c408: e13ffd17 ldw r4,-12(fp)
802c40c: 8029cfc0 call 8029cfc <m_freem>
UNLOCK_NET_RESOURCE(NET_RESID);
802c410: 0009883a mov r4,zero
802c414: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (err)
802c418: e0bffc17 ldw r2,-16(fp)
802c41c: 10000526 beq r2,zero,802c434 <t_getname+0x1c8>
{
so->so_error = err;
802c420: e0bffe17 ldw r2,-8(fp)
802c424: e0fffc17 ldw r3,-16(fp)
802c428: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802c42c: 00bfffc4 movi r2,-1
802c430: 00000106 br 802c438 <t_getname+0x1cc>
}
return 0;
802c434: 0005883a mov r2,zero
}
802c438: e037883a mov sp,fp
802c43c: dfc00117 ldw ra,4(sp)
802c440: df000017 ldw fp,0(sp)
802c444: dec00204 addi sp,sp,8
802c448: f800283a ret
0802c44c <t_setsockopt>:
t_setsockopt(long s,
int level,
int name,
void * arg,
int arglen)
{
802c44c: defff704 addi sp,sp,-36
802c450: dfc00815 stw ra,32(sp)
802c454: df000715 stw fp,28(sp)
802c458: df000704 addi fp,sp,28
802c45c: e13ffc15 stw r4,-16(fp)
802c460: e17ffb15 stw r5,-20(fp)
802c464: e1bffa15 stw r6,-24(fp)
802c468: e1fff915 stw r7,-28(fp)
struct socket * so;
int err;
so = LONG2SO(s);
802c46c: e0bffc17 ldw r2,-16(fp)
802c470: 10bffc04 addi r2,r2,-16
802c474: 100490ba slli r2,r2,2
802c478: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802c47c: 008201b4 movhi r2,2054
802c480: 10b87104 addi r2,r2,-7740
802c484: e0bfff15 stw r2,-4(fp)
802c488: 00000606 br 802c4a4 <t_setsockopt+0x58>
802c48c: e0ffff17 ldw r3,-4(fp)
802c490: e0bffe17 ldw r2,-8(fp)
802c494: 18800626 beq r3,r2,802c4b0 <t_setsockopt+0x64>
802c498: e0bfff17 ldw r2,-4(fp)
802c49c: 10800017 ldw r2,0(r2)
802c4a0: e0bfff15 stw r2,-4(fp)
802c4a4: e0bfff17 ldw r2,-4(fp)
802c4a8: 103ff81e bne r2,zero,802c48c <t_setsockopt+0x40>
802c4ac: 00000106 br 802c4b4 <t_setsockopt+0x68>
802c4b0: 0001883a nop
802c4b4: e0ffff17 ldw r3,-4(fp)
802c4b8: e0bffe17 ldw r2,-8(fp)
802c4bc: 18800326 beq r3,r2,802c4cc <t_setsockopt+0x80>
802c4c0: 8028cd40 call 8028cd4 <dtrap>
802c4c4: 00bfffc4 movi r2,-1
802c4c8: 00004b06 br 802c5f8 <t_setsockopt+0x1ac>
USE_ARG(arglen);
LOCK_NET_RESOURCE (NET_RESID);
802c4cc: 0009883a mov r4,zero
802c4d0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
so->so_error = 0;
802c4d4: e0bffe17 ldw r2,-8(fp)
802c4d8: 10000615 stw zero,24(r2)
INET_TRACE (INETM_SOCKET,
("INET: setsockopt: name %x val %x valsize %d\n",
name, val));
/* is it a level IP_OPTIONS call? */
if (level != IP_OPTIONS)
802c4dc: e0bffb17 ldw r2,-20(fp)
802c4e0: 10800060 cmpeqi r2,r2,1
802c4e4: 10000e1e bne r2,zero,802c520 <t_setsockopt+0xd4>
{
if ((err = sosetopt (so, name, arg)) != 0)
802c4e8: e1bff917 ldw r6,-28(fp)
802c4ec: e17ffa17 ldw r5,-24(fp)
802c4f0: e13ffe17 ldw r4,-8(fp)
802c4f4: 802e7800 call 802e780 <sosetopt>
802c4f8: e0bffd15 stw r2,-12(fp)
802c4fc: e0bffd17 ldw r2,-12(fp)
802c500: 10003a26 beq r2,zero,802c5ec <t_setsockopt+0x1a0>
{
so->so_error = err;
802c504: e0bffe17 ldw r2,-8(fp)
802c508: e0fffd17 ldw r3,-12(fp)
802c50c: 10c00615 stw r3,24(r2)
UNLOCK_NET_RESOURCE (NET_RESID);
802c510: 0009883a mov r4,zero
802c514: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802c518: 00bfffc4 movi r2,-1
802c51c: 00003606 br 802c5f8 <t_setsockopt+0x1ac>
{
/* level 1 options are for the IP packet level.
* the info is carried in the socket CB, then put
* into the PACKET.
*/
if (!so->so_optsPack)
802c520: e0bffe17 ldw r2,-8(fp)
802c524: 10801f17 ldw r2,124(r2)
802c528: 10000f1e bne r2,zero,802c568 <t_setsockopt+0x11c>
{
so->so_optsPack = (struct ip_socopts *) SOCOPT_ALLOC (sizeof(struct ip_socopts *));
802c52c: 01000104 movi r4,4
802c530: 802982c0 call 802982c <npalloc>
802c534: 1007883a mov r3,r2
802c538: e0bffe17 ldw r2,-8(fp)
802c53c: 10c01f15 stw r3,124(r2)
if (!so->so_optsPack)
802c540: e0bffe17 ldw r2,-8(fp)
802c544: 10801f17 ldw r2,124(r2)
802c548: 1000071e bne r2,zero,802c568 <t_setsockopt+0x11c>
{
so->so_error = ENOMEM;
802c54c: e0bffe17 ldw r2,-8(fp)
802c550: 00c00304 movi r3,12
802c554: 10c00615 stw r3,24(r2)
UNLOCK_NET_RESOURCE (NET_RESID);
802c558: 0009883a mov r4,zero
802c55c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802c560: 00bfffc4 movi r2,-1
802c564: 00002406 br 802c5f8 <t_setsockopt+0x1ac>
}
}
if (name == IP_TTL_OPT)
802c568: e0bffa17 ldw r2,-24(fp)
802c56c: 10800118 cmpnei r2,r2,4
802c570: 1000061e bne r2,zero,802c58c <t_setsockopt+0x140>
so->so_optsPack->ip_ttl = (u_char)(*(int *)arg);
802c574: e0bff917 ldw r2,-28(fp)
802c578: 10c00017 ldw r3,0(r2)
802c57c: e0bffe17 ldw r2,-8(fp)
802c580: 10801f17 ldw r2,124(r2)
802c584: 10c00045 stb r3,1(r2)
802c588: 00001806 br 802c5ec <t_setsockopt+0x1a0>
else
if (name == IP_TOS)
802c58c: e0bffa17 ldw r2,-24(fp)
802c590: 108000d8 cmpnei r2,r2,3
802c594: 1000061e bne r2,zero,802c5b0 <t_setsockopt+0x164>
so->so_optsPack->ip_tos = (u_char)(*(int *)arg);
802c598: e0bff917 ldw r2,-28(fp)
802c59c: 10c00017 ldw r3,0(r2)
802c5a0: e0bffe17 ldw r2,-8(fp)
802c5a4: 10801f17 ldw r2,124(r2)
802c5a8: 10c00005 stb r3,0(r2)
802c5ac: 00000f06 br 802c5ec <t_setsockopt+0x1a0>
else
if (name == IP_SCOPEID)
802c5b0: e0bffa17 ldw r2,-24(fp)
802c5b4: 10800398 cmpnei r2,r2,14
802c5b8: 1000081e bne r2,zero,802c5dc <t_setsockopt+0x190>
so->so_optsPack->ip_scopeid = (u_char)(*(u_int *)arg);
802c5bc: e0bff917 ldw r2,-28(fp)
802c5c0: 10800017 ldw r2,0(r2)
802c5c4: 1007883a mov r3,r2
802c5c8: e0bffe17 ldw r2,-8(fp)
802c5cc: 10801f17 ldw r2,124(r2)
802c5d0: 18c03fcc andi r3,r3,255
802c5d4: 10c00115 stw r3,4(r2)
802c5d8: 00000406 br 802c5ec <t_setsockopt+0x1a0>
else
{
UNLOCK_NET_RESOURCE (NET_RESID);
802c5dc: 0009883a mov r4,zero
802c5e0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802c5e4: 00bfffc4 movi r2,-1
802c5e8: 00000306 br 802c5f8 <t_setsockopt+0x1ac>
}
}
UNLOCK_NET_RESOURCE (NET_RESID);
802c5ec: 0009883a mov r4,zero
802c5f0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return 0;
802c5f4: 0005883a mov r2,zero
}
802c5f8: e037883a mov sp,fp
802c5fc: dfc00117 ldw ra,4(sp)
802c600: df000017 ldw fp,0(sp)
802c604: dec00204 addi sp,sp,8
802c608: f800283a ret
0802c60c <t_getsockopt>:
int level,
int name,
void * arg,
int arglen)
{
802c60c: defff704 addi sp,sp,-36
802c610: dfc00815 stw ra,32(sp)
802c614: df000715 stw fp,28(sp)
802c618: df000704 addi fp,sp,28
802c61c: e13ffc15 stw r4,-16(fp)
802c620: e17ffb15 stw r5,-20(fp)
802c624: e1bffa15 stw r6,-24(fp)
802c628: e1fff915 stw r7,-28(fp)
struct socket * so;
int err;
so = LONG2SO(s);
802c62c: e0bffc17 ldw r2,-16(fp)
802c630: 10bffc04 addi r2,r2,-16
802c634: 100490ba slli r2,r2,2
802c638: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802c63c: 008201b4 movhi r2,2054
802c640: 10b87104 addi r2,r2,-7740
802c644: e0bfff15 stw r2,-4(fp)
802c648: 00000606 br 802c664 <t_getsockopt+0x58>
802c64c: e0ffff17 ldw r3,-4(fp)
802c650: e0bffe17 ldw r2,-8(fp)
802c654: 18800626 beq r3,r2,802c670 <t_getsockopt+0x64>
802c658: e0bfff17 ldw r2,-4(fp)
802c65c: 10800017 ldw r2,0(r2)
802c660: e0bfff15 stw r2,-4(fp)
802c664: e0bfff17 ldw r2,-4(fp)
802c668: 103ff81e bne r2,zero,802c64c <t_getsockopt+0x40>
802c66c: 00000106 br 802c674 <t_getsockopt+0x68>
802c670: 0001883a nop
802c674: e0ffff17 ldw r3,-4(fp)
802c678: e0bffe17 ldw r2,-8(fp)
802c67c: 18800326 beq r3,r2,802c68c <t_getsockopt+0x80>
802c680: 8028cd40 call 8028cd4 <dtrap>
802c684: 00bfffc4 movi r2,-1
802c688: 00003d06 br 802c780 <t_getsockopt+0x174>
USE_ARG(level);
USE_ARG(arglen);
LOCK_NET_RESOURCE (NET_RESID);
802c68c: 0009883a mov r4,zero
802c690: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
INET_TRACE (INETM_SOCKET,
("INET: getsockopt: name %x val %x valsize %d\n",
name, val));
/* is it a level IP_OPTIONS call? */
if (level != IP_OPTIONS)
802c694: e0bffb17 ldw r2,-20(fp)
802c698: 10800060 cmpeqi r2,r2,1
802c69c: 10000e1e bne r2,zero,802c6d8 <t_getsockopt+0xcc>
{
if ((err = sogetopt (so, name, arg)) != 0)
802c6a0: e1bff917 ldw r6,-28(fp)
802c6a4: e17ffa17 ldw r5,-24(fp)
802c6a8: e13ffe17 ldw r4,-8(fp)
802c6ac: 802ec0c0 call 802ec0c <sogetopt>
802c6b0: e0bffd15 stw r2,-12(fp)
802c6b4: e0bffd17 ldw r2,-12(fp)
802c6b8: 10002c26 beq r2,zero,802c76c <t_getsockopt+0x160>
{
so->so_error = err;
802c6bc: e0bffe17 ldw r2,-8(fp)
802c6c0: e0fffd17 ldw r3,-12(fp)
802c6c4: 10c00615 stw r3,24(r2)
UNLOCK_NET_RESOURCE (NET_RESID);
802c6c8: 0009883a mov r4,zero
802c6cc: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802c6d0: 00bfffc4 movi r2,-1
802c6d4: 00002a06 br 802c780 <t_getsockopt+0x174>
{
/* level 1 options are for the IP packet level.
* the info is carried in the socket CB, then put
* into the PACKET.
*/
if (name == IP_TTL_OPT)
802c6d8: e0bffa17 ldw r2,-24(fp)
802c6dc: 10800118 cmpnei r2,r2,4
802c6e0: 10000e1e bne r2,zero,802c71c <t_getsockopt+0x110>
{
if (!so->so_optsPack) *(int *)arg = IP_TTL;
802c6e4: e0bffe17 ldw r2,-8(fp)
802c6e8: 10801f17 ldw r2,124(r2)
802c6ec: 1000041e bne r2,zero,802c700 <t_getsockopt+0xf4>
802c6f0: e0bff917 ldw r2,-28(fp)
802c6f4: 00c01004 movi r3,64
802c6f8: 10c00015 stw r3,0(r2)
802c6fc: 00001b06 br 802c76c <t_getsockopt+0x160>
else *(int *)arg = (int)so->so_optsPack->ip_ttl;
802c700: e0bffe17 ldw r2,-8(fp)
802c704: 10801f17 ldw r2,124(r2)
802c708: 10800043 ldbu r2,1(r2)
802c70c: 10c03fcc andi r3,r2,255
802c710: e0bff917 ldw r2,-28(fp)
802c714: 10c00015 stw r3,0(r2)
802c718: 00001406 br 802c76c <t_getsockopt+0x160>
}
else if (name == IP_TOS)
802c71c: e0bffa17 ldw r2,-24(fp)
802c720: 108000d8 cmpnei r2,r2,3
802c724: 10000d1e bne r2,zero,802c75c <t_getsockopt+0x150>
{
if (!so->so_optsPack) *(int *)arg = IP_TOS_DEFVAL;
802c728: e0bffe17 ldw r2,-8(fp)
802c72c: 10801f17 ldw r2,124(r2)
802c730: 1000031e bne r2,zero,802c740 <t_getsockopt+0x134>
802c734: e0bff917 ldw r2,-28(fp)
802c738: 10000015 stw zero,0(r2)
802c73c: 00000b06 br 802c76c <t_getsockopt+0x160>
else *(int *)arg = (int)so->so_optsPack->ip_tos;
802c740: e0bffe17 ldw r2,-8(fp)
802c744: 10801f17 ldw r2,124(r2)
802c748: 10800003 ldbu r2,0(r2)
802c74c: 10c03fcc andi r3,r2,255
802c750: e0bff917 ldw r2,-28(fp)
802c754: 10c00015 stw r3,0(r2)
802c758: 00000406 br 802c76c <t_getsockopt+0x160>
}
else
{
UNLOCK_NET_RESOURCE (NET_RESID);
802c75c: 0009883a mov r4,zero
802c760: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return SOCKET_ERROR;
802c764: 00bfffc4 movi r2,-1
802c768: 00000506 br 802c780 <t_getsockopt+0x174>
}
}
so->so_error = 0;
802c76c: e0bffe17 ldw r2,-8(fp)
802c770: 10000615 stw zero,24(r2)
UNLOCK_NET_RESOURCE (NET_RESID);
802c774: 0009883a mov r4,zero
802c778: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return 0;
802c77c: 0005883a mov r2,zero
}
802c780: e037883a mov sp,fp
802c784: dfc00117 ldw ra,4(sp)
802c788: df000017 ldw fp,0(sp)
802c78c: dec00204 addi sp,sp,8
802c790: f800283a ret
0802c794 <t_recv>:
int
t_recv (long s,
char * buf,
int len,
int flag)
{
802c794: defff604 addi sp,sp,-40
802c798: dfc00915 stw ra,36(sp)
802c79c: df000815 stw fp,32(sp)
802c7a0: df000804 addi fp,sp,32
802c7a4: e13ffc15 stw r4,-16(fp)
802c7a8: e17ffb15 stw r5,-20(fp)
802c7ac: e1bffa15 stw r6,-24(fp)
802c7b0: e1fff915 stw r7,-28(fp)
#ifdef SOCKDEBUG
char logbuf[10];
#endif
struct socket * so;
int err;
int sendlen = len;
802c7b4: e0bffa17 ldw r2,-24(fp)
802c7b8: e0bfff15 stw r2,-4(fp)
so = LONG2SO(s);
802c7bc: e0bffc17 ldw r2,-16(fp)
802c7c0: 10bffc04 addi r2,r2,-16
802c7c4: 100490ba slli r2,r2,2
802c7c8: e0bffe15 stw r2,-8(fp)
#ifdef SOC_CHECK_ALWAYS
SOC_CHECK(so);
#endif
if ((so->so_state & SO_IO_OK) != SS_ISCONNECTED)
802c7cc: e0bffe17 ldw r2,-8(fp)
802c7d0: 1080088b ldhu r2,34(r2)
802c7d4: 10bfffcc andi r2,r2,65535
802c7d8: 1080038c andi r2,r2,14
802c7dc: 108000a0 cmpeqi r2,r2,2
802c7e0: 1000051e bne r2,zero,802c7f8 <t_recv+0x64>
{
so->so_error = EPIPE;
802c7e4: e0bffe17 ldw r2,-8(fp)
802c7e8: 00c00804 movi r3,32
802c7ec: 10c00615 stw r3,24(r2)
#ifdef SOCKDEBUG
sprintf(logbuf, "t_recv: %d", so->so_error);
glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
return SOCKET_ERROR;
802c7f0: 00bfffc4 movi r2,-1
802c7f4: 00001906 br 802c85c <t_recv+0xc8>
}
so->so_error = 0;
802c7f8: e0bffe17 ldw r2,-8(fp)
802c7fc: 10000615 stw zero,24(r2)
LOCK_NET_RESOURCE(NET_RESID);
802c800: 0009883a mov r4,zero
802c804: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
IN_PROFILER(PF_TCP, PF_ENTRY); /* measure time in TCP */
INET_TRACE (INETM_IO, ("INET:recv: so %x, len %d\n", so, len));
err = soreceive(so, NULL, buf, &len, flag);
802c808: e0fffa04 addi r3,fp,-24
802c80c: e0bff917 ldw r2,-28(fp)
802c810: d8800015 stw r2,0(sp)
802c814: 180f883a mov r7,r3
802c818: e1bffb17 ldw r6,-20(fp)
802c81c: 000b883a mov r5,zero
802c820: e13ffe17 ldw r4,-8(fp)
802c824: 802de940 call 802de94 <soreceive>
802c828: e0bffd15 stw r2,-12(fp)
IN_PROFILER(PF_TCP, PF_EXIT); /* measure time in TCP */
UNLOCK_NET_RESOURCE(NET_RESID);
802c82c: 0009883a mov r4,zero
802c830: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if(err)
802c834: e0bffd17 ldw r2,-12(fp)
802c838: 10000526 beq r2,zero,802c850 <t_recv+0xbc>
{
so->so_error = err;
802c83c: e0bffe17 ldw r2,-8(fp)
802c840: e0fffd17 ldw r3,-12(fp)
802c844: 10c00615 stw r3,24(r2)
#ifdef SOCKDEBUG
sprintf(logbuf, "t_recv: %d", so->so_error);
glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
return SOCKET_ERROR;
802c848: 00bfffc4 movi r2,-1
802c84c: 00000306 br 802c85c <t_recv+0xc8>
}
/* return bytes we sent - the amount we wanted to send minus
* the amount left in the buffer.
*/
return (sendlen - len);
802c850: e0bffa17 ldw r2,-24(fp)
802c854: e0ffff17 ldw r3,-4(fp)
802c858: 1885c83a sub r2,r3,r2
}
802c85c: e037883a mov sp,fp
802c860: dfc00117 ldw ra,4(sp)
802c864: df000017 ldw fp,0(sp)
802c868: dec00204 addi sp,sp,8
802c86c: f800283a ret
0802c870 <t_recvfrom>:
char * buf,
int len,
int flags,
struct sockaddr * from,
int * fromlen)
{
802c870: defff404 addi sp,sp,-48
802c874: dfc00b15 stw ra,44(sp)
802c878: df000a15 stw fp,40(sp)
802c87c: df000a04 addi fp,sp,40
802c880: e13ffa15 stw r4,-24(fp)
802c884: e17ff915 stw r5,-28(fp)
802c888: e1bff815 stw r6,-32(fp)
802c88c: e1fff715 stw r7,-36(fp)
struct socket * so;
struct mbuf * sender = NULL;
802c890: e03ffb15 stw zero,-20(fp)
int err;
int sendlen = len;
802c894: e0bff817 ldw r2,-32(fp)
802c898: e0bffe15 stw r2,-8(fp)
so = LONG2SO(s);
802c89c: e0bffa17 ldw r2,-24(fp)
802c8a0: 10bffc04 addi r2,r2,-16
802c8a4: 100490ba slli r2,r2,2
802c8a8: e0bffd15 stw r2,-12(fp)
SOC_CHECK(so);
802c8ac: 008201b4 movhi r2,2054
802c8b0: 10b87104 addi r2,r2,-7740
802c8b4: e0bfff15 stw r2,-4(fp)
802c8b8: 00000606 br 802c8d4 <t_recvfrom+0x64>
802c8bc: e0ffff17 ldw r3,-4(fp)
802c8c0: e0bffd17 ldw r2,-12(fp)
802c8c4: 18800626 beq r3,r2,802c8e0 <t_recvfrom+0x70>
802c8c8: e0bfff17 ldw r2,-4(fp)
802c8cc: 10800017 ldw r2,0(r2)
802c8d0: e0bfff15 stw r2,-4(fp)
802c8d4: e0bfff17 ldw r2,-4(fp)
802c8d8: 103ff81e bne r2,zero,802c8bc <t_recvfrom+0x4c>
802c8dc: 00000106 br 802c8e4 <t_recvfrom+0x74>
802c8e0: 0001883a nop
802c8e4: e0ffff17 ldw r3,-4(fp)
802c8e8: e0bffd17 ldw r2,-12(fp)
802c8ec: 18800326 beq r3,r2,802c8fc <t_recvfrom+0x8c>
802c8f0: 8028cd40 call 8028cd4 <dtrap>
802c8f4: 00bfffc4 movi r2,-1
802c8f8: 00002706 br 802c998 <t_recvfrom+0x128>
so->so_error = 0;
802c8fc: e0bffd17 ldw r2,-12(fp)
802c900: 10000615 stw zero,24(r2)
LOCK_NET_RESOURCE(NET_RESID);
802c904: 0009883a mov r4,zero
802c908: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
err = soreceive(so, &sender, buf, &len, flags);
802c90c: e13ff804 addi r4,fp,-32
802c910: e0fffb04 addi r3,fp,-20
802c914: e0bff717 ldw r2,-36(fp)
802c918: d8800015 stw r2,0(sp)
802c91c: 200f883a mov r7,r4
802c920: e1bff917 ldw r6,-28(fp)
802c924: 180b883a mov r5,r3
802c928: e13ffd17 ldw r4,-12(fp)
802c92c: 802de940 call 802de94 <soreceive>
802c930: e0bffc15 stw r2,-16(fp)
/* copy sender info from mbuf to sockaddr */
if (sender)
802c934: e0bffb17 ldw r2,-20(fp)
802c938: 10000b26 beq r2,zero,802c968 <t_recvfrom+0xf8>
{
MEMCPY(from, (mtod(sender, struct sockaddr *)), *fromlen );
802c93c: e0bffb17 ldw r2,-20(fp)
802c940: 10c00317 ldw r3,12(r2)
802c944: e0800317 ldw r2,12(fp)
802c948: 10800017 ldw r2,0(r2)
802c94c: 100d883a mov r6,r2
802c950: 180b883a mov r5,r3
802c954: e1000217 ldw r4,8(fp)
802c958: 80086b80 call 80086b8 <memcpy>
m_freem (sender);
802c95c: e0bffb17 ldw r2,-20(fp)
802c960: 1009883a mov r4,r2
802c964: 8029cfc0 call 8029cfc <m_freem>
}
UNLOCK_NET_RESOURCE(NET_RESID);
802c968: 0009883a mov r4,zero
802c96c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if(err)
802c970: e0bffc17 ldw r2,-16(fp)
802c974: 10000526 beq r2,zero,802c98c <t_recvfrom+0x11c>
{
so->so_error = err;
802c978: e0bffd17 ldw r2,-12(fp)
802c97c: e0fffc17 ldw r3,-16(fp)
802c980: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802c984: 00bfffc4 movi r2,-1
802c988: 00000306 br 802c998 <t_recvfrom+0x128>
}
/* OK return: amount of data actually sent */
return (sendlen - len);
802c98c: e0bff817 ldw r2,-32(fp)
802c990: e0fffe17 ldw r3,-8(fp)
802c994: 1885c83a sub r2,r3,r2
}
802c998: e037883a mov sp,fp
802c99c: dfc00117 ldw ra,4(sp)
802c9a0: df000017 ldw fp,0(sp)
802c9a4: dec00204 addi sp,sp,8
802c9a8: f800283a ret
0802c9ac <t_sendto>:
char * buf,
int len,
int flags,
struct sockaddr * to,
int tolen)
{
802c9ac: defff404 addi sp,sp,-48
802c9b0: dfc00b15 stw ra,44(sp)
802c9b4: df000a15 stw fp,40(sp)
802c9b8: df000a04 addi fp,sp,40
802c9bc: e13ffa15 stw r4,-24(fp)
802c9c0: e17ff915 stw r5,-28(fp)
802c9c4: e1bff815 stw r6,-32(fp)
802c9c8: e1fff715 stw r7,-36(fp)
struct socket * so;
int sendlen;
int err;
struct mbuf * name;
so = LONG2SO(s);
802c9cc: e0bffa17 ldw r2,-24(fp)
802c9d0: 10bffc04 addi r2,r2,-16
802c9d4: 100490ba slli r2,r2,2
802c9d8: e0bffd15 stw r2,-12(fp)
SOC_CHECK(so);
802c9dc: 008201b4 movhi r2,2054
802c9e0: 10b87104 addi r2,r2,-7740
802c9e4: e0bffe15 stw r2,-8(fp)
802c9e8: 00000606 br 802ca04 <t_sendto+0x58>
802c9ec: e0fffe17 ldw r3,-8(fp)
802c9f0: e0bffd17 ldw r2,-12(fp)
802c9f4: 18800626 beq r3,r2,802ca10 <t_sendto+0x64>
802c9f8: e0bffe17 ldw r2,-8(fp)
802c9fc: 10800017 ldw r2,0(r2)
802ca00: e0bffe15 stw r2,-8(fp)
802ca04: e0bffe17 ldw r2,-8(fp)
802ca08: 103ff81e bne r2,zero,802c9ec <t_sendto+0x40>
802ca0c: 00000106 br 802ca14 <t_sendto+0x68>
802ca10: 0001883a nop
802ca14: e0fffe17 ldw r3,-8(fp)
802ca18: e0bffd17 ldw r2,-12(fp)
802ca1c: 18800326 beq r3,r2,802ca2c <t_sendto+0x80>
802ca20: 8028cd40 call 8028cd4 <dtrap>
802ca24: 00bfffc4 movi r2,-1
802ca28: 00005706 br 802cb88 <t_sendto+0x1dc>
so->so_error = 0;
802ca2c: e0bffd17 ldw r2,-12(fp)
802ca30: 10000615 stw zero,24(r2)
switch (so->so_type)
802ca34: e0bffd17 ldw r2,-12(fp)
802ca38: 10800983 ldbu r2,38(r2)
802ca3c: 10803fcc andi r2,r2,255
802ca40: 1080201c xori r2,r2,128
802ca44: 10bfe004 addi r2,r2,-128
802ca48: 10c000a0 cmpeqi r3,r2,2
802ca4c: 18000a1e bne r3,zero,802ca78 <t_sendto+0xcc>
802ca50: 10c000e0 cmpeqi r3,r2,3
802ca54: 18000b1e bne r3,zero,802ca84 <t_sendto+0xd8>
802ca58: 10800058 cmpnei r2,r2,1
802ca5c: 1000101e bne r2,zero,802caa0 <t_sendto+0xf4>
{
case SOCK_STREAM:
/* this is a stream socket, so pass this request through
* t_send() for its large-send support.
*/
return t_send(s, buf, len, flags);
802ca60: e1fff717 ldw r7,-36(fp)
802ca64: e1bff817 ldw r6,-32(fp)
802ca68: e17ff917 ldw r5,-28(fp)
802ca6c: e13ffa17 ldw r4,-24(fp)
802ca70: 802cb9c0 call 802cb9c <t_send>
802ca74: 00004406 br 802cb88 <t_sendto+0x1dc>
/*NOTREACHED*/
case SOCK_DGRAM:
/* datagram (UDP) socket -- prepare to check length */
sendlen = udp_maxalloc();
802ca78: 803dd940 call 803dd94 <udp_maxalloc>
802ca7c: e0bffb15 stw r2,-20(fp)
break;
802ca80: 00000d06 br 802cab8 <t_sendto+0x10c>
#ifdef IP_RAW
case SOCK_RAW:
/* raw socket -- prepare to check length */
sendlen = ip_raw_maxalloc(so->so_options & SO_HDRINCL);
802ca84: e0bffd17 ldw r2,-12(fp)
802ca88: 10800417 ldw r2,16(r2)
802ca8c: 1088000c andi r2,r2,8192
802ca90: 1009883a mov r4,r2
802ca94: 803cae00 call 803cae0 <ip_raw_maxalloc>
802ca98: e0bffb15 stw r2,-20(fp)
break;
802ca9c: 00000606 br 802cab8 <t_sendto+0x10c>
#endif /* IP_RAW */
default:
/* socket has unknown type */
dtrap();
802caa0: 8028cd40 call 8028cd4 <dtrap>
so->so_error = EFAULT;
802caa4: e0bffd17 ldw r2,-12(fp)
802caa8: 00c00384 movi r3,14
802caac: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802cab0: 00bfffc4 movi r2,-1
802cab4: 00003406 br 802cb88 <t_sendto+0x1dc>
/* fall through for non-stream sockets: SOCK_DGRAM (UDP) and
* SOCK_RAW (raw IP)
*/
/* check length against underlying stack's maximum */
if (len > sendlen)
802cab8: e0fffb17 ldw r3,-20(fp)
802cabc: e0bff817 ldw r2,-32(fp)
802cac0: 1880050e bge r3,r2,802cad8 <t_sendto+0x12c>
{
so->so_error = EMSGSIZE;
802cac4: e0bffd17 ldw r2,-12(fp)
802cac8: 00c01e84 movi r3,122
802cacc: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802cad0: 00bfffc4 movi r2,-1
802cad4: 00002c06 br 802cb88 <t_sendto+0x1dc>
/* if a sockaddr was passed, wrap it in an mbuf and pas it into the
* bowels of the BSD code; else assume this is a bound UDP socket
* and this call came from t_send() below.
*/
if (to) /* sockaddr was passed */
802cad8: e0800217 ldw r2,8(fp)
802cadc: 10000c26 beq r2,zero,802cb10 <t_sendto+0x164>
{
name = sockargs(to, tolen, MT_SONAME);
802cae0: 01800244 movi r6,9
802cae4: e1400317 ldw r5,12(fp)
802cae8: e1000217 ldw r4,8(fp)
802caec: 802cf300 call 802cf30 <sockargs>
802caf0: e0bfff15 stw r2,-4(fp)
if(name == NULL)
802caf4: e0bfff17 ldw r2,-4(fp)
802caf8: 1000061e bne r2,zero,802cb14 <t_sendto+0x168>
{
so->so_error = ENOMEM;
802cafc: e0bffd17 ldw r2,-12(fp)
802cb00: 00c00304 movi r3,12
802cb04: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802cb08: 00bfffc4 movi r2,-1
802cb0c: 00001e06 br 802cb88 <t_sendto+0x1dc>
}
}
else /* hope user called bind() first... */
name = NULL;
802cb10: e03fff15 stw zero,-4(fp)
sendlen = len;
802cb14: e0bff817 ldw r2,-32(fp)
802cb18: e0bffb15 stw r2,-20(fp)
LOCK_NET_RESOURCE(NET_RESID);
802cb1c: 0009883a mov r4,zero
802cb20: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
err = sosend (so, name, buf, &sendlen, flags);
802cb24: e0fffb04 addi r3,fp,-20
802cb28: e0bff717 ldw r2,-36(fp)
802cb2c: d8800015 stw r2,0(sp)
802cb30: 180f883a mov r7,r3
802cb34: e1bff917 ldw r6,-28(fp)
802cb38: e17fff17 ldw r5,-4(fp)
802cb3c: e13ffd17 ldw r4,-12(fp)
802cb40: 802d9340 call 802d934 <sosend>
802cb44: e0bffc15 stw r2,-16(fp)
if (name)
802cb48: e0bfff17 ldw r2,-4(fp)
802cb4c: 10000226 beq r2,zero,802cb58 <t_sendto+0x1ac>
m_freem(name);
802cb50: e13fff17 ldw r4,-4(fp)
802cb54: 8029cfc0 call 8029cfc <m_freem>
UNLOCK_NET_RESOURCE(NET_RESID);
802cb58: 0009883a mov r4,zero
802cb5c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (err != 0)
802cb60: e0bffc17 ldw r2,-16(fp)
802cb64: 10000526 beq r2,zero,802cb7c <t_sendto+0x1d0>
{
so->so_error = err;
802cb68: e0bffd17 ldw r2,-12(fp)
802cb6c: e0fffc17 ldw r3,-16(fp)
802cb70: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802cb74: 00bfffc4 movi r2,-1
802cb78: 00000306 br 802cb88 <t_sendto+0x1dc>
}
return (len - sendlen);
802cb7c: e0bffb17 ldw r2,-20(fp)
802cb80: e0fff817 ldw r3,-32(fp)
802cb84: 1885c83a sub r2,r3,r2
}
802cb88: e037883a mov sp,fp
802cb8c: dfc00117 ldw ra,4(sp)
802cb90: df000017 ldw fp,0(sp)
802cb94: dec00204 addi sp,sp,8
802cb98: f800283a ret
0802cb9c <t_send>:
int
t_send(long s,
char * buf,
int len,
int flags)
{
802cb9c: defff104 addi sp,sp,-60
802cba0: dfc00e15 stw ra,56(sp)
802cba4: df000d15 stw fp,52(sp)
802cba8: df000d04 addi fp,sp,52
802cbac: e13ff815 stw r4,-32(fp)
802cbb0: e17ff715 stw r5,-36(fp)
802cbb4: e1bff615 stw r6,-40(fp)
802cbb8: e1fff515 stw r7,-44(fp)
struct socket * so;
int e; /* error holder */
int total_sent = 0;
802cbbc: e03fff15 stw zero,-4(fp)
int maxpkt;
int sendlen;
int sent;
so = LONG2SO(s);
802cbc0: e0bff817 ldw r2,-32(fp)
802cbc4: 10bffc04 addi r2,r2,-16
802cbc8: 100490ba slli r2,r2,2
802cbcc: e0bffd15 stw r2,-12(fp)
#ifdef SOC_CHECK_ALWAYS
SOC_CHECK(so);
#endif
if ((so->so_state & SO_IO_OK) != SS_ISCONNECTED)
802cbd0: e0bffd17 ldw r2,-12(fp)
802cbd4: 1080088b ldhu r2,34(r2)
802cbd8: 10bfffcc andi r2,r2,65535
802cbdc: 1080038c andi r2,r2,14
802cbe0: 108000a0 cmpeqi r2,r2,2
802cbe4: 1000051e bne r2,zero,802cbfc <t_send+0x60>
{
so->so_error = EPIPE;
802cbe8: e0bffd17 ldw r2,-12(fp)
802cbec: 00c00804 movi r3,32
802cbf0: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802cbf4: 00bfffc4 movi r2,-1
802cbf8: 00006306 br 802cd88 <t_send+0x1ec>
}
so->so_error = 0;
802cbfc: e0bffd17 ldw r2,-12(fp)
802cc00: 10000615 stw zero,24(r2)
/* If this is not a stream socket, assume it is bound and pass to
* t_sendto() with a null sockaddr
*/
if (so->so_type != SOCK_STREAM)
802cc04: e0bffd17 ldw r2,-12(fp)
802cc08: 10800983 ldbu r2,38(r2)
802cc0c: 10803fcc andi r2,r2,255
802cc10: 1080201c xori r2,r2,128
802cc14: 10bfe004 addi r2,r2,-128
802cc18: 10800060 cmpeqi r2,r2,1
802cc1c: 1000081e bne r2,zero,802cc40 <t_send+0xa4>
return(t_sendto(s, buf, len, flags, NULL, 0));
802cc20: d8000115 stw zero,4(sp)
802cc24: d8000015 stw zero,0(sp)
802cc28: e1fff517 ldw r7,-44(fp)
802cc2c: e1bff617 ldw r6,-40(fp)
802cc30: e17ff717 ldw r5,-36(fp)
802cc34: e13ff817 ldw r4,-32(fp)
802cc38: 802c9ac0 call 802c9ac <t_sendto>
802cc3c: 00005206 br 802cd88 <t_send+0x1ec>
maxpkt = TCP_MSS;
802cc40: 00816d04 movi r2,1460
802cc44: e0bffe15 stw r2,-8(fp)
if(so->so_pcb)
802cc48: e0bffd17 ldw r2,-12(fp)
802cc4c: 10800117 ldw r2,4(r2)
802cc50: 10004826 beq r2,zero,802cd74 <t_send+0x1d8>
{
struct tcpcb * tp;
tp = intotcpcb(so->so_pcb); /* get tcp structure with mss */
802cc54: e0bffd17 ldw r2,-12(fp)
802cc58: 10800117 ldw r2,4(r2)
802cc5c: 10800917 ldw r2,36(r2)
802cc60: e0bffc15 stw r2,-16(fp)
if(tp->t_maxseg) /* Make sure it's set */
802cc64: e0bffc17 ldw r2,-16(fp)
802cc68: 10800a0b ldhu r2,40(r2)
802cc6c: 10bfffcc andi r2,r2,65535
802cc70: 10004026 beq r2,zero,802cd74 <t_send+0x1d8>
maxpkt = tp->t_maxseg;
802cc74: e0bffc17 ldw r2,-16(fp)
802cc78: 10800a0b ldhu r2,40(r2)
802cc7c: 10bfffcc andi r2,r2,65535
802cc80: e0bffe15 stw r2,-8(fp)
}
IN_PROFILER(PF_TCP, PF_ENTRY); /* measure time in TCP */
while (len)
802cc84: 00003b06 br 802cd74 <t_send+0x1d8>
{
if (len > maxpkt)
802cc88: e0bff617 ldw r2,-40(fp)
802cc8c: e0fffe17 ldw r3,-8(fp)
802cc90: 1880030e bge r3,r2,802cca0 <t_send+0x104>
sendlen = maxpkt; /* take biggest block we can */
802cc94: e0bffe17 ldw r2,-8(fp)
802cc98: e0bff915 stw r2,-28(fp)
802cc9c: 00000206 br 802cca8 <t_send+0x10c>
else
sendlen = len;
802cca0: e0bff617 ldw r2,-40(fp)
802cca4: e0bff915 stw r2,-28(fp)
sent = sendlen;
802cca8: e0bff917 ldw r2,-28(fp)
802ccac: e0bffb15 stw r2,-20(fp)
LOCK_NET_RESOURCE(NET_RESID);
802ccb0: 0009883a mov r4,zero
802ccb4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
e = sosend (so, NULL, buf, &sendlen, flags);
802ccb8: e0fff904 addi r3,fp,-28
802ccbc: e0bff517 ldw r2,-44(fp)
802ccc0: d8800015 stw r2,0(sp)
802ccc4: 180f883a mov r7,r3
802ccc8: e1bff717 ldw r6,-36(fp)
802cccc: 000b883a mov r5,zero
802ccd0: e13ffd17 ldw r4,-12(fp)
802ccd4: 802d9340 call 802d934 <sosend>
802ccd8: e0bffa15 stw r2,-24(fp)
UNLOCK_NET_RESOURCE(NET_RESID);
802ccdc: 0009883a mov r4,zero
802cce0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (e != 0) /* sock_sendit failed? */
802cce4: e0bffa17 ldw r2,-24(fp)
802cce8: 10001026 beq r2,zero,802cd2c <t_send+0x190>
{
/* if we simply ran out of bufs, report back to caller. */
if ((e == ENOBUFS) || (e == EWOULDBLOCK))
802ccec: e0bffa17 ldw r2,-24(fp)
802ccf0: 10801a60 cmpeqi r2,r2,105
802ccf4: 1000031e bne r2,zero,802cd04 <t_send+0x168>
802ccf8: e0bffa17 ldw r2,-24(fp)
802ccfc: 108002d8 cmpnei r2,r2,11
802cd00: 1000051e bne r2,zero,802cd18 <t_send+0x17c>
/* if we actually sent something before running out
* of buffers, report what we sent;
* else, report the error and let the application
* retry the call later
*/
if (total_sent != 0)
802cd04: e0bfff17 ldw r2,-4(fp)
802cd08: 10000326 beq r2,zero,802cd18 <t_send+0x17c>
{
so->so_error = 0;
802cd0c: e0bffd17 ldw r2,-12(fp)
802cd10: 10000615 stw zero,24(r2)
break; /* break out of while(len) loop */
802cd14: 00001b06 br 802cd84 <t_send+0x1e8>
}
}
so->so_error = e;
802cd18: e0bffd17 ldw r2,-12(fp)
802cd1c: e0fffa17 ldw r3,-24(fp)
802cd20: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802cd24: 00bfffc4 movi r2,-1
802cd28: 00001706 br 802cd88 <t_send+0x1ec>
}
/* if we can't send anymore, return now */
if (sendlen != 0)
802cd2c: e0bff917 ldw r2,-28(fp)
802cd30: 1000131e bne r2,zero,802cd80 <t_send+0x1e4>
break; /* break out of while(len) loop */
/* adjust numbers & pointers, and go do next send loop */
sent -= sendlen; /* subtract anything that didn't get sent */
802cd34: e0bff917 ldw r2,-28(fp)
802cd38: e0fffb17 ldw r3,-20(fp)
802cd3c: 1885c83a sub r2,r3,r2
802cd40: e0bffb15 stw r2,-20(fp)
buf += sent;
802cd44: e0bffb17 ldw r2,-20(fp)
802cd48: e0fff717 ldw r3,-36(fp)
802cd4c: 1885883a add r2,r3,r2
802cd50: e0bff715 stw r2,-36(fp)
len -= sent;
802cd54: e0fff617 ldw r3,-40(fp)
802cd58: e0bffb17 ldw r2,-20(fp)
802cd5c: 1885c83a sub r2,r3,r2
802cd60: e0bff615 stw r2,-40(fp)
total_sent += sent;
802cd64: e0ffff17 ldw r3,-4(fp)
802cd68: e0bffb17 ldw r2,-20(fp)
802cd6c: 1885883a add r2,r3,r2
802cd70: e0bfff15 stw r2,-4(fp)
while (len)
802cd74: e0bff617 ldw r2,-40(fp)
802cd78: 103fc31e bne r2,zero,802cc88 <t_send+0xec>
802cd7c: 00000106 br 802cd84 <t_send+0x1e8>
break; /* break out of while(len) loop */
802cd80: 0001883a nop
}
IN_PROFILER(PF_TCP, PF_EXIT); /* measure time in TCP */
return total_sent;
802cd84: e0bfff17 ldw r2,-4(fp)
}
802cd88: e037883a mov sp,fp
802cd8c: dfc00117 ldw ra,4(sp)
802cd90: df000017 ldw fp,0(sp)
802cd94: dec00204 addi sp,sp,8
802cd98: f800283a ret
0802cd9c <t_shutdown>:
* RETURNS:
*/
int
t_shutdown(long s, int how)
{
802cd9c: defff904 addi sp,sp,-28
802cda0: dfc00615 stw ra,24(sp)
802cda4: df000515 stw fp,20(sp)
802cda8: df000504 addi fp,sp,20
802cdac: e13ffc15 stw r4,-16(fp)
802cdb0: e17ffb15 stw r5,-20(fp)
struct socket *so;
int err;
so = LONG2SO(s);
802cdb4: e0bffc17 ldw r2,-16(fp)
802cdb8: 10bffc04 addi r2,r2,-16
802cdbc: 100490ba slli r2,r2,2
802cdc0: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802cdc4: 008201b4 movhi r2,2054
802cdc8: 10b87104 addi r2,r2,-7740
802cdcc: e0bfff15 stw r2,-4(fp)
802cdd0: 00000606 br 802cdec <t_shutdown+0x50>
802cdd4: e0ffff17 ldw r3,-4(fp)
802cdd8: e0bffe17 ldw r2,-8(fp)
802cddc: 18800626 beq r3,r2,802cdf8 <t_shutdown+0x5c>
802cde0: e0bfff17 ldw r2,-4(fp)
802cde4: 10800017 ldw r2,0(r2)
802cde8: e0bfff15 stw r2,-4(fp)
802cdec: e0bfff17 ldw r2,-4(fp)
802cdf0: 103ff81e bne r2,zero,802cdd4 <t_shutdown+0x38>
802cdf4: 00000106 br 802cdfc <t_shutdown+0x60>
802cdf8: 0001883a nop
802cdfc: e0ffff17 ldw r3,-4(fp)
802ce00: e0bffe17 ldw r2,-8(fp)
802ce04: 18800326 beq r3,r2,802ce14 <t_shutdown+0x78>
802ce08: 8028cd40 call 8028cd4 <dtrap>
802ce0c: 00bfffc4 movi r2,-1
802ce10: 00001206 br 802ce5c <t_shutdown+0xc0>
so->so_error = 0;
802ce14: e0bffe17 ldw r2,-8(fp)
802ce18: 10000615 stw zero,24(r2)
INET_TRACE (INETM_SOCKET, ("INET:shutdown so %x how %d\n", so, how));
LOCK_NET_RESOURCE(NET_RESID);
802ce1c: 0009883a mov r4,zero
802ce20: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
err = soshutdown(so, how);
802ce24: e17ffb17 ldw r5,-20(fp)
802ce28: e13ffe17 ldw r4,-8(fp)
802ce2c: 802e5ec0 call 802e5ec <soshutdown>
802ce30: e0bffd15 stw r2,-12(fp)
UNLOCK_NET_RESOURCE(NET_RESID);
802ce34: 0009883a mov r4,zero
802ce38: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (err != 0)
802ce3c: e0bffd17 ldw r2,-12(fp)
802ce40: 10000526 beq r2,zero,802ce58 <t_shutdown+0xbc>
{
so->so_error = err;
802ce44: e0bffe17 ldw r2,-8(fp)
802ce48: e0fffd17 ldw r3,-12(fp)
802ce4c: 10c00615 stw r3,24(r2)
return SOCKET_ERROR;
802ce50: 00bfffc4 movi r2,-1
802ce54: 00000106 br 802ce5c <t_shutdown+0xc0>
}
return 0;
802ce58: 0005883a mov r2,zero
}
802ce5c: e037883a mov sp,fp
802ce60: dfc00117 ldw ra,4(sp)
802ce64: df000017 ldw fp,0(sp)
802ce68: dec00204 addi sp,sp,8
802ce6c: f800283a ret
0802ce70 <t_socketclose>:
* RETURNS:
*/
int
t_socketclose(long s)
{
802ce70: defffa04 addi sp,sp,-24
802ce74: dfc00515 stw ra,20(sp)
802ce78: df000415 stw fp,16(sp)
802ce7c: df000404 addi fp,sp,16
802ce80: e13ffc15 stw r4,-16(fp)
struct socket * so;
int err;
so = LONG2SO(s);
802ce84: e0bffc17 ldw r2,-16(fp)
802ce88: 10bffc04 addi r2,r2,-16
802ce8c: 100490ba slli r2,r2,2
802ce90: e0bffe15 stw r2,-8(fp)
SOC_CHECK(so);
802ce94: 008201b4 movhi r2,2054
802ce98: 10b87104 addi r2,r2,-7740
802ce9c: e0bfff15 stw r2,-4(fp)
802cea0: 00000606 br 802cebc <t_socketclose+0x4c>
802cea4: e0ffff17 ldw r3,-4(fp)
802cea8: e0bffe17 ldw r2,-8(fp)
802ceac: 18800626 beq r3,r2,802cec8 <t_socketclose+0x58>
802ceb0: e0bfff17 ldw r2,-4(fp)
802ceb4: 10800017 ldw r2,0(r2)
802ceb8: e0bfff15 stw r2,-4(fp)
802cebc: e0bfff17 ldw r2,-4(fp)
802cec0: 103ff81e bne r2,zero,802cea4 <t_socketclose+0x34>
802cec4: 00000106 br 802cecc <t_socketclose+0x5c>
802cec8: 0001883a nop
802cecc: e0ffff17 ldw r3,-4(fp)
802ced0: e0bffe17 ldw r2,-8(fp)
802ced4: 18800326 beq r3,r2,802cee4 <t_socketclose+0x74>
802ced8: 8028cd40 call 8028cd4 <dtrap>
802cedc: 00bfffc4 movi r2,-1
802cee0: 00000e06 br 802cf1c <t_socketclose+0xac>
so->so_error = 0;
802cee4: e0bffe17 ldw r2,-8(fp)
802cee8: 10000615 stw zero,24(r2)
INET_TRACE ((INETM_CLOSE|INETM_SOCKET), ("INET:close, so %lx\n",so));
LOCK_NET_RESOURCE(NET_RESID);
802ceec: 0009883a mov r4,zero
802cef0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
err = soclose(so);
802cef4: e13ffe17 ldw r4,-8(fp)
802cef8: 802d4340 call 802d434 <soclose>
802cefc: e0bffd15 stw r2,-12(fp)
UNLOCK_NET_RESOURCE(NET_RESID);
802cf00: 0009883a mov r4,zero
802cf04: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (err != 0)
802cf08: e0bffd17 ldw r2,-12(fp)
802cf0c: 10000226 beq r2,zero,802cf18 <t_socketclose+0xa8>
{
/* do not do the following assignment since the socket structure
addressed by so has been freed by this point, jharan 12-10-98 */
/* so->so_error = err; */
return SOCKET_ERROR;
802cf10: 00bfffc4 movi r2,-1
802cf14: 00000106 br 802cf1c <t_socketclose+0xac>
}
return 0;
802cf18: 0005883a mov r2,zero
}
802cf1c: e037883a mov sp,fp
802cf20: dfc00117 ldw ra,4(sp)
802cf24: df000017 ldw fp,0(sp)
802cf28: dec00204 addi sp,sp,8
802cf2c: f800283a ret
0802cf30 <sockargs>:
static struct mbuf *
sockargs (void * arg,
int arglen,
int type)
{
802cf30: defffa04 addi sp,sp,-24
802cf34: dfc00515 stw ra,20(sp)
802cf38: df000415 stw fp,16(sp)
802cf3c: df000404 addi fp,sp,16
802cf40: e13ffe15 stw r4,-8(fp)
802cf44: e17ffd15 stw r5,-12(fp)
802cf48: e1bffc15 stw r6,-16(fp)
struct mbuf * m;
LOCK_NET_RESOURCE(NET_RESID); /* protect mfreeq */
802cf4c: 0009883a mov r4,zero
802cf50: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
m = m_getwithdata (type, arglen);
802cf54: e17ffd17 ldw r5,-12(fp)
802cf58: e13ffc17 ldw r4,-16(fp)
802cf5c: 8029a700 call 8029a70 <m_getnbuf>
802cf60: e0bfff15 stw r2,-4(fp)
UNLOCK_NET_RESOURCE(NET_RESID);
802cf64: 0009883a mov r4,zero
802cf68: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (m == NULL)
802cf6c: e0bfff17 ldw r2,-4(fp)
802cf70: 1000021e bne r2,zero,802cf7c <sockargs+0x4c>
return NULL;
802cf74: 0005883a mov r2,zero
802cf78: 00000b06 br 802cfa8 <sockargs+0x78>
m->m_len = arglen;
802cf7c: e0fffd17 ldw r3,-12(fp)
802cf80: e0bfff17 ldw r2,-4(fp)
802cf84: 10c00215 stw r3,8(r2)
MEMCPY(mtod (m, char *), arg, arglen);
802cf88: e0bfff17 ldw r2,-4(fp)
802cf8c: 10800317 ldw r2,12(r2)
802cf90: e0fffd17 ldw r3,-12(fp)
802cf94: 180d883a mov r6,r3
802cf98: e17ffe17 ldw r5,-8(fp)
802cf9c: 1009883a mov r4,r2
802cfa0: 80086b80 call 80086b8 <memcpy>
return m;
802cfa4: e0bfff17 ldw r2,-4(fp)
}
802cfa8: e037883a mov sp,fp
802cfac: dfc00117 ldw ra,4(sp)
802cfb0: df000017 ldw fp,0(sp)
802cfb4: dec00204 addi sp,sp,8
802cfb8: f800283a ret
0802cfbc <t_errno>:
* ENOTSOCK if socket not found
*/
int
t_errno(long s)
{
802cfbc: defffa04 addi sp,sp,-24
802cfc0: dfc00515 stw ra,20(sp)
802cfc4: df000415 stw fp,16(sp)
802cfc8: df000404 addi fp,sp,16
802cfcc: e13ffc15 stw r4,-16(fp)
struct socket *so = LONG2SO(s);
802cfd0: e0bffc17 ldw r2,-16(fp)
802cfd4: 10bffc04 addi r2,r2,-16
802cfd8: 100490ba slli r2,r2,2
802cfdc: e0bffd15 stw r2,-12(fp)
struct socket *tmp;
int errcode = ENOTSOCK;
802cfe0: 00801b04 movi r2,108
802cfe4: e0bffe15 stw r2,-8(fp)
LOCK_NET_RESOURCE(NET_RESID); /* protect soq */
802cfe8: 0009883a mov r4,zero
802cfec: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/* search socket queue for passed socket. This routine should
* not use SOC_CHECK since it can be ifdeffed out, and we must
* be ready to return EPIPE if the socket does not exist.
*/
for (tmp = (struct socket *)(&soq); tmp; tmp = tmp->next)
802cff0: 008201b4 movhi r2,2054
802cff4: 10b87104 addi r2,r2,-7740
802cff8: e0bfff15 stw r2,-4(fp)
802cffc: 00000a06 br 802d028 <t_errno+0x6c>
{
if (tmp == so) /* found socket, return error */
802d000: e0ffff17 ldw r3,-4(fp)
802d004: e0bffd17 ldw r2,-12(fp)
802d008: 1880041e bne r3,r2,802d01c <t_errno+0x60>
{
errcode = so->so_error;
802d00c: e0bffd17 ldw r2,-12(fp)
802d010: 10800617 ldw r2,24(r2)
802d014: e0bffe15 stw r2,-8(fp)
break;
802d018: 00000506 br 802d030 <t_errno+0x74>
for (tmp = (struct socket *)(&soq); tmp; tmp = tmp->next)
802d01c: e0bfff17 ldw r2,-4(fp)
802d020: 10800017 ldw r2,0(r2)
802d024: e0bfff15 stw r2,-4(fp)
802d028: e0bfff17 ldw r2,-4(fp)
802d02c: 103ff41e bne r2,zero,802d000 <t_errno+0x44>
}
}
UNLOCK_NET_RESOURCE(NET_RESID);
802d030: 0009883a mov r4,zero
802d034: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return errcode;
802d038: e0bffe17 ldw r2,-8(fp)
}
802d03c: e037883a mov sp,fp
802d040: dfc00117 ldw ra,4(sp)
802d044: df000017 ldw fp,0(sp)
802d048: dec00204 addi sp,sp,8
802d04c: f800283a ret
0802d050 <socreate>:
* RETURNS:
*/
struct socket *
socreate (int dom, int type, int proto)
{
802d050: defff704 addi sp,sp,-36
802d054: dfc00815 stw ra,32(sp)
802d058: df000715 stw fp,28(sp)
802d05c: df000704 addi fp,sp,28
802d060: e13ffb15 stw r4,-20(fp)
802d064: e17ffa15 stw r5,-24(fp)
802d068: e1bff915 stw r6,-28(fp)
struct protosw *prp;
struct socket *so;
int error;
int rc;
if (proto)
802d06c: e0bff917 ldw r2,-28(fp)
802d070: 10000626 beq r2,zero,802d08c <socreate+0x3c>
prp = pffindproto(dom, proto, type);
802d074: e1bffa17 ldw r6,-24(fp)
802d078: e17ff917 ldw r5,-28(fp)
802d07c: e13ffb17 ldw r4,-20(fp)
802d080: 80299a40 call 80299a4 <pffindproto>
802d084: e0bfff15 stw r2,-4(fp)
802d088: 00000406 br 802d09c <socreate+0x4c>
else
prp = pffindtype(dom, type);
802d08c: e17ffa17 ldw r5,-24(fp)
802d090: e13ffb17 ldw r4,-20(fp)
802d094: 80299140 call 8029914 <pffindtype>
802d098: e0bfff15 stw r2,-4(fp)
if (prp == 0)
802d09c: e0bfff17 ldw r2,-4(fp)
802d0a0: 1000021e bne r2,zero,802d0ac <socreate+0x5c>
return NULL;
802d0a4: 0005883a mov r2,zero
802d0a8: 00004e06 br 802d1e4 <socreate+0x194>
if (prp->pr_type != type)
802d0ac: e0bfff17 ldw r2,-4(fp)
802d0b0: 1080000b ldhu r2,0(r2)
802d0b4: 10bfffcc andi r2,r2,65535
802d0b8: 10a0001c xori r2,r2,32768
802d0bc: 10a00004 addi r2,r2,-32768
802d0c0: e0fffa17 ldw r3,-24(fp)
802d0c4: 18800226 beq r3,r2,802d0d0 <socreate+0x80>
return NULL;
802d0c8: 0005883a mov r2,zero
802d0cc: 00004506 br 802d1e4 <socreate+0x194>
if ((so = SOC_ALLOC (sizeof (*so))) == NULL)
802d0d0: 01002104 movi r4,132
802d0d4: 802982c0 call 802982c <npalloc>
802d0d8: e0bffe15 stw r2,-8(fp)
802d0dc: e0bffe17 ldw r2,-8(fp)
802d0e0: 1000021e bne r2,zero,802d0ec <socreate+0x9c>
return NULL;
802d0e4: 0005883a mov r2,zero
802d0e8: 00003e06 br 802d1e4 <socreate+0x194>
so->next = NULL;
802d0ec: e0bffe17 ldw r2,-8(fp)
802d0f0: 10000015 stw zero,0(r2)
putq(&soq,(qp)so);
802d0f4: e17ffe17 ldw r5,-8(fp)
802d0f8: 010201b4 movhi r4,2054
802d0fc: 21387104 addi r4,r4,-7740
802d100: 80289900 call 8028990 <putq>
so->so_options = socket_defaults;
802d104: d0a01c0b ldhu r2,-32656(gp)
802d108: 10ffffcc andi r3,r2,65535
802d10c: e0bffe17 ldw r2,-8(fp)
802d110: 10c00415 stw r3,16(r2)
so->so_domain = dom;
802d114: e0bffe17 ldw r2,-8(fp)
802d118: e0fffb17 ldw r3,-20(fp)
802d11c: 10c00515 stw r3,20(r2)
so->so_state = 0;
802d120: e0bffe17 ldw r2,-8(fp)
802d124: 1000088d sth zero,34(r2)
so->so_type = (char)type;
802d128: e0bffa17 ldw r2,-24(fp)
802d12c: 1007883a mov r3,r2
802d130: e0bffe17 ldw r2,-8(fp)
802d134: 10c00985 stb r3,38(r2)
so->so_proto = prp;
802d138: e0bffe17 ldw r2,-8(fp)
802d13c: e0ffff17 ldw r3,-4(fp)
802d140: 10c00215 stw r3,8(r2)
#ifdef IP_MULTICAST
so->inp_moptions = NULL;
802d144: e0bffe17 ldw r2,-8(fp)
802d148: 10000315 stw zero,12(r2)
#endif /* IP_MULTICAST */
so->so_req = PRU_ATTACH;
802d14c: e0bffe17 ldw r2,-8(fp)
802d150: 10000715 stw zero,28(r2)
error = (*prp->pr_usrreq)(so,(struct mbuf *)0, LONG2MBUF((long)proto));
802d154: e0bfff17 ldw r2,-4(fp)
802d158: 10800317 ldw r2,12(r2)
802d15c: e0fff917 ldw r3,-28(fp)
802d160: 180d883a mov r6,r3
802d164: 000b883a mov r5,zero
802d168: e13ffe17 ldw r4,-8(fp)
802d16c: 103ee83a callr r2
802d170: e0bffd15 stw r2,-12(fp)
if (error) goto bad;
802d174: e0bffd17 ldw r2,-12(fp)
802d178: 10000a1e bne r2,zero,802d1a4 <socreate+0x154>
if (so_evtmap)
802d17c: d0a09a03 ldbu r2,-32152(gp)
802d180: 10803fcc andi r2,r2,255
802d184: 10001626 beq r2,zero,802d1e0 <socreate+0x190>
{
rc = (*so_evtmap_create) (so);
802d188: d0a09817 ldw r2,-32160(gp)
802d18c: e13ffe17 ldw r4,-8(fp)
802d190: 103ee83a callr r2
802d194: e0bffc15 stw r2,-16(fp)
if (rc != 0)
802d198: e0bffc17 ldw r2,-16(fp)
802d19c: 10000c26 beq r2,zero,802d1d0 <socreate+0x180>
{
bad:
802d1a0: 00000106 br 802d1a8 <socreate+0x158>
if (error) goto bad;
802d1a4: 0001883a nop
so->so_state |= SS_NOFDREF;
802d1a8: e0bffe17 ldw r2,-8(fp)
802d1ac: 1080088b ldhu r2,34(r2)
802d1b0: 10800054 ori r2,r2,1
802d1b4: 1007883a mov r3,r2
802d1b8: e0bffe17 ldw r2,-8(fp)
802d1bc: 10c0088d sth r3,34(r2)
sofree (so);
802d1c0: e13ffe17 ldw r4,-8(fp)
802d1c4: 802d3240 call 802d324 <sofree>
return NULL;
802d1c8: 0005883a mov r2,zero
802d1cc: 00000506 br 802d1e4 <socreate+0x194>
/*
* Altera Niche Stack Nios port modification:
* Remove (void *) cast since -> owner is now TK_OBJECT
* to fix build warning.
*/
so->owner = TK_THIS;
802d1d0: 8027c780 call 8027c78 <TK_OSTaskQuery>
802d1d4: 1007883a mov r3,r2
802d1d8: e0bffe17 ldw r2,-8(fp)
802d1dc: 10c02005 stb r3,128(r2)
}
return so;
802d1e0: e0bffe17 ldw r2,-8(fp)
}
802d1e4: e037883a mov sp,fp
802d1e8: dfc00117 ldw ra,4(sp)
802d1ec: df000017 ldw fp,0(sp)
802d1f0: dec00204 addi sp,sp,8
802d1f4: f800283a ret
0802d1f8 <sobind>:
*/
int
sobind(struct socket * so,
struct mbuf * nam)
{
802d1f8: defffb04 addi sp,sp,-20
802d1fc: dfc00415 stw ra,16(sp)
802d200: df000315 stw fp,12(sp)
802d204: df000304 addi fp,sp,12
802d208: e13ffe15 stw r4,-8(fp)
802d20c: e17ffd15 stw r5,-12(fp)
int error;
so->so_req = PRU_BIND;
802d210: e0bffe17 ldw r2,-8(fp)
802d214: 00c00084 movi r3,2
802d218: 10c00715 stw r3,28(r2)
error = (*so->so_proto->pr_usrreq)(so, (struct mbuf *)0, nam);
802d21c: e0bffe17 ldw r2,-8(fp)
802d220: 10800217 ldw r2,8(r2)
802d224: 10800317 ldw r2,12(r2)
802d228: e1bffd17 ldw r6,-12(fp)
802d22c: 000b883a mov r5,zero
802d230: e13ffe17 ldw r4,-8(fp)
802d234: 103ee83a callr r2
802d238: e0bfff15 stw r2,-4(fp)
return (error);
802d23c: e0bfff17 ldw r2,-4(fp)
}
802d240: e037883a mov sp,fp
802d244: dfc00117 ldw ra,4(sp)
802d248: df000017 ldw fp,0(sp)
802d24c: dec00204 addi sp,sp,8
802d250: f800283a ret
0802d254 <solisten>:
*/
int
solisten(struct socket * so,
int backlog)
{
802d254: defffb04 addi sp,sp,-20
802d258: dfc00415 stw ra,16(sp)
802d25c: df000315 stw fp,12(sp)
802d260: df000304 addi fp,sp,12
802d264: e13ffe15 stw r4,-8(fp)
802d268: e17ffd15 stw r5,-12(fp)
int error;
so->so_req = PRU_LISTEN;
802d26c: e0bffe17 ldw r2,-8(fp)
802d270: 00c000c4 movi r3,3
802d274: 10c00715 stw r3,28(r2)
error = (*so->so_proto->pr_usrreq)(so,
802d278: e0bffe17 ldw r2,-8(fp)
802d27c: 10800217 ldw r2,8(r2)
802d280: 10800317 ldw r2,12(r2)
802d284: 000d883a mov r6,zero
802d288: 000b883a mov r5,zero
802d28c: e13ffe17 ldw r4,-8(fp)
802d290: 103ee83a callr r2
802d294: e0bfff15 stw r2,-4(fp)
(struct mbuf *)0, (struct mbuf *)0);
if (error)
802d298: e0bfff17 ldw r2,-4(fp)
802d29c: 10000226 beq r2,zero,802d2a8 <solisten+0x54>
{
return (error);
802d2a0: e0bfff17 ldw r2,-4(fp)
802d2a4: 00001a06 br 802d310 <solisten+0xbc>
}
if (so->so_q == 0)
802d2a8: e0bffe17 ldw r2,-8(fp)
802d2ac: 10801d17 ldw r2,116(r2)
802d2b0: 10000b1e bne r2,zero,802d2e0 <solisten+0x8c>
{
so->so_q = so;
802d2b4: e0bffe17 ldw r2,-8(fp)
802d2b8: e0fffe17 ldw r3,-8(fp)
802d2bc: 10c01d15 stw r3,116(r2)
so->so_q0 = so;
802d2c0: e0bffe17 ldw r2,-8(fp)
802d2c4: e0fffe17 ldw r3,-8(fp)
802d2c8: 10c01c15 stw r3,112(r2)
so->so_options |= SO_ACCEPTCONN;
802d2cc: e0bffe17 ldw r2,-8(fp)
802d2d0: 10800417 ldw r2,16(r2)
802d2d4: 10c00094 ori r3,r2,2
802d2d8: e0bffe17 ldw r2,-8(fp)
802d2dc: 10c00415 stw r3,16(r2)
}
if (backlog < 0)
802d2e0: e0bffd17 ldw r2,-12(fp)
802d2e4: 1000010e bge r2,zero,802d2ec <solisten+0x98>
backlog = 0;
802d2e8: e03ffd15 stw zero,-12(fp)
so->so_qlimit = (char)MIN(backlog, SOMAXCONN);
802d2ec: e0bffd17 ldw r2,-12(fp)
802d2f0: 10800188 cmpgei r2,r2,6
802d2f4: 1000021e bne r2,zero,802d300 <solisten+0xac>
802d2f8: e0bffd17 ldw r2,-12(fp)
802d2fc: 00000106 br 802d304 <solisten+0xb0>
802d300: 00800144 movi r2,5
802d304: e0fffe17 ldw r3,-8(fp)
802d308: 18801e85 stb r2,122(r3)
return 0;
802d30c: 0005883a mov r2,zero
}
802d310: e037883a mov sp,fp
802d314: dfc00117 ldw ra,4(sp)
802d318: df000017 ldw fp,0(sp)
802d31c: dec00204 addi sp,sp,8
802d320: f800283a ret
0802d324 <sofree>:
* RETURNS:
*/
void
sofree(struct socket * so)
{
802d324: defffd04 addi sp,sp,-12
802d328: dfc00215 stw ra,8(sp)
802d32c: df000115 stw fp,4(sp)
802d330: df000104 addi fp,sp,4
802d334: e13fff15 stw r4,-4(fp)
INET_TRACE (INETM_SOCKET|INETM_CLOSE,
("INET: sofree, so %lx so_pcb %lx so_state %x so_head %lx\n",
so, so->so_pcb, so->so_state, so->so_head));
if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0)
802d338: e0bfff17 ldw r2,-4(fp)
802d33c: 10800117 ldw r2,4(r2)
802d340: 1000361e bne r2,zero,802d41c <sofree+0xf8>
802d344: e0bfff17 ldw r2,-4(fp)
802d348: 1080088b ldhu r2,34(r2)
802d34c: 10bfffcc andi r2,r2,65535
802d350: 1080004c andi r2,r2,1
802d354: 10003126 beq r2,zero,802d41c <sofree+0xf8>
return;
if (so->so_head)
802d358: e0bfff17 ldw r2,-4(fp)
802d35c: 10801b17 ldw r2,108(r2)
802d360: 10000d26 beq r2,zero,802d398 <sofree+0x74>
{
if (!soqremque(so, 0) && !soqremque(so, 1))
802d364: 000b883a mov r5,zero
802d368: e13fff17 ldw r4,-4(fp)
802d36c: 802f6ec0 call 802f6ec <soqremque>
802d370: 1000071e bne r2,zero,802d390 <sofree+0x6c>
802d374: 01400044 movi r5,1
802d378: e13fff17 ldw r4,-4(fp)
802d37c: 802f6ec0 call 802f6ec <soqremque>
802d380: 1000031e bne r2,zero,802d390 <sofree+0x6c>
panic("sofree");
802d384: 01020174 movhi r4,2053
802d388: 212a7604 addi r4,r4,-22056
802d38c: 80271780 call 8027178 <panic>
so->so_head = 0;
802d390: e0bfff17 ldw r2,-4(fp)
802d394: 10001b15 stw zero,108(r2)
}
sbrelease(&so->so_snd);
802d398: e0bfff17 ldw r2,-4(fp)
802d39c: 10801204 addi r2,r2,72
802d3a0: 1009883a mov r4,r2
802d3a4: 802fab00 call 802fab0 <sbrelease>
sorflush(so);
802d3a8: e13fff17 ldw r4,-4(fp)
802d3ac: 802e6840 call 802e684 <sorflush>
_socket_free_entry (so);
#endif /* SAVE_SOCK_ENDPOINTS */
#ifdef IP_MULTICAST
/* multicast opts? */
if (so->inp_moptions)
802d3b0: e0bfff17 ldw r2,-4(fp)
802d3b4: 10800317 ldw r2,12(r2)
802d3b8: 10000426 beq r2,zero,802d3cc <sofree+0xa8>
ip_freemoptions(so->inp_moptions);
802d3bc: e0bfff17 ldw r2,-4(fp)
802d3c0: 10800317 ldw r2,12(r2)
802d3c4: 1009883a mov r4,r2
802d3c8: 803ee740 call 803ee74 <ip_freemoptions>
#endif /* IP_MULTICAST */
/* IP_TOS opts? */
if (so->so_optsPack)
802d3cc: e0bfff17 ldw r2,-4(fp)
802d3d0: 10801f17 ldw r2,124(r2)
802d3d4: 10000426 beq r2,zero,802d3e8 <sofree+0xc4>
SOCOPT_FREE(so->so_optsPack);
802d3d8: e0bfff17 ldw r2,-4(fp)
802d3dc: 10801f17 ldw r2,124(r2)
802d3e0: 1009883a mov r4,r2
802d3e4: 80298600 call 8029860 <npfree>
qdel(&soq, so); /* Delete the socket entry from the queue */
802d3e8: e17fff17 ldw r5,-4(fp)
802d3ec: 010201b4 movhi r4,2054
802d3f0: 21387104 addi r4,r4,-7740
802d3f4: 8028a400 call 8028a40 <qdel>
if (so_evtmap)
802d3f8: d0a09a03 ldbu r2,-32152(gp)
802d3fc: 10803fcc andi r2,r2,255
802d400: 10000326 beq r2,zero,802d410 <sofree+0xec>
(*so_evtmap_delete) (so);
802d404: d0a09917 ldw r2,-32156(gp)
802d408: e13fff17 ldw r4,-4(fp)
802d40c: 103ee83a callr r2
SOC_FREE(so);
802d410: e13fff17 ldw r4,-4(fp)
802d414: 80298600 call 8029860 <npfree>
802d418: 00000106 br 802d420 <sofree+0xfc>
return;
802d41c: 0001883a nop
}
802d420: e037883a mov sp,fp
802d424: dfc00117 ldw ra,4(sp)
802d428: df000017 ldw fp,0(sp)
802d42c: dec00204 addi sp,sp,8
802d430: f800283a ret
0802d434 <soclose>:
* RETURNS:
*/
int
soclose(struct socket * so)
{
802d434: defff904 addi sp,sp,-28
802d438: dfc00615 stw ra,24(sp)
802d43c: df000515 stw fp,20(sp)
802d440: df000504 addi fp,sp,20
802d444: e13ffb15 stw r4,-20(fp)
int error = 0;
802d448: e03fff15 stw zero,-4(fp)
unsigned long endtime;
/* Check whether the closing socket is in the socket queue. If it is
* not, return a EINVAL error code to the caller.
*/
for ((tmpso=(struct socket *)soq.q_head);tmpso != NULL;tmpso=tmpso->next)
802d44c: 008201b4 movhi r2,2054
802d450: 10b87117 ldw r2,-7740(r2)
802d454: e0bffe15 stw r2,-8(fp)
802d458: 00000606 br 802d474 <soclose+0x40>
{
if (so == tmpso)
802d45c: e0fffb17 ldw r3,-20(fp)
802d460: e0bffe17 ldw r2,-8(fp)
802d464: 18800626 beq r3,r2,802d480 <soclose+0x4c>
for ((tmpso=(struct socket *)soq.q_head);tmpso != NULL;tmpso=tmpso->next)
802d468: e0bffe17 ldw r2,-8(fp)
802d46c: 10800017 ldw r2,0(r2)
802d470: e0bffe15 stw r2,-8(fp)
802d474: e0bffe17 ldw r2,-8(fp)
802d478: 103ff81e bne r2,zero,802d45c <soclose+0x28>
802d47c: 00000106 br 802d484 <soclose+0x50>
break;
802d480: 0001883a nop
}
if ( tmpso == NULL)
802d484: e0bffe17 ldw r2,-8(fp)
802d488: 1000021e bne r2,zero,802d494 <soclose+0x60>
return EINVAL;
802d48c: 00800584 movi r2,22
802d490: 00009506 br 802d6e8 <soclose+0x2b4>
INET_TRACE (INETM_SOCKET|INETM_CLOSE,
("INET: soclose, so %lx so_pcb %lx so_state %x so_q %lx\n",
so, so->so_pcb, so->so_state, so->so_q));
if (so->so_options & SO_ACCEPTCONN)
802d494: e0bffb17 ldw r2,-20(fp)
802d498: 10800417 ldw r2,16(r2)
802d49c: 1080008c andi r2,r2,2
802d4a0: 10001226 beq r2,zero,802d4ec <soclose+0xb8>
{
while (so->so_q0 != so)
802d4a4: 00000406 br 802d4b8 <soclose+0x84>
(void) soabort(so->so_q0);
802d4a8: e0bffb17 ldw r2,-20(fp)
802d4ac: 10801c17 ldw r2,112(r2)
802d4b0: 1009883a mov r4,r2
802d4b4: 802d6fc0 call 802d6fc <soabort>
while (so->so_q0 != so)
802d4b8: e0bffb17 ldw r2,-20(fp)
802d4bc: 10801c17 ldw r2,112(r2)
802d4c0: e0fffb17 ldw r3,-20(fp)
802d4c4: 18bff81e bne r3,r2,802d4a8 <soclose+0x74>
while (so->so_q != so)
802d4c8: 00000406 br 802d4dc <soclose+0xa8>
(void) soabort(so->so_q);
802d4cc: e0bffb17 ldw r2,-20(fp)
802d4d0: 10801d17 ldw r2,116(r2)
802d4d4: 1009883a mov r4,r2
802d4d8: 802d6fc0 call 802d6fc <soabort>
while (so->so_q != so)
802d4dc: e0bffb17 ldw r2,-20(fp)
802d4e0: 10801d17 ldw r2,116(r2)
802d4e4: e0fffb17 ldw r3,-20(fp)
802d4e8: 18bff81e bne r3,r2,802d4cc <soclose+0x98>
}
/* for datagram-oriented sockets, dispense with further tests */
if (so->so_type != SOCK_STREAM)
802d4ec: e0bffb17 ldw r2,-20(fp)
802d4f0: 10800983 ldbu r2,38(r2)
802d4f4: 10803fcc andi r2,r2,255
802d4f8: 1080201c xori r2,r2,128
802d4fc: 10bfe004 addi r2,r2,-128
802d500: 10800060 cmpeqi r2,r2,1
802d504: 10000c1e bne r2,zero,802d538 <soclose+0x104>
{
so->so_req = PRU_DETACH;
802d508: e0bffb17 ldw r2,-20(fp)
802d50c: 00c00044 movi r3,1
802d510: 10c00715 stw r3,28(r2)
error = (*so->so_proto->pr_usrreq)(so,
802d514: e0bffb17 ldw r2,-20(fp)
802d518: 10800217 ldw r2,8(r2)
802d51c: 10800317 ldw r2,12(r2)
802d520: 000d883a mov r6,zero
802d524: 000b883a mov r5,zero
802d528: e13ffb17 ldw r4,-20(fp)
802d52c: 103ee83a callr r2
802d530: e0bfff15 stw r2,-4(fp)
(struct mbuf *)0, (struct mbuf *)0);
goto discard;
802d534: 00005d06 br 802d6ac <soclose+0x278>
}
if (so->so_pcb == 0)
802d538: e0bffb17 ldw r2,-20(fp)
802d53c: 10800117 ldw r2,4(r2)
802d540: 10005726 beq r2,zero,802d6a0 <soclose+0x26c>
goto discard;
if (so->so_state & SS_ISCONNECTED)
802d544: e0bffb17 ldw r2,-20(fp)
802d548: 1080088b ldhu r2,34(r2)
802d54c: 10bfffcc andi r2,r2,65535
802d550: 1080008c andi r2,r2,2
802d554: 10003a26 beq r2,zero,802d640 <soclose+0x20c>
{
if ((so->so_state & SS_ISDISCONNECTING) == 0)
802d558: e0bffb17 ldw r2,-20(fp)
802d55c: 1080088b ldhu r2,34(r2)
802d560: 10bfffcc andi r2,r2,65535
802d564: 1080020c andi r2,r2,8
802d568: 1000051e bne r2,zero,802d580 <soclose+0x14c>
{
error = sodisconnect(so);
802d56c: e13ffb17 ldw r4,-20(fp)
802d570: 802d89c0 call 802d89c <sodisconnect>
802d574: e0bfff15 stw r2,-4(fp)
if (error)
802d578: e0bfff17 ldw r2,-4(fp)
802d57c: 1000321e bne r2,zero,802d648 <soclose+0x214>
goto drop;
}
if (so->so_options & SO_LINGER)
802d580: e0bffb17 ldw r2,-20(fp)
802d584: 10800417 ldw r2,16(r2)
802d588: 1080200c andi r2,r2,128
802d58c: 10002126 beq r2,zero,802d614 <soclose+0x1e0>
{
if ((so->so_state & SS_ISDISCONNECTING) &&
802d590: e0bffb17 ldw r2,-20(fp)
802d594: 1080088b ldhu r2,34(r2)
802d598: 10bfffcc andi r2,r2,65535
802d59c: 1080020c andi r2,r2,8
802d5a0: 10000526 beq r2,zero,802d5b8 <soclose+0x184>
(so->so_state & SS_NBIO))
802d5a4: e0bffb17 ldw r2,-20(fp)
802d5a8: 1080088b ldhu r2,34(r2)
802d5ac: 10bfffcc andi r2,r2,65535
802d5b0: 1080400c andi r2,r2,256
if ((so->so_state & SS_ISDISCONNECTING) &&
802d5b4: 1000261e bne r2,zero,802d650 <soclose+0x21c>
{
goto drop;
}
endtime = cticks + (unsigned long)so->so_linger * TPS;
802d5b8: e0bffb17 ldw r2,-20(fp)
802d5bc: 1080080b ldhu r2,32(r2)
802d5c0: 10bfffcc andi r2,r2,65535
802d5c4: 10a0001c xori r2,r2,32768
802d5c8: 10a00004 addi r2,r2,-32768
802d5cc: 10c01924 muli r3,r2,100
802d5d0: d0a07d17 ldw r2,-32268(gp)
802d5d4: 1885883a add r2,r3,r2
802d5d8: e0bffd15 stw r2,-12(fp)
while ((so->so_state & SS_ISCONNECTED) && (cticks < endtime))
802d5dc: 00000406 br 802d5f0 <soclose+0x1bc>
{
tcp_sleep((char *)&so->so_timeo);
802d5e0: e0bffb17 ldw r2,-20(fp)
802d5e4: 10800904 addi r2,r2,36
802d5e8: 1009883a mov r4,r2
802d5ec: 8027a540 call 8027a54 <tcp_sleep>
while ((so->so_state & SS_ISCONNECTED) && (cticks < endtime))
802d5f0: e0bffb17 ldw r2,-20(fp)
802d5f4: 1080088b ldhu r2,34(r2)
802d5f8: 10bfffcc andi r2,r2,65535
802d5fc: 1080008c andi r2,r2,2
802d600: 10001426 beq r2,zero,802d654 <soclose+0x220>
802d604: d0e07d17 ldw r3,-32268(gp)
802d608: e0bffd17 ldw r2,-12(fp)
802d60c: 18bff436 bltu r3,r2,802d5e0 <soclose+0x1ac>
802d610: 00001006 br 802d654 <soclose+0x220>
{
/* If socket still has send data just return now, leaving the
* socket intact so the data can be sent. Socket should be cleaned
* up later by timers.
*/
if(so->so_snd.sb_cc)
802d614: e0bffb17 ldw r2,-20(fp)
802d618: 10801217 ldw r2,72(r2)
802d61c: 10000826 beq r2,zero,802d640 <soclose+0x20c>
{
so->so_state |= SS_NOFDREF; /* mark as OK to close */
802d620: e0bffb17 ldw r2,-20(fp)
802d624: 1080088b ldhu r2,34(r2)
802d628: 10800054 ori r2,r2,1
802d62c: 1007883a mov r3,r2
802d630: e0bffb17 ldw r2,-20(fp)
802d634: 10c0088d sth r3,34(r2)
return 0;
802d638: 0005883a mov r2,zero
802d63c: 00002a06 br 802d6e8 <soclose+0x2b4>
}
}
}
drop:
802d640: 0001883a nop
802d644: 00000306 br 802d654 <soclose+0x220>
goto drop;
802d648: 0001883a nop
802d64c: 00000106 br 802d654 <soclose+0x220>
goto drop;
802d650: 0001883a nop
if (so->so_pcb)
802d654: e0bffb17 ldw r2,-20(fp)
802d658: 10800117 ldw r2,4(r2)
802d65c: 10001226 beq r2,zero,802d6a8 <soclose+0x274>
{
int error2;
so->so_req = PRU_DETACH;
802d660: e0bffb17 ldw r2,-20(fp)
802d664: 00c00044 movi r3,1
802d668: 10c00715 stw r3,28(r2)
error2 = (*so->so_proto->pr_usrreq)(so,
802d66c: e0bffb17 ldw r2,-20(fp)
802d670: 10800217 ldw r2,8(r2)
802d674: 10800317 ldw r2,12(r2)
802d678: 000d883a mov r6,zero
802d67c: 000b883a mov r5,zero
802d680: e13ffb17 ldw r4,-20(fp)
802d684: 103ee83a callr r2
802d688: e0bffc15 stw r2,-16(fp)
(struct mbuf *)0, (struct mbuf *)0);
if (error == 0)
802d68c: e0bfff17 ldw r2,-4(fp)
802d690: 1000051e bne r2,zero,802d6a8 <soclose+0x274>
error = error2;
802d694: e0bffc17 ldw r2,-16(fp)
802d698: e0bfff15 stw r2,-4(fp)
802d69c: 00000306 br 802d6ac <soclose+0x278>
goto discard;
802d6a0: 0001883a nop
802d6a4: 00000106 br 802d6ac <soclose+0x278>
}
discard:
802d6a8: 0001883a nop
if (so->so_state & SS_NOFDREF)
802d6ac: e0bffb17 ldw r2,-20(fp)
802d6b0: 1080088b ldhu r2,34(r2)
802d6b4: 10bfffcc andi r2,r2,65535
802d6b8: 1080004c andi r2,r2,1
802d6bc: 10000126 beq r2,zero,802d6c4 <soclose+0x290>
{
/* panic("soclose"); - non-fatal - degrade to dtrap() for now */
dtrap();
802d6c0: 8028cd40 call 8028cd4 <dtrap>
}
so->so_state |= SS_NOFDREF;
802d6c4: e0bffb17 ldw r2,-20(fp)
802d6c8: 1080088b ldhu r2,34(r2)
802d6cc: 10800054 ori r2,r2,1
802d6d0: 1007883a mov r3,r2
802d6d4: e0bffb17 ldw r2,-20(fp)
802d6d8: 10c0088d sth r3,34(r2)
sofree(so);
802d6dc: e13ffb17 ldw r4,-20(fp)
802d6e0: 802d3240 call 802d324 <sofree>
return (error);
802d6e4: e0bfff17 ldw r2,-4(fp)
}
802d6e8: e037883a mov sp,fp
802d6ec: dfc00117 ldw ra,4(sp)
802d6f0: df000017 ldw fp,0(sp)
802d6f4: dec00204 addi sp,sp,8
802d6f8: f800283a ret
0802d6fc <soabort>:
* RETURNS:
*/
int
soabort(struct socket * so)
{
802d6fc: defffd04 addi sp,sp,-12
802d700: dfc00215 stw ra,8(sp)
802d704: df000115 stw fp,4(sp)
802d708: df000104 addi fp,sp,4
802d70c: e13fff15 stw r4,-4(fp)
so->so_req = PRU_ABORT;
802d710: e0bfff17 ldw r2,-4(fp)
802d714: 00c00284 movi r3,10
802d718: 10c00715 stw r3,28(r2)
return(*so->so_proto->pr_usrreq)(so, (struct mbuf *)0, (struct mbuf *)0);
802d71c: e0bfff17 ldw r2,-4(fp)
802d720: 10800217 ldw r2,8(r2)
802d724: 10800317 ldw r2,12(r2)
802d728: 000d883a mov r6,zero
802d72c: 000b883a mov r5,zero
802d730: e13fff17 ldw r4,-4(fp)
802d734: 103ee83a callr r2
}
802d738: e037883a mov sp,fp
802d73c: dfc00117 ldw ra,4(sp)
802d740: df000017 ldw fp,0(sp)
802d744: dec00204 addi sp,sp,8
802d748: f800283a ret
0802d74c <soaccept>:
*/
int
soaccept(struct socket * so,
struct mbuf * nam)
{
802d74c: defffb04 addi sp,sp,-20
802d750: dfc00415 stw ra,16(sp)
802d754: df000315 stw fp,12(sp)
802d758: df000304 addi fp,sp,12
802d75c: e13ffe15 stw r4,-8(fp)
802d760: e17ffd15 stw r5,-12(fp)
int error;
if ((so->so_state & SS_NOFDREF) == 0)
802d764: e0bffe17 ldw r2,-8(fp)
802d768: 1080088b ldhu r2,34(r2)
802d76c: 10bfffcc andi r2,r2,65535
802d770: 1080004c andi r2,r2,1
802d774: 1000031e bne r2,zero,802d784 <soaccept+0x38>
panic("soaccept");
802d778: 01020174 movhi r4,2053
802d77c: 212a7804 addi r4,r4,-22048
802d780: 80271780 call 8027178 <panic>
so->so_state &= ~SS_NOFDREF;
802d784: e0bffe17 ldw r2,-8(fp)
802d788: 10c0088b ldhu r3,34(r2)
802d78c: 00bfff84 movi r2,-2
802d790: 1884703a and r2,r3,r2
802d794: 1007883a mov r3,r2
802d798: e0bffe17 ldw r2,-8(fp)
802d79c: 10c0088d sth r3,34(r2)
so->so_req = PRU_ACCEPT;
802d7a0: e0bffe17 ldw r2,-8(fp)
802d7a4: 00c00144 movi r3,5
802d7a8: 10c00715 stw r3,28(r2)
error = (*so->so_proto->pr_usrreq)(so, (struct mbuf *)0, nam);
802d7ac: e0bffe17 ldw r2,-8(fp)
802d7b0: 10800217 ldw r2,8(r2)
802d7b4: 10800317 ldw r2,12(r2)
802d7b8: e1bffd17 ldw r6,-12(fp)
802d7bc: 000b883a mov r5,zero
802d7c0: e13ffe17 ldw r4,-8(fp)
802d7c4: 103ee83a callr r2
802d7c8: e0bfff15 stw r2,-4(fp)
return (error);
802d7cc: e0bfff17 ldw r2,-4(fp)
}
802d7d0: e037883a mov sp,fp
802d7d4: dfc00117 ldw ra,4(sp)
802d7d8: df000017 ldw fp,0(sp)
802d7dc: dec00204 addi sp,sp,8
802d7e0: f800283a ret
0802d7e4 <soconnect>:
*/
int
soconnect(struct socket * so,
struct mbuf * nam)
{
802d7e4: defffb04 addi sp,sp,-20
802d7e8: dfc00415 stw ra,16(sp)
802d7ec: df000315 stw fp,12(sp)
802d7f0: df000304 addi fp,sp,12
802d7f4: e13ffe15 stw r4,-8(fp)
802d7f8: e17ffd15 stw r5,-12(fp)
int error;
if (so->so_options & SO_ACCEPTCONN)
802d7fc: e0bffe17 ldw r2,-8(fp)
802d800: 10800417 ldw r2,16(r2)
802d804: 1080008c andi r2,r2,2
802d808: 10000226 beq r2,zero,802d814 <soconnect+0x30>
return (EOPNOTSUPP);
802d80c: 008017c4 movi r2,95
802d810: 00001d06 br 802d888 <soconnect+0xa4>
* If protocol is connection-based, can only connect once.
* Otherwise, if connected, try to disconnect first.
* This allows user to disconnect by connecting to, e.g.,
* a null address.
*/
if (so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING) &&
802d814: e0bffe17 ldw r2,-8(fp)
802d818: 1080088b ldhu r2,34(r2)
802d81c: 10bfffcc andi r2,r2,65535
802d820: 1080018c andi r2,r2,6
802d824: 10000c26 beq r2,zero,802d858 <soconnect+0x74>
((so->so_proto->pr_flags & PR_CONNREQUIRED) ||
802d828: e0bffe17 ldw r2,-8(fp)
802d82c: 10800217 ldw r2,8(r2)
802d830: 1080010b ldhu r2,4(r2)
802d834: 10bfffcc andi r2,r2,65535
802d838: 1080010c andi r2,r2,4
if (so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING) &&
802d83c: 1000031e bne r2,zero,802d84c <soconnect+0x68>
(sodisconnect(so) != 0)))
802d840: e13ffe17 ldw r4,-8(fp)
802d844: 802d89c0 call 802d89c <sodisconnect>
((so->so_proto->pr_flags & PR_CONNREQUIRED) ||
802d848: 10000326 beq r2,zero,802d858 <soconnect+0x74>
{
error = EISCONN;
802d84c: 00801fc4 movi r2,127
802d850: e0bfff15 stw r2,-4(fp)
802d854: 00000b06 br 802d884 <soconnect+0xa0>
}
else
{
so->so_req = PRU_CONNECT;
802d858: e0bffe17 ldw r2,-8(fp)
802d85c: 00c00104 movi r3,4
802d860: 10c00715 stw r3,28(r2)
error = (*so->so_proto->pr_usrreq)(so, (struct mbuf *)0, nam);
802d864: e0bffe17 ldw r2,-8(fp)
802d868: 10800217 ldw r2,8(r2)
802d86c: 10800317 ldw r2,12(r2)
802d870: e1bffd17 ldw r6,-12(fp)
802d874: 000b883a mov r5,zero
802d878: e13ffe17 ldw r4,-8(fp)
802d87c: 103ee83a callr r2
802d880: e0bfff15 stw r2,-4(fp)
}
return error;
802d884: e0bfff17 ldw r2,-4(fp)
}
802d888: e037883a mov sp,fp
802d88c: dfc00117 ldw ra,4(sp)
802d890: df000017 ldw fp,0(sp)
802d894: dec00204 addi sp,sp,8
802d898: f800283a ret
0802d89c <sodisconnect>:
* RETURNS:
*/
int
sodisconnect(struct socket * so)
{
802d89c: defffc04 addi sp,sp,-16
802d8a0: dfc00315 stw ra,12(sp)
802d8a4: df000215 stw fp,8(sp)
802d8a8: df000204 addi fp,sp,8
802d8ac: e13ffe15 stw r4,-8(fp)
int error;
INET_TRACE (INETM_SOCKET|INETM_CLOSE,
("INET: sodisconnect, so %lx so_state %x\n", so, so->so_state));
if ((so->so_state & SS_ISCONNECTED) == 0)
802d8b0: e0bffe17 ldw r2,-8(fp)
802d8b4: 1080088b ldhu r2,34(r2)
802d8b8: 10bfffcc andi r2,r2,65535
802d8bc: 1080008c andi r2,r2,2
802d8c0: 1000031e bne r2,zero,802d8d0 <sodisconnect+0x34>
{
error = ENOTCONN;
802d8c4: 00802004 movi r2,128
802d8c8: e0bfff15 stw r2,-4(fp)
goto bad;
802d8cc: 00001306 br 802d91c <sodisconnect+0x80>
}
if (so->so_state & SS_ISDISCONNECTING)
802d8d0: e0bffe17 ldw r2,-8(fp)
802d8d4: 1080088b ldhu r2,34(r2)
802d8d8: 10bfffcc andi r2,r2,65535
802d8dc: 1080020c andi r2,r2,8
802d8e0: 10000326 beq r2,zero,802d8f0 <sodisconnect+0x54>
{
error = EALREADY;
802d8e4: 00801e04 movi r2,120
802d8e8: e0bfff15 stw r2,-4(fp)
goto bad;
802d8ec: 00000b06 br 802d91c <sodisconnect+0x80>
}
so->so_req = PRU_DISCONNECT;
802d8f0: e0bffe17 ldw r2,-8(fp)
802d8f4: 00c00184 movi r3,6
802d8f8: 10c00715 stw r3,28(r2)
error = (*so->so_proto->pr_usrreq)(so, (struct mbuf *)0, (struct mbuf *)0);
802d8fc: e0bffe17 ldw r2,-8(fp)
802d900: 10800217 ldw r2,8(r2)
802d904: 10800317 ldw r2,12(r2)
802d908: 000d883a mov r6,zero
802d90c: 000b883a mov r5,zero
802d910: e13ffe17 ldw r4,-8(fp)
802d914: 103ee83a callr r2
802d918: e0bfff15 stw r2,-4(fp)
bad:
return (error);
802d91c: e0bfff17 ldw r2,-4(fp)
}
802d920: e037883a mov sp,fp
802d924: dfc00117 ldw ra,4(sp)
802d928: df000017 ldw fp,0(sp)
802d92c: dec00204 addi sp,sp,8
802d930: f800283a ret
0802d934 <sosend>:
sosend(struct socket *so,
struct mbuf *nam, /* sockaddr, if UDP socket, NULL if TCP */
char *data, /* data to send */
int *data_length, /* IN/OUT length of (remaining) data */
int flags)
{
802d934: defff204 addi sp,sp,-56
802d938: dfc00d15 stw ra,52(sp)
802d93c: df000c15 stw fp,48(sp)
802d940: df000c04 addi fp,sp,48
802d944: e13ff715 stw r4,-36(fp)
802d948: e17ff615 stw r5,-40(fp)
802d94c: e1bff515 stw r6,-44(fp)
802d950: e1fff415 stw r7,-48(fp)
struct mbuf *head = (struct mbuf *)NULL;
802d954: e03fff15 stw zero,-4(fp)
struct mbuf *m;
int space;
int resid;
int len;
int error = 0;
802d958: e03ffb15 stw zero,-20(fp)
int dontroute;
int first = 1;
802d95c: 00800044 movi r2,1
802d960: e0bffa15 stw r2,-24(fp)
resid = *data_length;
802d964: e0bff417 ldw r2,-48(fp)
802d968: 10800017 ldw r2,0(r2)
802d96c: e0bffc15 stw r2,-16(fp)
* However, space must be signed, as it might be less than 0
* if we over-committed, and we must use a signed comparison
* of space and resid. On the other hand, a negative resid
* causes us to loop sending 0-length segments to the protocol.
*/
if (resid < 0)
802d970: e0bffc17 ldw r2,-16(fp)
802d974: 1000020e bge r2,zero,802d980 <sosend+0x4c>
return (EINVAL);
802d978: 00800584 movi r2,22
802d97c: 00014006 br 802de80 <sosend+0x54c>
INET_TRACE (INETM_IO, ("INET:sosend: so %lx resid %d sb_hiwat %d so_state %x\n",
so, resid, so->so_snd.sb_hiwat, so->so_state));
if (sosendallatonce(so) && (resid > (int)so->so_snd.sb_hiwat))
802d980: e0bff717 ldw r2,-36(fp)
802d984: 10800217 ldw r2,8(r2)
802d988: 1080010b ldhu r2,4(r2)
802d98c: 10bfffcc andi r2,r2,65535
802d990: 1080004c andi r2,r2,1
802d994: 10000726 beq r2,zero,802d9b4 <sosend+0x80>
802d998: e0bff717 ldw r2,-36(fp)
802d99c: 10801317 ldw r2,76(r2)
802d9a0: 1007883a mov r3,r2
802d9a4: e0bffc17 ldw r2,-16(fp)
802d9a8: 1880020e bge r3,r2,802d9b4 <sosend+0x80>
return (EMSGSIZE);
802d9ac: 00801e84 movi r2,122
802d9b0: 00013306 br 802de80 <sosend+0x54c>
dontroute = (flags & MSG_DONTROUTE) &&
802d9b4: e0800217 ldw r2,8(fp)
802d9b8: 1080010c andi r2,r2,4
((so->so_options & SO_DONTROUTE) == 0) &&
802d9bc: 10000c26 beq r2,zero,802d9f0 <sosend+0xbc>
802d9c0: e0bff717 ldw r2,-36(fp)
802d9c4: 10800417 ldw r2,16(r2)
802d9c8: 1080040c andi r2,r2,16
dontroute = (flags & MSG_DONTROUTE) &&
802d9cc: 1000081e bne r2,zero,802d9f0 <sosend+0xbc>
(so->so_proto->pr_flags & PR_ATOMIC);
802d9d0: e0bff717 ldw r2,-36(fp)
802d9d4: 10800217 ldw r2,8(r2)
802d9d8: 1080010b ldhu r2,4(r2)
802d9dc: 10bfffcc andi r2,r2,65535
802d9e0: 1080004c andi r2,r2,1
((so->so_options & SO_DONTROUTE) == 0) &&
802d9e4: 10000226 beq r2,zero,802d9f0 <sosend+0xbc>
802d9e8: 00800044 movi r2,1
802d9ec: 00000106 br 802d9f4 <sosend+0xc0>
802d9f0: 0005883a mov r2,zero
dontroute = (flags & MSG_DONTROUTE) &&
802d9f4: e0bff915 stw r2,-28(fp)
#define snderr(errno) { error = errno; goto release; }
restart:
sblock(&so->so_snd);
802d9f8: 00000406 br 802da0c <sosend+0xd8>
802d9fc: e0bff717 ldw r2,-36(fp)
802da00: 10801904 addi r2,r2,100
802da04: 1009883a mov r4,r2
802da08: 8027a540 call 8027a54 <tcp_sleep>
802da0c: e0bff717 ldw r2,-36(fp)
802da10: 1080190b ldhu r2,100(r2)
802da14: 10bfffcc andi r2,r2,65535
802da18: 1080004c andi r2,r2,1
802da1c: 103ff71e bne r2,zero,802d9fc <sosend+0xc8>
802da20: e0bff717 ldw r2,-36(fp)
802da24: 1080190b ldhu r2,100(r2)
802da28: 10800054 ori r2,r2,1
802da2c: 1007883a mov r3,r2
802da30: e0bff717 ldw r2,-36(fp)
802da34: 10c0190d sth r3,100(r2)
do
{
if (so->so_error)
802da38: e0bff717 ldw r2,-36(fp)
802da3c: 10800617 ldw r2,24(r2)
802da40: 10000626 beq r2,zero,802da5c <sosend+0x128>
{
error = so->so_error;
802da44: e0bff717 ldw r2,-36(fp)
802da48: 10800617 ldw r2,24(r2)
802da4c: e0bffb15 stw r2,-20(fp)
so->so_error = 0; /* ??? */
802da50: e0bff717 ldw r2,-36(fp)
802da54: 10000615 stw zero,24(r2)
goto release;
802da58: 0000f906 br 802de40 <sosend+0x50c>
}
if (so->so_state & SS_CANTSENDMORE)
802da5c: e0bff717 ldw r2,-36(fp)
802da60: 1080088b ldhu r2,34(r2)
802da64: 10bfffcc andi r2,r2,65535
802da68: 1080040c andi r2,r2,16
802da6c: 10000326 beq r2,zero,802da7c <sosend+0x148>
snderr(EPIPE);
802da70: 00800804 movi r2,32
802da74: e0bffb15 stw r2,-20(fp)
802da78: 0000f106 br 802de40 <sosend+0x50c>
if ((so->so_state & SS_ISCONNECTED) == 0)
802da7c: e0bff717 ldw r2,-36(fp)
802da80: 1080088b ldhu r2,34(r2)
802da84: 10bfffcc andi r2,r2,65535
802da88: 1080008c andi r2,r2,2
802da8c: 10000e1e bne r2,zero,802dac8 <sosend+0x194>
{
if (so->so_proto->pr_flags & PR_CONNREQUIRED)
802da90: e0bff717 ldw r2,-36(fp)
802da94: 10800217 ldw r2,8(r2)
802da98: 1080010b ldhu r2,4(r2)
802da9c: 10bfffcc andi r2,r2,65535
802daa0: 1080010c andi r2,r2,4
802daa4: 10000326 beq r2,zero,802dab4 <sosend+0x180>
snderr(ENOTCONN);
802daa8: 00802004 movi r2,128
802daac: e0bffb15 stw r2,-20(fp)
802dab0: 0000e306 br 802de40 <sosend+0x50c>
if (nam == 0)
802dab4: e0bff617 ldw r2,-40(fp)
802dab8: 1000031e bne r2,zero,802dac8 <sosend+0x194>
snderr(EDESTADDRREQ);
802dabc: 00801e44 movi r2,121
802dac0: e0bffb15 stw r2,-20(fp)
802dac4: 0000de06 br 802de40 <sosend+0x50c>
}
if (flags & MSG_OOB)
802dac8: e0800217 ldw r2,8(fp)
802dacc: 1080004c andi r2,r2,1
802dad0: 10000326 beq r2,zero,802dae0 <sosend+0x1ac>
space = 1024;
802dad4: 00810004 movi r2,1024
802dad8: e0bffd15 stw r2,-12(fp)
802dadc: 00004706 br 802dbfc <sosend+0x2c8>
else
{
space = (int)sbspace(&so->so_snd);
802dae0: e0bff717 ldw r2,-36(fp)
802dae4: 10801317 ldw r2,76(r2)
802dae8: 1007883a mov r3,r2
802daec: e0bff717 ldw r2,-36(fp)
802daf0: 10801217 ldw r2,72(r2)
802daf4: 1885c83a sub r2,r3,r2
802daf8: 10000616 blt r2,zero,802db14 <sosend+0x1e0>
802dafc: e0bff717 ldw r2,-36(fp)
802db00: 10c01317 ldw r3,76(r2)
802db04: e0bff717 ldw r2,-36(fp)
802db08: 10801217 ldw r2,72(r2)
802db0c: 1885c83a sub r2,r3,r2
802db10: 00000106 br 802db18 <sosend+0x1e4>
802db14: 0005883a mov r2,zero
802db18: e0bffd15 stw r2,-12(fp)
if ((sosendallatonce(so) && (space < resid)) ||
802db1c: e0bff717 ldw r2,-36(fp)
802db20: 10800217 ldw r2,8(r2)
802db24: 1080010b ldhu r2,4(r2)
802db28: 10bfffcc andi r2,r2,65535
802db2c: 1080004c andi r2,r2,1
802db30: 10000326 beq r2,zero,802db40 <sosend+0x20c>
802db34: e0fffd17 ldw r3,-12(fp)
802db38: e0bffc17 ldw r2,-16(fp)
802db3c: 18801216 blt r3,r2,802db88 <sosend+0x254>
802db40: e0bffc17 ldw r2,-16(fp)
802db44: 10815e10 cmplti r2,r2,1400
802db48: 10002c1e bne r2,zero,802dbfc <sosend+0x2c8>
((resid >= CLBYTES) && (space < CLBYTES) &&
802db4c: e0bffd17 ldw r2,-12(fp)
802db50: 10815e08 cmpgei r2,r2,1400
802db54: 1000291e bne r2,zero,802dbfc <sosend+0x2c8>
(so->so_snd.sb_cc >= CLBYTES) &&
802db58: e0bff717 ldw r2,-36(fp)
802db5c: 10801217 ldw r2,72(r2)
((resid >= CLBYTES) && (space < CLBYTES) &&
802db60: 10815e30 cmpltui r2,r2,1400
802db64: 1000251e bne r2,zero,802dbfc <sosend+0x2c8>
((so->so_state & SS_NBIO) == 0) &&
802db68: e0bff717 ldw r2,-36(fp)
802db6c: 1080088b ldhu r2,34(r2)
802db70: 10bfffcc andi r2,r2,65535
802db74: 1080400c andi r2,r2,256
(so->so_snd.sb_cc >= CLBYTES) &&
802db78: 1000201e bne r2,zero,802dbfc <sosend+0x2c8>
((flags & MSG_DONTWAIT) == 0)))
802db7c: e0800217 ldw r2,8(fp)
802db80: 1080080c andi r2,r2,32
((so->so_state & SS_NBIO) == 0) &&
802db84: 10001d1e bne r2,zero,802dbfc <sosend+0x2c8>
{
if ((so->so_state & SS_NBIO) || (flags & MSG_DONTWAIT))
802db88: e0bff717 ldw r2,-36(fp)
802db8c: 1080088b ldhu r2,34(r2)
802db90: 10bfffcc andi r2,r2,65535
802db94: 1080400c andi r2,r2,256
802db98: 1000031e bne r2,zero,802dba8 <sosend+0x274>
802db9c: e0800217 ldw r2,8(fp)
802dba0: 1080080c andi r2,r2,32
802dba4: 10000526 beq r2,zero,802dbbc <sosend+0x288>
{
if (first)
802dba8: e0bffa17 ldw r2,-24(fp)
802dbac: 10009d26 beq r2,zero,802de24 <sosend+0x4f0>
error = EWOULDBLOCK;
802dbb0: 008002c4 movi r2,11
802dbb4: e0bffb15 stw r2,-20(fp)
goto release;
802dbb8: 00009a06 br 802de24 <sosend+0x4f0>
}
sbunlock(&so->so_snd);
802dbbc: e0bff717 ldw r2,-36(fp)
802dbc0: 10c0190b ldhu r3,100(r2)
802dbc4: 00bfff84 movi r2,-2
802dbc8: 1884703a and r2,r3,r2
802dbcc: 1007883a mov r3,r2
802dbd0: e0bff717 ldw r2,-36(fp)
802dbd4: 10c0190d sth r3,100(r2)
802dbd8: e0bff717 ldw r2,-36(fp)
802dbdc: 10801904 addi r2,r2,100
802dbe0: 1009883a mov r4,r2
802dbe4: 8027ba00 call 8027ba0 <tcp_wakeup>
sbwait(&so->so_snd);
802dbe8: e0bff717 ldw r2,-36(fp)
802dbec: 10801204 addi r2,r2,72
802dbf0: 1009883a mov r4,r2
802dbf4: 802f8e00 call 802f8e0 <sbwait>
goto restart;
802dbf8: 003f7f06 br 802d9f8 <sosend+0xc4>
}
}
if ( space <= 0 )
802dbfc: e0bffd17 ldw r2,-12(fp)
802dc00: 00805e16 blt zero,r2,802dd7c <sosend+0x448>
{
/* no space in socket send buffer - see if we can wait */
if ((so->so_state & SS_NBIO) || (flags & MSG_DONTWAIT))
802dc04: e0bff717 ldw r2,-36(fp)
802dc08: 1080088b ldhu r2,34(r2)
802dc0c: 10bfffcc andi r2,r2,65535
802dc10: 1080400c andi r2,r2,256
802dc14: 1000031e bne r2,zero,802dc24 <sosend+0x2f0>
802dc18: e0800217 ldw r2,8(fp)
802dc1c: 1080080c andi r2,r2,32
802dc20: 10000526 beq r2,zero,802dc38 <sosend+0x304>
{
if (first) /* report first error */
802dc24: e0bffa17 ldw r2,-24(fp)
802dc28: 10008026 beq r2,zero,802de2c <sosend+0x4f8>
error = EWOULDBLOCK;
802dc2c: 008002c4 movi r2,11
802dc30: e0bffb15 stw r2,-20(fp)
goto release;
802dc34: 00007d06 br 802de2c <sosend+0x4f8>
}
/* If blocking socket, let someone else run */
sbunlock(&so->so_snd);
802dc38: e0bff717 ldw r2,-36(fp)
802dc3c: 10c0190b ldhu r3,100(r2)
802dc40: 00bfff84 movi r2,-2
802dc44: 1884703a and r2,r3,r2
802dc48: 1007883a mov r3,r2
802dc4c: e0bff717 ldw r2,-36(fp)
802dc50: 10c0190d sth r3,100(r2)
802dc54: e0bff717 ldw r2,-36(fp)
802dc58: 10801904 addi r2,r2,100
802dc5c: 1009883a mov r4,r2
802dc60: 8027ba00 call 8027ba0 <tcp_wakeup>
sbwait(&so->so_snd);
802dc64: e0bff717 ldw r2,-36(fp)
802dc68: 10801204 addi r2,r2,72
802dc6c: 1009883a mov r4,r2
802dc70: 802f8e00 call 802f8e0 <sbwait>
goto restart;
802dc74: 003f6006 br 802d9f8 <sosend+0xc4>
}
while (space > 0)
{
len = resid;
802dc78: e0bffc17 ldw r2,-16(fp)
802dc7c: e0bff815 stw r2,-32(fp)
if ( so->so_type == SOCK_STREAM )
802dc80: e0bff717 ldw r2,-36(fp)
802dc84: 10800983 ldbu r2,38(r2)
802dc88: 10803fcc andi r2,r2,255
802dc8c: 1080201c xori r2,r2,128
802dc90: 10bfe004 addi r2,r2,-128
802dc94: 10800058 cmpnei r2,r2,1
802dc98: 1000171e bne r2,zero,802dcf8 <sosend+0x3c4>
{
m = m_getwithdata(MT_TXDATA, len);
802dc9c: e17ff817 ldw r5,-32(fp)
802dca0: 01000084 movi r4,2
802dca4: 8029a700 call 8029a70 <m_getnbuf>
802dca8: e0bffe15 stw r2,-8(fp)
if (!m)
802dcac: e0bffe17 ldw r2,-8(fp)
802dcb0: 1000031e bne r2,zero,802dcc0 <sosend+0x38c>
snderr(ENOBUFS);
802dcb4: 00801a44 movi r2,105
802dcb8: e0bffb15 stw r2,-20(fp)
802dcbc: 00006006 br 802de40 <sosend+0x50c>
MEMCPY(m->m_data, data, len);
802dcc0: e0bffe17 ldw r2,-8(fp)
802dcc4: 10800317 ldw r2,12(r2)
802dcc8: e0fff817 ldw r3,-32(fp)
802dccc: 180d883a mov r6,r3
802dcd0: e17ff517 ldw r5,-44(fp)
802dcd4: 1009883a mov r4,r2
802dcd8: 80086b80 call 80086b8 <memcpy>
so->so_snd.sb_flags |= SB_MBCOMP; /* allow compression */
802dcdc: e0bff717 ldw r2,-36(fp)
802dce0: 1080190b ldhu r2,100(r2)
802dce4: 10802014 ori r2,r2,128
802dce8: 1007883a mov r3,r2
802dcec: e0bff717 ldw r2,-36(fp)
802dcf0: 10c0190d sth r3,100(r2)
802dcf4: 00000706 br 802dd14 <sosend+0x3e0>
}
else
{
m = m_get (M_WAIT, MT_TXDATA);
802dcf8: 000b883a mov r5,zero
802dcfc: 01000084 movi r4,2
802dd00: 8029a700 call 8029a70 <m_getnbuf>
802dd04: e0bffe15 stw r2,-8(fp)
m->m_data = data;
802dd08: e0bffe17 ldw r2,-8(fp)
802dd0c: e0fff517 ldw r3,-44(fp)
802dd10: 10c00315 stw r3,12(r2)
}
INET_TRACE (INETM_IO,
("sosend:got %d bytes so %lx mlen %d, off %d mtod %x\n",
len, so, m->m_len, m->m_off, mtod (m, caddr_t)));
*data_length -= len;
802dd14: e0bff417 ldw r2,-48(fp)
802dd18: 10c00017 ldw r3,0(r2)
802dd1c: e0bff817 ldw r2,-32(fp)
802dd20: 1887c83a sub r3,r3,r2
802dd24: e0bff417 ldw r2,-48(fp)
802dd28: 10c00015 stw r3,0(r2)
resid -= len;
802dd2c: e0fffc17 ldw r3,-16(fp)
802dd30: e0bff817 ldw r2,-32(fp)
802dd34: 1885c83a sub r2,r3,r2
802dd38: e0bffc15 stw r2,-16(fp)
data += len;
802dd3c: e0bff817 ldw r2,-32(fp)
802dd40: e0fff517 ldw r3,-44(fp)
802dd44: 1885883a add r2,r3,r2
802dd48: e0bff515 stw r2,-44(fp)
m->m_len = len;
802dd4c: e0fff817 ldw r3,-32(fp)
802dd50: e0bffe17 ldw r2,-8(fp)
802dd54: 10c00215 stw r3,8(r2)
if (head == (struct mbuf *)NULL)
802dd58: e0bfff17 ldw r2,-4(fp)
802dd5c: 1000021e bne r2,zero,802dd68 <sosend+0x434>
head = m;
802dd60: e0bffe17 ldw r2,-8(fp)
802dd64: e0bfff15 stw r2,-4(fp)
if (error)
802dd68: e0bffb17 ldw r2,-20(fp)
802dd6c: 1000311e bne r2,zero,802de34 <sosend+0x500>
goto release;
if (*data_length <= 0)
802dd70: e0bff417 ldw r2,-48(fp)
802dd74: 10800017 ldw r2,0(r2)
802dd78: 0080030e bge zero,r2,802dd88 <sosend+0x454>
while (space > 0)
802dd7c: e0bffd17 ldw r2,-12(fp)
802dd80: 00bfbd16 blt zero,r2,802dc78 <sosend+0x344>
802dd84: 00000106 br 802dd8c <sosend+0x458>
break;
802dd88: 0001883a nop
}
if (dontroute)
802dd8c: e0bff917 ldw r2,-28(fp)
802dd90: 10000526 beq r2,zero,802dda8 <sosend+0x474>
so->so_options |= SO_DONTROUTE;
802dd94: e0bff717 ldw r2,-36(fp)
802dd98: 10800417 ldw r2,16(r2)
802dd9c: 10c00414 ori r3,r2,16
802dda0: e0bff717 ldw r2,-36(fp)
802dda4: 10c00415 stw r3,16(r2)
so->so_req = (flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND;
802dda8: e0800217 ldw r2,8(fp)
802ddac: 1080004c andi r2,r2,1
802ddb0: 10000226 beq r2,zero,802ddbc <sosend+0x488>
802ddb4: 00800384 movi r2,14
802ddb8: 00000106 br 802ddc0 <sosend+0x48c>
802ddbc: 00800244 movi r2,9
802ddc0: e0fff717 ldw r3,-36(fp)
802ddc4: 18800715 stw r2,28(r3)
error = (*so->so_proto->pr_usrreq)(so, head, nam);
802ddc8: e0bff717 ldw r2,-36(fp)
802ddcc: 10800217 ldw r2,8(r2)
802ddd0: 10800317 ldw r2,12(r2)
802ddd4: e1bff617 ldw r6,-40(fp)
802ddd8: e17fff17 ldw r5,-4(fp)
802dddc: e13ff717 ldw r4,-36(fp)
802dde0: 103ee83a callr r2
802dde4: e0bffb15 stw r2,-20(fp)
if (dontroute)
802dde8: e0bff917 ldw r2,-28(fp)
802ddec: 10000626 beq r2,zero,802de08 <sosend+0x4d4>
so->so_options &= ~SO_DONTROUTE;
802ddf0: e0bff717 ldw r2,-36(fp)
802ddf4: 10c00417 ldw r3,16(r2)
802ddf8: 00bffbc4 movi r2,-17
802ddfc: 1886703a and r3,r3,r2
802de00: e0bff717 ldw r2,-36(fp)
802de04: 10c00415 stw r3,16(r2)
head = (struct mbuf *)NULL;
802de08: e03fff15 stw zero,-4(fp)
first = 0;
802de0c: e03ffa15 stw zero,-24(fp)
} while ((resid != 0) && (error == 0));
802de10: e0bffc17 ldw r2,-16(fp)
802de14: 10000926 beq r2,zero,802de3c <sosend+0x508>
802de18: e0bffb17 ldw r2,-20(fp)
802de1c: 103f0626 beq r2,zero,802da38 <sosend+0x104>
release:
802de20: 00000606 br 802de3c <sosend+0x508>
goto release;
802de24: 0001883a nop
802de28: 00000506 br 802de40 <sosend+0x50c>
goto release;
802de2c: 0001883a nop
802de30: 00000306 br 802de40 <sosend+0x50c>
goto release;
802de34: 0001883a nop
802de38: 00000106 br 802de40 <sosend+0x50c>
release:
802de3c: 0001883a nop
sbunlock(&so->so_snd);
802de40: e0bff717 ldw r2,-36(fp)
802de44: 10c0190b ldhu r3,100(r2)
802de48: 00bfff84 movi r2,-2
802de4c: 1884703a and r2,r3,r2
802de50: 1007883a mov r3,r2
802de54: e0bff717 ldw r2,-36(fp)
802de58: 10c0190d sth r3,100(r2)
802de5c: e0bff717 ldw r2,-36(fp)
802de60: 10801904 addi r2,r2,100
802de64: 1009883a mov r4,r2
802de68: 8027ba00 call 8027ba0 <tcp_wakeup>
if (head)
802de6c: e0bfff17 ldw r2,-4(fp)
802de70: 10000226 beq r2,zero,802de7c <sosend+0x548>
m_freem(head);
802de74: e13fff17 ldw r4,-4(fp)
802de78: 8029cfc0 call 8029cfc <m_freem>
return error;
802de7c: e0bffb17 ldw r2,-20(fp)
}
802de80: e037883a mov sp,fp
802de84: dfc00117 ldw ra,4(sp)
802de88: df000017 ldw fp,0(sp)
802de8c: dec00204 addi sp,sp,8
802de90: f800283a ret
0802de94 <soreceive>:
soreceive(struct socket * so,
struct mbuf **aname,
char * data,
int * datalen,
int flags)
{
802de94: defff204 addi sp,sp,-56
802de98: dfc00d15 stw ra,52(sp)
802de9c: df000c15 stw fp,48(sp)
802dea0: df000c04 addi fp,sp,48
802dea4: e13ff715 stw r4,-36(fp)
802dea8: e17ff615 stw r5,-40(fp)
802deac: e1bff515 stw r6,-44(fp)
802deb0: e1fff415 stw r7,-48(fp)
struct mbuf * m;
int len;
int error = 0;
802deb4: e03ffd15 stw zero,-12(fp)
int offset;
struct protosw * pr = so->so_proto;
802deb8: e0bff717 ldw r2,-36(fp)
802debc: 10800217 ldw r2,8(r2)
802dec0: e0bff915 stw r2,-28(fp)
struct mbuf * nextrecord;
int moff;
int lflags;
if (aname)
802dec4: e0bff617 ldw r2,-40(fp)
802dec8: 10000226 beq r2,zero,802ded4 <soreceive+0x40>
*aname = 0;
802decc: e0bff617 ldw r2,-40(fp)
802ded0: 10000015 stw zero,0(r2)
if (flags & MSG_OOB)
802ded4: e0800217 ldw r2,8(fp)
802ded8: 1080004c andi r2,r2,1
802dedc: 10004126 beq r2,zero,802dfe4 <soreceive+0x150>
{
m = m_get (M_WAIT, MT_RXDATA);
802dee0: 000b883a mov r5,zero
802dee4: 01000044 movi r4,1
802dee8: 8029a700 call 8029a70 <m_getnbuf>
802deec: e0bfff15 stw r2,-4(fp)
if (m == NULL)
802def0: e0bfff17 ldw r2,-4(fp)
802def4: 1000021e bne r2,zero,802df00 <soreceive+0x6c>
return ENOBUFS;
802def8: 00801a44 movi r2,105
802defc: 0001b606 br 802e5d8 <soreceive+0x744>
lflags = flags & MSG_PEEK;
802df00: e0800217 ldw r2,8(fp)
802df04: 1080008c andi r2,r2,2
802df08: e0bff815 stw r2,-32(fp)
so->so_req = PRU_RCVOOB;
802df0c: e0bff717 ldw r2,-36(fp)
802df10: 00c00344 movi r3,13
802df14: 10c00715 stw r3,28(r2)
error = (*pr->pr_usrreq)(so, m, LONG2MBUF((long)lflags));
802df18: e0bff917 ldw r2,-28(fp)
802df1c: 10800317 ldw r2,12(r2)
802df20: e0fff817 ldw r3,-32(fp)
802df24: 180d883a mov r6,r3
802df28: e17fff17 ldw r5,-4(fp)
802df2c: e13ff717 ldw r4,-36(fp)
802df30: 103ee83a callr r2
802df34: e0bffd15 stw r2,-12(fp)
if (error == 0)
802df38: e0bffd17 ldw r2,-12(fp)
802df3c: 1000231e bne r2,zero,802dfcc <soreceive+0x138>
{
do
{
len = *datalen;
802df40: e0bff417 ldw r2,-48(fp)
802df44: 10800017 ldw r2,0(r2)
802df48: e0bffe15 stw r2,-8(fp)
if (len > (int)m->m_len)
802df4c: e0bfff17 ldw r2,-4(fp)
802df50: 10800217 ldw r2,8(r2)
802df54: 1007883a mov r3,r2
802df58: e0bffe17 ldw r2,-8(fp)
802df5c: 1880030e bge r3,r2,802df6c <soreceive+0xd8>
len = m->m_len;
802df60: e0bfff17 ldw r2,-4(fp)
802df64: 10800217 ldw r2,8(r2)
802df68: e0bffe15 stw r2,-8(fp)
MEMCPY(data, mtod(m, char*), len);
802df6c: e0bfff17 ldw r2,-4(fp)
802df70: 10800317 ldw r2,12(r2)
802df74: e0fffe17 ldw r3,-8(fp)
802df78: 180d883a mov r6,r3
802df7c: 100b883a mov r5,r2
802df80: e13ff517 ldw r4,-44(fp)
802df84: 80086b80 call 80086b8 <memcpy>
data += len;
802df88: e0bffe17 ldw r2,-8(fp)
802df8c: e0fff517 ldw r3,-44(fp)
802df90: 1885883a add r2,r3,r2
802df94: e0bff515 stw r2,-44(fp)
*datalen = len;
802df98: e0bff417 ldw r2,-48(fp)
802df9c: e0fffe17 ldw r3,-8(fp)
802dfa0: 10c00015 stw r3,0(r2)
m = m_free(m);
802dfa4: e13fff17 ldw r4,-4(fp)
802dfa8: 8029bf80 call 8029bf8 <m_free>
802dfac: e0bfff15 stw r2,-4(fp)
} while (*datalen && (error == 0) && m);
802dfb0: e0bff417 ldw r2,-48(fp)
802dfb4: 10800017 ldw r2,0(r2)
802dfb8: 10000426 beq r2,zero,802dfcc <soreceive+0x138>
802dfbc: e0bffd17 ldw r2,-12(fp)
802dfc0: 1000021e bne r2,zero,802dfcc <soreceive+0x138>
802dfc4: e0bfff17 ldw r2,-4(fp)
802dfc8: 103fdd1e bne r2,zero,802df40 <soreceive+0xac>
}
if (m)
802dfcc: e0bfff17 ldw r2,-4(fp)
802dfd0: 10000226 beq r2,zero,802dfdc <soreceive+0x148>
m_freem(m);
802dfd4: e13fff17 ldw r4,-4(fp)
802dfd8: 8029cfc0 call 8029cfc <m_freem>
return (error);
802dfdc: e0bffd17 ldw r2,-12(fp)
802dfe0: 00017d06 br 802e5d8 <soreceive+0x744>
}
restart:
802dfe4: 0001883a nop
sblock (&so->so_rcv);
802dfe8: 00000406 br 802dffc <soreceive+0x168>
802dfec: e0bff717 ldw r2,-36(fp)
802dff0: 10801104 addi r2,r2,68
802dff4: 1009883a mov r4,r2
802dff8: 8027a540 call 8027a54 <tcp_sleep>
802dffc: e0bff717 ldw r2,-36(fp)
802e000: 1080110b ldhu r2,68(r2)
802e004: 10bfffcc andi r2,r2,65535
802e008: 1080004c andi r2,r2,1
802e00c: 103ff71e bne r2,zero,802dfec <soreceive+0x158>
802e010: e0bff717 ldw r2,-36(fp)
802e014: 1080110b ldhu r2,68(r2)
802e018: 10800054 ori r2,r2,1
802e01c: 1007883a mov r3,r2
802e020: e0bff717 ldw r2,-36(fp)
802e024: 10c0110d sth r3,68(r2)
INET_TRACE (INETM_IO,
("INET:soreceive sbcc %d soerror %d so_state %d *datalen %d\n",
so->so_rcv.sb_cc, so->so_error, so->so_state, *datalen));
/* If no data is ready, see if we should wait or return */
if (so->so_rcv.sb_cc == 0)
802e028: e0bff717 ldw r2,-36(fp)
802e02c: 10800a17 ldw r2,40(r2)
802e030: 10003a1e bne r2,zero,802e11c <soreceive+0x288>
{
if (so->so_error)
802e034: e0bff717 ldw r2,-36(fp)
802e038: 10800617 ldw r2,24(r2)
802e03c: 10000626 beq r2,zero,802e058 <soreceive+0x1c4>
{
error = so->so_error;
802e040: e0bff717 ldw r2,-36(fp)
802e044: 10800617 ldw r2,24(r2)
802e048: e0bffd15 stw r2,-12(fp)
so->so_error = 0;
802e04c: e0bff717 ldw r2,-36(fp)
802e050: 10000615 stw zero,24(r2)
goto release;
802e054: 00015406 br 802e5a8 <soreceive+0x714>
}
if (so->so_state & SS_CANTRCVMORE)
802e058: e0bff717 ldw r2,-36(fp)
802e05c: 1080088b ldhu r2,34(r2)
802e060: 10bfffcc andi r2,r2,65535
802e064: 1080080c andi r2,r2,32
802e068: 10014a1e bne r2,zero,802e594 <soreceive+0x700>
goto release;
if ((so->so_state & SS_ISCONNECTED) == 0 &&
802e06c: e0bff717 ldw r2,-36(fp)
802e070: 1080088b ldhu r2,34(r2)
802e074: 10bfffcc andi r2,r2,65535
802e078: 1080008c andi r2,r2,2
802e07c: 1000091e bne r2,zero,802e0a4 <soreceive+0x210>
(so->so_proto->pr_flags & PR_CONNREQUIRED))
802e080: e0bff717 ldw r2,-36(fp)
802e084: 10800217 ldw r2,8(r2)
802e088: 1080010b ldhu r2,4(r2)
802e08c: 10bfffcc andi r2,r2,65535
802e090: 1080010c andi r2,r2,4
if ((so->so_state & SS_ISCONNECTED) == 0 &&
802e094: 10000326 beq r2,zero,802e0a4 <soreceive+0x210>
{
error = ENOTCONN;
802e098: 00802004 movi r2,128
802e09c: e0bffd15 stw r2,-12(fp)
goto release;
802e0a0: 00014106 br 802e5a8 <soreceive+0x714>
}
if (*datalen == 0)
802e0a4: e0bff417 ldw r2,-48(fp)
802e0a8: 10800017 ldw r2,0(r2)
802e0ac: 10013b26 beq r2,zero,802e59c <soreceive+0x708>
goto release;
if ((so->so_state & SS_NBIO) || (flags & MSG_DONTWAIT))
802e0b0: e0bff717 ldw r2,-36(fp)
802e0b4: 1080088b ldhu r2,34(r2)
802e0b8: 10bfffcc andi r2,r2,65535
802e0bc: 1080400c andi r2,r2,256
802e0c0: 1000031e bne r2,zero,802e0d0 <soreceive+0x23c>
802e0c4: e0800217 ldw r2,8(fp)
802e0c8: 1080080c andi r2,r2,32
802e0cc: 10000326 beq r2,zero,802e0dc <soreceive+0x248>
{
error = EWOULDBLOCK;
802e0d0: 008002c4 movi r2,11
802e0d4: e0bffd15 stw r2,-12(fp)
goto release;
802e0d8: 00013306 br 802e5a8 <soreceive+0x714>
}
sbunlock(&so->so_rcv);
802e0dc: e0bff717 ldw r2,-36(fp)
802e0e0: 10c0110b ldhu r3,68(r2)
802e0e4: 00bfff84 movi r2,-2
802e0e8: 1884703a and r2,r3,r2
802e0ec: 1007883a mov r3,r2
802e0f0: e0bff717 ldw r2,-36(fp)
802e0f4: 10c0110d sth r3,68(r2)
802e0f8: e0bff717 ldw r2,-36(fp)
802e0fc: 10801104 addi r2,r2,68
802e100: 1009883a mov r4,r2
802e104: 8027ba00 call 8027ba0 <tcp_wakeup>
sbwait(&so->so_rcv);
802e108: e0bff717 ldw r2,-36(fp)
802e10c: 10800a04 addi r2,r2,40
802e110: 1009883a mov r4,r2
802e114: 802f8e00 call 802f8e0 <sbwait>
goto restart;
802e118: 003fb306 br 802dfe8 <soreceive+0x154>
}
m = so->so_rcv.sb_mb;
802e11c: e0bff717 ldw r2,-36(fp)
802e120: 10801017 ldw r2,64(r2)
802e124: e0bfff15 stw r2,-4(fp)
if (m == 0)
802e128: e0bfff17 ldw r2,-4(fp)
802e12c: 1000031e bne r2,zero,802e13c <soreceive+0x2a8>
panic("sorecv 1");
802e130: 01020174 movhi r4,2053
802e134: 212a7b04 addi r4,r4,-22036
802e138: 80271780 call 8027178 <panic>
nextrecord = m->m_act;
802e13c: e0bfff17 ldw r2,-4(fp)
802e140: 10800717 ldw r2,28(r2)
802e144: e0bffb15 stw r2,-20(fp)
if (pr->pr_flags & PR_ADDR)
802e148: e0bff917 ldw r2,-28(fp)
802e14c: 1080010b ldhu r2,4(r2)
802e150: 10bfffcc andi r2,r2,65535
802e154: 1080008c andi r2,r2,2
802e158: 10004226 beq r2,zero,802e264 <soreceive+0x3d0>
{
if (m->m_type != MT_SONAME)
802e15c: e0bfff17 ldw r2,-4(fp)
802e160: 10800817 ldw r2,32(r2)
802e164: 10800260 cmpeqi r2,r2,9
802e168: 1000091e bne r2,zero,802e190 <soreceive+0x2fc>
{
dprintf ("sorecv:type %d not nam", m->m_type);
802e16c: e0bfff17 ldw r2,-4(fp)
802e170: 10800817 ldw r2,32(r2)
802e174: 100b883a mov r5,r2
802e178: 01020174 movhi r4,2053
802e17c: 212a7e04 addi r4,r4,-22024
802e180: 8002c780 call 8002c78 <printf>
panic("sorecv 2");
802e184: 01020174 movhi r4,2053
802e188: 212a8404 addi r4,r4,-22000
802e18c: 80271780 call 8027178 <panic>
}
if (flags & MSG_PEEK)
802e190: e0800217 ldw r2,8(fp)
802e194: 1080008c andi r2,r2,2
802e198: 10000f26 beq r2,zero,802e1d8 <soreceive+0x344>
{
if (aname)
802e19c: e0bff617 ldw r2,-40(fp)
802e1a0: 10000926 beq r2,zero,802e1c8 <soreceive+0x334>
*aname = m_copy (m, 0, m->m_len);
802e1a4: e0bfff17 ldw r2,-4(fp)
802e1a8: 10800217 ldw r2,8(r2)
802e1ac: 100d883a mov r6,r2
802e1b0: 000b883a mov r5,zero
802e1b4: e13fff17 ldw r4,-4(fp)
802e1b8: 8029d400 call 8029d40 <m_copy>
802e1bc: 1007883a mov r3,r2
802e1c0: e0bff617 ldw r2,-40(fp)
802e1c4: 10c00015 stw r3,0(r2)
m = m->m_next;
802e1c8: e0bfff17 ldw r2,-4(fp)
802e1cc: 10800617 ldw r2,24(r2)
802e1d0: e0bfff15 stw r2,-4(fp)
802e1d4: 00002306 br 802e264 <soreceive+0x3d0>
} else
{
sbfree (&so->so_rcv, m);
802e1d8: e0bff717 ldw r2,-36(fp)
802e1dc: 10c00a17 ldw r3,40(r2)
802e1e0: e0bfff17 ldw r2,-4(fp)
802e1e4: 10800217 ldw r2,8(r2)
802e1e8: 1887c83a sub r3,r3,r2
802e1ec: e0bff717 ldw r2,-36(fp)
802e1f0: 10c00a15 stw r3,40(r2)
if (aname)
802e1f4: e0bff617 ldw r2,-40(fp)
802e1f8: 10000d26 beq r2,zero,802e230 <soreceive+0x39c>
{
*aname = m;
802e1fc: e0bff617 ldw r2,-40(fp)
802e200: e0ffff17 ldw r3,-4(fp)
802e204: 10c00015 stw r3,0(r2)
m = m->m_next;
802e208: e0bfff17 ldw r2,-4(fp)
802e20c: 10800617 ldw r2,24(r2)
802e210: e0bfff15 stw r2,-4(fp)
(*aname)->m_next = 0;
802e214: e0bff617 ldw r2,-40(fp)
802e218: 10800017 ldw r2,0(r2)
802e21c: 10000615 stw zero,24(r2)
so->so_rcv.sb_mb = m;
802e220: e0bff717 ldw r2,-36(fp)
802e224: e0ffff17 ldw r3,-4(fp)
802e228: 10c01015 stw r3,64(r2)
802e22c: 00000806 br 802e250 <soreceive+0x3bc>
} else
{
MFREE(m, so->so_rcv.sb_mb);
802e230: e13fff17 ldw r4,-4(fp)
802e234: 8029bf80 call 8029bf8 <m_free>
802e238: 1007883a mov r3,r2
802e23c: e0bff717 ldw r2,-36(fp)
802e240: 10c01015 stw r3,64(r2)
m = so->so_rcv.sb_mb;
802e244: e0bff717 ldw r2,-36(fp)
802e248: 10801017 ldw r2,64(r2)
802e24c: e0bfff15 stw r2,-4(fp)
}
if (m)
802e250: e0bfff17 ldw r2,-4(fp)
802e254: 10000326 beq r2,zero,802e264 <soreceive+0x3d0>
m->m_act = nextrecord;
802e258: e0bfff17 ldw r2,-4(fp)
802e25c: e0fffb17 ldw r3,-20(fp)
802e260: 10c00715 stw r3,28(r2)
}
}
moff = 0;
802e264: e03ffa15 stw zero,-24(fp)
offset = 0;
802e268: e03ffc15 stw zero,-16(fp)
while (m && (*datalen > 0) && (error == 0))
802e26c: 00009e06 br 802e4e8 <soreceive+0x654>
{
if (m->m_type != MT_RXDATA && m->m_type != MT_HEADER)
802e270: e0bfff17 ldw r2,-4(fp)
802e274: 10800817 ldw r2,32(r2)
802e278: 10800060 cmpeqi r2,r2,1
802e27c: 1000071e bne r2,zero,802e29c <soreceive+0x408>
802e280: e0bfff17 ldw r2,-4(fp)
802e284: 10800817 ldw r2,32(r2)
802e288: 108000e0 cmpeqi r2,r2,3
802e28c: 1000031e bne r2,zero,802e29c <soreceive+0x408>
panic("sorecv 3");
802e290: 01020174 movhi r4,2053
802e294: 212a8704 addi r4,r4,-21988
802e298: 80271780 call 8027178 <panic>
len = *datalen;
802e29c: e0bff417 ldw r2,-48(fp)
802e2a0: 10800017 ldw r2,0(r2)
802e2a4: e0bffe15 stw r2,-8(fp)
so->so_state &= ~SS_RCVATMARK;
802e2a8: e0bff717 ldw r2,-36(fp)
802e2ac: 10c0088b ldhu r3,34(r2)
802e2b0: 00bfefc4 movi r2,-65
802e2b4: 1884703a and r2,r3,r2
802e2b8: 1007883a mov r3,r2
802e2bc: e0bff717 ldw r2,-36(fp)
802e2c0: 10c0088d sth r3,34(r2)
if (so->so_oobmark && (len > (int)(so->so_oobmark - offset)))
802e2c4: e0bff717 ldw r2,-36(fp)
802e2c8: 10801a17 ldw r2,104(r2)
802e2cc: 10000c26 beq r2,zero,802e300 <soreceive+0x46c>
802e2d0: e0bff717 ldw r2,-36(fp)
802e2d4: 10c01a17 ldw r3,104(r2)
802e2d8: e0bffc17 ldw r2,-16(fp)
802e2dc: 1885c83a sub r2,r3,r2
802e2e0: 1007883a mov r3,r2
802e2e4: e0bffe17 ldw r2,-8(fp)
802e2e8: 1880050e bge r3,r2,802e300 <soreceive+0x46c>
len = (int)(so->so_oobmark - offset);
802e2ec: e0bff717 ldw r2,-36(fp)
802e2f0: 10c01a17 ldw r3,104(r2)
802e2f4: e0bffc17 ldw r2,-16(fp)
802e2f8: 1885c83a sub r2,r3,r2
802e2fc: e0bffe15 stw r2,-8(fp)
if (len > (int)(m->m_len - moff))
802e300: e0bfff17 ldw r2,-4(fp)
802e304: 10c00217 ldw r3,8(r2)
802e308: e0bffa17 ldw r2,-24(fp)
802e30c: 1885c83a sub r2,r3,r2
802e310: 1007883a mov r3,r2
802e314: e0bffe17 ldw r2,-8(fp)
802e318: 1880050e bge r3,r2,802e330 <soreceive+0x49c>
len = m->m_len - moff;
802e31c: e0bfff17 ldw r2,-4(fp)
802e320: 10c00217 ldw r3,8(r2)
802e324: e0bffa17 ldw r2,-24(fp)
802e328: 1885c83a sub r2,r3,r2
802e32c: e0bffe15 stw r2,-8(fp)
* it points to next record) when we drop priority;
* we must note any additions to the sockbuf when we
* block interrupts again.
*/
MEMCPY(data, (mtod(m, char *) + moff), len);
802e330: e0bfff17 ldw r2,-4(fp)
802e334: 10c00317 ldw r3,12(r2)
802e338: e0bffa17 ldw r2,-24(fp)
802e33c: 1885883a add r2,r3,r2
802e340: e0fffe17 ldw r3,-8(fp)
802e344: 180d883a mov r6,r3
802e348: 100b883a mov r5,r2
802e34c: e13ff517 ldw r4,-44(fp)
802e350: 80086b80 call 80086b8 <memcpy>
data += len;
802e354: e0bffe17 ldw r2,-8(fp)
802e358: e0fff517 ldw r3,-44(fp)
802e35c: 1885883a add r2,r3,r2
802e360: e0bff515 stw r2,-44(fp)
*datalen -= len;
802e364: e0bff417 ldw r2,-48(fp)
802e368: 10c00017 ldw r3,0(r2)
802e36c: e0bffe17 ldw r2,-8(fp)
802e370: 1887c83a sub r3,r3,r2
802e374: e0bff417 ldw r2,-48(fp)
802e378: 10c00015 stw r3,0(r2)
if (len == (int)(m->m_len - moff))
802e37c: e0bfff17 ldw r2,-4(fp)
802e380: 10c00217 ldw r3,8(r2)
802e384: e0bffa17 ldw r2,-24(fp)
802e388: 1885c83a sub r2,r3,r2
802e38c: 1007883a mov r3,r2
802e390: e0bffe17 ldw r2,-8(fp)
802e394: 10c0201e bne r2,r3,802e418 <soreceive+0x584>
{
if (flags & MSG_PEEK)
802e398: e0800217 ldw r2,8(fp)
802e39c: 1080008c andi r2,r2,2
802e3a0: 10000526 beq r2,zero,802e3b8 <soreceive+0x524>
{
m = m->m_next;
802e3a4: e0bfff17 ldw r2,-4(fp)
802e3a8: 10800617 ldw r2,24(r2)
802e3ac: e0bfff15 stw r2,-4(fp)
moff = 0;
802e3b0: e03ffa15 stw zero,-24(fp)
802e3b4: 00003206 br 802e480 <soreceive+0x5ec>
} else
{
nextrecord = m->m_act;
802e3b8: e0bfff17 ldw r2,-4(fp)
802e3bc: 10800717 ldw r2,28(r2)
802e3c0: e0bffb15 stw r2,-20(fp)
sbfree(&so->so_rcv, m);
802e3c4: e0bff717 ldw r2,-36(fp)
802e3c8: 10c00a17 ldw r3,40(r2)
802e3cc: e0bfff17 ldw r2,-4(fp)
802e3d0: 10800217 ldw r2,8(r2)
802e3d4: 1887c83a sub r3,r3,r2
802e3d8: e0bff717 ldw r2,-36(fp)
802e3dc: 10c00a15 stw r3,40(r2)
{
MFREE(m, so->so_rcv.sb_mb);
802e3e0: e13fff17 ldw r4,-4(fp)
802e3e4: 8029bf80 call 8029bf8 <m_free>
802e3e8: 1007883a mov r3,r2
802e3ec: e0bff717 ldw r2,-36(fp)
802e3f0: 10c01015 stw r3,64(r2)
m = so->so_rcv.sb_mb;
802e3f4: e0bff717 ldw r2,-36(fp)
802e3f8: 10801017 ldw r2,64(r2)
802e3fc: e0bfff15 stw r2,-4(fp)
}
if (m)
802e400: e0bfff17 ldw r2,-4(fp)
802e404: 10001e26 beq r2,zero,802e480 <soreceive+0x5ec>
m->m_act = nextrecord;
802e408: e0bfff17 ldw r2,-4(fp)
802e40c: e0fffb17 ldw r3,-20(fp)
802e410: 10c00715 stw r3,28(r2)
802e414: 00001a06 br 802e480 <soreceive+0x5ec>
}
} else
{
if (flags & MSG_PEEK)
802e418: e0800217 ldw r2,8(fp)
802e41c: 1080008c andi r2,r2,2
802e420: 10000526 beq r2,zero,802e438 <soreceive+0x5a4>
moff += len;
802e424: e0fffa17 ldw r3,-24(fp)
802e428: e0bffe17 ldw r2,-8(fp)
802e42c: 1885883a add r2,r3,r2
802e430: e0bffa15 stw r2,-24(fp)
802e434: 00001206 br 802e480 <soreceive+0x5ec>
else
{
m->m_data += len;
802e438: e0bfff17 ldw r2,-4(fp)
802e43c: 10c00317 ldw r3,12(r2)
802e440: e0bffe17 ldw r2,-8(fp)
802e444: 1887883a add r3,r3,r2
802e448: e0bfff17 ldw r2,-4(fp)
802e44c: 10c00315 stw r3,12(r2)
m->m_len -= len;
802e450: e0bfff17 ldw r2,-4(fp)
802e454: 10c00217 ldw r3,8(r2)
802e458: e0bffe17 ldw r2,-8(fp)
802e45c: 1887c83a sub r3,r3,r2
802e460: e0bfff17 ldw r2,-4(fp)
802e464: 10c00215 stw r3,8(r2)
so->so_rcv.sb_cc -= len;
802e468: e0bff717 ldw r2,-36(fp)
802e46c: 10c00a17 ldw r3,40(r2)
802e470: e0bffe17 ldw r2,-8(fp)
802e474: 1887c83a sub r3,r3,r2
802e478: e0bff717 ldw r2,-36(fp)
802e47c: 10c00a15 stw r3,40(r2)
}
}
if (so->so_oobmark)
802e480: e0bff717 ldw r2,-36(fp)
802e484: 10801a17 ldw r2,104(r2)
802e488: 10001726 beq r2,zero,802e4e8 <soreceive+0x654>
{
if ((flags & MSG_PEEK) == 0)
802e48c: e0800217 ldw r2,8(fp)
802e490: 1080008c andi r2,r2,2
802e494: 1000101e bne r2,zero,802e4d8 <soreceive+0x644>
{
so->so_oobmark -= len;
802e498: e0bff717 ldw r2,-36(fp)
802e49c: 10c01a17 ldw r3,104(r2)
802e4a0: e0bffe17 ldw r2,-8(fp)
802e4a4: 1887c83a sub r3,r3,r2
802e4a8: e0bff717 ldw r2,-36(fp)
802e4ac: 10c01a15 stw r3,104(r2)
if (so->so_oobmark == 0)
802e4b0: e0bff717 ldw r2,-36(fp)
802e4b4: 10801a17 ldw r2,104(r2)
802e4b8: 10000b1e bne r2,zero,802e4e8 <soreceive+0x654>
{
so->so_state |= SS_RCVATMARK;
802e4bc: e0bff717 ldw r2,-36(fp)
802e4c0: 1080088b ldhu r2,34(r2)
802e4c4: 10801014 ori r2,r2,64
802e4c8: 1007883a mov r3,r2
802e4cc: e0bff717 ldw r2,-36(fp)
802e4d0: 10c0088d sth r3,34(r2)
break;
802e4d4: 00000b06 br 802e504 <soreceive+0x670>
}
} else
offset += len;
802e4d8: e0fffc17 ldw r3,-16(fp)
802e4dc: e0bffe17 ldw r2,-8(fp)
802e4e0: 1885883a add r2,r3,r2
802e4e4: e0bffc15 stw r2,-16(fp)
while (m && (*datalen > 0) && (error == 0))
802e4e8: e0bfff17 ldw r2,-4(fp)
802e4ec: 10000526 beq r2,zero,802e504 <soreceive+0x670>
802e4f0: e0bff417 ldw r2,-48(fp)
802e4f4: 10800017 ldw r2,0(r2)
802e4f8: 0080020e bge zero,r2,802e504 <soreceive+0x670>
802e4fc: e0bffd17 ldw r2,-12(fp)
802e500: 103f5b26 beq r2,zero,802e270 <soreceive+0x3dc>
}
}
if ((flags & MSG_PEEK) == 0)
802e504: e0800217 ldw r2,8(fp)
802e508: 1080008c andi r2,r2,2
802e50c: 1000251e bne r2,zero,802e5a4 <soreceive+0x710>
{
if (m == 0)
802e510: e0bfff17 ldw r2,-4(fp)
802e514: 1000041e bne r2,zero,802e528 <soreceive+0x694>
so->so_rcv.sb_mb = nextrecord;
802e518: e0bff717 ldw r2,-36(fp)
802e51c: e0fffb17 ldw r3,-20(fp)
802e520: 10c01015 stw r3,64(r2)
802e524: 00000906 br 802e54c <soreceive+0x6b8>
else if (pr->pr_flags & PR_ATOMIC)
802e528: e0bff917 ldw r2,-28(fp)
802e52c: 1080010b ldhu r2,4(r2)
802e530: 10bfffcc andi r2,r2,65535
802e534: 1080004c andi r2,r2,1
802e538: 10000426 beq r2,zero,802e54c <soreceive+0x6b8>
(void) sbdroprecord(&so->so_rcv);
802e53c: e0bff717 ldw r2,-36(fp)
802e540: 10800a04 addi r2,r2,40
802e544: 1009883a mov r4,r2
802e548: 80303680 call 8030368 <sbdroprecord>
if (pr->pr_flags & PR_WANTRCVD && so->so_pcb)
802e54c: e0bff917 ldw r2,-28(fp)
802e550: 1080010b ldhu r2,4(r2)
802e554: 10bfffcc andi r2,r2,65535
802e558: 1080020c andi r2,r2,8
802e55c: 10001126 beq r2,zero,802e5a4 <soreceive+0x710>
802e560: e0bff717 ldw r2,-36(fp)
802e564: 10800117 ldw r2,4(r2)
802e568: 10000e26 beq r2,zero,802e5a4 <soreceive+0x710>
{
so->so_req = PRU_RCVD;
802e56c: e0bff717 ldw r2,-36(fp)
802e570: 00c00204 movi r3,8
802e574: 10c00715 stw r3,28(r2)
(*pr->pr_usrreq)(so, (struct mbuf *)0,
802e578: e0bff917 ldw r2,-28(fp)
802e57c: 10800317 ldw r2,12(r2)
802e580: 000d883a mov r6,zero
802e584: 000b883a mov r5,zero
802e588: e13ff717 ldw r4,-36(fp)
802e58c: 103ee83a callr r2
802e590: 00000506 br 802e5a8 <soreceive+0x714>
goto release;
802e594: 0001883a nop
802e598: 00000306 br 802e5a8 <soreceive+0x714>
goto release;
802e59c: 0001883a nop
802e5a0: 00000106 br 802e5a8 <soreceive+0x714>
(struct mbuf *)0);
}
}
release:
802e5a4: 0001883a nop
sbunlock(&so->so_rcv);
802e5a8: e0bff717 ldw r2,-36(fp)
802e5ac: 10c0110b ldhu r3,68(r2)
802e5b0: 00bfff84 movi r2,-2
802e5b4: 1884703a and r2,r3,r2
802e5b8: 1007883a mov r3,r2
802e5bc: e0bff717 ldw r2,-36(fp)
802e5c0: 10c0110d sth r3,68(r2)
802e5c4: e0bff717 ldw r2,-36(fp)
802e5c8: 10801104 addi r2,r2,68
802e5cc: 1009883a mov r4,r2
802e5d0: 8027ba00 call 8027ba0 <tcp_wakeup>
return (error);
802e5d4: e0bffd17 ldw r2,-12(fp)
}
802e5d8: e037883a mov sp,fp
802e5dc: dfc00117 ldw ra,4(sp)
802e5e0: df000017 ldw fp,0(sp)
802e5e4: dec00204 addi sp,sp,8
802e5e8: f800283a ret
0802e5ec <soshutdown>:
*
* RETURNS: int 0 if successful, else error code
*/
int
soshutdown(struct socket *so, int how)
{
802e5ec: defffc04 addi sp,sp,-16
802e5f0: dfc00315 stw ra,12(sp)
802e5f4: df000215 stw fp,8(sp)
802e5f8: df000204 addi fp,sp,8
802e5fc: e13fff15 stw r4,-4(fp)
802e600: e17ffe15 stw r5,-8(fp)
how++; /* convert 0,1,2 into 1,2,3 */
802e604: e0bffe17 ldw r2,-8(fp)
802e608: 10800044 addi r2,r2,1
802e60c: e0bffe15 stw r2,-8(fp)
if (how & 1) /* caller wanted READ or BOTH */
802e610: e0bffe17 ldw r2,-8(fp)
802e614: 1080004c andi r2,r2,1
802e618: 10000226 beq r2,zero,802e624 <soshutdown+0x38>
sorflush(so);
802e61c: e13fff17 ldw r4,-4(fp)
802e620: 802e6840 call 802e684 <sorflush>
if (how & 2) /* caller wanted WRITE or BOTH */
802e624: e0bffe17 ldw r2,-8(fp)
802e628: 1080008c andi r2,r2,2
802e62c: 10000f26 beq r2,zero,802e66c <soshutdown+0x80>
{
sbflush(&so->so_snd); /* flush the socket send queue */
802e630: e0bfff17 ldw r2,-4(fp)
802e634: 10801204 addi r2,r2,72
802e638: 1009883a mov r4,r2
802e63c: 803002c0 call 803002c <sbflush>
so->so_req = PRU_SHUTDOWN;
802e640: e0bfff17 ldw r2,-4(fp)
802e644: 00c001c4 movi r3,7
802e648: 10c00715 stw r3,28(r2)
return ((*so->so_proto->pr_usrreq)(so, (struct mbuf *)0, (struct mbuf *)0));
802e64c: e0bfff17 ldw r2,-4(fp)
802e650: 10800217 ldw r2,8(r2)
802e654: 10800317 ldw r2,12(r2)
802e658: 000d883a mov r6,zero
802e65c: 000b883a mov r5,zero
802e660: e13fff17 ldw r4,-4(fp)
802e664: 103ee83a callr r2
802e668: 00000106 br 802e670 <soshutdown+0x84>
}
return 0;
802e66c: 0005883a mov r2,zero
}
802e670: e037883a mov sp,fp
802e674: dfc00117 ldw ra,4(sp)
802e678: df000017 ldw fp,0(sp)
802e67c: dec00204 addi sp,sp,8
802e680: f800283a ret
0802e684 <sorflush>:
* socket receive buffer is discarded. Wakeup any processes waiting
* on the socket.
*/
void
sorflush(struct socket * so)
{
802e684: defffb04 addi sp,sp,-20
802e688: dfc00415 stw ra,16(sp)
802e68c: df000315 stw fp,12(sp)
802e690: df000304 addi fp,sp,12
802e694: e13ffd15 stw r4,-12(fp)
struct sockbuf *sb = &so->so_rcv;
802e698: e0bffd17 ldw r2,-12(fp)
802e69c: 10800a04 addi r2,r2,40
802e6a0: e0bfff15 stw r2,-4(fp)
int s;
sblock(sb);
802e6a4: 00000406 br 802e6b8 <sorflush+0x34>
802e6a8: e0bfff17 ldw r2,-4(fp)
802e6ac: 10800704 addi r2,r2,28
802e6b0: 1009883a mov r4,r2
802e6b4: 8027a540 call 8027a54 <tcp_sleep>
802e6b8: e0bfff17 ldw r2,-4(fp)
802e6bc: 1080070b ldhu r2,28(r2)
802e6c0: 10bfffcc andi r2,r2,65535
802e6c4: 1080004c andi r2,r2,1
802e6c8: 103ff71e bne r2,zero,802e6a8 <sorflush+0x24>
802e6cc: e0bfff17 ldw r2,-4(fp)
802e6d0: 1080070b ldhu r2,28(r2)
802e6d4: 10800054 ori r2,r2,1
802e6d8: 1007883a mov r3,r2
802e6dc: e0bfff17 ldw r2,-4(fp)
802e6e0: 10c0070d sth r3,28(r2)
socantrcvmore(so);
802e6e4: e13ffd17 ldw r4,-12(fp)
802e6e8: 802f84c0 call 802f84c <socantrcvmore>
sbunlock(sb);
802e6ec: e0bfff17 ldw r2,-4(fp)
802e6f0: 10c0070b ldhu r3,28(r2)
802e6f4: 00bfff84 movi r2,-2
802e6f8: 1884703a and r2,r3,r2
802e6fc: 1007883a mov r3,r2
802e700: e0bfff17 ldw r2,-4(fp)
802e704: 10c0070d sth r3,28(r2)
802e708: e0bfff17 ldw r2,-4(fp)
802e70c: 10800704 addi r2,r2,28
802e710: 1009883a mov r4,r2
802e714: 8027ba00 call 8027ba0 <tcp_wakeup>
sbrelease(sb);
802e718: e13fff17 ldw r4,-4(fp)
802e71c: 802fab00 call 802fab0 <sbrelease>
MEMSET((char *)sb, 0, sizeof (*sb));
802e720: 01800804 movi r6,32
802e724: 000b883a mov r5,zero
802e728: e13fff17 ldw r4,-4(fp)
802e72c: 80088e40 call 80088e4 <memset>
s = so->so_error;
802e730: e0bffd17 ldw r2,-12(fp)
802e734: 10800617 ldw r2,24(r2)
802e738: e0bffe15 stw r2,-8(fp)
so->so_error = ESHUTDOWN;
802e73c: e0bffd17 ldw r2,-12(fp)
802e740: 00c01b84 movi r3,110
802e744: 10c00615 stw r3,24(r2)
sorwakeup(so);
802e748: e0bffd17 ldw r2,-12(fp)
802e74c: 10800a04 addi r2,r2,40
802e750: 100b883a mov r5,r2
802e754: e13ffd17 ldw r4,-12(fp)
802e758: 802f94c0 call 802f94c <sbwakeup>
so->so_error = s;
802e75c: e0bffd17 ldw r2,-12(fp)
802e760: e0fffe17 ldw r3,-8(fp)
802e764: 10c00615 stw r3,24(r2)
}
802e768: 0001883a nop
802e76c: e037883a mov sp,fp
802e770: dfc00117 ldw ra,4(sp)
802e774: df000017 ldw fp,0(sp)
802e778: dec00204 addi sp,sp,8
802e77c: f800283a ret
0802e780 <sosetopt>:
int
sosetopt(struct socket * so,
int optname,
void * arg)
{
802e780: defff604 addi sp,sp,-40
802e784: dfc00915 stw ra,36(sp)
802e788: df000815 stw fp,32(sp)
802e78c: df000804 addi fp,sp,32
802e790: e13ffa15 stw r4,-24(fp)
802e794: e17ff915 stw r5,-28(fp)
802e798: e1bff815 stw r6,-32(fp)
int error = 0;
802e79c: e03fff15 stw zero,-4(fp)
switch (optname)
802e7a0: e0bff917 ldw r2,-28(fp)
802e7a4: 10808020 cmpeqi r2,r2,512
802e7a8: 1000521e bne r2,zero,802e8f4 <sosetopt+0x174>
802e7ac: e0bff917 ldw r2,-28(fp)
802e7b0: 10808048 cmpgei r2,r2,513
802e7b4: 1000211e bne r2,zero,802e83c <sosetopt+0xbc>
802e7b8: e0bff917 ldw r2,-28(fp)
802e7bc: 10800388 cmpgei r2,r2,14
802e7c0: 10000d1e bne r2,zero,802e7f8 <sosetopt+0x78>
802e7c4: e0bff917 ldw r2,-28(fp)
802e7c8: 10800248 cmpgei r2,r2,9
802e7cc: 1000971e bne r2,zero,802ea2c <sosetopt+0x2ac>
802e7d0: e0bff917 ldw r2,-28(fp)
802e7d4: 10800120 cmpeqi r2,r2,4
802e7d8: 1000461e bne r2,zero,802e8f4 <sosetopt+0x174>
802e7dc: e0bff917 ldw r2,-28(fp)
802e7e0: 10800220 cmpeqi r2,r2,8
802e7e4: 1000431e bne r2,zero,802e8f4 <sosetopt+0x174>
802e7e8: e0bff917 ldw r2,-28(fp)
802e7ec: 108000a0 cmpeqi r2,r2,2
802e7f0: 1000941e bne r2,zero,802ea44 <sosetopt+0x2c4>
802e7f4: 0000fb06 br 802ebe4 <sosetopt+0x464>
802e7f8: e0bff917 ldw r2,-28(fp)
802e7fc: 10800820 cmpeqi r2,r2,32
802e800: 10003c1e bne r2,zero,802e8f4 <sosetopt+0x174>
802e804: e0bff917 ldw r2,-28(fp)
802e808: 10800848 cmpgei r2,r2,33
802e80c: 1000041e bne r2,zero,802e820 <sosetopt+0xa0>
802e810: e0bff917 ldw r2,-28(fp)
802e814: 10800420 cmpeqi r2,r2,16
802e818: 1000361e bne r2,zero,802e8f4 <sosetopt+0x174>
802e81c: 0000f106 br 802ebe4 <sosetopt+0x464>
802e820: e0bff917 ldw r2,-28(fp)
802e824: 10802020 cmpeqi r2,r2,128
802e828: 10002d1e bne r2,zero,802e8e0 <sosetopt+0x160>
802e82c: e0bff917 ldw r2,-28(fp)
802e830: 10804020 cmpeqi r2,r2,256
802e834: 10002f1e bne r2,zero,802e8f4 <sosetopt+0x174>
802e838: 0000ea06 br 802ebe4 <sosetopt+0x464>
802e83c: e0bff917 ldw r2,-28(fp)
802e840: 10840520 cmpeqi r2,r2,4116
802e844: 1000531e bne r2,zero,802e994 <sosetopt+0x214>
802e848: e0bff917 ldw r2,-28(fp)
802e84c: 10840548 cmpgei r2,r2,4117
802e850: 10000f1e bne r2,zero,802e890 <sosetopt+0x110>
802e854: e0bff917 ldw r2,-28(fp)
802e858: 108401a0 cmpeqi r2,r2,4102
802e85c: 1000481e bne r2,zero,802e980 <sosetopt+0x200>
802e860: e0bff917 ldw r2,-28(fp)
802e864: 108401c8 cmpgei r2,r2,4103
802e868: 1000051e bne r2,zero,802e880 <sosetopt+0x100>
802e86c: e0bff917 ldw r2,-28(fp)
802e870: 10bbffc4 addi r2,r2,-4097
802e874: 108000a8 cmpgeui r2,r2,2
802e878: 1000da1e bne r2,zero,802ebe4 <sosetopt+0x464>
802e87c: 00002f06 br 802e93c <sosetopt+0x1bc>
802e880: e0bff917 ldw r2,-28(fp)
802e884: 10840420 cmpeqi r2,r2,4112
802e888: 1000af1e bne r2,zero,802eb48 <sosetopt+0x3c8>
802e88c: 0000d506 br 802ebe4 <sosetopt+0x464>
802e890: e0bff917 ldw r2,-28(fp)
802e894: 108800e0 cmpeqi r2,r2,8195
802e898: 1000ab1e bne r2,zero,802eb48 <sosetopt+0x3c8>
802e89c: e0bff917 ldw r2,-28(fp)
802e8a0: 10880108 cmpgei r2,r2,8196
802e8a4: 1000071e bne r2,zero,802e8c4 <sosetopt+0x144>
802e8a8: e0bff917 ldw r2,-28(fp)
802e8ac: 10840560 cmpeqi r2,r2,4117
802e8b0: 10003f1e bne r2,zero,802e9b0 <sosetopt+0x230>
802e8b4: e0bff917 ldw r2,-28(fp)
802e8b8: 108405a0 cmpeqi r2,r2,4118
802e8bc: 1000441e bne r2,zero,802e9d0 <sosetopt+0x250>
802e8c0: 0000c806 br 802ebe4 <sosetopt+0x464>
802e8c4: e0bff917 ldw r2,-28(fp)
802e8c8: 10880120 cmpeqi r2,r2,8196
802e8cc: 1000721e bne r2,zero,802ea98 <sosetopt+0x318>
802e8d0: e0bff917 ldw r2,-28(fp)
802e8d4: 10900020 cmpeqi r2,r2,16384
802e8d8: 1000061e bne r2,zero,802e8f4 <sosetopt+0x174>
802e8dc: 0000c106 br 802ebe4 <sosetopt+0x464>
{
case SO_LINGER:
so->so_linger = (short)((struct linger *)arg)->l_linger;
802e8e0: e0bff817 ldw r2,-32(fp)
802e8e4: 10800117 ldw r2,4(r2)
802e8e8: 1007883a mov r3,r2
802e8ec: e0bffa17 ldw r2,-24(fp)
802e8f0: 10c0080d sth r3,32(r2)
case SO_TCPSACK:
case SO_NOSLOWSTART:
#ifdef SUPPORT_SO_FULLMSS
case SO_FULLMSS:
#endif
if (*(int *)arg)
802e8f4: e0bff817 ldw r2,-32(fp)
802e8f8: 10800017 ldw r2,0(r2)
802e8fc: 10000726 beq r2,zero,802e91c <sosetopt+0x19c>
so->so_options |= optname;
802e900: e0bffa17 ldw r2,-24(fp)
802e904: 10c00417 ldw r3,16(r2)
802e908: e0bff917 ldw r2,-28(fp)
802e90c: 1886b03a or r3,r3,r2
802e910: e0bffa17 ldw r2,-24(fp)
802e914: 10c00415 stw r3,16(r2)
else
so->so_options &= ~optname;
break;
802e918: 0000b606 br 802ebf4 <sosetopt+0x474>
so->so_options &= ~optname;
802e91c: e0bffa17 ldw r2,-24(fp)
802e920: 10800417 ldw r2,16(r2)
802e924: e0fff917 ldw r3,-28(fp)
802e928: 00c6303a nor r3,zero,r3
802e92c: 10c6703a and r3,r2,r3
802e930: e0bffa17 ldw r2,-24(fp)
802e934: 10c00415 stw r3,16(r2)
break;
802e938: 0000ae06 br 802ebf4 <sosetopt+0x474>
break;
#endif /* TCP_BIGCWND */
case SO_SNDBUF:
case SO_RCVBUF:
if (sbreserve(optname == SO_SNDBUF ?
802e93c: e0bff917 ldw r2,-28(fp)
802e940: 10840058 cmpnei r2,r2,4097
802e944: 1000031e bne r2,zero,802e954 <sosetopt+0x1d4>
802e948: e0bffa17 ldw r2,-24(fp)
802e94c: 10801204 addi r2,r2,72
802e950: 00000206 br 802e95c <sosetopt+0x1dc>
802e954: e0bffa17 ldw r2,-24(fp)
802e958: 10800a04 addi r2,r2,40
&so->so_snd : &so->so_rcv,
(u_long) * (int *)arg) == 0)
802e95c: e0fff817 ldw r3,-32(fp)
802e960: 18c00017 ldw r3,0(r3)
if (sbreserve(optname == SO_SNDBUF ?
802e964: 180b883a mov r5,r3
802e968: 1009883a mov r4,r2
802e96c: 802fa600 call 802fa60 <sbreserve>
802e970: 10009f1e bne r2,zero,802ebf0 <sosetopt+0x470>
{
error = ENOBUFS;
802e974: 00801a44 movi r2,105
802e978: e0bfff15 stw r2,-4(fp)
goto bad;
802e97c: 00009d06 br 802ebf4 <sosetopt+0x474>
}
break;
case SO_RCVTIMEO:
so->so_rcv.sb_timeo = *(short *)arg;
802e980: e0bff817 ldw r2,-32(fp)
802e984: 10c0000b ldhu r3,0(r2)
802e988: e0bffa17 ldw r2,-24(fp)
802e98c: 10c0118d sth r3,70(r2)
break;
802e990: 00009806 br 802ebf4 <sosetopt+0x474>
case SO_NBIO: /* set socket into NON-blocking mode */
so->so_state |= SS_NBIO;
802e994: e0bffa17 ldw r2,-24(fp)
802e998: 1080088b ldhu r2,34(r2)
802e99c: 10804014 ori r2,r2,256
802e9a0: 1007883a mov r3,r2
802e9a4: e0bffa17 ldw r2,-24(fp)
802e9a8: 10c0088d sth r3,34(r2)
break;
802e9ac: 00009106 br 802ebf4 <sosetopt+0x474>
case SO_BIO: /* set socket into blocking mode */
so->so_state &= ~SS_NBIO;
802e9b0: e0bffa17 ldw r2,-24(fp)
802e9b4: 10c0088b ldhu r3,34(r2)
802e9b8: 00bfbfc4 movi r2,-257
802e9bc: 1884703a and r2,r3,r2
802e9c0: 1007883a mov r3,r2
802e9c4: e0bffa17 ldw r2,-24(fp)
802e9c8: 10c0088d sth r3,34(r2)
break;
802e9cc: 00008906 br 802ebf4 <sosetopt+0x474>
case SO_NONBLOCK: /* set blocking mode according to arg */
/* sanity check the arg parameter */
if (!arg)
802e9d0: e0bff817 ldw r2,-32(fp)
802e9d4: 1000031e bne r2,zero,802e9e4 <sosetopt+0x264>
{
error = ENP_PARAM;
802e9d8: 00bffd84 movi r2,-10
802e9dc: e0bfff15 stw r2,-4(fp)
break;
802e9e0: 00008406 br 802ebf4 <sosetopt+0x474>
}
/* if contents of integer addressed by arg are non-zero */
if (*(int *) arg)
802e9e4: e0bff817 ldw r2,-32(fp)
802e9e8: 10800017 ldw r2,0(r2)
802e9ec: 10000726 beq r2,zero,802ea0c <sosetopt+0x28c>
so->so_state |= SS_NBIO; /* set non-blocking mode */
802e9f0: e0bffa17 ldw r2,-24(fp)
802e9f4: 1080088b ldhu r2,34(r2)
802e9f8: 10804014 ori r2,r2,256
802e9fc: 1007883a mov r3,r2
802ea00: e0bffa17 ldw r2,-24(fp)
802ea04: 10c0088d sth r3,34(r2)
else
so->so_state &= ~SS_NBIO; /* set blocking mode */
break;
802ea08: 00007a06 br 802ebf4 <sosetopt+0x474>
so->so_state &= ~SS_NBIO; /* set blocking mode */
802ea0c: e0bffa17 ldw r2,-24(fp)
802ea10: 10c0088b ldhu r3,34(r2)
802ea14: 00bfbfc4 movi r2,-257
802ea18: 1884703a and r2,r3,r2
802ea1c: 1007883a mov r3,r2
802ea20: e0bffa17 ldw r2,-24(fp)
802ea24: 10c0088d sth r3,34(r2)
break;
802ea28: 00007206 br 802ebf4 <sosetopt+0x474>
case IP_MULTICAST_IF:
case IP_MULTICAST_TTL:
case IP_MULTICAST_LOOP:
case IP_ADD_MEMBERSHIP:
case IP_DROP_MEMBERSHIP:
error = ip_setmoptions(optname, so, arg);
802ea2c: e1bff817 ldw r6,-32(fp)
802ea30: e17ffa17 ldw r5,-24(fp)
802ea34: e13ff917 ldw r4,-28(fp)
802ea38: 803e7c40 call 803e7c4 <ip_setmoptions>
802ea3c: e0bfff15 stw r2,-4(fp)
break;
802ea40: 00006c06 br 802ebf4 <sosetopt+0x474>
#ifdef IP_RAW
case IP_HDRINCL:
/* try to make sure that the argument pointer is valid */
if (arg == NULL)
802ea44: e0bff817 ldw r2,-32(fp)
802ea48: 1000031e bne r2,zero,802ea58 <sosetopt+0x2d8>
{
error = ENP_PARAM;
802ea4c: 00bffd84 movi r2,-10
802ea50: e0bfff15 stw r2,-4(fp)
break;
802ea54: 00006706 br 802ebf4 <sosetopt+0x474>
}
/* set the socket option flag based on the pointed-to argument */
if (*(int *)arg)
802ea58: e0bff817 ldw r2,-32(fp)
802ea5c: 10800017 ldw r2,0(r2)
802ea60: 10000626 beq r2,zero,802ea7c <sosetopt+0x2fc>
so->so_options |= SO_HDRINCL;
802ea64: e0bffa17 ldw r2,-24(fp)
802ea68: 10800417 ldw r2,16(r2)
802ea6c: 10c80014 ori r3,r2,8192
802ea70: e0bffa17 ldw r2,-24(fp)
802ea74: 10c00415 stw r3,16(r2)
else
so->so_options &= ~SO_HDRINCL;
break;
802ea78: 00005e06 br 802ebf4 <sosetopt+0x474>
so->so_options &= ~SO_HDRINCL;
802ea7c: e0bffa17 ldw r2,-24(fp)
802ea80: 10c00417 ldw r3,16(r2)
802ea84: 00b7ffc4 movi r2,-8193
802ea88: 1886703a and r3,r3,r2
802ea8c: e0bffa17 ldw r2,-24(fp)
802ea90: 10c00415 stw r3,16(r2)
break;
802ea94: 00005706 br 802ebf4 <sosetopt+0x474>
case TCP_NODELAY:
{
struct inpcb * inp;
struct tcpcb * tp;
if(so->so_type != SOCK_STREAM)
802ea98: e0bffa17 ldw r2,-24(fp)
802ea9c: 10800983 ldbu r2,38(r2)
802eaa0: 10803fcc andi r2,r2,255
802eaa4: 1080201c xori r2,r2,128
802eaa8: 10bfe004 addi r2,r2,-128
802eaac: 10800060 cmpeqi r2,r2,1
802eab0: 1000031e bne r2,zero,802eac0 <sosetopt+0x340>
{
error = EINVAL;
802eab4: 00800584 movi r2,22
802eab8: e0bfff15 stw r2,-4(fp)
break;
802eabc: 00004d06 br 802ebf4 <sosetopt+0x474>
}
inp = (struct inpcb *)(so->so_pcb);
802eac0: e0bffa17 ldw r2,-24(fp)
802eac4: 10800117 ldw r2,4(r2)
802eac8: e0bffe15 stw r2,-8(fp)
tp = intotcpcb(inp);
802eacc: e0bffe17 ldw r2,-8(fp)
802ead0: 10800917 ldw r2,36(r2)
802ead4: e0bffd15 stw r2,-12(fp)
if(!tp)
802ead8: e0bffd17 ldw r2,-12(fp)
802eadc: 1000031e bne r2,zero,802eaec <sosetopt+0x36c>
{
error = ENOTCONN;
802eae0: 00802004 movi r2,128
802eae4: e0bfff15 stw r2,-4(fp)
break;
802eae8: 00004206 br 802ebf4 <sosetopt+0x474>
}
/* try to make sure that the argument pointer is valid */
if (arg == NULL)
802eaec: e0bff817 ldw r2,-32(fp)
802eaf0: 1000031e bne r2,zero,802eb00 <sosetopt+0x380>
{
error = ENP_PARAM;
802eaf4: 00bffd84 movi r2,-10
802eaf8: e0bfff15 stw r2,-4(fp)
break;
802eafc: 00003d06 br 802ebf4 <sosetopt+0x474>
}
/* if contents of integer addressed by arg are non-zero */
if (*(int *) arg)
802eb00: e0bff817 ldw r2,-32(fp)
802eb04: 10800017 ldw r2,0(r2)
802eb08: 10000726 beq r2,zero,802eb28 <sosetopt+0x3a8>
tp->t_flags |= TF_NODELAY; /* Disable Nagle Algorithm */
802eb0c: e0bffd17 ldw r2,-12(fp)
802eb10: 10800b0b ldhu r2,44(r2)
802eb14: 10800114 ori r2,r2,4
802eb18: 1007883a mov r3,r2
802eb1c: e0bffd17 ldw r2,-12(fp)
802eb20: 10c00b0d sth r3,44(r2)
else
tp->t_flags &= ~TF_NODELAY; /* Enable Nagle Algorithm */
break;
802eb24: 00003306 br 802ebf4 <sosetopt+0x474>
tp->t_flags &= ~TF_NODELAY; /* Enable Nagle Algorithm */
802eb28: e0bffd17 ldw r2,-12(fp)
802eb2c: 10c00b0b ldhu r3,44(r2)
802eb30: 00bffec4 movi r2,-5
802eb34: 1884703a and r2,r3,r2
802eb38: 1007883a mov r3,r2
802eb3c: e0bffd17 ldw r2,-12(fp)
802eb40: 10c00b0d sth r3,44(r2)
break;
802eb44: 00002b06 br 802ebf4 <sosetopt+0x474>
case TCP_MAXSEG:
{
struct inpcb * inp;
struct tcpcb * tp;
if(so->so_type != SOCK_STREAM)
802eb48: e0bffa17 ldw r2,-24(fp)
802eb4c: 10800983 ldbu r2,38(r2)
802eb50: 10803fcc andi r2,r2,255
802eb54: 1080201c xori r2,r2,128
802eb58: 10bfe004 addi r2,r2,-128
802eb5c: 10800060 cmpeqi r2,r2,1
802eb60: 1000031e bne r2,zero,802eb70 <sosetopt+0x3f0>
{
error = EINVAL;
802eb64: 00800584 movi r2,22
802eb68: e0bfff15 stw r2,-4(fp)
break;
802eb6c: 00002106 br 802ebf4 <sosetopt+0x474>
}
inp = (struct inpcb *)(so->so_pcb);
802eb70: e0bffa17 ldw r2,-24(fp)
802eb74: 10800117 ldw r2,4(r2)
802eb78: e0bffc15 stw r2,-16(fp)
tp = intotcpcb(inp);
802eb7c: e0bffc17 ldw r2,-16(fp)
802eb80: 10800917 ldw r2,36(r2)
802eb84: e0bffb15 stw r2,-20(fp)
if(!tp)
802eb88: e0bffb17 ldw r2,-20(fp)
802eb8c: 1000031e bne r2,zero,802eb9c <sosetopt+0x41c>
{
error = ENOTCONN;
802eb90: 00802004 movi r2,128
802eb94: e0bfff15 stw r2,-4(fp)
break;
802eb98: 00001606 br 802ebf4 <sosetopt+0x474>
}
if (tp->t_state != TCPS_CLOSED)
802eb9c: e0bffb17 ldw r2,-20(fp)
802eba0: 10800217 ldw r2,8(r2)
802eba4: 10000326 beq r2,zero,802ebb4 <sosetopt+0x434>
{
error = EINVAL;
802eba8: 00800584 movi r2,22
802ebac: e0bfff15 stw r2,-4(fp)
break;
802ebb0: 00001006 br 802ebf4 <sosetopt+0x474>
}
tp->t_maxseg = *(int*)(arg); /* set TCP MSS */
802ebb4: e0bff817 ldw r2,-32(fp)
802ebb8: 10800017 ldw r2,0(r2)
802ebbc: 1007883a mov r3,r2
802ebc0: e0bffb17 ldw r2,-20(fp)
802ebc4: 10c00a0d sth r3,40(r2)
tp->t_flags |= TF_MAXSEG; /* mark as user set max seg */
802ebc8: e0bffb17 ldw r2,-20(fp)
802ebcc: 10800b0b ldhu r2,44(r2)
802ebd0: 10810014 ori r2,r2,1024
802ebd4: 1007883a mov r3,r2
802ebd8: e0bffb17 ldw r2,-20(fp)
802ebdc: 10c00b0d sth r3,44(r2)
break;
802ebe0: 00000406 br 802ebf4 <sosetopt+0x474>
}
default:
error = ENOPROTOOPT;
802ebe4: 00801b44 movi r2,109
802ebe8: e0bfff15 stw r2,-4(fp)
break;
802ebec: 00000106 br 802ebf4 <sosetopt+0x474>
break;
802ebf0: 0001883a nop
}
bad:
return (error);
802ebf4: e0bfff17 ldw r2,-4(fp)
}
802ebf8: e037883a mov sp,fp
802ebfc: dfc00117 ldw ra,4(sp)
802ec00: df000017 ldw fp,0(sp)
802ec04: dec00204 addi sp,sp,8
802ec08: f800283a ret
0802ec0c <sogetopt>:
int
sogetopt(struct socket * so,
int optname,
void * val)
{
802ec0c: defff504 addi sp,sp,-44
802ec10: dfc00a15 stw ra,40(sp)
802ec14: df000915 stw fp,36(sp)
802ec18: df000904 addi fp,sp,36
802ec1c: e13ff915 stw r4,-28(fp)
802ec20: e17ff815 stw r5,-32(fp)
802ec24: e1bff715 stw r6,-36(fp)
int error = 0;
802ec28: e03fff15 stw zero,-4(fp)
/* sanity check the val parameter */
if (!val)
802ec2c: e0bff717 ldw r2,-36(fp)
802ec30: 1000021e bne r2,zero,802ec3c <sogetopt+0x30>
{
return ENP_PARAM;
802ec34: 00bffd84 movi r2,-10
802ec38: 00013706 br 802f118 <sogetopt+0x50c>
}
switch (optname)
802ec3c: e0bff817 ldw r2,-32(fp)
802ec40: 108400e0 cmpeqi r2,r2,4099
802ec44: 10008e1e bne r2,zero,802ee80 <sogetopt+0x274>
802ec48: e0bff817 ldw r2,-32(fp)
802ec4c: 10840108 cmpgei r2,r2,4100
802ec50: 10002e1e bne r2,zero,802ed0c <sogetopt+0x100>
802ec54: e0bff817 ldw r2,-32(fp)
802ec58: 10800420 cmpeqi r2,r2,16
802ec5c: 1000801e bne r2,zero,802ee60 <sogetopt+0x254>
802ec60: e0bff817 ldw r2,-32(fp)
802ec64: 10800448 cmpgei r2,r2,17
802ec68: 1000111e bne r2,zero,802ecb0 <sogetopt+0xa4>
802ec6c: e0bff817 ldw r2,-32(fp)
802ec70: 10800220 cmpeqi r2,r2,8
802ec74: 10007a1e bne r2,zero,802ee60 <sogetopt+0x254>
802ec78: e0bff817 ldw r2,-32(fp)
802ec7c: 10800248 cmpgei r2,r2,9
802ec80: 1000071e bne r2,zero,802eca0 <sogetopt+0x94>
802ec84: e0bff817 ldw r2,-32(fp)
802ec88: 108000a0 cmpeqi r2,r2,2
802ec8c: 1000ee1e bne r2,zero,802f048 <sogetopt+0x43c>
802ec90: e0bff817 ldw r2,-32(fp)
802ec94: 10800120 cmpeqi r2,r2,4
802ec98: 1000711e bne r2,zero,802ee60 <sogetopt+0x254>
802ec9c: 00011b06 br 802f10c <sogetopt+0x500>
802eca0: e0bff817 ldw r2,-32(fp)
802eca4: 10800308 cmpgei r2,r2,12
802eca8: 1001181e bne r2,zero,802f10c <sogetopt+0x500>
802ecac: 0000e006 br 802f030 <sogetopt+0x424>
802ecb0: e0bff817 ldw r2,-32(fp)
802ecb4: 10804020 cmpeqi r2,r2,256
802ecb8: 1000691e bne r2,zero,802ee60 <sogetopt+0x254>
802ecbc: e0bff817 ldw r2,-32(fp)
802ecc0: 10804048 cmpgei r2,r2,257
802ecc4: 1000071e bne r2,zero,802ece4 <sogetopt+0xd8>
802ecc8: e0bff817 ldw r2,-32(fp)
802eccc: 10800820 cmpeqi r2,r2,32
802ecd0: 1000631e bne r2,zero,802ee60 <sogetopt+0x254>
802ecd4: e0bff817 ldw r2,-32(fp)
802ecd8: 10802020 cmpeqi r2,r2,128
802ecdc: 1000511e bne r2,zero,802ee24 <sogetopt+0x218>
802ece0: 00010a06 br 802f10c <sogetopt+0x500>
802ece4: e0bff817 ldw r2,-32(fp)
802ece8: 10840060 cmpeqi r2,r2,4097
802ecec: 1000701e bne r2,zero,802eeb0 <sogetopt+0x2a4>
802ecf0: e0bff817 ldw r2,-32(fp)
802ecf4: 10840088 cmpgei r2,r2,4098
802ecf8: 1000731e bne r2,zero,802eec8 <sogetopt+0x2bc>
802ecfc: e0bff817 ldw r2,-32(fp)
802ed00: 10808020 cmpeqi r2,r2,512
802ed04: 1000561e bne r2,zero,802ee60 <sogetopt+0x254>
802ed08: 00010006 br 802f10c <sogetopt+0x500>
802ed0c: e0bff817 ldw r2,-32(fp)
802ed10: 10840420 cmpeqi r2,r2,4112
802ed14: 10008d1e bne r2,zero,802ef4c <sogetopt+0x340>
802ed18: e0bff817 ldw r2,-32(fp)
802ed1c: 10840448 cmpgei r2,r2,4113
802ed20: 1000171e bne r2,zero,802ed80 <sogetopt+0x174>
802ed24: e0bff817 ldw r2,-32(fp)
802ed28: 108401a0 cmpeqi r2,r2,4102
802ed2c: 1000a71e bne r2,zero,802efcc <sogetopt+0x3c0>
802ed30: e0bff817 ldw r2,-32(fp)
802ed34: 108401c8 cmpgei r2,r2,4103
802ed38: 1000071e bne r2,zero,802ed58 <sogetopt+0x14c>
802ed3c: e0bff817 ldw r2,-32(fp)
802ed40: 10840120 cmpeqi r2,r2,4100
802ed44: 1000541e bne r2,zero,802ee98 <sogetopt+0x28c>
802ed48: e0bff817 ldw r2,-32(fp)
802ed4c: 10840160 cmpeqi r2,r2,4101
802ed50: 1000991e bne r2,zero,802efb8 <sogetopt+0x3ac>
802ed54: 0000ed06 br 802f10c <sogetopt+0x500>
802ed58: e0bff817 ldw r2,-32(fp)
802ed5c: 10840220 cmpeqi r2,r2,4104
802ed60: 10006b1e bne r2,zero,802ef10 <sogetopt+0x304>
802ed64: e0bff817 ldw r2,-32(fp)
802ed68: 10840210 cmplti r2,r2,4104
802ed6c: 1000701e bne r2,zero,802ef30 <sogetopt+0x324>
802ed70: e0bff817 ldw r2,-32(fp)
802ed74: 10840260 cmpeqi r2,r2,4105
802ed78: 1000991e bne r2,zero,802efe0 <sogetopt+0x3d4>
802ed7c: 0000e306 br 802f10c <sogetopt+0x500>
802ed80: e0bff817 ldw r2,-32(fp)
802ed84: 108404e0 cmpeqi r2,r2,4115
802ed88: 1000141e bne r2,zero,802eddc <sogetopt+0x1d0>
802ed8c: e0bff817 ldw r2,-32(fp)
802ed90: 10840508 cmpgei r2,r2,4116
802ed94: 1000071e bne r2,zero,802edb4 <sogetopt+0x1a8>
802ed98: e0bff817 ldw r2,-32(fp)
802ed9c: 10840460 cmpeqi r2,r2,4113
802eda0: 10004f1e bne r2,zero,802eee0 <sogetopt+0x2d4>
802eda4: e0bff817 ldw r2,-32(fp)
802eda8: 108404a0 cmpeqi r2,r2,4114
802edac: 1000521e bne r2,zero,802eef8 <sogetopt+0x2ec>
802edb0: 0000d606 br 802f10c <sogetopt+0x500>
802edb4: e0bff817 ldw r2,-32(fp)
802edb8: 108800e0 cmpeqi r2,r2,8195
802edbc: 1000631e bne r2,zero,802ef4c <sogetopt+0x340>
802edc0: e0bff817 ldw r2,-32(fp)
802edc4: 10880120 cmpeqi r2,r2,8196
802edc8: 1000aa1e bne r2,zero,802f074 <sogetopt+0x468>
802edcc: e0bff817 ldw r2,-32(fp)
802edd0: 108405a0 cmpeqi r2,r2,4118
802edd4: 10008a1e bne r2,zero,802f000 <sogetopt+0x3f4>
802edd8: 0000cc06 br 802f10c <sogetopt+0x500>
{
case SO_MYADDR:
/* Get my IP address. */
if (so->so_state & SS_ISCONNECTED)
802eddc: e0bff917 ldw r2,-28(fp)
802ede0: 1080088b ldhu r2,34(r2)
802ede4: 10bfffcc andi r2,r2,65535
802ede8: 1080008c andi r2,r2,2
802edec: 10000726 beq r2,zero,802ee0c <sogetopt+0x200>
{
*(u_long *)val = so->so_pcb->ifp->n_ipaddr;
802edf0: e0bff917 ldw r2,-28(fp)
802edf4: 10800117 ldw r2,4(r2)
802edf8: 10800a17 ldw r2,40(r2)
802edfc: 10c00a17 ldw r3,40(r2)
802ee00: e0bff717 ldw r2,-36(fp)
802ee04: 10c00015 stw r3,0(r2)
}
else /* not connected, use first iface */
*(u_long *)val = nets[0]->n_ipaddr;
break;
802ee08: 0000c206 br 802f114 <sogetopt+0x508>
*(u_long *)val = nets[0]->n_ipaddr;
802ee0c: 008201b4 movhi r2,2054
802ee10: 10b77017 ldw r2,-8768(r2)
802ee14: 10c00a17 ldw r3,40(r2)
802ee18: e0bff717 ldw r2,-36(fp)
802ee1c: 10c00015 stw r3,0(r2)
break;
802ee20: 0000bc06 br 802f114 <sogetopt+0x508>
case SO_LINGER:
{
struct linger * l = (struct linger *)val;
802ee24: e0bff717 ldw r2,-36(fp)
802ee28: e0bffe15 stw r2,-8(fp)
l->l_onoff = so->so_options & SO_LINGER;
802ee2c: e0bff917 ldw r2,-28(fp)
802ee30: 10800417 ldw r2,16(r2)
802ee34: 10c0200c andi r3,r2,128
802ee38: e0bffe17 ldw r2,-8(fp)
802ee3c: 10c00015 stw r3,0(r2)
l->l_linger = so->so_linger;
802ee40: e0bff917 ldw r2,-28(fp)
802ee44: 1080080b ldhu r2,32(r2)
802ee48: 10ffffcc andi r3,r2,65535
802ee4c: 18e0001c xori r3,r3,32768
802ee50: 18e00004 addi r3,r3,-32768
802ee54: e0bffe17 ldw r2,-8(fp)
802ee58: 10c00115 stw r3,4(r2)
}
break;
802ee5c: 0000ad06 br 802f114 <sogetopt+0x508>
case SO_OOBINLINE:
case SO_DONTROUTE:
case SO_REUSEADDR:
case SO_BROADCAST:
case SO_TCPSACK:
*(int *)val = so->so_options & optname;
802ee60: e0bff917 ldw r2,-28(fp)
802ee64: 10c00417 ldw r3,16(r2)
802ee68: e0bff817 ldw r2,-32(fp)
802ee6c: 1884703a and r2,r3,r2
802ee70: 1007883a mov r3,r2
802ee74: e0bff717 ldw r2,-36(fp)
802ee78: 10c00015 stw r3,0(r2)
break;
802ee7c: 0000a506 br 802f114 <sogetopt+0x508>
case SO_SNDLOWAT:
*(int *)val = (int)so->so_snd.sb_lowat;
802ee80: e0bff917 ldw r2,-28(fp)
802ee84: 10801617 ldw r2,88(r2)
802ee88: 1007883a mov r3,r2
802ee8c: e0bff717 ldw r2,-36(fp)
802ee90: 10c00015 stw r3,0(r2)
break;
802ee94: 00009f06 br 802f114 <sogetopt+0x508>
case SO_RCVLOWAT:
*(int *)val = (int)so->so_rcv.sb_lowat;
802ee98: e0bff917 ldw r2,-28(fp)
802ee9c: 10800e17 ldw r2,56(r2)
802eea0: 1007883a mov r3,r2
802eea4: e0bff717 ldw r2,-36(fp)
802eea8: 10c00015 stw r3,0(r2)
break;
802eeac: 00009906 br 802f114 <sogetopt+0x508>
case SO_SNDBUF:
*(int *)val = (int)so->so_snd.sb_hiwat;
802eeb0: e0bff917 ldw r2,-28(fp)
802eeb4: 10801317 ldw r2,76(r2)
802eeb8: 1007883a mov r3,r2
802eebc: e0bff717 ldw r2,-36(fp)
802eec0: 10c00015 stw r3,0(r2)
break;
802eec4: 00009306 br 802f114 <sogetopt+0x508>
case SO_RCVBUF:
*(int *)val = (int)so->so_rcv.sb_hiwat;
802eec8: e0bff917 ldw r2,-28(fp)
802eecc: 10800b17 ldw r2,44(r2)
802eed0: 1007883a mov r3,r2
802eed4: e0bff717 ldw r2,-36(fp)
802eed8: 10c00015 stw r3,0(r2)
break;
802eedc: 00008d06 br 802f114 <sogetopt+0x508>
case SO_RXDATA: /* added, JB */
*(int *)val = (int)so->so_rcv.sb_cc;
802eee0: e0bff917 ldw r2,-28(fp)
802eee4: 10800a17 ldw r2,40(r2)
802eee8: 1007883a mov r3,r2
802eeec: e0bff717 ldw r2,-36(fp)
802eef0: 10c00015 stw r3,0(r2)
break;
802eef4: 00008706 br 802f114 <sogetopt+0x508>
case SO_TXDATA: /* added for rel 1.8 */
*(int *)val = (int)so->so_snd.sb_cc;
802eef8: e0bff917 ldw r2,-28(fp)
802eefc: 10801217 ldw r2,72(r2)
802ef00: 1007883a mov r3,r2
802ef04: e0bff717 ldw r2,-36(fp)
802ef08: 10c00015 stw r3,0(r2)
break;
802ef0c: 00008106 br 802f114 <sogetopt+0x508>
case SO_TYPE:
*(int *)val = so->so_type;
802ef10: e0bff917 ldw r2,-28(fp)
802ef14: 10800983 ldbu r2,38(r2)
802ef18: 10c03fcc andi r3,r2,255
802ef1c: 18c0201c xori r3,r3,128
802ef20: 18ffe004 addi r3,r3,-128
802ef24: e0bff717 ldw r2,-36(fp)
802ef28: 10c00015 stw r3,0(r2)
break;
802ef2c: 00007906 br 802f114 <sogetopt+0x508>
case SO_ERROR:
*(int *)val = so->so_error;
802ef30: e0bff917 ldw r2,-28(fp)
802ef34: 10c00617 ldw r3,24(r2)
802ef38: e0bff717 ldw r2,-36(fp)
802ef3c: 10c00015 stw r3,0(r2)
so->so_error = 0;
802ef40: e0bff917 ldw r2,-28(fp)
802ef44: 10000615 stw zero,24(r2)
break;
802ef48: 00007206 br 802f114 <sogetopt+0x508>
case TCP_MAXSEG:
{
struct inpcb * inp;
struct tcpcb * tp;
if(so->so_type != SOCK_STREAM)
802ef4c: e0bff917 ldw r2,-28(fp)
802ef50: 10800983 ldbu r2,38(r2)
802ef54: 10803fcc andi r2,r2,255
802ef58: 1080201c xori r2,r2,128
802ef5c: 10bfe004 addi r2,r2,-128
802ef60: 10800060 cmpeqi r2,r2,1
802ef64: 1000031e bne r2,zero,802ef74 <sogetopt+0x368>
{
error = EINVAL;
802ef68: 00800584 movi r2,22
802ef6c: e0bfff15 stw r2,-4(fp)
break;
802ef70: 00006806 br 802f114 <sogetopt+0x508>
}
inp = (struct inpcb *)(so->so_pcb);
802ef74: e0bff917 ldw r2,-28(fp)
802ef78: 10800117 ldw r2,4(r2)
802ef7c: e0bffd15 stw r2,-12(fp)
tp = intotcpcb(inp);
802ef80: e0bffd17 ldw r2,-12(fp)
802ef84: 10800917 ldw r2,36(r2)
802ef88: e0bffc15 stw r2,-16(fp)
if(!tp)
802ef8c: e0bffc17 ldw r2,-16(fp)
802ef90: 1000031e bne r2,zero,802efa0 <sogetopt+0x394>
{
error = ENOTCONN;
802ef94: 00802004 movi r2,128
802ef98: e0bfff15 stw r2,-4(fp)
break;
802ef9c: 00005d06 br 802f114 <sogetopt+0x508>
}
*(int *)val = tp->t_maxseg; /* Fill in TCP MSS for current socket */
802efa0: e0bffc17 ldw r2,-16(fp)
802efa4: 10800a0b ldhu r2,40(r2)
802efa8: 10ffffcc andi r3,r2,65535
802efac: e0bff717 ldw r2,-36(fp)
802efb0: 10c00015 stw r3,0(r2)
break;
802efb4: 00005706 br 802f114 <sogetopt+0x508>
}
case SO_SNDTIMEO:
*(short*)val = so->so_snd.sb_timeo;
802efb8: e0bff917 ldw r2,-28(fp)
802efbc: 10c0198b ldhu r3,102(r2)
802efc0: e0bff717 ldw r2,-36(fp)
802efc4: 10c0000d sth r3,0(r2)
break;
802efc8: 00005206 br 802f114 <sogetopt+0x508>
case SO_RCVTIMEO:
*(short*)val = so->so_rcv.sb_timeo;
802efcc: e0bff917 ldw r2,-28(fp)
802efd0: 10c0118b ldhu r3,70(r2)
802efd4: e0bff717 ldw r2,-36(fp)
802efd8: 10c0000d sth r3,0(r2)
break;
802efdc: 00004d06 br 802f114 <sogetopt+0x508>
case SO_HOPCNT:
*(int *)val = so->so_hopcnt;
802efe0: e0bff917 ldw r2,-28(fp)
802efe4: 108009c3 ldbu r2,39(r2)
802efe8: 10c03fcc andi r3,r2,255
802efec: 18c0201c xori r3,r3,128
802eff0: 18ffe004 addi r3,r3,-128
802eff4: e0bff717 ldw r2,-36(fp)
802eff8: 10c00015 stw r3,0(r2)
break;
802effc: 00004506 br 802f114 <sogetopt+0x508>
case SO_NONBLOCK: /* get blocking mode according to val */
/* if the non-blocking I/O bit is set in the state */
if (so->so_state & SS_NBIO)
802f000: e0bff917 ldw r2,-28(fp)
802f004: 1080088b ldhu r2,34(r2)
802f008: 10bfffcc andi r2,r2,65535
802f00c: 1080400c andi r2,r2,256
802f010: 10000426 beq r2,zero,802f024 <sogetopt+0x418>
*(int *)val = 1; /* return 1 in val */
802f014: e0bff717 ldw r2,-36(fp)
802f018: 00c00044 movi r3,1
802f01c: 10c00015 stw r3,0(r2)
else
*(int *)val = 0; /* return 0 in val */
break;
802f020: 00003c06 br 802f114 <sogetopt+0x508>
*(int *)val = 0; /* return 0 in val */
802f024: e0bff717 ldw r2,-36(fp)
802f028: 10000015 stw zero,0(r2)
break;
802f02c: 00003906 br 802f114 <sogetopt+0x508>
#ifdef IP_MULTICAST
case IP_MULTICAST_IF:
case IP_MULTICAST_TTL:
case IP_MULTICAST_LOOP:
error = ip_getmoptions(optname, so, val);
802f030: e1bff717 ldw r6,-36(fp)
802f034: e17ff917 ldw r5,-28(fp)
802f038: e13ff817 ldw r4,-32(fp)
802f03c: 803ed640 call 803ed64 <ip_getmoptions>
802f040: e0bfff15 stw r2,-4(fp)
break;
802f044: 00003306 br 802f114 <sogetopt+0x508>
#ifdef IP_RAW
case IP_HDRINCL:
/* indicate based on header-include flag in socket state */
if (so->so_options & SO_HDRINCL)
802f048: e0bff917 ldw r2,-28(fp)
802f04c: 10800417 ldw r2,16(r2)
802f050: 1088000c andi r2,r2,8192
802f054: 10000426 beq r2,zero,802f068 <sogetopt+0x45c>
*(int *)val = 1;
802f058: e0bff717 ldw r2,-36(fp)
802f05c: 00c00044 movi r3,1
802f060: 10c00015 stw r3,0(r2)
else
*(int *)val = 0;
break;
802f064: 00002b06 br 802f114 <sogetopt+0x508>
*(int *)val = 0;
802f068: e0bff717 ldw r2,-36(fp)
802f06c: 10000015 stw zero,0(r2)
break;
802f070: 00002806 br 802f114 <sogetopt+0x508>
case TCP_NODELAY:
{
struct inpcb * inp;
struct tcpcb * tp;
if(so->so_type != SOCK_STREAM)
802f074: e0bff917 ldw r2,-28(fp)
802f078: 10800983 ldbu r2,38(r2)
802f07c: 10803fcc andi r2,r2,255
802f080: 1080201c xori r2,r2,128
802f084: 10bfe004 addi r2,r2,-128
802f088: 10800060 cmpeqi r2,r2,1
802f08c: 1000031e bne r2,zero,802f09c <sogetopt+0x490>
{
error = EINVAL;
802f090: 00800584 movi r2,22
802f094: e0bfff15 stw r2,-4(fp)
break;
802f098: 00001e06 br 802f114 <sogetopt+0x508>
}
inp = (struct inpcb *)(so->so_pcb);
802f09c: e0bff917 ldw r2,-28(fp)
802f0a0: 10800117 ldw r2,4(r2)
802f0a4: e0bffb15 stw r2,-20(fp)
tp = intotcpcb(inp);
802f0a8: e0bffb17 ldw r2,-20(fp)
802f0ac: 10800917 ldw r2,36(r2)
802f0b0: e0bffa15 stw r2,-24(fp)
if (!tp)
802f0b4: e0bffa17 ldw r2,-24(fp)
802f0b8: 1000031e bne r2,zero,802f0c8 <sogetopt+0x4bc>
{
error = ENOTCONN;
802f0bc: 00802004 movi r2,128
802f0c0: e0bfff15 stw r2,-4(fp)
break;
802f0c4: 00001306 br 802f114 <sogetopt+0x508>
}
/* try to make sure that the argument pointer is valid */
if (val == NULL)
802f0c8: e0bff717 ldw r2,-36(fp)
802f0cc: 1000031e bne r2,zero,802f0dc <sogetopt+0x4d0>
{
error = ENP_PARAM;
802f0d0: 00bffd84 movi r2,-10
802f0d4: e0bfff15 stw r2,-4(fp)
break;
802f0d8: 00000e06 br 802f114 <sogetopt+0x508>
}
/* if contents of integer addressed by arg are non-zero */
if (tp->t_flags & TF_NODELAY)
802f0dc: e0bffa17 ldw r2,-24(fp)
802f0e0: 10800b0b ldhu r2,44(r2)
802f0e4: 10bfffcc andi r2,r2,65535
802f0e8: 1080010c andi r2,r2,4
802f0ec: 10000426 beq r2,zero,802f100 <sogetopt+0x4f4>
*(int *)val = 1; /* Nagle Algorithm is Enabled */
802f0f0: e0bff717 ldw r2,-36(fp)
802f0f4: 00c00044 movi r3,1
802f0f8: 10c00015 stw r3,0(r2)
else
*(int *)val = 0; /* Nagle Algorithm is NOT Enabled */
break;
802f0fc: 00000506 br 802f114 <sogetopt+0x508>
*(int *)val = 0; /* Nagle Algorithm is NOT Enabled */
802f100: e0bff717 ldw r2,-36(fp)
802f104: 10000015 stw zero,0(r2)
break;
802f108: 00000206 br 802f114 <sogetopt+0x508>
}
default:
return ENOPROTOOPT;
802f10c: 00801b44 movi r2,109
802f110: 00000106 br 802f118 <sogetopt+0x50c>
}
return error; /* no error */
802f114: e0bfff17 ldw r2,-4(fp)
}
802f118: e037883a mov sp,fp
802f11c: dfc00117 ldw ra,4(sp)
802f120: df000017 ldw fp,0(sp)
802f124: dec00204 addi sp,sp,8
802f128: f800283a ret
0802f12c <sohasoutofband>:
* RETURNS:
*/
void
sohasoutofband(struct socket * so)
{
802f12c: defffd04 addi sp,sp,-12
802f130: dfc00215 stw ra,8(sp)
802f134: df000115 stw fp,4(sp)
802f138: df000104 addi fp,sp,4
802f13c: e13fff15 stw r4,-4(fp)
so->so_error = EHAVEOOB; /* WILL be picked up by the socket */
802f140: e0bfff17 ldw r2,-4(fp)
802f144: 00c03644 movi r3,217
802f148: 10c00615 stw r3,24(r2)
sorwakeup (so);
802f14c: e0bfff17 ldw r2,-4(fp)
802f150: 10800a04 addi r2,r2,40
802f154: 100b883a mov r5,r2
802f158: e13fff17 ldw r4,-4(fp)
802f15c: 802f94c0 call 802f94c <sbwakeup>
}
802f160: 0001883a nop
802f164: e037883a mov sp,fp
802f168: dfc00117 ldw ra,4(sp)
802f16c: df000017 ldw fp,0(sp)
802f170: dec00204 addi sp,sp,8
802f174: f800283a ret
0802f178 <soisconnecting>:
* RETURNS:
*/
void
soisconnecting(struct socket * so)
{
802f178: defffd04 addi sp,sp,-12
802f17c: dfc00215 stw ra,8(sp)
802f180: df000115 stw fp,4(sp)
802f184: df000104 addi fp,sp,4
802f188: e13fff15 stw r4,-4(fp)
so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
802f18c: e0bfff17 ldw r2,-4(fp)
802f190: 10c0088b ldhu r3,34(r2)
802f194: 00bffd44 movi r2,-11
802f198: 1884703a and r2,r3,r2
802f19c: 1007883a mov r3,r2
802f1a0: e0bfff17 ldw r2,-4(fp)
802f1a4: 10c0088d sth r3,34(r2)
so->so_state |= SS_ISCONNECTING;
802f1a8: e0bfff17 ldw r2,-4(fp)
802f1ac: 1080088b ldhu r2,34(r2)
802f1b0: 10800114 ori r2,r2,4
802f1b4: 1007883a mov r3,r2
802f1b8: e0bfff17 ldw r2,-4(fp)
802f1bc: 10c0088d sth r3,34(r2)
tcp_wakeup ((char *)&so->so_timeo);
802f1c0: e0bfff17 ldw r2,-4(fp)
802f1c4: 10800904 addi r2,r2,36
802f1c8: 1009883a mov r4,r2
802f1cc: 8027ba00 call 8027ba0 <tcp_wakeup>
}
802f1d0: 0001883a nop
802f1d4: e037883a mov sp,fp
802f1d8: dfc00117 ldw ra,4(sp)
802f1dc: df000017 ldw fp,0(sp)
802f1e0: dec00204 addi sp,sp,8
802f1e4: f800283a ret
0802f1e8 <soisconnected>:
* RETURNS:
*/
void
soisconnected(struct socket * so)
{
802f1e8: defffc04 addi sp,sp,-16
802f1ec: dfc00315 stw ra,12(sp)
802f1f0: df000215 stw fp,8(sp)
802f1f4: df000204 addi fp,sp,8
802f1f8: e13ffe15 stw r4,-8(fp)
struct socket * head = so->so_head;
802f1fc: e0bffe17 ldw r2,-8(fp)
802f200: 10801b17 ldw r2,108(r2)
802f204: e0bfff15 stw r2,-4(fp)
if (head)
802f208: e0bfff17 ldw r2,-4(fp)
802f20c: 10001426 beq r2,zero,802f260 <soisconnected+0x78>
{
if (soqremque(so, 0) == 0)
802f210: 000b883a mov r5,zero
802f214: e13ffe17 ldw r4,-8(fp)
802f218: 802f6ec0 call 802f6ec <soqremque>
802f21c: 1000031e bne r2,zero,802f22c <soisconnected+0x44>
panic("soisconnected");
802f220: 01020174 movhi r4,2053
802f224: 212a8a04 addi r4,r4,-21976
802f228: 80271780 call 8027178 <panic>
soqinsque(head, so, 1);
802f22c: 01800044 movi r6,1
802f230: e17ffe17 ldw r5,-8(fp)
802f234: e13fff17 ldw r4,-4(fp)
802f238: 802f6400 call 802f640 <soqinsque>
sorwakeup(head);
802f23c: e0bfff17 ldw r2,-4(fp)
802f240: 10800a04 addi r2,r2,40
802f244: 100b883a mov r5,r2
802f248: e13fff17 ldw r4,-4(fp)
802f24c: 802f94c0 call 802f94c <sbwakeup>
tcp_wakeup ((char *)&head->so_timeo);
802f250: e0bfff17 ldw r2,-4(fp)
802f254: 10800904 addi r2,r2,36
802f258: 1009883a mov r4,r2
802f25c: 8027ba00 call 8027ba0 <tcp_wakeup>
}
so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
802f260: e0bffe17 ldw r2,-8(fp)
802f264: 10c0088b ldhu r3,34(r2)
802f268: 00bffcc4 movi r2,-13
802f26c: 1884703a and r2,r3,r2
802f270: 1007883a mov r3,r2
802f274: e0bffe17 ldw r2,-8(fp)
802f278: 10c0088d sth r3,34(r2)
so->so_state |= SS_ISCONNECTED;
802f27c: e0bffe17 ldw r2,-8(fp)
802f280: 1080088b ldhu r2,34(r2)
802f284: 10800094 ori r2,r2,2
802f288: 1007883a mov r3,r2
802f28c: e0bffe17 ldw r2,-8(fp)
802f290: 10c0088d sth r3,34(r2)
so->so_error = 0;
802f294: e0bffe17 ldw r2,-8(fp)
802f298: 10000615 stw zero,24(r2)
tcp_wakeup ((char *)&so->so_timeo);
802f29c: e0bffe17 ldw r2,-8(fp)
802f2a0: 10800904 addi r2,r2,36
802f2a4: 1009883a mov r4,r2
802f2a8: 8027ba00 call 8027ba0 <tcp_wakeup>
sorwakeup (so);
802f2ac: e0bffe17 ldw r2,-8(fp)
802f2b0: 10800a04 addi r2,r2,40
802f2b4: 100b883a mov r5,r2
802f2b8: e13ffe17 ldw r4,-8(fp)
802f2bc: 802f94c0 call 802f94c <sbwakeup>
sowwakeup (so);
802f2c0: e0bffe17 ldw r2,-8(fp)
802f2c4: 10801204 addi r2,r2,72
802f2c8: 100b883a mov r5,r2
802f2cc: e13ffe17 ldw r4,-8(fp)
802f2d0: 802f94c0 call 802f94c <sbwakeup>
}
802f2d4: 0001883a nop
802f2d8: e037883a mov sp,fp
802f2dc: dfc00117 ldw ra,4(sp)
802f2e0: df000017 ldw fp,0(sp)
802f2e4: dec00204 addi sp,sp,8
802f2e8: f800283a ret
0802f2ec <soisdisconnecting>:
* RETURNS:
*/
void
soisdisconnecting(struct socket * so)
{
802f2ec: defffd04 addi sp,sp,-12
802f2f0: dfc00215 stw ra,8(sp)
802f2f4: df000115 stw fp,4(sp)
802f2f8: df000104 addi fp,sp,4
802f2fc: e13fff15 stw r4,-4(fp)
so->so_state &= ~SS_ISCONNECTING;
802f300: e0bfff17 ldw r2,-4(fp)
802f304: 10c0088b ldhu r3,34(r2)
802f308: 00bffec4 movi r2,-5
802f30c: 1884703a and r2,r3,r2
802f310: 1007883a mov r3,r2
802f314: e0bfff17 ldw r2,-4(fp)
802f318: 10c0088d sth r3,34(r2)
so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE|SS_CANTSENDMORE);
802f31c: e0bfff17 ldw r2,-4(fp)
802f320: 1080088b ldhu r2,34(r2)
802f324: 10800e14 ori r2,r2,56
802f328: 1007883a mov r3,r2
802f32c: e0bfff17 ldw r2,-4(fp)
802f330: 10c0088d sth r3,34(r2)
tcp_wakeup ((char *)&so->so_timeo);
802f334: e0bfff17 ldw r2,-4(fp)
802f338: 10800904 addi r2,r2,36
802f33c: 1009883a mov r4,r2
802f340: 8027ba00 call 8027ba0 <tcp_wakeup>
sowwakeup (so);
802f344: e0bfff17 ldw r2,-4(fp)
802f348: 10801204 addi r2,r2,72
802f34c: 100b883a mov r5,r2
802f350: e13fff17 ldw r4,-4(fp)
802f354: 802f94c0 call 802f94c <sbwakeup>
sorwakeup (so);
802f358: e0bfff17 ldw r2,-4(fp)
802f35c: 10800a04 addi r2,r2,40
802f360: 100b883a mov r5,r2
802f364: e13fff17 ldw r4,-4(fp)
802f368: 802f94c0 call 802f94c <sbwakeup>
}
802f36c: 0001883a nop
802f370: e037883a mov sp,fp
802f374: dfc00117 ldw ra,4(sp)
802f378: df000017 ldw fp,0(sp)
802f37c: dec00204 addi sp,sp,8
802f380: f800283a ret
0802f384 <soisdisconnected>:
* RETURNS:
*/
void
soisdisconnected(struct socket * so)
{
802f384: defffd04 addi sp,sp,-12
802f388: dfc00215 stw ra,8(sp)
802f38c: df000115 stw fp,4(sp)
802f390: df000104 addi fp,sp,4
802f394: e13fff15 stw r4,-4(fp)
if (so->so_state & SS_ISCONNECTING)
802f398: e0bfff17 ldw r2,-4(fp)
802f39c: 1080088b ldhu r2,34(r2)
802f3a0: 10bfffcc andi r2,r2,65535
802f3a4: 1080010c andi r2,r2,4
802f3a8: 10000626 beq r2,zero,802f3c4 <soisdisconnected+0x40>
so->so_state |= SS_WASCONNECTING;
802f3ac: e0bfff17 ldw r2,-4(fp)
802f3b0: 1080088b ldhu r2,34(r2)
802f3b4: 10880014 ori r2,r2,8192
802f3b8: 1007883a mov r3,r2
802f3bc: e0bfff17 ldw r2,-4(fp)
802f3c0: 10c0088d sth r3,34(r2)
so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
802f3c4: e0bfff17 ldw r2,-4(fp)
802f3c8: 10c0088b ldhu r3,34(r2)
802f3cc: 00bffc44 movi r2,-15
802f3d0: 1884703a and r2,r3,r2
802f3d4: 1007883a mov r3,r2
802f3d8: e0bfff17 ldw r2,-4(fp)
802f3dc: 10c0088d sth r3,34(r2)
so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE);
802f3e0: e0bfff17 ldw r2,-4(fp)
802f3e4: 1080088b ldhu r2,34(r2)
802f3e8: 10800c14 ori r2,r2,48
802f3ec: 1007883a mov r3,r2
802f3f0: e0bfff17 ldw r2,-4(fp)
802f3f4: 10c0088d sth r3,34(r2)
tcp_wakeup ((char *)&so->so_timeo);
802f3f8: e0bfff17 ldw r2,-4(fp)
802f3fc: 10800904 addi r2,r2,36
802f400: 1009883a mov r4,r2
802f404: 8027ba00 call 8027ba0 <tcp_wakeup>
sowwakeup (so);
802f408: e0bfff17 ldw r2,-4(fp)
802f40c: 10801204 addi r2,r2,72
802f410: 100b883a mov r5,r2
802f414: e13fff17 ldw r4,-4(fp)
802f418: 802f94c0 call 802f94c <sbwakeup>
sorwakeup (so);
802f41c: e0bfff17 ldw r2,-4(fp)
802f420: 10800a04 addi r2,r2,40
802f424: 100b883a mov r5,r2
802f428: e13fff17 ldw r4,-4(fp)
802f42c: 802f94c0 call 802f94c <sbwakeup>
}
802f430: 0001883a nop
802f434: e037883a mov sp,fp
802f438: dfc00117 ldw ra,4(sp)
802f43c: df000017 ldw fp,0(sp)
802f440: dec00204 addi sp,sp,8
802f444: f800283a ret
0802f448 <sonewconn>:
* RETURNS:
*/
struct socket *
sonewconn(struct socket * head)
{
802f448: defffb04 addi sp,sp,-20
802f44c: dfc00415 stw ra,16(sp)
802f450: df000315 stw fp,12(sp)
802f454: df000304 addi fp,sp,12
802f458: e13ffd15 stw r4,-12(fp)
struct socket * so;
int rc;
if (head->so_qlen + head->so_q0len > 3 * head->so_qlimit / 2)
802f45c: e0bffd17 ldw r2,-12(fp)
802f460: 10801e43 ldbu r2,121(r2)
802f464: 10c03fcc andi r3,r2,255
802f468: 18c0201c xori r3,r3,128
802f46c: 18ffe004 addi r3,r3,-128
802f470: e0bffd17 ldw r2,-12(fp)
802f474: 10801e03 ldbu r2,120(r2)
802f478: 10803fcc andi r2,r2,255
802f47c: 1080201c xori r2,r2,128
802f480: 10bfe004 addi r2,r2,-128
802f484: 1887883a add r3,r3,r2
802f488: e0bffd17 ldw r2,-12(fp)
802f48c: 10801e83 ldbu r2,122(r2)
802f490: 10803fcc andi r2,r2,255
802f494: 1080201c xori r2,r2,128
802f498: 10bfe004 addi r2,r2,-128
802f49c: 108000e4 muli r2,r2,3
802f4a0: 1008d7fa srli r4,r2,31
802f4a4: 2085883a add r2,r4,r2
802f4a8: 1005d07a srai r2,r2,1
802f4ac: 10c05b16 blt r2,r3,802f61c <sonewconn+0x1d4>
goto bad;
if ((so = SOC_ALLOC (sizeof (*so))) == NULL)
802f4b0: 01002104 movi r4,132
802f4b4: 802982c0 call 802982c <npalloc>
802f4b8: e0bfff15 stw r2,-4(fp)
802f4bc: e0bfff17 ldw r2,-4(fp)
802f4c0: 10005826 beq r2,zero,802f624 <sonewconn+0x1dc>
goto bad;
so->next = NULL;
802f4c4: e0bfff17 ldw r2,-4(fp)
802f4c8: 10000015 stw zero,0(r2)
putq(&soq,(qp)so); /* Place newly created socket in a queue */
802f4cc: e17fff17 ldw r5,-4(fp)
802f4d0: 010201b4 movhi r4,2054
802f4d4: 21387104 addi r4,r4,-7740
802f4d8: 80289900 call 8028990 <putq>
so->so_type = head->so_type;
802f4dc: e0bffd17 ldw r2,-12(fp)
802f4e0: 10c00983 ldbu r3,38(r2)
802f4e4: e0bfff17 ldw r2,-4(fp)
802f4e8: 10c00985 stb r3,38(r2)
so->so_options = head->so_options &~ (unshort)SO_ACCEPTCONN;
802f4ec: e0bffd17 ldw r2,-12(fp)
802f4f0: 10c00417 ldw r3,16(r2)
802f4f4: 00bfff44 movi r2,-3
802f4f8: 1886703a and r3,r3,r2
802f4fc: e0bfff17 ldw r2,-4(fp)
802f500: 10c00415 stw r3,16(r2)
so->so_linger = head->so_linger;
802f504: e0bffd17 ldw r2,-12(fp)
802f508: 10c0080b ldhu r3,32(r2)
802f50c: e0bfff17 ldw r2,-4(fp)
802f510: 10c0080d sth r3,32(r2)
so->so_state = head->so_state | (unshort)SS_NOFDREF;
802f514: e0bffd17 ldw r2,-12(fp)
802f518: 1080088b ldhu r2,34(r2)
802f51c: 10800054 ori r2,r2,1
802f520: 1007883a mov r3,r2
802f524: e0bfff17 ldw r2,-4(fp)
802f528: 10c0088d sth r3,34(r2)
so->so_proto = head->so_proto;
802f52c: e0bffd17 ldw r2,-12(fp)
802f530: 10c00217 ldw r3,8(r2)
802f534: e0bfff17 ldw r2,-4(fp)
802f538: 10c00215 stw r3,8(r2)
so->so_timeo = head->so_timeo;
802f53c: e0bffd17 ldw r2,-12(fp)
802f540: 10c0090b ldhu r3,36(r2)
802f544: e0bfff17 ldw r2,-4(fp)
802f548: 10c0090d sth r3,36(r2)
so->so_rcv.sb_hiwat = (u_int)tcp_recvspace;
802f54c: d0e02117 ldw r3,-32636(gp)
802f550: e0bfff17 ldw r2,-4(fp)
802f554: 10c00b15 stw r3,44(r2)
so->so_snd.sb_hiwat = (u_int)tcp_sendspace;
802f558: d0e02017 ldw r3,-32640(gp)
802f55c: e0bfff17 ldw r2,-4(fp)
802f560: 10c01315 stw r3,76(r2)
soqinsque (head, so, 0);
802f564: 000d883a mov r6,zero
802f568: e17fff17 ldw r5,-4(fp)
802f56c: e13ffd17 ldw r4,-12(fp)
802f570: 802f6400 call 802f640 <soqinsque>
so->so_req = PRU_ATTACH;
802f574: e0bfff17 ldw r2,-4(fp)
802f578: 10000715 stw zero,28(r2)
so->so_domain = head->so_domain;
802f57c: e0bffd17 ldw r2,-12(fp)
802f580: 10c00517 ldw r3,20(r2)
802f584: e0bfff17 ldw r2,-4(fp)
802f588: 10c00515 stw r3,20(r2)
if ((*so->so_proto->pr_usrreq)(so, (struct mbuf *)0, (struct mbuf *)0))
802f58c: e0bfff17 ldw r2,-4(fp)
802f590: 10800217 ldw r2,8(r2)
802f594: 10800317 ldw r2,12(r2)
802f598: 000d883a mov r6,zero
802f59c: 000b883a mov r5,zero
802f5a0: e13fff17 ldw r4,-4(fp)
802f5a4: 103ee83a callr r2
802f5a8: 10000f1e bne r2,zero,802f5e8 <sonewconn+0x1a0>
goto bad2;
if (so_evtmap)
802f5ac: d0a09a03 ldbu r2,-32152(gp)
802f5b0: 10803fcc andi r2,r2,255
802f5b4: 10000a26 beq r2,zero,802f5e0 <sonewconn+0x198>
{
rc = (*so_evtmap_create) (so);
802f5b8: d0a09817 ldw r2,-32160(gp)
802f5bc: e13fff17 ldw r4,-4(fp)
802f5c0: 103ee83a callr r2
802f5c4: e0bffe15 stw r2,-8(fp)
if (rc != 0) goto bad2;
802f5c8: e0bffe17 ldw r2,-8(fp)
802f5cc: 1000081e bne r2,zero,802f5f0 <sonewconn+0x1a8>
so->owner = head->owner;
802f5d0: e0bffd17 ldw r2,-12(fp)
802f5d4: 10c02003 ldbu r3,128(r2)
802f5d8: e0bfff17 ldw r2,-4(fp)
802f5dc: 10c02005 stb r3,128(r2)
}
return (so);
802f5e0: e0bfff17 ldw r2,-4(fp)
802f5e4: 00001106 br 802f62c <sonewconn+0x1e4>
goto bad2;
802f5e8: 0001883a nop
802f5ec: 00000106 br 802f5f4 <sonewconn+0x1ac>
if (rc != 0) goto bad2;
802f5f0: 0001883a nop
bad2:
(void) soqremque (so, 0);
802f5f4: 000b883a mov r5,zero
802f5f8: e13fff17 ldw r4,-4(fp)
802f5fc: 802f6ec0 call 802f6ec <soqremque>
qdel(&soq, so); /* Delete the socket entry from the queue */
802f600: e17fff17 ldw r5,-4(fp)
802f604: 010201b4 movhi r4,2054
802f608: 21387104 addi r4,r4,-7740
802f60c: 8028a400 call 8028a40 <qdel>
SOC_FREE(so); /* Free the socket structure */
802f610: e13fff17 ldw r4,-4(fp)
802f614: 80298600 call 8029860 <npfree>
802f618: 00000306 br 802f628 <sonewconn+0x1e0>
goto bad;
802f61c: 0001883a nop
802f620: 00000106 br 802f628 <sonewconn+0x1e0>
goto bad;
802f624: 0001883a nop
bad:
return ((struct socket *)0);
802f628: 0005883a mov r2,zero
}
802f62c: e037883a mov sp,fp
802f630: dfc00117 ldw ra,4(sp)
802f634: df000017 ldw fp,0(sp)
802f638: dec00204 addi sp,sp,8
802f63c: f800283a ret
0802f640 <soqinsque>:
void
soqinsque(struct socket * head,
struct socket * so,
int q)
{
802f640: defffc04 addi sp,sp,-16
802f644: df000315 stw fp,12(sp)
802f648: df000304 addi fp,sp,12
802f64c: e13fff15 stw r4,-4(fp)
802f650: e17ffe15 stw r5,-8(fp)
802f654: e1bffd15 stw r6,-12(fp)
so->so_head = head;
802f658: e0bffe17 ldw r2,-8(fp)
802f65c: e0ffff17 ldw r3,-4(fp)
802f660: 10c01b15 stw r3,108(r2)
if (q == 0)
802f664: e0bffd17 ldw r2,-12(fp)
802f668: 10000e1e bne r2,zero,802f6a4 <soqinsque+0x64>
{
head->so_q0len++;
802f66c: e0bfff17 ldw r2,-4(fp)
802f670: 10801e03 ldbu r2,120(r2)
802f674: 10800044 addi r2,r2,1
802f678: 1007883a mov r3,r2
802f67c: e0bfff17 ldw r2,-4(fp)
802f680: 10c01e05 stb r3,120(r2)
so->so_q0 = head->so_q0;
802f684: e0bfff17 ldw r2,-4(fp)
802f688: 10c01c17 ldw r3,112(r2)
802f68c: e0bffe17 ldw r2,-8(fp)
802f690: 10c01c15 stw r3,112(r2)
head->so_q0 = so;
802f694: e0bfff17 ldw r2,-4(fp)
802f698: e0fffe17 ldw r3,-8(fp)
802f69c: 10c01c15 stw r3,112(r2)
{
head->so_qlen++;
so->so_q = head->so_q;
head->so_q = so;
}
}
802f6a0: 00000d06 br 802f6d8 <soqinsque+0x98>
head->so_qlen++;
802f6a4: e0bfff17 ldw r2,-4(fp)
802f6a8: 10801e43 ldbu r2,121(r2)
802f6ac: 10800044 addi r2,r2,1
802f6b0: 1007883a mov r3,r2
802f6b4: e0bfff17 ldw r2,-4(fp)
802f6b8: 10c01e45 stb r3,121(r2)
so->so_q = head->so_q;
802f6bc: e0bfff17 ldw r2,-4(fp)
802f6c0: 10c01d17 ldw r3,116(r2)
802f6c4: e0bffe17 ldw r2,-8(fp)
802f6c8: 10c01d15 stw r3,116(r2)
head->so_q = so;
802f6cc: e0bfff17 ldw r2,-4(fp)
802f6d0: e0fffe17 ldw r3,-8(fp)
802f6d4: 10c01d15 stw r3,116(r2)
}
802f6d8: 0001883a nop
802f6dc: e037883a mov sp,fp
802f6e0: df000017 ldw fp,0(sp)
802f6e4: dec00104 addi sp,sp,4
802f6e8: f800283a ret
0802f6ec <soqremque>:
* RETURNS:
*/
int
soqremque(struct socket * so, int q)
{
802f6ec: defffa04 addi sp,sp,-24
802f6f0: df000515 stw fp,20(sp)
802f6f4: df000504 addi fp,sp,20
802f6f8: e13ffc15 stw r4,-16(fp)
802f6fc: e17ffb15 stw r5,-20(fp)
struct socket * head, * prev, * next;
head = so->so_head;
802f700: e0bffc17 ldw r2,-16(fp)
802f704: 10801b17 ldw r2,108(r2)
802f708: e0bffe15 stw r2,-8(fp)
prev = head;
802f70c: e0bffe17 ldw r2,-8(fp)
802f710: e0bfff15 stw r2,-4(fp)
for (;;)
{
next = q ? prev->so_q : prev->so_q0;
802f714: e0bffb17 ldw r2,-20(fp)
802f718: 10000326 beq r2,zero,802f728 <soqremque+0x3c>
802f71c: e0bfff17 ldw r2,-4(fp)
802f720: 10801d17 ldw r2,116(r2)
802f724: 00000206 br 802f730 <soqremque+0x44>
802f728: e0bfff17 ldw r2,-4(fp)
802f72c: 10801c17 ldw r2,112(r2)
802f730: e0bffd15 stw r2,-12(fp)
if (next == so)
802f734: e0fffd17 ldw r3,-12(fp)
802f738: e0bffc17 ldw r2,-16(fp)
802f73c: 18800826 beq r3,r2,802f760 <soqremque+0x74>
break;
if (next == head)
802f740: e0fffd17 ldw r3,-12(fp)
802f744: e0bffe17 ldw r2,-8(fp)
802f748: 1880021e bne r3,r2,802f754 <soqremque+0x68>
return (0);
802f74c: 0005883a mov r2,zero
802f750: 00002406 br 802f7e4 <soqremque+0xf8>
prev = next;
802f754: e0bffd17 ldw r2,-12(fp)
802f758: e0bfff15 stw r2,-4(fp)
next = q ? prev->so_q : prev->so_q0;
802f75c: 003fed06 br 802f714 <soqremque+0x28>
break;
802f760: 0001883a nop
}
if (q == 0)
802f764: e0bffb17 ldw r2,-20(fp)
802f768: 10000b1e bne r2,zero,802f798 <soqremque+0xac>
{
prev->so_q0 = next->so_q0;
802f76c: e0bffd17 ldw r2,-12(fp)
802f770: 10c01c17 ldw r3,112(r2)
802f774: e0bfff17 ldw r2,-4(fp)
802f778: 10c01c15 stw r3,112(r2)
head->so_q0len--;
802f77c: e0bffe17 ldw r2,-8(fp)
802f780: 10801e03 ldbu r2,120(r2)
802f784: 10bfffc4 addi r2,r2,-1
802f788: 1007883a mov r3,r2
802f78c: e0bffe17 ldw r2,-8(fp)
802f790: 10c01e05 stb r3,120(r2)
802f794: 00000a06 br 802f7c0 <soqremque+0xd4>
} else
{
prev->so_q = next->so_q;
802f798: e0bffd17 ldw r2,-12(fp)
802f79c: 10c01d17 ldw r3,116(r2)
802f7a0: e0bfff17 ldw r2,-4(fp)
802f7a4: 10c01d15 stw r3,116(r2)
head->so_qlen--;
802f7a8: e0bffe17 ldw r2,-8(fp)
802f7ac: 10801e43 ldbu r2,121(r2)
802f7b0: 10bfffc4 addi r2,r2,-1
802f7b4: 1007883a mov r3,r2
802f7b8: e0bffe17 ldw r2,-8(fp)
802f7bc: 10c01e45 stb r3,121(r2)
}
next->so_q0 = next->so_q = 0;
802f7c0: e0bffd17 ldw r2,-12(fp)
802f7c4: 10001d15 stw zero,116(r2)
802f7c8: e0bffd17 ldw r2,-12(fp)
802f7cc: 10c01d17 ldw r3,116(r2)
802f7d0: e0bffd17 ldw r2,-12(fp)
802f7d4: 10c01c15 stw r3,112(r2)
next->so_head = 0;
802f7d8: e0bffd17 ldw r2,-12(fp)
802f7dc: 10001b15 stw zero,108(r2)
return 1;
802f7e0: 00800044 movi r2,1
}
802f7e4: e037883a mov sp,fp
802f7e8: df000017 ldw fp,0(sp)
802f7ec: dec00104 addi sp,sp,4
802f7f0: f800283a ret
0802f7f4 <socantsendmore>:
* RETURNS:
*/
void
socantsendmore(struct socket * so)
{
802f7f4: defffd04 addi sp,sp,-12
802f7f8: dfc00215 stw ra,8(sp)
802f7fc: df000115 stw fp,4(sp)
802f800: df000104 addi fp,sp,4
802f804: e13fff15 stw r4,-4(fp)
so->so_state |= SS_CANTSENDMORE;
802f808: e0bfff17 ldw r2,-4(fp)
802f80c: 1080088b ldhu r2,34(r2)
802f810: 10800414 ori r2,r2,16
802f814: 1007883a mov r3,r2
802f818: e0bfff17 ldw r2,-4(fp)
802f81c: 10c0088d sth r3,34(r2)
sowwakeup(so);
802f820: e0bfff17 ldw r2,-4(fp)
802f824: 10801204 addi r2,r2,72
802f828: 100b883a mov r5,r2
802f82c: e13fff17 ldw r4,-4(fp)
802f830: 802f94c0 call 802f94c <sbwakeup>
}
802f834: 0001883a nop
802f838: e037883a mov sp,fp
802f83c: dfc00117 ldw ra,4(sp)
802f840: df000017 ldw fp,0(sp)
802f844: dec00204 addi sp,sp,8
802f848: f800283a ret
0802f84c <socantrcvmore>:
* RETURNS:
*/
void
socantrcvmore(struct socket * so)
{
802f84c: defffd04 addi sp,sp,-12
802f850: dfc00215 stw ra,8(sp)
802f854: df000115 stw fp,4(sp)
802f858: df000104 addi fp,sp,4
802f85c: e13fff15 stw r4,-4(fp)
so->so_state |= SS_CANTRCVMORE;
802f860: e0bfff17 ldw r2,-4(fp)
802f864: 1080088b ldhu r2,34(r2)
802f868: 10800814 ori r2,r2,32
802f86c: 1007883a mov r3,r2
802f870: e0bfff17 ldw r2,-4(fp)
802f874: 10c0088d sth r3,34(r2)
sorwakeup(so);
802f878: e0bfff17 ldw r2,-4(fp)
802f87c: 10800a04 addi r2,r2,40
802f880: 100b883a mov r5,r2
802f884: e13fff17 ldw r4,-4(fp)
802f888: 802f94c0 call 802f94c <sbwakeup>
}
802f88c: 0001883a nop
802f890: e037883a mov sp,fp
802f894: dfc00117 ldw ra,4(sp)
802f898: df000017 ldw fp,0(sp)
802f89c: dec00204 addi sp,sp,8
802f8a0: f800283a ret
0802f8a4 <sbselqueue>:
* RETURNS:
*/
void
sbselqueue(struct sockbuf * sb)
{
802f8a4: defffe04 addi sp,sp,-8
802f8a8: df000115 stw fp,4(sp)
802f8ac: df000104 addi fp,sp,4
802f8b0: e13fff15 stw r4,-4(fp)
sb->sb_flags |= SB_SEL;
802f8b4: e0bfff17 ldw r2,-4(fp)
802f8b8: 1080070b ldhu r2,28(r2)
802f8bc: 10800214 ori r2,r2,8
802f8c0: 1007883a mov r3,r2
802f8c4: e0bfff17 ldw r2,-4(fp)
802f8c8: 10c0070d sth r3,28(r2)
}
802f8cc: 0001883a nop
802f8d0: e037883a mov sp,fp
802f8d4: df000017 ldw fp,0(sp)
802f8d8: dec00104 addi sp,sp,4
802f8dc: f800283a ret
0802f8e0 <sbwait>:
* RETURNS:
*/
void
sbwait(struct sockbuf * sb)
{
802f8e0: defffd04 addi sp,sp,-12
802f8e4: dfc00215 stw ra,8(sp)
802f8e8: df000115 stw fp,4(sp)
802f8ec: df000104 addi fp,sp,4
802f8f0: e13fff15 stw r4,-4(fp)
sb->sb_flags |= SB_WAIT;
802f8f4: e0bfff17 ldw r2,-4(fp)
802f8f8: 1080070b ldhu r2,28(r2)
802f8fc: 10800114 ori r2,r2,4
802f900: 1007883a mov r3,r2
802f904: e0bfff17 ldw r2,-4(fp)
802f908: 10c0070d sth r3,28(r2)
tcp_sleep ((char *)&sb->sb_cc);
802f90c: e0bfff17 ldw r2,-4(fp)
802f910: 1009883a mov r4,r2
802f914: 8027a540 call 8027a54 <tcp_sleep>
sb->sb_flags &= ~SB_WAIT;
802f918: e0bfff17 ldw r2,-4(fp)
802f91c: 10c0070b ldhu r3,28(r2)
802f920: 00bffec4 movi r2,-5
802f924: 1884703a and r2,r3,r2
802f928: 1007883a mov r3,r2
802f92c: e0bfff17 ldw r2,-4(fp)
802f930: 10c0070d sth r3,28(r2)
}
802f934: 0001883a nop
802f938: e037883a mov sp,fp
802f93c: dfc00117 ldw ra,4(sp)
802f940: df000017 ldw fp,0(sp)
802f944: dec00204 addi sp,sp,8
802f948: f800283a ret
0802f94c <sbwakeup>:
* RETURNS:
*/
void
sbwakeup(struct socket * so, struct sockbuf * sb)
{
802f94c: defffc04 addi sp,sp,-16
802f950: dfc00315 stw ra,12(sp)
802f954: df000215 stw fp,8(sp)
802f958: df000204 addi fp,sp,8
802f95c: e13fff15 stw r4,-4(fp)
802f960: e17ffe15 stw r5,-8(fp)
if (sb->sb_flags & SB_SEL)
802f964: e0bffe17 ldw r2,-8(fp)
802f968: 1080070b ldhu r2,28(r2)
802f96c: 10bfffcc andi r2,r2,65535
802f970: 1080020c andi r2,r2,8
802f974: 10000a26 beq r2,zero,802f9a0 <sbwakeup+0x54>
{
select_wait = 0;
802f978: d020850d sth zero,-32236(gp)
#ifndef SOCK_MAP_EVENTS
tcp_wakeup ((char *)&select_wait);
802f97c: d1208504 addi r4,gp,-32236
802f980: 8027ba00 call 8027ba0 <tcp_wakeup>
#else
tcp_wakeup2 (so->owner);
#endif
sb->sb_flags &= ~SB_SEL;
802f984: e0bffe17 ldw r2,-8(fp)
802f988: 10c0070b ldhu r3,28(r2)
802f98c: 00bffdc4 movi r2,-9
802f990: 1884703a and r2,r3,r2
802f994: 1007883a mov r3,r2
802f998: e0bffe17 ldw r2,-8(fp)
802f99c: 10c0070d sth r3,28(r2)
#ifdef SOCK_WAKEALWAYS /* Always wake the socket? */
/* Systems Like Green Hills Integrity RTOS, need to process socket
input even if looks like no one is blocked on the socket */
tcp_wakeup ((char *)&sb->sb_cc); /* signal wake on socket */
#else /* older BSD style code - only call tcp_wakeup if blocked */
if (sb->sb_flags & SB_WAIT) /* is sockbuf's WAIT flag set? */
802f9a0: e0bffe17 ldw r2,-8(fp)
802f9a4: 1080070b ldhu r2,28(r2)
802f9a8: 10bfffcc andi r2,r2,65535
802f9ac: 1080010c andi r2,r2,4
802f9b0: 10000326 beq r2,zero,802f9c0 <sbwakeup+0x74>
{
tcp_wakeup ((char *)&sb->sb_cc); /* call port wakeup routine */
802f9b4: e0bffe17 ldw r2,-8(fp)
802f9b8: 1009883a mov r4,r2
802f9bc: 8027ba00 call 8027ba0 <tcp_wakeup>
}
#endif /* SOCK_WAKEALWAYS */
}
802f9c0: 0001883a nop
802f9c4: e037883a mov sp,fp
802f9c8: dfc00117 ldw ra,4(sp)
802f9cc: df000017 ldw fp,0(sp)
802f9d0: dec00204 addi sp,sp,8
802f9d4: f800283a ret
0802f9d8 <soreserve>:
int
soreserve(struct socket * so,
u_long sndcc,
u_long rcvcc)
{
802f9d8: defffb04 addi sp,sp,-20
802f9dc: dfc00415 stw ra,16(sp)
802f9e0: df000315 stw fp,12(sp)
802f9e4: df000304 addi fp,sp,12
802f9e8: e13fff15 stw r4,-4(fp)
802f9ec: e17ffe15 stw r5,-8(fp)
802f9f0: e1bffd15 stw r6,-12(fp)
if (sbreserve(&so->so_snd, sndcc) == 0)
802f9f4: e0bfff17 ldw r2,-4(fp)
802f9f8: 10801204 addi r2,r2,72
802f9fc: e17ffe17 ldw r5,-8(fp)
802fa00: 1009883a mov r4,r2
802fa04: 802fa600 call 802fa60 <sbreserve>
802fa08: 10000e26 beq r2,zero,802fa44 <soreserve+0x6c>
goto bad;
if (sbreserve(&so->so_rcv, rcvcc) == 0)
802fa0c: e0bfff17 ldw r2,-4(fp)
802fa10: 10800a04 addi r2,r2,40
802fa14: e17ffd17 ldw r5,-12(fp)
802fa18: 1009883a mov r4,r2
802fa1c: 802fa600 call 802fa60 <sbreserve>
802fa20: 10000226 beq r2,zero,802fa2c <soreserve+0x54>
goto bad2;
return (0);
802fa24: 0005883a mov r2,zero
802fa28: 00000806 br 802fa4c <soreserve+0x74>
goto bad2;
802fa2c: 0001883a nop
bad2:
sbrelease(&so->so_snd);
802fa30: e0bfff17 ldw r2,-4(fp)
802fa34: 10801204 addi r2,r2,72
802fa38: 1009883a mov r4,r2
802fa3c: 802fab00 call 802fab0 <sbrelease>
802fa40: 00000106 br 802fa48 <soreserve+0x70>
goto bad;
802fa44: 0001883a nop
bad:
return (ENOBUFS);
802fa48: 00801a44 movi r2,105
}
802fa4c: e037883a mov sp,fp
802fa50: dfc00117 ldw ra,4(sp)
802fa54: df000017 ldw fp,0(sp)
802fa58: dec00204 addi sp,sp,8
802fa5c: f800283a ret
0802fa60 <sbreserve>:
* RETURNS:
*/
int
sbreserve(struct sockbuf * sb, u_long cc)
{
802fa60: defffd04 addi sp,sp,-12
802fa64: df000215 stw fp,8(sp)
802fa68: df000204 addi fp,sp,8
802fa6c: e13fff15 stw r4,-4(fp)
802fa70: e17ffe15 stw r5,-8(fp)
#ifdef COMPILER_32BIT
if (cc > (u_long)SB_MAX * CLBYTES / (2 * MSIZE + CLBYTES))
return (0);
#endif
sb->sb_hiwat = cc;
802fa74: e0bfff17 ldw r2,-4(fp)
802fa78: e0fffe17 ldw r3,-8(fp)
802fa7c: 10c00115 stw r3,4(r2)
sb->sb_mbmax = MIN(cc * 2, SB_MAX);
802fa80: e0bffe17 ldw r2,-8(fp)
802fa84: 1085883a add r2,r2,r2
802fa88: 10d00070 cmpltui r3,r2,16385
802fa8c: 1800011e bne r3,zero,802fa94 <sbreserve+0x34>
802fa90: 00900004 movi r2,16384
802fa94: e0ffff17 ldw r3,-4(fp)
802fa98: 18800315 stw r2,12(r3)
return (1);
802fa9c: 00800044 movi r2,1
}
802faa0: e037883a mov sp,fp
802faa4: df000017 ldw fp,0(sp)
802faa8: dec00104 addi sp,sp,4
802faac: f800283a ret
0802fab0 <sbrelease>:
* RETURNS:
*/
void
sbrelease(struct sockbuf * sb)
{
802fab0: defffd04 addi sp,sp,-12
802fab4: dfc00215 stw ra,8(sp)
802fab8: df000115 stw fp,4(sp)
802fabc: df000104 addi fp,sp,4
802fac0: e13fff15 stw r4,-4(fp)
sbflush(sb);
802fac4: e13fff17 ldw r4,-4(fp)
802fac8: 803002c0 call 803002c <sbflush>
sb->sb_hiwat = sb->sb_mbmax = 0;
802facc: e0bfff17 ldw r2,-4(fp)
802fad0: 10000315 stw zero,12(r2)
802fad4: e0bfff17 ldw r2,-4(fp)
802fad8: 10c00317 ldw r3,12(r2)
802fadc: e0bfff17 ldw r2,-4(fp)
802fae0: 10c00115 stw r3,4(r2)
}
802fae4: 0001883a nop
802fae8: e037883a mov sp,fp
802faec: dfc00117 ldw ra,4(sp)
802faf0: df000017 ldw fp,0(sp)
802faf4: dec00204 addi sp,sp,8
802faf8: f800283a ret
0802fafc <sbappend>:
* RETURNS:
*/
void
sbappend(struct sockbuf * sb, struct mbuf * m)
{
802fafc: defffb04 addi sp,sp,-20
802fb00: dfc00415 stw ra,16(sp)
802fb04: df000315 stw fp,12(sp)
802fb08: df000304 addi fp,sp,12
802fb0c: e13ffe15 stw r4,-8(fp)
802fb10: e17ffd15 stw r5,-12(fp)
struct mbuf * n;
if (m == 0)
802fb14: e0bffd17 ldw r2,-12(fp)
802fb18: 10001a26 beq r2,zero,802fb84 <sbappend+0x88>
return;
ENTER_CRIT_SECTION(sb);
802fb1c: 8028e940 call 8028e94 <irq_Mask>
if ((n = sb->sb_mb) != NULL)
802fb20: e0bffe17 ldw r2,-8(fp)
802fb24: 10800617 ldw r2,24(r2)
802fb28: e0bfff15 stw r2,-4(fp)
802fb2c: e0bfff17 ldw r2,-4(fp)
802fb30: 10000e26 beq r2,zero,802fb6c <sbappend+0x70>
{
while (n->m_act)
802fb34: 00000306 br 802fb44 <sbappend+0x48>
n = n->m_act;
802fb38: e0bfff17 ldw r2,-4(fp)
802fb3c: 10800717 ldw r2,28(r2)
802fb40: e0bfff15 stw r2,-4(fp)
while (n->m_act)
802fb44: e0bfff17 ldw r2,-4(fp)
802fb48: 10800717 ldw r2,28(r2)
802fb4c: 103ffa1e bne r2,zero,802fb38 <sbappend+0x3c>
while (n->m_next)
802fb50: 00000306 br 802fb60 <sbappend+0x64>
n = n->m_next;
802fb54: e0bfff17 ldw r2,-4(fp)
802fb58: 10800617 ldw r2,24(r2)
802fb5c: e0bfff15 stw r2,-4(fp)
while (n->m_next)
802fb60: e0bfff17 ldw r2,-4(fp)
802fb64: 10800617 ldw r2,24(r2)
802fb68: 103ffa1e bne r2,zero,802fb54 <sbappend+0x58>
}
sbcompress(sb, m, n);
802fb6c: e1bfff17 ldw r6,-4(fp)
802fb70: e17ffd17 ldw r5,-12(fp)
802fb74: e13ffe17 ldw r4,-8(fp)
802fb78: 802fe500 call 802fe50 <sbcompress>
EXIT_CRIT_SECTION(sb);
802fb7c: 8028ef40 call 8028ef4 <irq_Unmask>
802fb80: 00000106 br 802fb88 <sbappend+0x8c>
return;
802fb84: 0001883a nop
}
802fb88: e037883a mov sp,fp
802fb8c: dfc00117 ldw ra,4(sp)
802fb90: df000017 ldw fp,0(sp)
802fb94: dec00204 addi sp,sp,8
802fb98: f800283a ret
0802fb9c <sbappendrecord>:
*/
void
sbappendrecord(struct sockbuf * sb,
struct mbuf * m0)
{
802fb9c: defffb04 addi sp,sp,-20
802fba0: dfc00415 stw ra,16(sp)
802fba4: df000315 stw fp,12(sp)
802fba8: df000304 addi fp,sp,12
802fbac: e13ffe15 stw r4,-8(fp)
802fbb0: e17ffd15 stw r5,-12(fp)
struct mbuf * m;
if (m0 == 0)
802fbb4: e0bffd17 ldw r2,-12(fp)
802fbb8: 10002826 beq r2,zero,802fc5c <sbappendrecord+0xc0>
return;
ENTER_CRIT_SECTION(sb); /* protect so_rcv operations */
802fbbc: 8028e940 call 8028e94 <irq_Mask>
if ((m = sb->sb_mb) != NULL)
802fbc0: e0bffe17 ldw r2,-8(fp)
802fbc4: 10800617 ldw r2,24(r2)
802fbc8: e0bfff15 stw r2,-4(fp)
802fbcc: e0bfff17 ldw r2,-4(fp)
802fbd0: 10000726 beq r2,zero,802fbf0 <sbappendrecord+0x54>
while (m->m_act)
802fbd4: 00000306 br 802fbe4 <sbappendrecord+0x48>
m = m->m_act;
802fbd8: e0bfff17 ldw r2,-4(fp)
802fbdc: 10800717 ldw r2,28(r2)
802fbe0: e0bfff15 stw r2,-4(fp)
while (m->m_act)
802fbe4: e0bfff17 ldw r2,-4(fp)
802fbe8: 10800717 ldw r2,28(r2)
802fbec: 103ffa1e bne r2,zero,802fbd8 <sbappendrecord+0x3c>
/*
* Put the first mbuf on the queue.
* Note this permits zero length records.
*/
sballoc(sb, m0);
802fbf0: e0bffe17 ldw r2,-8(fp)
802fbf4: 10c00017 ldw r3,0(r2)
802fbf8: e0bffd17 ldw r2,-12(fp)
802fbfc: 10800217 ldw r2,8(r2)
802fc00: 1887883a add r3,r3,r2
802fc04: e0bffe17 ldw r2,-8(fp)
802fc08: 10c00015 stw r3,0(r2)
if (m)
802fc0c: e0bfff17 ldw r2,-4(fp)
802fc10: 10000426 beq r2,zero,802fc24 <sbappendrecord+0x88>
m->m_act = m0;
802fc14: e0bfff17 ldw r2,-4(fp)
802fc18: e0fffd17 ldw r3,-12(fp)
802fc1c: 10c00715 stw r3,28(r2)
802fc20: 00000306 br 802fc30 <sbappendrecord+0x94>
else
sb->sb_mb = m0;
802fc24: e0bffe17 ldw r2,-8(fp)
802fc28: e0fffd17 ldw r3,-12(fp)
802fc2c: 10c00615 stw r3,24(r2)
m = m0->m_next;
802fc30: e0bffd17 ldw r2,-12(fp)
802fc34: 10800617 ldw r2,24(r2)
802fc38: e0bfff15 stw r2,-4(fp)
m0->m_next = 0;
802fc3c: e0bffd17 ldw r2,-12(fp)
802fc40: 10000615 stw zero,24(r2)
sbcompress(sb, m, m0);
802fc44: e1bffd17 ldw r6,-12(fp)
802fc48: e17fff17 ldw r5,-4(fp)
802fc4c: e13ffe17 ldw r4,-8(fp)
802fc50: 802fe500 call 802fe50 <sbcompress>
EXIT_CRIT_SECTION(sb);
802fc54: 8028ef40 call 8028ef4 <irq_Unmask>
802fc58: 00000106 br 802fc60 <sbappendrecord+0xc4>
return;
802fc5c: 0001883a nop
}
802fc60: e037883a mov sp,fp
802fc64: dfc00117 ldw ra,4(sp)
802fc68: df000017 ldw fp,0(sp)
802fc6c: dec00204 addi sp,sp,8
802fc70: f800283a ret
0802fc74 <sbappendaddr>:
int
sbappendaddr(struct sockbuf * sb,
struct sockaddr * asa,
struct mbuf * m0)
{
802fc74: defff804 addi sp,sp,-32
802fc78: dfc00715 stw ra,28(sp)
802fc7c: df000615 stw fp,24(sp)
802fc80: df000604 addi fp,sp,24
802fc84: e13ffc15 stw r4,-16(fp)
802fc88: e17ffb15 stw r5,-20(fp)
802fc8c: e1bffa15 stw r6,-24(fp)
struct mbuf * m, * n;
int space = sizeof (*asa);
802fc90: 00800404 movi r2,16
802fc94: e0bffd15 stw r2,-12(fp)
ENTER_CRIT_SECTION(sb);
802fc98: 8028e940 call 8028e94 <irq_Mask>
for (m = m0; m; m = m->m_next)
802fc9c: e0bffa17 ldw r2,-24(fp)
802fca0: e0bfff15 stw r2,-4(fp)
802fca4: 00000806 br 802fcc8 <sbappendaddr+0x54>
space += m->m_len;
802fca8: e0bfff17 ldw r2,-4(fp)
802fcac: 10c00217 ldw r3,8(r2)
802fcb0: e0bffd17 ldw r2,-12(fp)
802fcb4: 1885883a add r2,r3,r2
802fcb8: e0bffd15 stw r2,-12(fp)
for (m = m0; m; m = m->m_next)
802fcbc: e0bfff17 ldw r2,-4(fp)
802fcc0: 10800617 ldw r2,24(r2)
802fcc4: e0bfff15 stw r2,-4(fp)
802fcc8: e0bfff17 ldw r2,-4(fp)
802fccc: 103ff61e bne r2,zero,802fca8 <sbappendaddr+0x34>
if (space > (int)sbspace(sb))
802fcd0: e0bffc17 ldw r2,-16(fp)
802fcd4: 10800117 ldw r2,4(r2)
802fcd8: 1007883a mov r3,r2
802fcdc: e0bffc17 ldw r2,-16(fp)
802fce0: 10800017 ldw r2,0(r2)
802fce4: 1885c83a sub r2,r3,r2
802fce8: 10000716 blt r2,zero,802fd08 <sbappendaddr+0x94>
802fcec: e0bffc17 ldw r2,-16(fp)
802fcf0: 10c00117 ldw r3,4(r2)
802fcf4: e0bffc17 ldw r2,-16(fp)
802fcf8: 10800017 ldw r2,0(r2)
802fcfc: 1885c83a sub r2,r3,r2
802fd00: 1007883a mov r3,r2
802fd04: 00000106 br 802fd0c <sbappendaddr+0x98>
802fd08: 0007883a mov r3,zero
802fd0c: e0bffd17 ldw r2,-12(fp)
802fd10: 1880030e bge r3,r2,802fd20 <sbappendaddr+0xac>
{
EXIT_CRIT_SECTION(sb);
802fd14: 8028ef40 call 8028ef4 <irq_Unmask>
return (0);
802fd18: 0005883a mov r2,zero
802fd1c: 00004706 br 802fe3c <sbappendaddr+0x1c8>
}
if ((m = m_getwithdata (MT_SONAME, sizeof (struct sockaddr))) == NULL)
802fd20: 01400404 movi r5,16
802fd24: 01000244 movi r4,9
802fd28: 8029a700 call 8029a70 <m_getnbuf>
802fd2c: e0bfff15 stw r2,-4(fp)
802fd30: e0bfff17 ldw r2,-4(fp)
802fd34: 1000031e bne r2,zero,802fd44 <sbappendaddr+0xd0>
{
EXIT_CRIT_SECTION(sb);
802fd38: 8028ef40 call 8028ef4 <irq_Unmask>
return 0;
802fd3c: 0005883a mov r2,zero
802fd40: 00003e06 br 802fe3c <sbappendaddr+0x1c8>
}
*mtod(m, struct sockaddr *) = *asa;
802fd44: e0bfff17 ldw r2,-4(fp)
802fd48: 10800317 ldw r2,12(r2)
802fd4c: e0fffb17 ldw r3,-20(fp)
802fd50: 1900000b ldhu r4,0(r3)
802fd54: 1100000d sth r4,0(r2)
802fd58: 1900008b ldhu r4,2(r3)
802fd5c: 1100008d sth r4,2(r2)
802fd60: 1900010b ldhu r4,4(r3)
802fd64: 1100010d sth r4,4(r2)
802fd68: 1900018b ldhu r4,6(r3)
802fd6c: 1100018d sth r4,6(r2)
802fd70: 1900020b ldhu r4,8(r3)
802fd74: 1100020d sth r4,8(r2)
802fd78: 1900028b ldhu r4,10(r3)
802fd7c: 1100028d sth r4,10(r2)
802fd80: 1900030b ldhu r4,12(r3)
802fd84: 1100030d sth r4,12(r2)
802fd88: 18c0038b ldhu r3,14(r3)
802fd8c: 10c0038d sth r3,14(r2)
m->m_len = sizeof (*asa);
802fd90: e0bfff17 ldw r2,-4(fp)
802fd94: 00c00404 movi r3,16
802fd98: 10c00215 stw r3,8(r2)
sballoc (sb, m);
802fd9c: e0bffc17 ldw r2,-16(fp)
802fda0: 10c00017 ldw r3,0(r2)
802fda4: e0bfff17 ldw r2,-4(fp)
802fda8: 10800217 ldw r2,8(r2)
802fdac: 1887883a add r3,r3,r2
802fdb0: e0bffc17 ldw r2,-16(fp)
802fdb4: 10c00015 stw r3,0(r2)
if ((n = sb->sb_mb) != NULL)
802fdb8: e0bffc17 ldw r2,-16(fp)
802fdbc: 10800617 ldw r2,24(r2)
802fdc0: e0bffe15 stw r2,-8(fp)
802fdc4: e0bffe17 ldw r2,-8(fp)
802fdc8: 10000b26 beq r2,zero,802fdf8 <sbappendaddr+0x184>
{
while (n->m_act)
802fdcc: 00000306 br 802fddc <sbappendaddr+0x168>
n = n->m_act;
802fdd0: e0bffe17 ldw r2,-8(fp)
802fdd4: 10800717 ldw r2,28(r2)
802fdd8: e0bffe15 stw r2,-8(fp)
while (n->m_act)
802fddc: e0bffe17 ldw r2,-8(fp)
802fde0: 10800717 ldw r2,28(r2)
802fde4: 103ffa1e bne r2,zero,802fdd0 <sbappendaddr+0x15c>
n->m_act = m;
802fde8: e0bffe17 ldw r2,-8(fp)
802fdec: e0ffff17 ldw r3,-4(fp)
802fdf0: 10c00715 stw r3,28(r2)
802fdf4: 00000306 br 802fe04 <sbappendaddr+0x190>
} else
sb->sb_mb = m;
802fdf8: e0bffc17 ldw r2,-16(fp)
802fdfc: e0ffff17 ldw r3,-4(fp)
802fe00: 10c00615 stw r3,24(r2)
if (m->m_next)
802fe04: e0bfff17 ldw r2,-4(fp)
802fe08: 10800617 ldw r2,24(r2)
802fe0c: 10000326 beq r2,zero,802fe1c <sbappendaddr+0x1a8>
m = m->m_next;
802fe10: e0bfff17 ldw r2,-4(fp)
802fe14: 10800617 ldw r2,24(r2)
802fe18: e0bfff15 stw r2,-4(fp)
if (m0)
802fe1c: e0bffa17 ldw r2,-24(fp)
802fe20: 10000426 beq r2,zero,802fe34 <sbappendaddr+0x1c0>
sbcompress(sb, m0, m);
802fe24: e1bfff17 ldw r6,-4(fp)
802fe28: e17ffa17 ldw r5,-24(fp)
802fe2c: e13ffc17 ldw r4,-16(fp)
802fe30: 802fe500 call 802fe50 <sbcompress>
EXIT_CRIT_SECTION(sb);
802fe34: 8028ef40 call 8028ef4 <irq_Unmask>
return (1);
802fe38: 00800044 movi r2,1
}
802fe3c: e037883a mov sp,fp
802fe40: dfc00117 ldw ra,4(sp)
802fe44: df000017 ldw fp,0(sp)
802fe48: dec00204 addi sp,sp,8
802fe4c: f800283a ret
0802fe50 <sbcompress>:
void
sbcompress(struct sockbuf * sb,
struct mbuf * m,
struct mbuf * n)
{
802fe50: defffb04 addi sp,sp,-20
802fe54: dfc00415 stw ra,16(sp)
802fe58: df000315 stw fp,12(sp)
802fe5c: df000304 addi fp,sp,12
802fe60: e13fff15 stw r4,-4(fp)
802fe64: e17ffe15 stw r5,-8(fp)
802fe68: e1bffd15 stw r6,-12(fp)
while (m)
802fe6c: 00006706 br 803000c <sbcompress+0x1bc>
{
if (m->m_len == 0)
802fe70: e0bffe17 ldw r2,-8(fp)
802fe74: 10800217 ldw r2,8(r2)
802fe78: 1000041e bne r2,zero,802fe8c <sbcompress+0x3c>
{
m = m_free(m);
802fe7c: e13ffe17 ldw r4,-8(fp)
802fe80: 8029bf80 call 8029bf8 <m_free>
802fe84: e0bffe15 stw r2,-8(fp)
continue;
802fe88: 00006006 br 803000c <sbcompress+0x1bc>
}
if (m->m_type != MT_RXDATA &&
802fe8c: e0bffe17 ldw r2,-8(fp)
802fe90: 10800817 ldw r2,32(r2)
802fe94: 10800060 cmpeqi r2,r2,1
802fe98: 1000111e bne r2,zero,802fee0 <sbcompress+0x90>
m->m_type != MT_TXDATA &&
802fe9c: e0bffe17 ldw r2,-8(fp)
802fea0: 10800817 ldw r2,32(r2)
if (m->m_type != MT_RXDATA &&
802fea4: 108000a0 cmpeqi r2,r2,2
802fea8: 10000d1e bne r2,zero,802fee0 <sbcompress+0x90>
m->m_type != MT_SONAME)
802feac: e0bffe17 ldw r2,-8(fp)
802feb0: 10800817 ldw r2,32(r2)
m->m_type != MT_TXDATA &&
802feb4: 10800260 cmpeqi r2,r2,9
802feb8: 1000091e bne r2,zero,802fee0 <sbcompress+0x90>
{
dprintf ("sbcomp:bad type %d\n", m->m_type);
802febc: e0bffe17 ldw r2,-8(fp)
802fec0: 10800817 ldw r2,32(r2)
802fec4: 100b883a mov r5,r2
802fec8: 01020174 movhi r4,2053
802fecc: 212a8e04 addi r4,r4,-21960
802fed0: 8002c780 call 8002c78 <printf>
panic ("sbcomp:bad");
802fed4: 01020174 movhi r4,2053
802fed8: 212a9304 addi r4,r4,-21940
802fedc: 80271780 call 8027178 <panic>
/* If there is room for all the data in M in N, then
* just copy the data to N. Note that sbdrop will
* increment the n->m_data pointer, so that we must
* correct n->m_memsz.
*/
if ( n && (sb->sb_flags & SB_MBCOMP) &&
802fee0: e0bffd17 ldw r2,-12(fp)
802fee4: 10003226 beq r2,zero,802ffb0 <sbcompress+0x160>
802fee8: e0bfff17 ldw r2,-4(fp)
802feec: 1080070b ldhu r2,28(r2)
802fef0: 10bfffcc andi r2,r2,65535
802fef4: 1080200c andi r2,r2,128
802fef8: 10002d26 beq r2,zero,802ffb0 <sbcompress+0x160>
((n->m_len + m->m_len) <
802fefc: e0bffd17 ldw r2,-12(fp)
802ff00: 10c00217 ldw r3,8(r2)
802ff04: e0bffe17 ldw r2,-8(fp)
802ff08: 10800217 ldw r2,8(r2)
802ff0c: 1887883a add r3,r3,r2
n->m_memsz - (n->m_data - n->m_base) ) )
802ff10: e0bffd17 ldw r2,-12(fp)
802ff14: 10800517 ldw r2,20(r2)
802ff18: e13ffd17 ldw r4,-12(fp)
802ff1c: 21400317 ldw r5,12(r4)
802ff20: e13ffd17 ldw r4,-12(fp)
802ff24: 21000417 ldw r4,16(r4)
802ff28: 2909c83a sub r4,r5,r4
802ff2c: 1105c83a sub r2,r2,r4
if ( n && (sb->sb_flags & SB_MBCOMP) &&
802ff30: 18801f2e bgeu r3,r2,802ffb0 <sbcompress+0x160>
{
MEMCPY(n->m_data+n->m_len, m->m_data, m->m_len);
802ff34: e0bffd17 ldw r2,-12(fp)
802ff38: 10c00317 ldw r3,12(r2)
802ff3c: e0bffd17 ldw r2,-12(fp)
802ff40: 10800217 ldw r2,8(r2)
802ff44: 1887883a add r3,r3,r2
802ff48: e0bffe17 ldw r2,-8(fp)
802ff4c: 11000317 ldw r4,12(r2)
802ff50: e0bffe17 ldw r2,-8(fp)
802ff54: 10800217 ldw r2,8(r2)
802ff58: 100d883a mov r6,r2
802ff5c: 200b883a mov r5,r4
802ff60: 1809883a mov r4,r3
802ff64: 80086b80 call 80086b8 <memcpy>
sballoc(sb, m);
802ff68: e0bfff17 ldw r2,-4(fp)
802ff6c: 10c00017 ldw r3,0(r2)
802ff70: e0bffe17 ldw r2,-8(fp)
802ff74: 10800217 ldw r2,8(r2)
802ff78: 1887883a add r3,r3,r2
802ff7c: e0bfff17 ldw r2,-4(fp)
802ff80: 10c00015 stw r3,0(r2)
n->m_len += m->m_len;
802ff84: e0bffd17 ldw r2,-12(fp)
802ff88: 10c00217 ldw r3,8(r2)
802ff8c: e0bffe17 ldw r2,-8(fp)
802ff90: 10800217 ldw r2,8(r2)
802ff94: 1887883a add r3,r3,r2
802ff98: e0bffd17 ldw r2,-12(fp)
802ff9c: 10c00215 stw r3,8(r2)
m = m_free(m);
802ffa0: e13ffe17 ldw r4,-8(fp)
802ffa4: 8029bf80 call 8029bf8 <m_free>
802ffa8: e0bffe15 stw r2,-8(fp)
continue;
802ffac: 00001706 br 803000c <sbcompress+0x1bc>
}
sballoc(sb, m);
802ffb0: e0bfff17 ldw r2,-4(fp)
802ffb4: 10c00017 ldw r3,0(r2)
802ffb8: e0bffe17 ldw r2,-8(fp)
802ffbc: 10800217 ldw r2,8(r2)
802ffc0: 1887883a add r3,r3,r2
802ffc4: e0bfff17 ldw r2,-4(fp)
802ffc8: 10c00015 stw r3,0(r2)
if (n)
802ffcc: e0bffd17 ldw r2,-12(fp)
802ffd0: 10000426 beq r2,zero,802ffe4 <sbcompress+0x194>
n->m_next = m;
802ffd4: e0bffd17 ldw r2,-12(fp)
802ffd8: e0fffe17 ldw r3,-8(fp)
802ffdc: 10c00615 stw r3,24(r2)
802ffe0: 00000306 br 802fff0 <sbcompress+0x1a0>
else
sb->sb_mb = m;
802ffe4: e0bfff17 ldw r2,-4(fp)
802ffe8: e0fffe17 ldw r3,-8(fp)
802ffec: 10c00615 stw r3,24(r2)
n = m;
802fff0: e0bffe17 ldw r2,-8(fp)
802fff4: e0bffd15 stw r2,-12(fp)
m = m->m_next;
802fff8: e0bffe17 ldw r2,-8(fp)
802fffc: 10800617 ldw r2,24(r2)
8030000: e0bffe15 stw r2,-8(fp)
n->m_next = 0;
8030004: e0bffd17 ldw r2,-12(fp)
8030008: 10000615 stw zero,24(r2)
while (m)
803000c: e0bffe17 ldw r2,-8(fp)
8030010: 103f971e bne r2,zero,802fe70 <sbcompress+0x20>
}
}
8030014: 0001883a nop
8030018: e037883a mov sp,fp
803001c: dfc00117 ldw ra,4(sp)
8030020: df000017 ldw fp,0(sp)
8030024: dec00204 addi sp,sp,8
8030028: f800283a ret
0803002c <sbflush>:
* RETURNS:
*/
void
sbflush(struct sockbuf * sb)
{
803002c: defffd04 addi sp,sp,-12
8030030: dfc00215 stw ra,8(sp)
8030034: df000115 stw fp,4(sp)
8030038: df000104 addi fp,sp,4
803003c: e13fff15 stw r4,-4(fp)
ENTER_CRIT_SECTION(sb);
8030040: 8028e940 call 8028e94 <irq_Mask>
if (sb->sb_flags & SB_LOCK)
8030044: e0bfff17 ldw r2,-4(fp)
8030048: 1080070b ldhu r2,28(r2)
803004c: 10bfffcc andi r2,r2,65535
8030050: 1080004c andi r2,r2,1
8030054: 10000926 beq r2,zero,803007c <sbflush+0x50>
panic("sbflush");
8030058: 01020174 movhi r4,2053
803005c: 212a9604 addi r4,r4,-21928
8030060: 80271780 call 8027178 <panic>
while ((sb->sb_mbcnt) || (sb->sb_cc))
8030064: 00000506 br 803007c <sbflush+0x50>
sbdrop (sb, (int)sb->sb_cc);
8030068: e0bfff17 ldw r2,-4(fp)
803006c: 10800017 ldw r2,0(r2)
8030070: 100b883a mov r5,r2
8030074: e13fff17 ldw r4,-4(fp)
8030078: 80300b00 call 80300b0 <sbdrop>
while ((sb->sb_mbcnt) || (sb->sb_cc))
803007c: e0bfff17 ldw r2,-4(fp)
8030080: 10800217 ldw r2,8(r2)
8030084: 103ff81e bne r2,zero,8030068 <sbflush+0x3c>
8030088: e0bfff17 ldw r2,-4(fp)
803008c: 10800017 ldw r2,0(r2)
8030090: 103ff51e bne r2,zero,8030068 <sbflush+0x3c>
EXIT_CRIT_SECTION(sb);
8030094: 8028ef40 call 8028ef4 <irq_Unmask>
}
8030098: 0001883a nop
803009c: e037883a mov sp,fp
80300a0: dfc00117 ldw ra,4(sp)
80300a4: df000017 ldw fp,0(sp)
80300a8: dec00204 addi sp,sp,8
80300ac: f800283a ret
080300b0 <sbdrop>:
* RETURNS:
*/
void
sbdrop(struct sockbuf * sb, int len)
{
80300b0: defff904 addi sp,sp,-28
80300b4: dfc00615 stw ra,24(sp)
80300b8: df000515 stw fp,20(sp)
80300bc: df000504 addi fp,sp,20
80300c0: e13ffc15 stw r4,-16(fp)
80300c4: e17ffb15 stw r5,-20(fp)
struct mbuf * m, * mn;
struct mbuf * next;
ENTER_CRIT_SECTION(sb);
80300c8: 8028e940 call 8028e94 <irq_Mask>
if ((m = sb->sb_mb) != NULL)
80300cc: e0bffc17 ldw r2,-16(fp)
80300d0: 10800617 ldw r2,24(r2)
80300d4: e0bfff15 stw r2,-4(fp)
80300d8: e0bfff17 ldw r2,-4(fp)
80300dc: 10000426 beq r2,zero,80300f0 <sbdrop+0x40>
next = m->m_act;
80300e0: e0bfff17 ldw r2,-4(fp)
80300e4: 10800717 ldw r2,28(r2)
80300e8: e0bffe15 stw r2,-8(fp)
80300ec: 00003706 br 80301cc <sbdrop+0x11c>
else
next = NULL;
80300f0: e03ffe15 stw zero,-8(fp)
while (len > 0)
80300f4: 00003506 br 80301cc <sbdrop+0x11c>
{
if (m == 0)
80300f8: e0bfff17 ldw r2,-4(fp)
80300fc: 10000b1e bne r2,zero,803012c <sbdrop+0x7c>
{
if (next == 0)
8030100: e0bffe17 ldw r2,-8(fp)
8030104: 1000031e bne r2,zero,8030114 <sbdrop+0x64>
panic("sbdrop");
8030108: 01020174 movhi r4,2053
803010c: 212a9804 addi r4,r4,-21920
8030110: 80271780 call 8027178 <panic>
m = next;
8030114: e0bffe17 ldw r2,-8(fp)
8030118: e0bfff15 stw r2,-4(fp)
next = m->m_act;
803011c: e0bfff17 ldw r2,-4(fp)
8030120: 10800717 ldw r2,28(r2)
8030124: e0bffe15 stw r2,-8(fp)
continue;
8030128: 00002806 br 80301cc <sbdrop+0x11c>
}
if (m->m_len > (unsigned)len)
803012c: e0bfff17 ldw r2,-4(fp)
8030130: 10800217 ldw r2,8(r2)
8030134: e0fffb17 ldw r3,-20(fp)
8030138: 1880132e bgeu r3,r2,8030188 <sbdrop+0xd8>
{
m->m_len -= len;
803013c: e0bfff17 ldw r2,-4(fp)
8030140: 10c00217 ldw r3,8(r2)
8030144: e0bffb17 ldw r2,-20(fp)
8030148: 1887c83a sub r3,r3,r2
803014c: e0bfff17 ldw r2,-4(fp)
8030150: 10c00215 stw r3,8(r2)
m->m_data += len;
8030154: e0bfff17 ldw r2,-4(fp)
8030158: 10c00317 ldw r3,12(r2)
803015c: e0bffb17 ldw r2,-20(fp)
8030160: 1887883a add r3,r3,r2
8030164: e0bfff17 ldw r2,-4(fp)
8030168: 10c00315 stw r3,12(r2)
sb->sb_cc -= len;
803016c: e0bffc17 ldw r2,-16(fp)
8030170: 10c00017 ldw r3,0(r2)
8030174: e0bffb17 ldw r2,-20(fp)
8030178: 1887c83a sub r3,r3,r2
803017c: e0bffc17 ldw r2,-16(fp)
8030180: 10c00015 stw r3,0(r2)
break;
8030184: 00001306 br 80301d4 <sbdrop+0x124>
}
len -= m->m_len;
8030188: e0fffb17 ldw r3,-20(fp)
803018c: e0bfff17 ldw r2,-4(fp)
8030190: 10800217 ldw r2,8(r2)
8030194: 1885c83a sub r2,r3,r2
8030198: e0bffb15 stw r2,-20(fp)
sbfree (sb, m);
803019c: e0bffc17 ldw r2,-16(fp)
80301a0: 10c00017 ldw r3,0(r2)
80301a4: e0bfff17 ldw r2,-4(fp)
80301a8: 10800217 ldw r2,8(r2)
80301ac: 1887c83a sub r3,r3,r2
80301b0: e0bffc17 ldw r2,-16(fp)
80301b4: 10c00015 stw r3,0(r2)
MFREE(m, mn);
80301b8: e13fff17 ldw r4,-4(fp)
80301bc: 8029bf80 call 8029bf8 <m_free>
80301c0: e0bffd15 stw r2,-12(fp)
m = mn;
80301c4: e0bffd17 ldw r2,-12(fp)
80301c8: e0bfff15 stw r2,-4(fp)
while (len > 0)
80301cc: e0bffb17 ldw r2,-20(fp)
80301d0: 00bfc916 blt zero,r2,80300f8 <sbdrop+0x48>
}
while (m && m->m_len == 0)
80301d4: 00000c06 br 8030208 <sbdrop+0x158>
{
sbfree(sb, m);
80301d8: e0bffc17 ldw r2,-16(fp)
80301dc: 10c00017 ldw r3,0(r2)
80301e0: e0bfff17 ldw r2,-4(fp)
80301e4: 10800217 ldw r2,8(r2)
80301e8: 1887c83a sub r3,r3,r2
80301ec: e0bffc17 ldw r2,-16(fp)
80301f0: 10c00015 stw r3,0(r2)
MFREE(m, mn);
80301f4: e13fff17 ldw r4,-4(fp)
80301f8: 8029bf80 call 8029bf8 <m_free>
80301fc: e0bffd15 stw r2,-12(fp)
m = mn;
8030200: e0bffd17 ldw r2,-12(fp)
8030204: e0bfff15 stw r2,-4(fp)
while (m && m->m_len == 0)
8030208: e0bfff17 ldw r2,-4(fp)
803020c: 10000326 beq r2,zero,803021c <sbdrop+0x16c>
8030210: e0bfff17 ldw r2,-4(fp)
8030214: 10800217 ldw r2,8(r2)
8030218: 103fef26 beq r2,zero,80301d8 <sbdrop+0x128>
}
if (m)
803021c: e0bfff17 ldw r2,-4(fp)
8030220: 10000726 beq r2,zero,8030240 <sbdrop+0x190>
{
sb->sb_mb = m;
8030224: e0bffc17 ldw r2,-16(fp)
8030228: e0ffff17 ldw r3,-4(fp)
803022c: 10c00615 stw r3,24(r2)
m->m_act = next;
8030230: e0bfff17 ldw r2,-4(fp)
8030234: e0fffe17 ldw r3,-8(fp)
8030238: 10c00715 stw r3,28(r2)
803023c: 00000306 br 803024c <sbdrop+0x19c>
} else
sb->sb_mb = next;
8030240: e0bffc17 ldw r2,-16(fp)
8030244: e0fffe17 ldw r3,-8(fp)
8030248: 10c00615 stw r3,24(r2)
EXIT_CRIT_SECTION(sb);
803024c: 8028ef40 call 8028ef4 <irq_Unmask>
}
8030250: 0001883a nop
8030254: e037883a mov sp,fp
8030258: dfc00117 ldw ra,4(sp)
803025c: df000017 ldw fp,0(sp)
8030260: dec00204 addi sp,sp,8
8030264: f800283a ret
08030268 <sbdropend>:
* RETURNS:
*/
void
sbdropend(struct sockbuf * sb, struct mbuf * m)
{
8030268: defff904 addi sp,sp,-28
803026c: dfc00615 stw ra,24(sp)
8030270: df000515 stw fp,20(sp)
8030274: df000504 addi fp,sp,20
8030278: e13ffc15 stw r4,-16(fp)
803027c: e17ffb15 stw r5,-20(fp)
struct mbuf * nmb, * pmb;
int len;
ENTER_CRIT_SECTION(sb);
8030280: 8028e940 call 8028e94 <irq_Mask>
len = mbuf_len(m);
8030284: e13ffb17 ldw r4,-20(fp)
8030288: 802a1d80 call 802a1d8 <mbuf_len>
803028c: e0bffd15 stw r2,-12(fp)
if (len > 0)
8030290: e0bffd17 ldw r2,-12(fp)
8030294: 0080070e bge zero,r2,80302b4 <sbdropend+0x4c>
m_adj(sb->sb_mb, -len); /* Adjust the lengths of the mbuf chain */
8030298: e0bffc17 ldw r2,-16(fp)
803029c: 10c00617 ldw r3,24(r2)
80302a0: e0bffd17 ldw r2,-12(fp)
80302a4: 0085c83a sub r2,zero,r2
80302a8: 100b883a mov r5,r2
80302ac: 1809883a mov r4,r3
80302b0: 802a0180 call 802a018 <m_adj>
nmb = sb->sb_mb;
80302b4: e0bffc17 ldw r2,-16(fp)
80302b8: 10800617 ldw r2,24(r2)
80302bc: e0bfff15 stw r2,-4(fp)
pmb = NULL;
80302c0: e03ffe15 stw zero,-8(fp)
if (sb->sb_mb->m_len == 0)
80302c4: e0bffc17 ldw r2,-16(fp)
80302c8: 10800617 ldw r2,24(r2)
80302cc: 10800217 ldw r2,8(r2)
80302d0: 1000081e bne r2,zero,80302f4 <sbdropend+0x8c>
sb->sb_mb = NULL;
80302d4: e0bffc17 ldw r2,-16(fp)
80302d8: 10000615 stw zero,24(r2)
while (nmb && (nmb->m_len !=0)) /* Release mbufs that have a 0 len */
80302dc: 00000506 br 80302f4 <sbdropend+0x8c>
{
pmb = nmb; /* Remember previous */
80302e0: e0bfff17 ldw r2,-4(fp)
80302e4: e0bffe15 stw r2,-8(fp)
nmb = nmb->m_next;
80302e8: e0bfff17 ldw r2,-4(fp)
80302ec: 10800617 ldw r2,24(r2)
80302f0: e0bfff15 stw r2,-4(fp)
while (nmb && (nmb->m_len !=0)) /* Release mbufs that have a 0 len */
80302f4: e0bfff17 ldw r2,-4(fp)
80302f8: 10000326 beq r2,zero,8030308 <sbdropend+0xa0>
80302fc: e0bfff17 ldw r2,-4(fp)
8030300: 10800217 ldw r2,8(r2)
8030304: 103ff61e bne r2,zero,80302e0 <sbdropend+0x78>
}
if (nmb && (nmb->m_len == 0)) /* Assume once 0 len found, all the rest */
8030308: e0bfff17 ldw r2,-4(fp)
803030c: 10000926 beq r2,zero,8030334 <sbdropend+0xcc>
8030310: e0bfff17 ldw r2,-4(fp)
8030314: 10800217 ldw r2,8(r2)
8030318: 1000061e bne r2,zero,8030334 <sbdropend+0xcc>
{ /* are zeroes */
if (pmb != NULL)
803031c: e0bffe17 ldw r2,-8(fp)
8030320: 10000226 beq r2,zero,803032c <sbdropend+0xc4>
pmb->m_next = NULL;
8030324: e0bffe17 ldw r2,-8(fp)
8030328: 10000615 stw zero,24(r2)
m_freem(nmb);
803032c: e13fff17 ldw r4,-4(fp)
8030330: 8029cfc0 call 8029cfc <m_freem>
}
sb->sb_cc -= len; /* Do a sbfree using the len */
8030334: e0bffc17 ldw r2,-16(fp)
8030338: 10c00017 ldw r3,0(r2)
803033c: e0bffd17 ldw r2,-12(fp)
8030340: 1887c83a sub r3,r3,r2
8030344: e0bffc17 ldw r2,-16(fp)
8030348: 10c00015 stw r3,0(r2)
EXIT_CRIT_SECTION(sb);
803034c: 8028ef40 call 8028ef4 <irq_Unmask>
}
8030350: 0001883a nop
8030354: e037883a mov sp,fp
8030358: dfc00117 ldw ra,4(sp)
803035c: df000017 ldw fp,0(sp)
8030360: dec00204 addi sp,sp,8
8030364: f800283a ret
08030368 <sbdroprecord>:
* RETURNS:
*/
void
sbdroprecord(struct sockbuf * sb)
{
8030368: defffb04 addi sp,sp,-20
803036c: dfc00415 stw ra,16(sp)
8030370: df000315 stw fp,12(sp)
8030374: df000304 addi fp,sp,12
8030378: e13ffd15 stw r4,-12(fp)
struct mbuf * m, * mn;
ENTER_CRIT_SECTION(sb);
803037c: 8028e940 call 8028e94 <irq_Mask>
m = sb->sb_mb;
8030380: e0bffd17 ldw r2,-12(fp)
8030384: 10800617 ldw r2,24(r2)
8030388: e0bfff15 stw r2,-4(fp)
if (m)
803038c: e0bfff17 ldw r2,-4(fp)
8030390: 10001226 beq r2,zero,80303dc <sbdroprecord+0x74>
{ sb->sb_mb = m->m_act;
8030394: e0bfff17 ldw r2,-4(fp)
8030398: 10c00717 ldw r3,28(r2)
803039c: e0bffd17 ldw r2,-12(fp)
80303a0: 10c00615 stw r3,24(r2)
do
{ sbfree(sb, m);
80303a4: e0bffd17 ldw r2,-12(fp)
80303a8: 10c00017 ldw r3,0(r2)
80303ac: e0bfff17 ldw r2,-4(fp)
80303b0: 10800217 ldw r2,8(r2)
80303b4: 1887c83a sub r3,r3,r2
80303b8: e0bffd17 ldw r2,-12(fp)
80303bc: 10c00015 stw r3,0(r2)
MFREE(m, mn);
80303c0: e13fff17 ldw r4,-4(fp)
80303c4: 8029bf80 call 8029bf8 <m_free>
80303c8: e0bffe15 stw r2,-8(fp)
} while ((m = mn) != NULL);
80303cc: e0bffe17 ldw r2,-8(fp)
80303d0: e0bfff15 stw r2,-4(fp)
80303d4: e0bfff17 ldw r2,-4(fp)
80303d8: 103ff21e bne r2,zero,80303a4 <sbdroprecord+0x3c>
}
EXIT_CRIT_SECTION(sb);
80303dc: 8028ef40 call 8028ef4 <irq_Unmask>
}
80303e0: 0001883a nop
80303e4: e037883a mov sp,fp
80303e8: dfc00117 ldw ra,4(sp)
80303ec: df000017 ldw fp,0(sp)
80303f0: dec00204 addi sp,sp,8
80303f4: f800283a ret
080303f8 <t_select>:
int
t_select(fd_set * in, /* lists of sockets to watch */
fd_set * out,
fd_set * ex,
long tv) /* ticks to wait */
{
80303f8: defe7204 addi sp,sp,-1592
80303fc: dfc18d15 stw ra,1588(sp)
8030400: df018c15 stw fp,1584(sp)
8030404: df018c04 addi fp,sp,1584
8030408: e13e7715 stw r4,-1572(fp)
803040c: e17e7615 stw r5,-1576(fp)
8030410: e1be7515 stw r6,-1580(fp)
8030414: e1fe7415 stw r7,-1584(fp)
fd_set obits[3], ibits [3];
u_long tmo;
int retval = 0;
8030418: e03fff15 stw zero,-4(fp)
MEMSET(&obits, 0, sizeof(obits));
803041c: e0bf3b04 addi r2,fp,-788
8030420: 0180c304 movi r6,780
8030424: 000b883a mov r5,zero
8030428: 1009883a mov r4,r2
803042c: 80088e40 call 80088e4 <memset>
MEMSET(&ibits, 0, sizeof(ibits));
8030430: e0be7804 addi r2,fp,-1568
8030434: 0180c304 movi r6,780
8030438: 000b883a mov r5,zero
803043c: 1009883a mov r4,r2
8030440: 80088e40 call 80088e4 <memset>
if (in)
8030444: e0be7717 ldw r2,-1572(fp)
8030448: 10000526 beq r2,zero,8030460 <t_select+0x68>
MEMCPY(&ibits[0], in, sizeof(fd_set));
803044c: e0be7804 addi r2,fp,-1568
8030450: 01804104 movi r6,260
8030454: e17e7717 ldw r5,-1572(fp)
8030458: 1009883a mov r4,r2
803045c: 80086b80 call 80086b8 <memcpy>
if (out)
8030460: e0be7617 ldw r2,-1576(fp)
8030464: 10000626 beq r2,zero,8030480 <t_select+0x88>
MEMCPY(&ibits[1], out, sizeof(fd_set));
8030468: e0be7804 addi r2,fp,-1568
803046c: 10804104 addi r2,r2,260
8030470: 01804104 movi r6,260
8030474: e17e7617 ldw r5,-1576(fp)
8030478: 1009883a mov r4,r2
803047c: 80086b80 call 80086b8 <memcpy>
if (ex)
8030480: e0be7517 ldw r2,-1580(fp)
8030484: 10000626 beq r2,zero,80304a0 <t_select+0xa8>
MEMCPY(&ibits[2], ex, sizeof(fd_set));
8030488: e0be7804 addi r2,fp,-1568
803048c: 10808204 addi r2,r2,520
8030490: 01804104 movi r6,260
8030494: e17e7517 ldw r5,-1580(fp)
8030498: 1009883a mov r4,r2
803049c: 80086b80 call 80086b8 <memcpy>
tmo = cticks + tv;
80304a0: d0e07d17 ldw r3,-32268(gp)
80304a4: e0be7417 ldw r2,-1584(fp)
80304a8: 1885883a add r2,r3,r2
80304ac: e0bffe15 stw r2,-8(fp)
/* if all the fd_sets are empty, just block; else do a real select() */
if ((ibits[0].fd_count == 0) && (ibits[1].fd_count == 0) &&
80304b0: e0be7817 ldw r2,-1568(fp)
80304b4: 10000c1e bne r2,zero,80304e8 <t_select+0xf0>
80304b8: e0beb917 ldw r2,-1308(fp)
80304bc: 10000a1e bne r2,zero,80304e8 <t_select+0xf0>
(ibits[2].fd_count == 0))
80304c0: e0befa17 ldw r2,-1048(fp)
if ((ibits[0].fd_count == 0) && (ibits[1].fd_count == 0) &&
80304c4: 1000081e bne r2,zero,80304e8 <t_select+0xf0>
{
if (tv > 0) /* make sure we don't block on nothing forever */
80304c8: e0be7417 ldw r2,-1584(fp)
80304cc: 00801f0e bge zero,r2,803054c <t_select+0x154>
while (tmo > cticks)
{
tk_yield();
}
#else
TK_SLEEP(tv);
80304d0: e0be7417 ldw r2,-1584(fp)
80304d4: 10800044 addi r2,r2,1
80304d8: 10bfffcc andi r2,r2,65535
80304dc: 1009883a mov r4,r2
80304e0: 801730c0 call 801730c <OSTimeDly>
if (tv > 0) /* make sure we don't block on nothing forever */
80304e4: 00001906 br 803054c <t_select+0x154>
/* Lock the net semaphore before going into selscan. Upon
* return we will either call tcp_sleep(), which unlocks the
* semaphore, or fall into the unlock statement.
*/
LOCK_NET_RESOURCE(NET_RESID);
80304e8: 0009883a mov r4,zero
80304ec: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
while ((retval = sock_selscan(ibits, obits)) == 0)
80304f0: 00000a06 br 803051c <t_select+0x124>
{
if (tv != -1L)
80304f4: e0be7417 ldw r2,-1584(fp)
80304f8: 10bfffe0 cmpeqi r2,r2,-1
80304fc: 1000031e bne r2,zero,803050c <t_select+0x114>
{
if (tmo <= cticks)
8030500: d0e07d17 ldw r3,-32268(gp)
8030504: e0bffe17 ldw r2,-8(fp)
8030508: 18800d2e bgeu r3,r2,8030540 <t_select+0x148>
break;
}
select_wait = 1;
803050c: 00800044 movi r2,1
8030510: d0a0850d sth r2,-32236(gp)
tcp_sleep (&select_wait);
8030514: d1208504 addi r4,gp,-32236
8030518: 8027a540 call 8027a54 <tcp_sleep>
while ((retval = sock_selscan(ibits, obits)) == 0)
803051c: e0ff3b04 addi r3,fp,-788
8030520: e0be7804 addi r2,fp,-1568
8030524: 180b883a mov r5,r3
8030528: 1009883a mov r4,r2
803052c: 80305c80 call 80305c8 <sock_selscan>
8030530: e0bfff15 stw r2,-4(fp)
8030534: e0bfff17 ldw r2,-4(fp)
8030538: 103fee26 beq r2,zero,80304f4 <t_select+0xfc>
803053c: 00000106 br 8030544 <t_select+0x14c>
break;
8030540: 0001883a nop
}
UNLOCK_NET_RESOURCE(NET_RESID);
8030544: 0009883a mov r4,zero
8030548: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
if (retval >= 0)
803054c: e0bfff17 ldw r2,-4(fp)
8030550: 10001716 blt r2,zero,80305b0 <t_select+0x1b8>
{
if (in)
8030554: e0be7717 ldw r2,-1572(fp)
8030558: 10000526 beq r2,zero,8030570 <t_select+0x178>
MEMCPY(in, &obits[0], sizeof(fd_set));
803055c: e0bf3b04 addi r2,fp,-788
8030560: 01804104 movi r6,260
8030564: 100b883a mov r5,r2
8030568: e13e7717 ldw r4,-1572(fp)
803056c: 80086b80 call 80086b8 <memcpy>
if (out)
8030570: e0be7617 ldw r2,-1576(fp)
8030574: 10000626 beq r2,zero,8030590 <t_select+0x198>
MEMCPY(out, &obits[1], sizeof(fd_set));
8030578: e0bf3b04 addi r2,fp,-788
803057c: 10804104 addi r2,r2,260
8030580: 01804104 movi r6,260
8030584: 100b883a mov r5,r2
8030588: e13e7617 ldw r4,-1576(fp)
803058c: 80086b80 call 80086b8 <memcpy>
if (ex)
8030590: e0be7517 ldw r2,-1580(fp)
8030594: 10000626 beq r2,zero,80305b0 <t_select+0x1b8>
MEMCPY(ex, &obits[2], sizeof(fd_set));
8030598: e0bf3b04 addi r2,fp,-788
803059c: 10808204 addi r2,r2,520
80305a0: 01804104 movi r6,260
80305a4: 100b883a mov r5,r2
80305a8: e13e7517 ldw r4,-1580(fp)
80305ac: 80086b80 call 80086b8 <memcpy>
}
return retval;
80305b0: e0bfff17 ldw r2,-4(fp)
}
80305b4: e037883a mov sp,fp
80305b8: dfc00117 ldw ra,4(sp)
80305bc: df000017 ldw fp,0(sp)
80305c0: dec00204 addi sp,sp,8
80305c4: f800283a ret
080305c8 <sock_selscan>:
* RETURNS:
*/
int
sock_selscan(fd_set * ibits, fd_set * obits)
{
80305c8: defff604 addi sp,sp,-40
80305cc: dfc00915 stw ra,36(sp)
80305d0: df000815 stw fp,32(sp)
80305d4: df000804 addi fp,sp,32
80305d8: e13ff915 stw r4,-28(fp)
80305dc: e17ff815 stw r5,-32(fp)
fd_set *in, *out;
int which;
int sock;
int flag = 0;
80305e0: e03ffd15 stw zero,-12(fp)
int num_sel = 0;
80305e4: e03ffc15 stw zero,-16(fp)
for (which = 0; which < 3; which++)
80305e8: e03fff15 stw zero,-4(fp)
80305ec: 00003d06 br 80306e4 <sock_selscan+0x11c>
{
switch (which)
80305f0: e0bfff17 ldw r2,-4(fp)
80305f4: 10800060 cmpeqi r2,r2,1
80305f8: 1000081e bne r2,zero,803061c <sock_selscan+0x54>
80305fc: e0bfff17 ldw r2,-4(fp)
8030600: 108000a0 cmpeqi r2,r2,2
8030604: 1000081e bne r2,zero,8030628 <sock_selscan+0x60>
8030608: e0bfff17 ldw r2,-4(fp)
803060c: 1000081e bne r2,zero,8030630 <sock_selscan+0x68>
{
case 0:
flag = SOREAD; break;
8030610: 00800044 movi r2,1
8030614: e0bffd15 stw r2,-12(fp)
8030618: 00000506 br 8030630 <sock_selscan+0x68>
case 1:
flag = SOWRITE; break;
803061c: 00800084 movi r2,2
8030620: e0bffd15 stw r2,-12(fp)
8030624: 00000206 br 8030630 <sock_selscan+0x68>
case 2:
flag = 0; break;
8030628: e03ffd15 stw zero,-12(fp)
803062c: 0001883a nop
}
in = &ibits [which];
8030630: e0bfff17 ldw r2,-4(fp)
8030634: 10804124 muli r2,r2,260
8030638: e0fff917 ldw r3,-28(fp)
803063c: 1885883a add r2,r3,r2
8030640: e0bffb15 stw r2,-20(fp)
out = &obits [which];
8030644: e0bfff17 ldw r2,-4(fp)
8030648: 10804124 muli r2,r2,260
803064c: e0fff817 ldw r3,-32(fp)
8030650: 1885883a add r2,r3,r2
8030654: e0bffa15 stw r2,-24(fp)
for (sock = 0; sock < (int)in->fd_count; sock++)
8030658: e03ffe15 stw zero,-8(fp)
803065c: 00001906 br 80306c4 <sock_selscan+0xfc>
{
if (sock_select (in->fd_array[sock], flag))
8030660: e0fffb17 ldw r3,-20(fp)
8030664: e0bffe17 ldw r2,-8(fp)
8030668: 10800044 addi r2,r2,1
803066c: 100490ba slli r2,r2,2
8030670: 1885883a add r2,r3,r2
8030674: 10800017 ldw r2,0(r2)
8030678: e17ffd17 ldw r5,-12(fp)
803067c: 1009883a mov r4,r2
8030680: 80307080 call 8030708 <sock_select>
8030684: 10000c26 beq r2,zero,80306b8 <sock_selscan+0xf0>
{
FD_SET(in->fd_array[sock], out);
8030688: e0fffb17 ldw r3,-20(fp)
803068c: e0bffe17 ldw r2,-8(fp)
8030690: 10800044 addi r2,r2,1
8030694: 100490ba slli r2,r2,2
8030698: 1885883a add r2,r3,r2
803069c: 10800017 ldw r2,0(r2)
80306a0: e17ffa17 ldw r5,-24(fp)
80306a4: 1009883a mov r4,r2
80306a8: 8030b180 call 8030b18 <ifd_set>
num_sel++;
80306ac: e0bffc17 ldw r2,-16(fp)
80306b0: 10800044 addi r2,r2,1
80306b4: e0bffc15 stw r2,-16(fp)
for (sock = 0; sock < (int)in->fd_count; sock++)
80306b8: e0bffe17 ldw r2,-8(fp)
80306bc: 10800044 addi r2,r2,1
80306c0: e0bffe15 stw r2,-8(fp)
80306c4: e0bffb17 ldw r2,-20(fp)
80306c8: 10800017 ldw r2,0(r2)
80306cc: 1007883a mov r3,r2
80306d0: e0bffe17 ldw r2,-8(fp)
80306d4: 10ffe216 blt r2,r3,8030660 <sock_selscan+0x98>
for (which = 0; which < 3; which++)
80306d8: e0bfff17 ldw r2,-4(fp)
80306dc: 10800044 addi r2,r2,1
80306e0: e0bfff15 stw r2,-4(fp)
80306e4: e0bfff17 ldw r2,-4(fp)
80306e8: 108000d0 cmplti r2,r2,3
80306ec: 103fc01e bne r2,zero,80305f0 <sock_selscan+0x28>
}
}
}
return num_sel;
80306f0: e0bffc17 ldw r2,-16(fp)
}
80306f4: e037883a mov sp,fp
80306f8: dfc00117 ldw ra,4(sp)
80306fc: df000017 ldw fp,0(sp)
8030700: dec00204 addi sp,sp,8
8030704: f800283a ret
08030708 <sock_select>:
* RETURNS:
*/
int
sock_select(long sock, int flag)
{
8030708: defffa04 addi sp,sp,-24
803070c: dfc00515 stw ra,20(sp)
8030710: df000415 stw fp,16(sp)
8030714: df000404 addi fp,sp,16
8030718: e13ffd15 stw r4,-12(fp)
803071c: e17ffc15 stw r5,-16(fp)
struct socket * so;
int ready = 0;
8030720: e03fff15 stw zero,-4(fp)
so = LONG2SO(sock);
8030724: e0bffd17 ldw r2,-12(fp)
8030728: 10bffc04 addi r2,r2,-16
803072c: 100490ba slli r2,r2,2
8030730: e0bffe15 stw r2,-8(fp)
switch (flag)
8030734: e0bffc17 ldw r2,-16(fp)
8030738: 10800060 cmpeqi r2,r2,1
803073c: 1000061e bne r2,zero,8030758 <sock_select+0x50>
8030740: e0bffc17 ldw r2,-16(fp)
8030744: 108000a0 cmpeqi r2,r2,2
8030748: 1000211e bne r2,zero,80307d0 <sock_select+0xc8>
803074c: e0bffc17 ldw r2,-16(fp)
8030750: 10004326 beq r2,zero,8030860 <sock_select+0x158>
8030754: 00006006 br 80308d8 <sock_select+0x1d0>
{
case SOREAD:
/* can we read something from so? */
if (so->so_rcv.sb_cc)
8030758: e0bffe17 ldw r2,-8(fp)
803075c: 10800a17 ldw r2,40(r2)
8030760: 10000326 beq r2,zero,8030770 <sock_select+0x68>
{
ready = 1;
8030764: 00800044 movi r2,1
8030768: e0bfff15 stw r2,-4(fp)
break;
803076c: 00005a06 br 80308d8 <sock_select+0x1d0>
}
if (so->so_state & SS_CANTRCVMORE)
8030770: e0bffe17 ldw r2,-8(fp)
8030774: 1080088b ldhu r2,34(r2)
8030778: 10bfffcc andi r2,r2,65535
803077c: 1080080c andi r2,r2,32
8030780: 10000326 beq r2,zero,8030790 <sock_select+0x88>
{ ready = 1;
8030784: 00800044 movi r2,1
8030788: e0bfff15 stw r2,-4(fp)
break;
803078c: 00005206 br 80308d8 <sock_select+0x1d0>
}
if (so->so_qlen) /* attach is ready */
8030790: e0bffe17 ldw r2,-8(fp)
8030794: 10801e43 ldbu r2,121(r2)
8030798: 10803fcc andi r2,r2,255
803079c: 1080201c xori r2,r2,128
80307a0: 10bfe004 addi r2,r2,-128
80307a4: 10000326 beq r2,zero,80307b4 <sock_select+0xac>
{
ready = 1;
80307a8: 00800044 movi r2,1
80307ac: e0bfff15 stw r2,-4(fp)
break;
80307b0: 00004906 br 80308d8 <sock_select+0x1d0>
}
}
#endif /* TCP_ZEROCOPY */
/* fall to here if so is not ready to read */
so->so_rcv.sb_flags |= SB_SEL; /* set flag for select wakeup */
80307b4: e0bffe17 ldw r2,-8(fp)
80307b8: 1080110b ldhu r2,68(r2)
80307bc: 10800214 ori r2,r2,8
80307c0: 1007883a mov r3,r2
80307c4: e0bffe17 ldw r2,-8(fp)
80307c8: 10c0110d sth r3,68(r2)
break;
80307cc: 00004206 br 80308d8 <sock_select+0x1d0>
case SOWRITE:
if ((sbspace(&(so)->so_snd) > 0) &&
80307d0: e0bffe17 ldw r2,-8(fp)
80307d4: 10801317 ldw r2,76(r2)
80307d8: 1007883a mov r3,r2
80307dc: e0bffe17 ldw r2,-8(fp)
80307e0: 10801217 ldw r2,72(r2)
80307e4: 1885c83a sub r2,r3,r2
80307e8: 10001816 blt r2,zero,803084c <sock_select+0x144>
80307ec: e0bffe17 ldw r2,-8(fp)
80307f0: 10c01317 ldw r3,76(r2)
80307f4: e0bffe17 ldw r2,-8(fp)
80307f8: 10801217 ldw r2,72(r2)
80307fc: 18801326 beq r3,r2,803084c <sock_select+0x144>
((((so)->so_state&SS_ISCONNECTED) ||
8030800: e0bffe17 ldw r2,-8(fp)
8030804: 1080088b ldhu r2,34(r2)
8030808: 10bfffcc andi r2,r2,65535
803080c: 1080008c andi r2,r2,2
if ((sbspace(&(so)->so_snd) > 0) &&
8030810: 10000b1e bne r2,zero,8030840 <sock_select+0x138>
((so)->so_proto->pr_flags&PR_CONNREQUIRED)==0) ||
8030814: e0bffe17 ldw r2,-8(fp)
8030818: 10800217 ldw r2,8(r2)
803081c: 1080010b ldhu r2,4(r2)
8030820: 10bfffcc andi r2,r2,65535
8030824: 1080010c andi r2,r2,4
((((so)->so_state&SS_ISCONNECTED) ||
8030828: 10000526 beq r2,zero,8030840 <sock_select+0x138>
((so)->so_state & SS_CANTSENDMORE)))
803082c: e0bffe17 ldw r2,-8(fp)
8030830: 1080088b ldhu r2,34(r2)
8030834: 10bfffcc andi r2,r2,65535
8030838: 1080040c andi r2,r2,16
((so)->so_proto->pr_flags&PR_CONNREQUIRED)==0) ||
803083c: 10000326 beq r2,zero,803084c <sock_select+0x144>
{
ready = 1;
8030840: 00800044 movi r2,1
8030844: e0bfff15 stw r2,-4(fp)
break;
8030848: 00002306 br 80308d8 <sock_select+0x1d0>
}
sbselqueue (&so->so_snd);
803084c: e0bffe17 ldw r2,-8(fp)
8030850: 10801204 addi r2,r2,72
8030854: 1009883a mov r4,r2
8030858: 802f8a40 call 802f8a4 <sbselqueue>
break;
803085c: 00001e06 br 80308d8 <sock_select+0x1d0>
case 0:
if (so->so_oobmark || (so->so_state & SS_RCVATMARK))
8030860: e0bffe17 ldw r2,-8(fp)
8030864: 10801a17 ldw r2,104(r2)
8030868: 1000051e bne r2,zero,8030880 <sock_select+0x178>
803086c: e0bffe17 ldw r2,-8(fp)
8030870: 1080088b ldhu r2,34(r2)
8030874: 10bfffcc andi r2,r2,65535
8030878: 1080100c andi r2,r2,64
803087c: 10000326 beq r2,zero,803088c <sock_select+0x184>
{
ready = 1;
8030880: 00800044 movi r2,1
8030884: e0bfff15 stw r2,-4(fp)
break;
8030888: 00001306 br 80308d8 <sock_select+0x1d0>
}
if (so->so_error &&
803088c: e0bffe17 ldw r2,-8(fp)
8030890: 10800617 ldw r2,24(r2)
8030894: 10000b26 beq r2,zero,80308c4 <sock_select+0x1bc>
(so->so_error != EINPROGRESS) &&
8030898: e0bffe17 ldw r2,-8(fp)
803089c: 10800617 ldw r2,24(r2)
if (so->so_error &&
80308a0: 10801de0 cmpeqi r2,r2,119
80308a4: 1000071e bne r2,zero,80308c4 <sock_select+0x1bc>
(so->so_error != EWOULDBLOCK))
80308a8: e0bffe17 ldw r2,-8(fp)
80308ac: 10800617 ldw r2,24(r2)
(so->so_error != EINPROGRESS) &&
80308b0: 108002e0 cmpeqi r2,r2,11
80308b4: 1000031e bne r2,zero,80308c4 <sock_select+0x1bc>
{
ready = 1;
80308b8: 00800044 movi r2,1
80308bc: e0bfff15 stw r2,-4(fp)
break;
80308c0: 00000506 br 80308d8 <sock_select+0x1d0>
}
sbselqueue(&so->so_rcv);
80308c4: e0bffe17 ldw r2,-8(fp)
80308c8: 10800a04 addi r2,r2,40
80308cc: 1009883a mov r4,r2
80308d0: 802f8a40 call 802f8a4 <sbselqueue>
break;
80308d4: 0001883a nop
}
return ready;
80308d8: e0bfff17 ldw r2,-4(fp)
}
80308dc: e037883a mov sp,fp
80308e0: dfc00117 ldw ra,4(sp)
80308e4: df000017 ldw fp,0(sp)
80308e8: dec00204 addi sp,sp,8
80308ec: f800283a ret
080308f0 <in_pcbnotify>:
void
in_pcbnotify(struct inpcb * head,
struct in_addr * dst,
int errnum,
void (*notify) __P ((struct inpcb *)))
{
80308f0: defff804 addi sp,sp,-32
80308f4: dfc00715 stw ra,28(sp)
80308f8: df000615 stw fp,24(sp)
80308fc: df000604 addi fp,sp,24
8030900: e13ffd15 stw r4,-12(fp)
8030904: e17ffc15 stw r5,-16(fp)
8030908: e1bffb15 stw r6,-20(fp)
803090c: e1fffa15 stw r7,-24(fp)
struct inpcb * inp, * oinp;
for (inp = head->inp_next; inp != head;)
8030910: e0bffd17 ldw r2,-12(fp)
8030914: 10800017 ldw r2,0(r2)
8030918: e0bfff15 stw r2,-4(fp)
803091c: 00001c06 br 8030990 <in_pcbnotify+0xa0>
{
if (inp->inp_faddr.s_addr != dst->s_addr ||
8030920: e0bfff17 ldw r2,-4(fp)
8030924: 10c00317 ldw r3,12(r2)
8030928: e0bffc17 ldw r2,-16(fp)
803092c: 10800017 ldw r2,0(r2)
8030930: 1880031e bne r3,r2,8030940 <in_pcbnotify+0x50>
inp->inp_socket == 0)
8030934: e0bfff17 ldw r2,-4(fp)
8030938: 10800817 ldw r2,32(r2)
if (inp->inp_faddr.s_addr != dst->s_addr ||
803093c: 1000041e bne r2,zero,8030950 <in_pcbnotify+0x60>
{
inp = inp->inp_next;
8030940: e0bfff17 ldw r2,-4(fp)
8030944: 10800017 ldw r2,0(r2)
8030948: e0bfff15 stw r2,-4(fp)
continue;
803094c: 00001006 br 8030990 <in_pcbnotify+0xa0>
}
if (errnum)
8030950: e0bffb17 ldw r2,-20(fp)
8030954: 10000426 beq r2,zero,8030968 <in_pcbnotify+0x78>
inp->inp_socket->so_error = errnum;
8030958: e0bfff17 ldw r2,-4(fp)
803095c: 10800817 ldw r2,32(r2)
8030960: e0fffb17 ldw r3,-20(fp)
8030964: 10c00615 stw r3,24(r2)
oinp = inp;
8030968: e0bfff17 ldw r2,-4(fp)
803096c: e0bffe15 stw r2,-8(fp)
inp = inp->inp_next;
8030970: e0bfff17 ldw r2,-4(fp)
8030974: 10800017 ldw r2,0(r2)
8030978: e0bfff15 stw r2,-4(fp)
if (notify)
803097c: e0bffa17 ldw r2,-24(fp)
8030980: 10000326 beq r2,zero,8030990 <in_pcbnotify+0xa0>
(*notify)(oinp);
8030984: e0bffa17 ldw r2,-24(fp)
8030988: e13ffe17 ldw r4,-8(fp)
803098c: 103ee83a callr r2
for (inp = head->inp_next; inp != head;)
8030990: e0ffff17 ldw r3,-4(fp)
8030994: e0bffd17 ldw r2,-12(fp)
8030998: 18bfe11e bne r3,r2,8030920 <in_pcbnotify+0x30>
}
}
803099c: 0001883a nop
80309a0: e037883a mov sp,fp
80309a4: dfc00117 ldw ra,4(sp)
80309a8: df000017 ldw fp,0(sp)
80309ac: dec00204 addi sp,sp,8
80309b0: f800283a ret
080309b4 <tcp_notify>:
* RETURNS:
*/
void
tcp_notify(struct inpcb * inp)
{
80309b4: defffd04 addi sp,sp,-12
80309b8: dfc00215 stw ra,8(sp)
80309bc: df000115 stw fp,4(sp)
80309c0: df000104 addi fp,sp,4
80309c4: e13fff15 stw r4,-4(fp)
tcp_wakeup(&inp->inp_socket->so_timeo);
80309c8: e0bfff17 ldw r2,-4(fp)
80309cc: 10800817 ldw r2,32(r2)
80309d0: 10800904 addi r2,r2,36
80309d4: 1009883a mov r4,r2
80309d8: 8027ba00 call 8027ba0 <tcp_wakeup>
sorwakeup(inp->inp_socket);
80309dc: e0bfff17 ldw r2,-4(fp)
80309e0: 10c00817 ldw r3,32(r2)
80309e4: e0bfff17 ldw r2,-4(fp)
80309e8: 10800817 ldw r2,32(r2)
80309ec: 10800a04 addi r2,r2,40
80309f0: 100b883a mov r5,r2
80309f4: 1809883a mov r4,r3
80309f8: 802f94c0 call 802f94c <sbwakeup>
sowwakeup(inp->inp_socket);
80309fc: e0bfff17 ldw r2,-4(fp)
8030a00: 10c00817 ldw r3,32(r2)
8030a04: e0bfff17 ldw r2,-4(fp)
8030a08: 10800817 ldw r2,32(r2)
8030a0c: 10801204 addi r2,r2,72
8030a10: 100b883a mov r5,r2
8030a14: 1809883a mov r4,r3
8030a18: 802f94c0 call 802f94c <sbwakeup>
}
8030a1c: 0001883a nop
8030a20: e037883a mov sp,fp
8030a24: dfc00117 ldw ra,4(sp)
8030a28: df000017 ldw fp,0(sp)
8030a2c: dec00204 addi sp,sp,8
8030a30: f800283a ret
08030a34 <ifd_clr>:
* compacts the fd_set.
*/
void
ifd_clr(long sock, fd_set *set)
{
8030a34: defffb04 addi sp,sp,-20
8030a38: dfc00415 stw ra,16(sp)
8030a3c: df000315 stw fp,12(sp)
8030a40: df000304 addi fp,sp,12
8030a44: e13ffe15 stw r4,-8(fp)
8030a48: e17ffd15 stw r5,-12(fp)
u_int i;
for (i = 0; i < set->fd_count ; i++)
8030a4c: e03fff15 stw zero,-4(fp)
8030a50: 00002706 br 8030af0 <ifd_clr+0xbc>
{
if (set->fd_array[i] == sock)
8030a54: e0fffd17 ldw r3,-12(fp)
8030a58: e0bfff17 ldw r2,-4(fp)
8030a5c: 10800044 addi r2,r2,1
8030a60: 100490ba slli r2,r2,2
8030a64: 1885883a add r2,r3,r2
8030a68: 10800017 ldw r2,0(r2)
8030a6c: e0fffe17 ldw r3,-8(fp)
8030a70: 18801c1e bne r3,r2,8030ae4 <ifd_clr+0xb0>
{
while (i + 1 < set->fd_count)
8030a74: 00001006 br 8030ab8 <ifd_clr+0x84>
{
set->fd_array[i] = set->fd_array[i + 1];
8030a78: e0bfff17 ldw r2,-4(fp)
8030a7c: 10800044 addi r2,r2,1
8030a80: e0fffd17 ldw r3,-12(fp)
8030a84: 10800044 addi r2,r2,1
8030a88: 100490ba slli r2,r2,2
8030a8c: 1885883a add r2,r3,r2
8030a90: 10c00017 ldw r3,0(r2)
8030a94: e13ffd17 ldw r4,-12(fp)
8030a98: e0bfff17 ldw r2,-4(fp)
8030a9c: 10800044 addi r2,r2,1
8030aa0: 100490ba slli r2,r2,2
8030aa4: 2085883a add r2,r4,r2
8030aa8: 10c00015 stw r3,0(r2)
i++;
8030aac: e0bfff17 ldw r2,-4(fp)
8030ab0: 10800044 addi r2,r2,1
8030ab4: e0bfff15 stw r2,-4(fp)
while (i + 1 < set->fd_count)
8030ab8: e0bfff17 ldw r2,-4(fp)
8030abc: 10c00044 addi r3,r2,1
8030ac0: e0bffd17 ldw r2,-12(fp)
8030ac4: 10800017 ldw r2,0(r2)
8030ac8: 18bfeb36 bltu r3,r2,8030a78 <ifd_clr+0x44>
}
set->fd_count--;
8030acc: e0bffd17 ldw r2,-12(fp)
8030ad0: 10800017 ldw r2,0(r2)
8030ad4: 10ffffc4 addi r3,r2,-1
8030ad8: e0bffd17 ldw r2,-12(fp)
8030adc: 10c00015 stw r3,0(r2)
return;
8030ae0: 00000806 br 8030b04 <ifd_clr+0xd0>
for (i = 0; i < set->fd_count ; i++)
8030ae4: e0bfff17 ldw r2,-4(fp)
8030ae8: 10800044 addi r2,r2,1
8030aec: e0bfff15 stw r2,-4(fp)
8030af0: e0bffd17 ldw r2,-12(fp)
8030af4: 10800017 ldw r2,0(r2)
8030af8: e0ffff17 ldw r3,-4(fp)
8030afc: 18bfd536 bltu r3,r2,8030a54 <ifd_clr+0x20>
}
}
#ifdef NPDEBUG
dtrap(); /* socket wasn't found in array */
8030b00: 8028cd40 call 8028cd4 <dtrap>
#endif
}
8030b04: e037883a mov sp,fp
8030b08: dfc00117 ldw ra,4(sp)
8030b0c: df000017 ldw fp,0(sp)
8030b10: dec00204 addi sp,sp,8
8030b14: f800283a ret
08030b18 <ifd_set>:
* called if the fd_set structure is already full.
*/
void
ifd_set(long sock, fd_set *set)
{
8030b18: defffc04 addi sp,sp,-16
8030b1c: dfc00315 stw ra,12(sp)
8030b20: df000215 stw fp,8(sp)
8030b24: df000204 addi fp,sp,8
8030b28: e13fff15 stw r4,-4(fp)
8030b2c: e17ffe15 stw r5,-8(fp)
if (set->fd_count < FD_SETSIZE)
8030b30: e0bffe17 ldw r2,-8(fp)
8030b34: 10800017 ldw r2,0(r2)
8030b38: 10801028 cmpgeui r2,r2,64
8030b3c: 10000c1e bne r2,zero,8030b70 <ifd_set+0x58>
set->fd_array[set->fd_count++] = sock;
8030b40: e0bffe17 ldw r2,-8(fp)
8030b44: 10800017 ldw r2,0(r2)
8030b48: 11000044 addi r4,r2,1
8030b4c: e0fffe17 ldw r3,-8(fp)
8030b50: 19000015 stw r4,0(r3)
8030b54: e0fffe17 ldw r3,-8(fp)
8030b58: 10800044 addi r2,r2,1
8030b5c: 100490ba slli r2,r2,2
8030b60: 1885883a add r2,r3,r2
8030b64: e0ffff17 ldw r3,-4(fp)
8030b68: 10c00015 stw r3,0(r2)
#ifdef NPDEBUG
else
dtrap();
#endif
}
8030b6c: 00000106 br 8030b74 <ifd_set+0x5c>
dtrap();
8030b70: 8028cd40 call 8028cd4 <dtrap>
}
8030b74: 0001883a nop
8030b78: e037883a mov sp,fp
8030b7c: dfc00117 ldw ra,4(sp)
8030b80: df000017 ldw fp,0(sp)
8030b84: dec00204 addi sp,sp,8
8030b88: f800283a ret
08030b8c <ifd_isset>:
* Tests if a socket is a member of a file descriptor set.
*/
int /* actually, boolean */
ifd_isset(long sock, fd_set *set)
{
8030b8c: defffc04 addi sp,sp,-16
8030b90: df000315 stw fp,12(sp)
8030b94: df000304 addi fp,sp,12
8030b98: e13ffe15 stw r4,-8(fp)
8030b9c: e17ffd15 stw r5,-12(fp)
u_int i;
for (i = 0; i < set->fd_count ; i++)
8030ba0: e03fff15 stw zero,-4(fp)
8030ba4: 00000d06 br 8030bdc <ifd_isset+0x50>
{
if (set->fd_array[i] == sock)
8030ba8: e0fffd17 ldw r3,-12(fp)
8030bac: e0bfff17 ldw r2,-4(fp)
8030bb0: 10800044 addi r2,r2,1
8030bb4: 100490ba slli r2,r2,2
8030bb8: 1885883a add r2,r3,r2
8030bbc: 10800017 ldw r2,0(r2)
8030bc0: e0fffe17 ldw r3,-8(fp)
8030bc4: 1880021e bne r3,r2,8030bd0 <ifd_isset+0x44>
return TRUE;
8030bc8: 00800044 movi r2,1
8030bcc: 00000806 br 8030bf0 <ifd_isset+0x64>
for (i = 0; i < set->fd_count ; i++)
8030bd0: e0bfff17 ldw r2,-4(fp)
8030bd4: 10800044 addi r2,r2,1
8030bd8: e0bfff15 stw r2,-4(fp)
8030bdc: e0bffd17 ldw r2,-12(fp)
8030be0: 10800017 ldw r2,0(r2)
8030be4: e0ffff17 ldw r3,-4(fp)
8030be8: 18bfef36 bltu r3,r2,8030ba8 <ifd_isset+0x1c>
}
return FALSE;
8030bec: 0005883a mov r2,zero
}
8030bf0: e037883a mov sp,fp
8030bf4: df000017 ldw fp,0(sp)
8030bf8: dec00104 addi sp,sp,4
8030bfc: f800283a ret
08030c00 <ifd_get>:
* NOTE: This is not part of the original FD_XXX() functionality.
*/
long
ifd_get(unsigned i, fd_set *set)
{
8030c00: defffc04 addi sp,sp,-16
8030c04: dfc00315 stw ra,12(sp)
8030c08: df000215 stw fp,8(sp)
8030c0c: df000204 addi fp,sp,8
8030c10: e13fff15 stw r4,-4(fp)
8030c14: e17ffe15 stw r5,-8(fp)
if (i < set->fd_count)
8030c18: e0bffe17 ldw r2,-8(fp)
8030c1c: 10800017 ldw r2,0(r2)
8030c20: e0ffff17 ldw r3,-4(fp)
8030c24: 1880072e bgeu r3,r2,8030c44 <ifd_get+0x44>
return set->fd_array[i];
8030c28: e0fffe17 ldw r3,-8(fp)
8030c2c: e0bfff17 ldw r2,-4(fp)
8030c30: 10800044 addi r2,r2,1
8030c34: 100490ba slli r2,r2,2
8030c38: 1885883a add r2,r3,r2
8030c3c: 10800017 ldw r2,0(r2)
8030c40: 00000206 br 8030c4c <ifd_get+0x4c>
else
{
#ifdef NPDEBUG
dtrap();
8030c44: 8028cd40 call 8028cd4 <dtrap>
#endif
return INVALID_SOCKET;
8030c48: 00bfffc4 movi r2,-1
}
}
8030c4c: e037883a mov sp,fp
8030c50: dfc00117 ldw ra,4(sp)
8030c54: df000017 ldw fp,0(sp)
8030c58: dec00204 addi sp,sp,8
8030c5c: f800283a ret
08030c60 <tcp_reass>:
int
tcp_reass(struct tcpcb * tp,
struct tcpiphdr * ti,
struct mbuf * ti_mbuf)
{
8030c60: defff504 addi sp,sp,-44
8030c64: dfc00a15 stw ra,40(sp)
8030c68: df000915 stw fp,36(sp)
8030c6c: df000904 addi fp,sp,36
8030c70: e13ff915 stw r4,-28(fp)
8030c74: e17ff815 stw r5,-32(fp)
8030c78: e1bff715 stw r6,-36(fp)
struct tcpiphdr * q;
struct socket * so = tp->t_inpcb->inp_socket;
8030c7c: e0bff917 ldw r2,-28(fp)
8030c80: 10800d17 ldw r2,52(r2)
8030c84: 10800817 ldw r2,32(r2)
8030c88: e0bffe15 stw r2,-8(fp)
/*
* Call with ti==0 after become established to
* force pre-ESTABLISHED data up to user socket.
*/
if (ti == 0)
8030c8c: e0bff817 ldw r2,-32(fp)
8030c90: 10009c26 beq r2,zero,8030f04 <tcp_reass+0x2a4>
goto present;
/*
* Find a segment which begins after this one does.
*/
for (q = tp->seg_next; q != (struct tcpiphdr *)tp;
8030c94: e0bff917 ldw r2,-28(fp)
8030c98: 10800017 ldw r2,0(r2)
8030c9c: e0bfff15 stw r2,-4(fp)
8030ca0: 00000906 br 8030cc8 <tcp_reass+0x68>
q = (struct tcpiphdr *)q->ti_next)
{
if (SEQ_GT(q->ti_seq, ti->ti_seq))
8030ca4: e0bfff17 ldw r2,-4(fp)
8030ca8: 10c00617 ldw r3,24(r2)
8030cac: e0bff817 ldw r2,-32(fp)
8030cb0: 10800617 ldw r2,24(r2)
8030cb4: 1885c83a sub r2,r3,r2
8030cb8: 00800716 blt zero,r2,8030cd8 <tcp_reass+0x78>
q = (struct tcpiphdr *)q->ti_next)
8030cbc: e0bfff17 ldw r2,-4(fp)
8030cc0: 10800017 ldw r2,0(r2)
8030cc4: e0bfff15 stw r2,-4(fp)
for (q = tp->seg_next; q != (struct tcpiphdr *)tp;
8030cc8: e0ffff17 ldw r3,-4(fp)
8030ccc: e0bff917 ldw r2,-28(fp)
8030cd0: 18bff41e bne r3,r2,8030ca4 <tcp_reass+0x44>
8030cd4: 00000106 br 8030cdc <tcp_reass+0x7c>
break;
8030cd8: 0001883a nop
/*
* If there is a preceding segment, it may provide some of
* our data already. If so, drop the data from the incoming
* segment. If it provides all of our data, drop us.
*/
if ((struct tcpiphdr *)q->ti_prev != (struct tcpiphdr *)tp)
8030cdc: e0bfff17 ldw r2,-4(fp)
8030ce0: 10800117 ldw r2,4(r2)
8030ce4: e0fff917 ldw r3,-28(fp)
8030ce8: 18803b26 beq r3,r2,8030dd8 <tcp_reass+0x178>
{
long i;
q = (struct tcpiphdr *)q->ti_prev;
8030cec: e0bfff17 ldw r2,-4(fp)
8030cf0: 10800117 ldw r2,4(r2)
8030cf4: e0bfff15 stw r2,-4(fp)
/* conversion to int (in i) handles seq wraparound */
i = q->ti_seq + q->ti_len - ti->ti_seq;
8030cf8: e0bfff17 ldw r2,-4(fp)
8030cfc: 10c00617 ldw r3,24(r2)
8030d00: e0bfff17 ldw r2,-4(fp)
8030d04: 1080028b ldhu r2,10(r2)
8030d08: 10bfffcc andi r2,r2,65535
8030d0c: 1887883a add r3,r3,r2
8030d10: e0bff817 ldw r2,-32(fp)
8030d14: 10800617 ldw r2,24(r2)
8030d18: 1885c83a sub r2,r3,r2
8030d1c: e0bffd15 stw r2,-12(fp)
if (i > 0)
8030d20: e0bffd17 ldw r2,-12(fp)
8030d24: 0080290e bge zero,r2,8030dcc <tcp_reass+0x16c>
{
if (i >= (long)ti->ti_len)
8030d28: e0bff817 ldw r2,-32(fp)
8030d2c: 1080028b ldhu r2,10(r2)
8030d30: 10bfffcc andi r2,r2,65535
8030d34: e0fffd17 ldw r3,-12(fp)
8030d38: 18801416 blt r3,r2,8030d8c <tcp_reass+0x12c>
{
tcpstat.tcps_rcvduppack++;
8030d3c: 008201b4 movhi r2,2054
8030d40: 10b8c317 ldw r2,-7412(r2)
8030d44: 10c00044 addi r3,r2,1
8030d48: 008201b4 movhi r2,2054
8030d4c: 10f8c315 stw r3,-7412(r2)
tcpstat.tcps_rcvdupbyte += ti->ti_len;
8030d50: 008201b4 movhi r2,2054
8030d54: 10f8c417 ldw r3,-7408(r2)
8030d58: e0bff817 ldw r2,-32(fp)
8030d5c: 1080028b ldhu r2,10(r2)
8030d60: 10bfffcc andi r2,r2,65535
8030d64: 1887883a add r3,r3,r2
8030d68: 008201b4 movhi r2,2054
8030d6c: 10f8c415 stw r3,-7408(r2)
GOTO_DROP;
8030d70: 008025c4 movi r2,151
8030d74: d0a08715 stw r2,-32228(gp)
8030d78: 0001883a nop
} while (ti != (struct tcpiphdr *)tp && ti->ti_seq == tp->rcv_nxt);
sorwakeup(so);
return (flags);
drop:
/**m_freem (dtom(ti));**/
m_freem (ti_mbuf);
8030d7c: e13ff717 ldw r4,-36(fp)
8030d80: 8029cfc0 call 8029cfc <m_freem>
return (0);
8030d84: 0005883a mov r2,zero
8030d88: 0000ac06 br 803103c <tcp_reass+0x3dc>
m_adj (ti_mbuf, (int)i);
8030d8c: e17ffd17 ldw r5,-12(fp)
8030d90: e13ff717 ldw r4,-36(fp)
8030d94: 802a0180 call 802a018 <m_adj>
ti->ti_len -= (short)i;
8030d98: e0bff817 ldw r2,-32(fp)
8030d9c: 1080028b ldhu r2,10(r2)
8030da0: e0fffd17 ldw r3,-12(fp)
8030da4: 10c5c83a sub r2,r2,r3
8030da8: 1007883a mov r3,r2
8030dac: e0bff817 ldw r2,-32(fp)
8030db0: 10c0028d sth r3,10(r2)
ti->ti_seq += (tcp_seq)i;
8030db4: e0bff817 ldw r2,-32(fp)
8030db8: 10c00617 ldw r3,24(r2)
8030dbc: e0bffd17 ldw r2,-12(fp)
8030dc0: 1887883a add r3,r3,r2
8030dc4: e0bff817 ldw r2,-32(fp)
8030dc8: 10c00615 stw r3,24(r2)
q = (struct tcpiphdr *)(q->ti_next);
8030dcc: e0bfff17 ldw r2,-4(fp)
8030dd0: 10800017 ldw r2,0(r2)
8030dd4: e0bfff15 stw r2,-4(fp)
tcpstat.tcps_rcvoopack++;
8030dd8: 008201b4 movhi r2,2054
8030ddc: 10b8c717 ldw r2,-7396(r2)
8030de0: 10c00044 addi r3,r2,1
8030de4: 008201b4 movhi r2,2054
8030de8: 10f8c715 stw r3,-7396(r2)
tcpstat.tcps_rcvoobyte += ti->ti_len;
8030dec: 008201b4 movhi r2,2054
8030df0: 10f8c817 ldw r3,-7392(r2)
8030df4: e0bff817 ldw r2,-32(fp)
8030df8: 1080028b ldhu r2,10(r2)
8030dfc: 10bfffcc andi r2,r2,65535
8030e00: 1887883a add r3,r3,r2
8030e04: 008201b4 movhi r2,2054
8030e08: 10f8c815 stw r3,-7392(r2)
while (q != (struct tcpiphdr *)tp)
8030e0c: 00003206 br 8030ed8 <tcp_reass+0x278>
int i = (int)((ti->ti_seq + ti->ti_len) - q->ti_seq);
8030e10: e0bff817 ldw r2,-32(fp)
8030e14: 10c00617 ldw r3,24(r2)
8030e18: e0bff817 ldw r2,-32(fp)
8030e1c: 1080028b ldhu r2,10(r2)
8030e20: 10bfffcc andi r2,r2,65535
8030e24: 1887883a add r3,r3,r2
8030e28: e0bfff17 ldw r2,-4(fp)
8030e2c: 10800617 ldw r2,24(r2)
8030e30: 1885c83a sub r2,r3,r2
8030e34: e0bffc15 stw r2,-16(fp)
if (i <= 0)
8030e38: e0bffc17 ldw r2,-16(fp)
8030e3c: 00802a0e bge zero,r2,8030ee8 <tcp_reass+0x288>
if (i < (int)(q->ti_len))
8030e40: e0bfff17 ldw r2,-4(fp)
8030e44: 1080028b ldhu r2,10(r2)
8030e48: 10bfffcc andi r2,r2,65535
8030e4c: e0fffc17 ldw r3,-16(fp)
8030e50: 1880130e bge r3,r2,8030ea0 <tcp_reass+0x240>
q->ti_seq += i;
8030e54: e0bfff17 ldw r2,-4(fp)
8030e58: 10c00617 ldw r3,24(r2)
8030e5c: e0bffc17 ldw r2,-16(fp)
8030e60: 1887883a add r3,r3,r2
8030e64: e0bfff17 ldw r2,-4(fp)
8030e68: 10c00615 stw r3,24(r2)
q->ti_len -= (u_short)i;
8030e6c: e0bfff17 ldw r2,-4(fp)
8030e70: 1080028b ldhu r2,10(r2)
8030e74: e0fffc17 ldw r3,-16(fp)
8030e78: 10c5c83a sub r2,r2,r3
8030e7c: 1007883a mov r3,r2
8030e80: e0bfff17 ldw r2,-4(fp)
8030e84: 10c0028d sth r3,10(r2)
m_adj (dtom(q), (int)i);
8030e88: e13fff17 ldw r4,-4(fp)
8030e8c: 802a22c0 call 802a22c <dtom>
8030e90: e17ffc17 ldw r5,-16(fp)
8030e94: 1009883a mov r4,r2
8030e98: 802a0180 call 802a018 <m_adj>
break;
8030e9c: 00001306 br 8030eec <tcp_reass+0x28c>
q = (struct tcpiphdr *)q->ti_next;
8030ea0: e0bfff17 ldw r2,-4(fp)
8030ea4: 10800017 ldw r2,0(r2)
8030ea8: e0bfff15 stw r2,-4(fp)
m = dtom(q->ti_prev);
8030eac: e0bfff17 ldw r2,-4(fp)
8030eb0: 10800117 ldw r2,4(r2)
8030eb4: 1009883a mov r4,r2
8030eb8: 802a22c0 call 802a22c <dtom>
8030ebc: e0bffb15 stw r2,-20(fp)
remque (q->ti_prev);
8030ec0: e0bfff17 ldw r2,-4(fp)
8030ec4: 10800117 ldw r2,4(r2)
8030ec8: 1009883a mov r4,r2
8030ecc: 802a2c40 call 802a2c4 <remque>
m_freem (m);
8030ed0: e13ffb17 ldw r4,-20(fp)
8030ed4: 8029cfc0 call 8029cfc <m_freem>
while (q != (struct tcpiphdr *)tp)
8030ed8: e0ffff17 ldw r3,-4(fp)
8030edc: e0bff917 ldw r2,-28(fp)
8030ee0: 18bfcb1e bne r3,r2,8030e10 <tcp_reass+0x1b0>
8030ee4: 00000106 br 8030eec <tcp_reass+0x28c>
break;
8030ee8: 0001883a nop
insque(ti, q->ti_prev);
8030eec: e0bfff17 ldw r2,-4(fp)
8030ef0: 10800117 ldw r2,4(r2)
8030ef4: 100b883a mov r5,r2
8030ef8: e13ff817 ldw r4,-32(fp)
8030efc: 802a3340 call 802a334 <insque>
8030f00: 00000106 br 8030f08 <tcp_reass+0x2a8>
goto present;
8030f04: 0001883a nop
if (TCPS_HAVERCVDSYN (tp->t_state) == 0)
8030f08: e0bff917 ldw r2,-28(fp)
8030f0c: 10800217 ldw r2,8(r2)
8030f10: 108000c8 cmpgei r2,r2,3
8030f14: 1000021e bne r2,zero,8030f20 <tcp_reass+0x2c0>
return (0);
8030f18: 0005883a mov r2,zero
8030f1c: 00004706 br 803103c <tcp_reass+0x3dc>
ti = tp->seg_next;
8030f20: e0bff917 ldw r2,-28(fp)
8030f24: 10800017 ldw r2,0(r2)
8030f28: e0bff815 stw r2,-32(fp)
if (ti == (struct tcpiphdr *)tp || ti->ti_seq != tp->rcv_nxt)
8030f2c: e0fff817 ldw r3,-32(fp)
8030f30: e0bff917 ldw r2,-28(fp)
8030f34: 18800526 beq r3,r2,8030f4c <tcp_reass+0x2ec>
8030f38: e0bff817 ldw r2,-32(fp)
8030f3c: 10c00617 ldw r3,24(r2)
8030f40: e0bff917 ldw r2,-28(fp)
8030f44: 10801617 ldw r2,88(r2)
8030f48: 18800226 beq r3,r2,8030f54 <tcp_reass+0x2f4>
return (0);
8030f4c: 0005883a mov r2,zero
8030f50: 00003a06 br 803103c <tcp_reass+0x3dc>
if (tp->t_state == TCPS_SYN_RECEIVED && ti->ti_len)
8030f54: e0bff917 ldw r2,-28(fp)
8030f58: 10800217 ldw r2,8(r2)
8030f5c: 108000d8 cmpnei r2,r2,3
8030f60: 1000061e bne r2,zero,8030f7c <tcp_reass+0x31c>
8030f64: e0bff817 ldw r2,-32(fp)
8030f68: 1080028b ldhu r2,10(r2)
8030f6c: 10bfffcc andi r2,r2,65535
8030f70: 10000226 beq r2,zero,8030f7c <tcp_reass+0x31c>
return (0);
8030f74: 0005883a mov r2,zero
8030f78: 00003006 br 803103c <tcp_reass+0x3dc>
tp->rcv_nxt += ti->ti_len;
8030f7c: e0bff917 ldw r2,-28(fp)
8030f80: 10c01617 ldw r3,88(r2)
8030f84: e0bff817 ldw r2,-32(fp)
8030f88: 1080028b ldhu r2,10(r2)
8030f8c: 10bfffcc andi r2,r2,65535
8030f90: 1887883a add r3,r3,r2
8030f94: e0bff917 ldw r2,-28(fp)
8030f98: 10c01615 stw r3,88(r2)
flags = ti->ti_flags & TH_FIN;
8030f9c: e0bff817 ldw r2,-32(fp)
8030fa0: 10800843 ldbu r2,33(r2)
8030fa4: 10803fcc andi r2,r2,255
8030fa8: 1080004c andi r2,r2,1
8030fac: e0bffa15 stw r2,-24(fp)
remque(ti);
8030fb0: e13ff817 ldw r4,-32(fp)
8030fb4: 802a2c40 call 802a2c4 <remque>
m = dtom(ti);
8030fb8: e13ff817 ldw r4,-32(fp)
8030fbc: 802a22c0 call 802a22c <dtom>
8030fc0: e0bffb15 stw r2,-20(fp)
ti = (struct tcpiphdr *)ti->ti_next;
8030fc4: e0bff817 ldw r2,-32(fp)
8030fc8: 10800017 ldw r2,0(r2)
8030fcc: e0bff815 stw r2,-32(fp)
if (so->so_state & SS_CANTRCVMORE)
8030fd0: e0bffe17 ldw r2,-8(fp)
8030fd4: 1080088b ldhu r2,34(r2)
8030fd8: 10bfffcc andi r2,r2,65535
8030fdc: 1080080c andi r2,r2,32
8030fe0: 10000326 beq r2,zero,8030ff0 <tcp_reass+0x390>
m_freem (m);
8030fe4: e13ffb17 ldw r4,-20(fp)
8030fe8: 8029cfc0 call 8029cfc <m_freem>
8030fec: 00000506 br 8031004 <tcp_reass+0x3a4>
sbappend (&so->so_rcv, m);
8030ff0: e0bffe17 ldw r2,-8(fp)
8030ff4: 10800a04 addi r2,r2,40
8030ff8: e17ffb17 ldw r5,-20(fp)
8030ffc: 1009883a mov r4,r2
8031000: 802fafc0 call 802fafc <sbappend>
} while (ti != (struct tcpiphdr *)tp && ti->ti_seq == tp->rcv_nxt);
8031004: e0fff817 ldw r3,-32(fp)
8031008: e0bff917 ldw r2,-28(fp)
803100c: 18800526 beq r3,r2,8031024 <tcp_reass+0x3c4>
8031010: e0bff817 ldw r2,-32(fp)
8031014: 10c00617 ldw r3,24(r2)
8031018: e0bff917 ldw r2,-28(fp)
803101c: 10801617 ldw r2,88(r2)
8031020: 18bfd626 beq r3,r2,8030f7c <tcp_reass+0x31c>
sorwakeup(so);
8031024: e0bffe17 ldw r2,-8(fp)
8031028: 10800a04 addi r2,r2,40
803102c: 100b883a mov r5,r2
8031030: e13ffe17 ldw r4,-8(fp)
8031034: 802f94c0 call 802f94c <sbwakeup>
return (flags);
8031038: e0bffa17 ldw r2,-24(fp)
}
803103c: e037883a mov sp,fp
8031040: dfc00117 ldw ra,4(sp)
8031044: df000017 ldw fp,0(sp)
8031048: dec00204 addi sp,sp,8
803104c: f800283a ret
08031050 <tcp_input>:
* RETURNS: void
*/
void
tcp_input(struct mbuf * m, NET ifp)
{
8031050: deffdf04 addi sp,sp,-132
8031054: dfc02015 stw ra,128(sp)
8031058: df001f15 stw fp,124(sp)
803105c: df001f04 addi fp,sp,124
8031060: e13fe415 stw r4,-112(fp)
8031064: e17fe315 stw r5,-116(fp)
ip6_addr ip6_src;
ip6_addr ip6_dst;
#endif /* IP_V6 */
struct tcpiphdr * ti;
struct inpcb * inp;
struct mbuf * om = 0;
8031068: e03ffd15 stw zero,-12(fp)
int len, tlen, off;
struct tcpcb * tp = 0;
803106c: e03ffc15 stw zero,-16(fp)
int tiflags;
struct socket * so = NULL;
8031070: e03ffa15 stw zero,-24(fp)
int todrop, acked, ourfinisacked, needoutput = 0;
8031074: e03ff715 stw zero,-36(fp)
int dropsocket = 0;
8031078: e03ff615 stw zero,-40(fp)
long iss = 0;
803107c: e03ff515 stw zero,-44(fp)
#ifdef DO_TCPTRACE
int ostate;
#endif
tcpstat.tcps_rcvtotal++;
8031080: 008201b4 movhi r2,2054
8031084: 10b8bd17 ldw r2,-7436(r2)
8031088: 10c00044 addi r3,r2,1
803108c: 008201b4 movhi r2,2054
8031090: 10f8bd15 stw r3,-7436(r2)
TCP_MIB_INC(tcpInSegs); /* keep MIB stats */
8031094: 008201b4 movhi r2,2054
8031098: 10b87f17 ldw r2,-7684(r2)
803109c: 10c00044 addi r3,r2,1
80310a0: 008201b4 movhi r2,2054
80310a4: 10f87f15 stw r3,-7684(r2)
{
/*
* Get IP and TCP header together in first mbuf.
* Note: IP leaves IP header in first mbuf.
*/
pip = mtod(m, struct ip *);
80310a8: e0bfe417 ldw r2,-112(fp)
80310ac: 10800317 ldw r2,12(r2)
80310b0: e0bfff15 stw r2,-4(fp)
if (pip->ip_ver_ihl > 0x45) /* IP v4, 5 dword hdr len */
80310b4: e0bfff17 ldw r2,-4(fp)
80310b8: 10800003 ldbu r2,0(r2)
80310bc: 10803fcc andi r2,r2,255
80310c0: 108011b0 cmpltui r2,r2,70
80310c4: 1000061e bne r2,zero,80310e0 <tcp_input+0x90>
{
np_stripoptions(pip, (struct mbuf *)m);
80310c8: e17fe417 ldw r5,-112(fp)
80310cc: e13fff17 ldw r4,-4(fp)
80310d0: 802ac180 call 802ac18 <np_stripoptions>
pip = mtod(m, struct ip *);
80310d4: e0bfe417 ldw r2,-112(fp)
80310d8: 10800317 ldw r2,12(r2)
80310dc: e0bfff15 stw r2,-4(fp)
}
if (m->m_len < ((sizeof (struct ip) + sizeof (struct tcphdr))))
80310e0: e0bfe417 ldw r2,-112(fp)
80310e4: 10800217 ldw r2,8(r2)
80310e8: 10800a28 cmpgeui r2,r2,40
80310ec: 1000061e bne r2,zero,8031108 <tcp_input+0xb8>
{
tcpstat.tcps_rcvshort++;
80310f0: 008201b4 movhi r2,2054
80310f4: 10b8c217 ldw r2,-7416(r2)
80310f8: 10c00044 addi r3,r2,1
80310fc: 008201b4 movhi r2,2054
8031100: 10f8c215 stw r3,-7416(r2)
return;
8031104: 00085206 br 8033250 <tcp_input+0x2200>
}
tlen = pip->ip_len; /* this was fudged by IP layer */
8031108: e0bfff17 ldw r2,-4(fp)
803110c: 1080008b ldhu r2,2(r2)
8031110: 10bfffcc andi r2,r2,65535
8031114: e0bff115 stw r2,-60(fp)
/* The following is needed in the cases where the size of the
* overlay structure is larger than the size of the ip header.
* This can happen if the ih_next and ih_prev pointers in the
* overlay structure are larger than 32 bit pointers.
*/
ti = (struct tcpiphdr *)(m->m_data + sizeof(struct ip) -
8031118: e0bfe417 ldw r2,-112(fp)
803111c: 10800317 ldw r2,12(r2)
8031120: e0bff015 stw r2,-64(fp)
sizeof(struct ipovly));
if ((char *)ti < m->pkt->nb_buff)
8031124: e0bfe417 ldw r2,-112(fp)
8031128: 10800117 ldw r2,4(r2)
803112c: 10800117 ldw r2,4(r2)
8031130: e0fff017 ldw r3,-64(fp)
8031134: 1880032e bgeu r3,r2,8031144 <tcp_input+0xf4>
{
panic("tcp_input");
8031138: 01020174 movhi r4,2053
803113c: 212a9a04 addi r4,r4,-21912
8031140: 80271780 call 8027178 <panic>
/*
* Check that TCP offset makes sense,
* pull out TCP options and adjust length.
*/
off = GET_TH_OFF(ti->ti_t) << 2;
8031144: e0bff017 ldw r2,-64(fp)
8031148: 10800803 ldbu r2,32(r2)
803114c: 10803fcc andi r2,r2,255
8031150: 1004d13a srli r2,r2,4
8031154: 10803fcc andi r2,r2,255
8031158: 100490ba slli r2,r2,2
803115c: e0bfef15 stw r2,-68(fp)
if (off < sizeof (struct tcphdr) || off > tlen)
8031160: e0bfef17 ldw r2,-68(fp)
8031164: 10800530 cmpltui r2,r2,20
8031168: 1000031e bne r2,zero,8031178 <tcp_input+0x128>
803116c: e0bfef17 ldw r2,-68(fp)
8031170: e0fff117 ldw r3,-60(fp)
8031174: 18800d0e bge r3,r2,80311ac <tcp_input+0x15c>
{
#ifdef DO_TCPTRACE
tcp_trace("tcp off: src %x off %d\n", ti->ti_src, off);
#endif
tcpstat.tcps_rcvbadoff++;
8031178: 008201b4 movhi r2,2054
803117c: 10b8c117 ldw r2,-7420(r2)
8031180: 10c00044 addi r3,r2,1
8031184: 008201b4 movhi r2,2054
8031188: 10f8c115 stw r3,-7420(r2)
TCP_MIB_INC(tcpInErrs); /* keep MIB stats */
803118c: 008201b4 movhi r2,2054
8031190: 10b88317 ldw r2,-7668(r2)
8031194: 10c00044 addi r3,r2,1
8031198: 008201b4 movhi r2,2054
803119c: 10f88315 stw r3,-7668(r2)
GOTO_DROP;
80311a0: 00805784 movi r2,350
80311a4: d0a08715 stw r2,-32228(gp)
80311a8: 00081406 br 80331fc <tcp_input+0x21ac>
}
tlen -= (int)off;
80311ac: e0fff117 ldw r3,-60(fp)
80311b0: e0bfef17 ldw r2,-68(fp)
80311b4: 1885c83a sub r2,r3,r2
80311b8: e0bff115 stw r2,-60(fp)
ti->ti_len = (u_short)tlen;
80311bc: e0bff117 ldw r2,-60(fp)
80311c0: 1007883a mov r3,r2
80311c4: e0bff017 ldw r2,-64(fp)
80311c8: 10c0028d sth r3,10(r2)
if (off > sizeof (struct tcphdr))
80311cc: e0bfef17 ldw r2,-68(fp)
80311d0: 10800570 cmpltui r2,r2,21
80311d4: 1000331e bne r2,zero,80312a4 <tcp_input+0x254>
{
int olen; /* length of options field */
u_char * op; /* scratch option pointer */
olen = off - sizeof (struct tcphdr); /* get options length */
80311d8: e0bfef17 ldw r2,-68(fp)
80311dc: 10bffb04 addi r2,r2,-20
80311e0: e0bfee15 stw r2,-72(fp)
om = m_getwithdata (MT_RXDATA, olen); /* get mbuf for opts */
80311e4: e17fee17 ldw r5,-72(fp)
80311e8: 01000044 movi r4,1
80311ec: 8029a700 call 8029a70 <m_getnbuf>
80311f0: e0bffd15 stw r2,-12(fp)
if (om == 0)
80311f4: e0bffd17 ldw r2,-12(fp)
80311f8: 1000031e bne r2,zero,8031208 <tcp_input+0x1b8>
GOTO_DROP;
80311fc: 00805a84 movi r2,362
8031200: d0a08715 stw r2,-32228(gp)
8031204: 0007fd06 br 80331fc <tcp_input+0x21ac>
om->m_len = olen; /* set mbuf length */
8031208: e0ffee17 ldw r3,-72(fp)
803120c: e0bffd17 ldw r2,-12(fp)
8031210: 10c00215 stw r3,8(r2)
/* set pointer to options field at end of TCP header */
if(m->pkt->type == htons(0x86DD)) /* IPv6 packet */
8031214: e0bfe417 ldw r2,-112(fp)
8031218: 10800117 ldw r2,4(r2)
803121c: 1080080b ldhu r2,32(r2)
8031220: 10ffffcc andi r3,r2,65535
8031224: 00b76194 movui r2,56710
8031228: 1880051e bne r3,r2,8031240 <tcp_input+0x1f0>
op = (u_char*)(m->m_data + 20); /* past TCP header */
803122c: e0bfe417 ldw r2,-112(fp)
8031230: 10800317 ldw r2,12(r2)
8031234: 10800504 addi r2,r2,20
8031238: e0bff415 stw r2,-48(fp)
803123c: 00000406 br 8031250 <tcp_input+0x200>
else
op = (u_char*)(m->m_data + 40); /* past IP + TCP */
8031240: e0bfe417 ldw r2,-112(fp)
8031244: 10800317 ldw r2,12(r2)
8031248: 10800a04 addi r2,r2,40
803124c: e0bff415 stw r2,-48(fp)
MEMCPY(om->m_data, op, olen); /* copy to new mbuf */
8031250: e0bffd17 ldw r2,-12(fp)
8031254: 10800317 ldw r2,12(r2)
8031258: e0ffee17 ldw r3,-72(fp)
803125c: 180d883a mov r6,r3
8031260: e17ff417 ldw r5,-48(fp)
8031264: 1009883a mov r4,r2
8031268: 80086b80 call 80086b8 <memcpy>
/* strip options from data mbuf. This actually just cuts the first
* m_len bytes from the TCP header, but it leaves the mbuf members
* set so the adjustment below does the right thing.
*/
m->m_data += om->m_len;
803126c: e0bfe417 ldw r2,-112(fp)
8031270: 10c00317 ldw r3,12(r2)
8031274: e0bffd17 ldw r2,-12(fp)
8031278: 10800217 ldw r2,8(r2)
803127c: 1887883a add r3,r3,r2
8031280: e0bfe417 ldw r2,-112(fp)
8031284: 10c00315 stw r3,12(r2)
m->m_len -= om->m_len;
8031288: e0bfe417 ldw r2,-112(fp)
803128c: 10c00217 ldw r3,8(r2)
8031290: e0bffd17 ldw r2,-12(fp)
8031294: 10800217 ldw r2,8(r2)
8031298: 1887c83a sub r3,r3,r2
803129c: e0bfe417 ldw r2,-112(fp)
80312a0: 10c00215 stw r3,8(r2)
}
tiflags = ti->ti_flags;
80312a4: e0bff017 ldw r2,-64(fp)
80312a8: 10800843 ldbu r2,33(r2)
80312ac: 10803fcc andi r2,r2,255
80312b0: e0bffb15 stw r2,-20(fp)
#if (BYTE_ORDER == LITTLE_ENDIAN)
/* Convert TCP protocol specific fields to host format. */
ti->ti_seq = ntohl(ti->ti_seq);
80312b4: e0bff017 ldw r2,-64(fp)
80312b8: 10800617 ldw r2,24(r2)
80312bc: 1006d63a srli r3,r2,24
80312c0: e0bff017 ldw r2,-64(fp)
80312c4: 10800617 ldw r2,24(r2)
80312c8: 1004d23a srli r2,r2,8
80312cc: 10bfc00c andi r2,r2,65280
80312d0: 1886b03a or r3,r3,r2
80312d4: e0bff017 ldw r2,-64(fp)
80312d8: 10800617 ldw r2,24(r2)
80312dc: 1004923a slli r2,r2,8
80312e0: 10803fec andhi r2,r2,255
80312e4: 1886b03a or r3,r3,r2
80312e8: e0bff017 ldw r2,-64(fp)
80312ec: 10800617 ldw r2,24(r2)
80312f0: 1004963a slli r2,r2,24
80312f4: 1886b03a or r3,r3,r2
80312f8: e0bff017 ldw r2,-64(fp)
80312fc: 10c00615 stw r3,24(r2)
ti->ti_ack = ntohl(ti->ti_ack);
8031300: e0bff017 ldw r2,-64(fp)
8031304: 10800717 ldw r2,28(r2)
8031308: 1006d63a srli r3,r2,24
803130c: e0bff017 ldw r2,-64(fp)
8031310: 10800717 ldw r2,28(r2)
8031314: 1004d23a srli r2,r2,8
8031318: 10bfc00c andi r2,r2,65280
803131c: 1886b03a or r3,r3,r2
8031320: e0bff017 ldw r2,-64(fp)
8031324: 10800717 ldw r2,28(r2)
8031328: 1004923a slli r2,r2,8
803132c: 10803fec andhi r2,r2,255
8031330: 1886b03a or r3,r3,r2
8031334: e0bff017 ldw r2,-64(fp)
8031338: 10800717 ldw r2,28(r2)
803133c: 1004963a slli r2,r2,24
8031340: 1886b03a or r3,r3,r2
8031344: e0bff017 ldw r2,-64(fp)
8031348: 10c00715 stw r3,28(r2)
ti->ti_urp = ntohs(ti->ti_urp);
803134c: e0bff017 ldw r2,-64(fp)
8031350: 1080098b ldhu r2,38(r2)
8031354: 10bfffcc andi r2,r2,65535
8031358: 1004d23a srli r2,r2,8
803135c: 1007883a mov r3,r2
8031360: e0bff017 ldw r2,-64(fp)
8031364: 1080098b ldhu r2,38(r2)
8031368: 10bfffcc andi r2,r2,65535
803136c: 1004923a slli r2,r2,8
8031370: 1884b03a or r2,r3,r2
8031374: 1007883a mov r3,r2
8031378: e0bff017 ldw r2,-64(fp)
803137c: 10c0098d sth r3,38(r2)
/*
* Locate pcb for segment.
*/
findpcb:
switch(m->pkt->type)
8031380: e0bfe417 ldw r2,-112(fp)
8031384: 10800117 ldw r2,4(r2)
8031388: 1080080b ldhu r2,32(r2)
803138c: 10bfffcc andi r2,r2,65535
8031390: 10800218 cmpnei r2,r2,8
8031394: 1000221e bne r2,zero,8031420 <tcp_input+0x3d0>
{
#ifdef IP_V4
case IPTP: /* IPv4 packet */
/* Drop TCP and IP headers; TCP options were dropped above. */
m->m_data += 40;
8031398: e0bfe417 ldw r2,-112(fp)
803139c: 10800317 ldw r2,12(r2)
80313a0: 10c00a04 addi r3,r2,40
80313a4: e0bfe417 ldw r2,-112(fp)
80313a8: 10c00315 stw r3,12(r2)
m->m_len -= 40;
80313ac: e0bfe417 ldw r2,-112(fp)
80313b0: 10800217 ldw r2,8(r2)
80313b4: 10fff604 addi r3,r2,-40
80313b8: e0bfe417 ldw r2,-112(fp)
80313bc: 10c00215 stw r3,8(r2)
inp = in_pcblookup(&tcb, ti->ti_src.s_addr, ti->ti_sport,
80313c0: e0bff017 ldw r2,-64(fp)
80313c4: 11000317 ldw r4,12(r2)
80313c8: e0bff017 ldw r2,-64(fp)
80313cc: 1080050b ldhu r2,20(r2)
80313d0: 117fffcc andi r5,r2,65535
80313d4: e0bff017 ldw r2,-64(fp)
80313d8: 11800417 ldw r6,16(r2)
ti->ti_dst.s_addr, ti->ti_dport, INPLOOKUP_WILDCARD);
80313dc: e0bff017 ldw r2,-64(fp)
80313e0: 1080058b ldhu r2,22(r2)
inp = in_pcblookup(&tcb, ti->ti_src.s_addr, ti->ti_sport,
80313e4: 10bfffcc andi r2,r2,65535
80313e8: 00c00044 movi r3,1
80313ec: d8c00115 stw r3,4(sp)
80313f0: d8800015 stw r2,0(sp)
80313f4: 300f883a mov r7,r6
80313f8: 280d883a mov r6,r5
80313fc: 200b883a mov r5,r4
8031400: 010201b4 movhi r4,2054
8031404: 21389904 addi r4,r4,-7580
8031408: 8040b600 call 8040b60 <in_pcblookup>
803140c: e0bffe15 stw r2,-8(fp)
break;
8031410: 0001883a nop
* If the state is CLOSED (i.e., TCB does not exist) then
* all data in the incoming segment is discarded.
* If the TCB exists but is in CLOSED state, it is embryonic,
* but should either do a listen or a connect soon.
*/
if (inp == 0)
8031414: e0bffe17 ldw r2,-8(fp)
8031418: 1000061e bne r2,zero,8031434 <tcp_input+0x3e4>
803141c: 00000206 br 8031428 <tcp_input+0x3d8>
dtrap();
8031420: 8028cd40 call 8028cd4 <dtrap>
return;
8031424: 00078a06 br 8033250 <tcp_input+0x2200>
GOTO_DROPWITHRESET;
8031428: 00806b04 movi r2,428
803142c: d0a08715 stw r2,-32228(gp)
8031430: 00073306 br 8033100 <tcp_input+0x20b0>
tp = intotcpcb (inp);
8031434: e0bffe17 ldw r2,-8(fp)
8031438: 10800917 ldw r2,36(r2)
803143c: e0bffc15 stw r2,-16(fp)
if (tp == 0)
8031440: e0bffc17 ldw r2,-16(fp)
8031444: 1000031e bne r2,zero,8031454 <tcp_input+0x404>
GOTO_DROPWITHRESET;
8031448: 00806bc4 movi r2,431
803144c: d0a08715 stw r2,-32228(gp)
8031450: 00072b06 br 8033100 <tcp_input+0x20b0>
if (tp->t_state == TCPS_CLOSED)
8031454: e0bffc17 ldw r2,-16(fp)
8031458: 10800217 ldw r2,8(r2)
803145c: 1000031e bne r2,zero,803146c <tcp_input+0x41c>
GOTO_DROP;
8031460: 00806c44 movi r2,433
8031464: d0a08715 stw r2,-32228(gp)
8031468: 00076406 br 80331fc <tcp_input+0x21ac>
so = inp->inp_socket;
803146c: e0bffe17 ldw r2,-8(fp)
8031470: 10800817 ldw r2,32(r2)
8031474: e0bffa15 stw r2,-24(fp)
tcp_saveti = *ti;
}
#endif
/* figure out the size of the other guy's receive window */
rx_win = (tcp_win)(ntohs(ti->ti_win)); /* convert endian */
8031478: e0bff017 ldw r2,-64(fp)
803147c: 1080088b ldhu r2,34(r2)
8031480: 10bfffcc andi r2,r2,65535
8031484: 1004d23a srli r2,r2,8
8031488: 10bfffcc andi r2,r2,65535
803148c: 10c03fcc andi r3,r2,255
8031490: e0bff017 ldw r2,-64(fp)
8031494: 1080088b ldhu r2,34(r2)
8031498: 10bfffcc andi r2,r2,65535
803149c: 1004923a slli r2,r2,8
80314a0: 10bfffcc andi r2,r2,65535
80314a4: 1884b03a or r2,r3,r2
80314a8: e0bfed15 stw r2,-76(fp)
{
rx_win <<= tp->snd_wind_scale; /* apply scale */
}
#endif /* TCP_WIN_SCALE */
if (so->so_options & SO_ACCEPTCONN)
80314ac: e0bffa17 ldw r2,-24(fp)
80314b0: 10800417 ldw r2,16(r2)
80314b4: 1080008c andi r2,r2,2
80314b8: 10002c26 beq r2,zero,803156c <tcp_input+0x51c>
{
so = sonewconn(so);
80314bc: e13ffa17 ldw r4,-24(fp)
80314c0: 802f4480 call 802f448 <sonewconn>
80314c4: e0bffa15 stw r2,-24(fp)
if (so == 0)
80314c8: e0bffa17 ldw r2,-24(fp)
80314cc: 1000031e bne r2,zero,80314dc <tcp_input+0x48c>
GOTO_DROP;
80314d0: 00807344 movi r2,461
80314d4: d0a08715 stw r2,-32228(gp)
80314d8: 00074806 br 80331fc <tcp_input+0x21ac>
* flag dropsocket to see if the temporary
* socket created here should be discarded.
* We mark the socket as discardable until
* we're committed to it below in TCPS_LISTEN.
*/
dropsocket++;
80314dc: e0bff617 ldw r2,-40(fp)
80314e0: 10800044 addi r2,r2,1
80314e4: e0bff615 stw r2,-40(fp)
inp = (struct inpcb *)so->so_pcb;
80314e8: e0bffa17 ldw r2,-24(fp)
80314ec: 10800117 ldw r2,4(r2)
80314f0: e0bffe15 stw r2,-8(fp)
inp->ifp = ifp; /* save iface to peer */
80314f4: e0bffe17 ldw r2,-8(fp)
80314f8: e0ffe317 ldw r3,-116(fp)
80314fc: 10c00a15 stw r3,40(r2)
switch(so->so_domain)
8031500: e0bffa17 ldw r2,-24(fp)
8031504: 10800517 ldw r2,20(r2)
8031508: 10800098 cmpnei r2,r2,2
803150c: 10000d1e bne r2,zero,8031544 <tcp_input+0x4f4>
{
#ifdef IP_V4
case AF_INET:
inp->inp_laddr = ti->ti_dst;
8031510: e0bffe17 ldw r2,-8(fp)
8031514: e0fff017 ldw r3,-64(fp)
8031518: 18c00417 ldw r3,16(r3)
803151c: 10c00415 stw r3,16(r2)
#ifdef IP_PMTU
inp->inp_pmtu = pmtucache_get(inp->inp_faddr.s_addr);
#else /* not compiled for pathmtu, guess based on iface */
inp->inp_pmtu = ifp->n_mtu - (ifp->n_lnh + 40);
8031520: e0bfe317 ldw r2,-116(fp)
8031524: 10c00917 ldw r3,36(r2)
8031528: e0bfe317 ldw r2,-116(fp)
803152c: 10800817 ldw r2,32(r2)
8031530: 10800a04 addi r2,r2,40
8031534: 1887c83a sub r3,r3,r2
8031538: e0bffe17 ldw r2,-8(fp)
803153c: 10c00615 stw r3,24(r2)
#endif /* IP_PMTU */
break;
8031540: 0001883a nop
inp->inp_pmtu = ip6_pmtulookup(&ip6_src, ifp);
break;
#endif /* end v6 */
}
inp->inp_lport = ti->ti_dport;
8031544: e0bff017 ldw r2,-64(fp)
8031548: 10c0058b ldhu r3,22(r2)
803154c: e0bffe17 ldw r2,-8(fp)
8031550: 10c0078d sth r3,30(r2)
tp = intotcpcb(inp);
8031554: e0bffe17 ldw r2,-8(fp)
8031558: 10800917 ldw r2,36(r2)
803155c: e0bffc15 stw r2,-16(fp)
tp->t_state = TCPS_LISTEN;
8031560: e0bffc17 ldw r2,-16(fp)
8031564: 00c00044 movi r3,1
8031568: 10c00215 stw r3,8(r2)
/*
* Segment received on connection.
* Reset idle time and keep-alive timer.
*/
tp->t_idle = 0;
803156c: e0bffc17 ldw r2,-16(fp)
8031570: 10001d15 stw zero,116(r2)
tp->t_timer[TCPT_KEEP] = tcp_keepidle;
8031574: d0e01e17 ldw r3,-32648(gp)
8031578: e0bffc17 ldw r2,-16(fp)
803157c: 10c00515 stw r3,20(r2)
/*
* Process options if not in LISTEN state,
* else do it below (after getting remote address).
*/
if (om && tp->t_state != TCPS_LISTEN)
8031580: e0bffd17 ldw r2,-12(fp)
8031584: 10000926 beq r2,zero,80315ac <tcp_input+0x55c>
8031588: e0bffc17 ldw r2,-16(fp)
803158c: 10800217 ldw r2,8(r2)
8031590: 10800060 cmpeqi r2,r2,1
8031594: 1000051e bne r2,zero,80315ac <tcp_input+0x55c>
{
tcp_dooptions(tp, om, ti);
8031598: e1bff017 ldw r6,-64(fp)
803159c: e17ffd17 ldw r5,-12(fp)
80315a0: e13ffc17 ldw r4,-16(fp)
80315a4: 80332640 call 8033264 <tcp_dooptions>
om = 0;
80315a8: e03ffd15 stw zero,-12(fp)
}
acked = (int)(ti->ti_ack - tp->snd_una);
80315ac: e0bff017 ldw r2,-64(fp)
80315b0: 10c00717 ldw r3,28(r2)
80315b4: e0bffc17 ldw r2,-16(fp)
80315b8: 10800e17 ldw r2,56(r2)
80315bc: 1885c83a sub r2,r3,r2
80315c0: e0bfec15 stw r2,-80(fp)
* Receive window is amount of space in rcv queue,
* but not less than advertised window.
*/
{ long win;
win = (long)sbspace(&so->so_rcv);
80315c4: e0bffa17 ldw r2,-24(fp)
80315c8: 10800b17 ldw r2,44(r2)
80315cc: 1007883a mov r3,r2
80315d0: e0bffa17 ldw r2,-24(fp)
80315d4: 10800a17 ldw r2,40(r2)
80315d8: 1885c83a sub r2,r3,r2
80315dc: 10000616 blt r2,zero,80315f8 <tcp_input+0x5a8>
80315e0: e0bffa17 ldw r2,-24(fp)
80315e4: 10c00b17 ldw r3,44(r2)
80315e8: e0bffa17 ldw r2,-24(fp)
80315ec: 10800a17 ldw r2,40(r2)
80315f0: 1885c83a sub r2,r3,r2
80315f4: 00000106 br 80315fc <tcp_input+0x5ac>
80315f8: 0005883a mov r2,zero
80315fc: e0bff315 stw r2,-52(fp)
if (win < 0)
8031600: e0bff317 ldw r2,-52(fp)
8031604: 1000010e bge r2,zero,803160c <tcp_input+0x5bc>
win = 0;
8031608: e03ff315 stw zero,-52(fp)
tp->rcv_wnd = (tcp_win)MAX((u_long)win, (tp->rcv_adv - tp->rcv_nxt));
803160c: e0bffc17 ldw r2,-16(fp)
8031610: 10c01917 ldw r3,100(r2)
8031614: e0bffc17 ldw r2,-16(fp)
8031618: 10801617 ldw r2,88(r2)
803161c: 1885c83a sub r2,r3,r2
8031620: e0fff317 ldw r3,-52(fp)
8031624: 10c0012e bgeu r2,r3,803162c <tcp_input+0x5dc>
8031628: 1805883a mov r2,r3
803162c: e0fffc17 ldw r3,-16(fp)
8031630: 18801515 stw r2,84(r3)
* is non-zero and the ack didn't move, we're the
* receiver side. If we're getting packets in-order
* (the reassembly queue is empty), add the data to
* the socket buffer and note that we need a delayed ack.
*/
if ((tp->t_state == TCPS_ESTABLISHED) &&
8031634: e0bffc17 ldw r2,-16(fp)
8031638: 10800217 ldw r2,8(r2)
803163c: 10800118 cmpnei r2,r2,4
8031640: 1000f41e bne r2,zero,8031a14 <tcp_input+0x9c4>
((tiflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) == TH_ACK) &&
8031644: e0bffb17 ldw r2,-20(fp)
8031648: 10800dcc andi r2,r2,55
if ((tp->t_state == TCPS_ESTABLISHED) &&
803164c: 10800418 cmpnei r2,r2,16
8031650: 1000f01e bne r2,zero,8031a14 <tcp_input+0x9c4>
(ti->ti_seq == tp->rcv_nxt) &&
8031654: e0bff017 ldw r2,-64(fp)
8031658: 10c00617 ldw r3,24(r2)
803165c: e0bffc17 ldw r2,-16(fp)
8031660: 10801617 ldw r2,88(r2)
((tiflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) == TH_ACK) &&
8031664: 1880eb1e bne r3,r2,8031a14 <tcp_input+0x9c4>
(ti->ti_seq == tp->rcv_nxt) &&
8031668: e0bfed17 ldw r2,-76(fp)
803166c: 1000e926 beq r2,zero,8031a14 <tcp_input+0x9c4>
(rx_win && rx_win == tp->snd_wnd) &&
8031670: e0bffc17 ldw r2,-16(fp)
8031674: 10801417 ldw r2,80(r2)
8031678: e0ffed17 ldw r3,-76(fp)
803167c: 1880e51e bne r3,r2,8031a14 <tcp_input+0x9c4>
(tp->snd_nxt == tp->snd_max))
8031680: e0bffc17 ldw r2,-16(fp)
8031684: 10c00f17 ldw r3,60(r2)
8031688: e0bffc17 ldw r2,-16(fp)
803168c: 10801a17 ldw r2,104(r2)
(rx_win && rx_win == tp->snd_wnd) &&
8031690: 1880e01e bne r3,r2,8031a14 <tcp_input+0x9c4>
{
if (ti->ti_len == 0)
8031694: e0bff017 ldw r2,-64(fp)
8031698: 1080028b ldhu r2,10(r2)
803169c: 10bfffcc andi r2,r2,65535
80316a0: 10005b1e bne r2,zero,8031810 <tcp_input+0x7c0>
{
if (SEQ_GT(ti->ti_ack, tp->snd_una) &&
80316a4: e0bff017 ldw r2,-64(fp)
80316a8: 10c00717 ldw r3,28(r2)
80316ac: e0bffc17 ldw r2,-16(fp)
80316b0: 10800e17 ldw r2,56(r2)
80316b4: 1885c83a sub r2,r3,r2
80316b8: 0080d60e bge zero,r2,8031a14 <tcp_input+0x9c4>
SEQ_LEQ(ti->ti_ack, tp->snd_max) &&
80316bc: e0bff017 ldw r2,-64(fp)
80316c0: 10c00717 ldw r3,28(r2)
80316c4: e0bffc17 ldw r2,-16(fp)
80316c8: 10801a17 ldw r2,104(r2)
80316cc: 1885c83a sub r2,r3,r2
if (SEQ_GT(ti->ti_ack, tp->snd_una) &&
80316d0: 0080d016 blt zero,r2,8031a14 <tcp_input+0x9c4>
tp->snd_cwnd >= tp->snd_wnd)
80316d4: e0bffc17 ldw r2,-16(fp)
80316d8: 10c01b17 ldw r3,108(r2)
80316dc: e0bffc17 ldw r2,-16(fp)
80316e0: 10801417 ldw r2,80(r2)
SEQ_LEQ(ti->ti_ack, tp->snd_max) &&
80316e4: 1880cb36 bltu r3,r2,8031a14 <tcp_input+0x9c4>
{
/*
* this is a pure ack for outstanding data.
*/
++tcpstat.tcps_predack;
80316e8: 008201b4 movhi r2,2054
80316ec: 10b8d917 ldw r2,-7324(r2)
80316f0: 10c00044 addi r3,r2,1
80316f4: 008201b4 movhi r2,2054
80316f8: 10f8d915 stw r3,-7324(r2)
if (tp->t_rttick &&
80316fc: e0bffc17 ldw r2,-16(fp)
8031700: 10801e17 ldw r2,120(r2)
8031704: 10000826 beq r2,zero,8031728 <tcp_input+0x6d8>
#ifdef TCP_TIMESTAMP
((tp->t_flags & TF_TIMESTAMP) == 0) &&
#endif /* TCP_TIMESTAMP */
(SEQ_GT(ti->ti_ack, tp->t_rtseq)))
8031708: e0bff017 ldw r2,-64(fp)
803170c: 10c00717 ldw r3,28(r2)
8031710: e0bffc17 ldw r2,-16(fp)
8031714: 10801f17 ldw r2,124(r2)
8031718: 1885c83a sub r2,r3,r2
if (tp->t_rttick &&
803171c: 0080020e bge zero,r2,8031728 <tcp_input+0x6d8>
{
tcp_xmit_timer(tp);
8031720: e13ffc17 ldw r4,-16(fp)
8031724: 80335180 call 8033518 <tcp_xmit_timer>
}
tcpstat.tcps_rcvackpack++;
8031728: 008201b4 movhi r2,2054
803172c: 10b8cf17 ldw r2,-7364(r2)
8031730: 10c00044 addi r3,r2,1
8031734: 008201b4 movhi r2,2054
8031738: 10f8cf15 stw r3,-7364(r2)
tcpstat.tcps_rcvackbyte += acked;
803173c: 008201b4 movhi r2,2054
8031740: 10f8d017 ldw r3,-7360(r2)
8031744: e0bfec17 ldw r2,-80(fp)
8031748: 1887883a add r3,r3,r2
803174c: 008201b4 movhi r2,2054
8031750: 10f8d015 stw r3,-7360(r2)
sbdrop(&so->so_snd, acked);
8031754: e0bffa17 ldw r2,-24(fp)
8031758: 10801204 addi r2,r2,72
803175c: e17fec17 ldw r5,-80(fp)
8031760: 1009883a mov r4,r2
8031764: 80300b00 call 80300b0 <sbdrop>
tp->snd_una = ti->ti_ack;
8031768: e0bff017 ldw r2,-64(fp)
803176c: 10c00717 ldw r3,28(r2)
8031770: e0bffc17 ldw r2,-16(fp)
8031774: 10c00e15 stw r3,56(r2)
m_freem(m);
8031778: e13fe417 ldw r4,-112(fp)
803177c: 8029cfc0 call 8029cfc <m_freem>
* If process is waiting for space,
* wakeup/selwakeup/signal. If data
* are ready to send, let tcp_output
* decide between more output or persist.
*/
if (tp->snd_una == tp->snd_max)
8031780: e0bffc17 ldw r2,-16(fp)
8031784: 10c00e17 ldw r3,56(r2)
8031788: e0bffc17 ldw r2,-16(fp)
803178c: 10801a17 ldw r2,104(r2)
8031790: 1880031e bne r3,r2,80317a0 <tcp_input+0x750>
tp->t_timer[TCPT_REXMT] = 0;
8031794: e0bffc17 ldw r2,-16(fp)
8031798: 10000315 stw zero,12(r2)
803179c: 00000706 br 80317bc <tcp_input+0x76c>
else if (tp->t_timer[TCPT_PERSIST] == 0)
80317a0: e0bffc17 ldw r2,-16(fp)
80317a4: 10800417 ldw r2,16(r2)
80317a8: 1000041e bne r2,zero,80317bc <tcp_input+0x76c>
tp->t_timer[TCPT_REXMT] = tp->t_rxtcur;
80317ac: e0bffc17 ldw r2,-16(fp)
80317b0: 10c00817 ldw r3,32(r2)
80317b4: e0bffc17 ldw r2,-16(fp)
80317b8: 10c00315 stw r3,12(r2)
if (so->so_snd.sb_flags & (SB_WAIT | SB_SEL))
80317bc: e0bffa17 ldw r2,-24(fp)
80317c0: 1080190b ldhu r2,100(r2)
80317c4: 10bfffcc andi r2,r2,65535
80317c8: 1080030c andi r2,r2,12
80317cc: 10000526 beq r2,zero,80317e4 <tcp_input+0x794>
sowwakeup(so);
80317d0: e0bffa17 ldw r2,-24(fp)
80317d4: 10801204 addi r2,r2,72
80317d8: 100b883a mov r5,r2
80317dc: e13ffa17 ldw r4,-24(fp)
80317e0: 802f94c0 call 802f94c <sbwakeup>
/* If there is more data in the send buffer, and some is
* still unsent, then call tcp_output() to try to send it
*/
if (so->so_snd.sb_cc > (tp->snd_nxt - tp->snd_una))
80317e4: e0bffa17 ldw r2,-24(fp)
80317e8: 10801217 ldw r2,72(r2)
80317ec: e0fffc17 ldw r3,-16(fp)
80317f0: 19000f17 ldw r4,60(r3)
80317f4: e0fffc17 ldw r3,-16(fp)
80317f8: 18c00e17 ldw r3,56(r3)
80317fc: 20c7c83a sub r3,r4,r3
8031800: 18868a2e bgeu r3,r2,803322c <tcp_input+0x21dc>
(void) tcp_output(tp);
8031804: e13ffc17 ldw r4,-16(fp)
8031808: 80338940 call 8033894 <tcp_output>
return;
803180c: 00068706 br 803322c <tcp_input+0x21dc>
}
}
else if (ti->ti_ack == tp->snd_una &&
8031810: e0bff017 ldw r2,-64(fp)
8031814: 10c00717 ldw r3,28(r2)
8031818: e0bffc17 ldw r2,-16(fp)
803181c: 10800e17 ldw r2,56(r2)
8031820: 18807c1e bne r3,r2,8031a14 <tcp_input+0x9c4>
tp->seg_next == (struct tcpiphdr *)tp &&
8031824: e0bffc17 ldw r2,-16(fp)
8031828: 10800017 ldw r2,0(r2)
else if (ti->ti_ack == tp->snd_una &&
803182c: e0fffc17 ldw r3,-16(fp)
8031830: 1880781e bne r3,r2,8031a14 <tcp_input+0x9c4>
ti->ti_len <= sbspace(&so->so_rcv))
8031834: e0bff017 ldw r2,-64(fp)
8031838: 1080028b ldhu r2,10(r2)
803183c: 10ffffcc andi r3,r2,65535
8031840: e0bffa17 ldw r2,-24(fp)
8031844: 10800b17 ldw r2,44(r2)
8031848: 1009883a mov r4,r2
803184c: e0bffa17 ldw r2,-24(fp)
8031850: 10800a17 ldw r2,40(r2)
8031854: 2085c83a sub r2,r4,r2
8031858: 10000616 blt r2,zero,8031874 <tcp_input+0x824>
803185c: e0bffa17 ldw r2,-24(fp)
8031860: 11000b17 ldw r4,44(r2)
8031864: e0bffa17 ldw r2,-24(fp)
8031868: 10800a17 ldw r2,40(r2)
803186c: 2085c83a sub r2,r4,r2
8031870: 00000106 br 8031878 <tcp_input+0x828>
8031874: 0005883a mov r2,zero
tp->seg_next == (struct tcpiphdr *)tp &&
8031878: 10c06636 bltu r2,r3,8031a14 <tcp_input+0x9c4>
#endif /* TCP_ZEROCOPY */
/* this may also be a garden-variety probe received because
* the socket sendbuf was full.
*/
if(tp->rcv_wnd == 0)
803187c: e0bffc17 ldw r2,-16(fp)
8031880: 10801517 ldw r2,84(r2)
8031884: 10000a1e bne r2,zero,80318b0 <tcp_input+0x860>
* info in this seg, but Windows NT 4.0 has a nasty bug where it
* will hammer us mericilessly with these probes (one customer
* reports thousands per second) so we just dump it ASAP to
* save cycles.
*/
tcpstat.tcps_rcvwinprobe++;
8031888: 008201b4 movhi r2,2054
803188c: 10b8cc17 ldw r2,-7376(r2)
8031890: 10c00044 addi r3,r2,1
8031894: 008201b4 movhi r2,2054
8031898: 10f8cc15 stw r3,-7376(r2)
m_freem (m); /* free the received mbuf */
803189c: e13fe417 ldw r4,-112(fp)
80318a0: 8029cfc0 call 8029cfc <m_freem>
tcp_output(tp); /* send the ack now... */
80318a4: e13ffc17 ldw r4,-16(fp)
80318a8: 80338940 call 8033894 <tcp_output>
return;
80318ac: 00066806 br 8033250 <tcp_input+0x2200>
/*
* this is a pure, in-sequence data packet
* with nothing on the reassembly queue and
* we have enough buffer space to take it.
*/
++tcpstat.tcps_preddat;
80318b0: 008201b4 movhi r2,2054
80318b4: 10b8da17 ldw r2,-7320(r2)
80318b8: 10c00044 addi r3,r2,1
80318bc: 008201b4 movhi r2,2054
80318c0: 10f8da15 stw r3,-7320(r2)
tp->rcv_nxt += ti->ti_len;
80318c4: e0bffc17 ldw r2,-16(fp)
80318c8: 10c01617 ldw r3,88(r2)
80318cc: e0bff017 ldw r2,-64(fp)
80318d0: 1080028b ldhu r2,10(r2)
80318d4: 10bfffcc andi r2,r2,65535
80318d8: 1887883a add r3,r3,r2
80318dc: e0bffc17 ldw r2,-16(fp)
80318e0: 10c01615 stw r3,88(r2)
tcpstat.tcps_rcvpack++;
80318e4: 008201b4 movhi r2,2054
80318e8: 10b8be17 ldw r2,-7432(r2)
80318ec: 10c00044 addi r3,r2,1
80318f0: 008201b4 movhi r2,2054
80318f4: 10f8be15 stw r3,-7432(r2)
tcpstat.tcps_rcvbyte += ti->ti_len;
80318f8: 008201b4 movhi r2,2054
80318fc: 10f8bf17 ldw r3,-7428(r2)
8031900: e0bff017 ldw r2,-64(fp)
8031904: 1080028b ldhu r2,10(r2)
8031908: 10bfffcc andi r2,r2,65535
803190c: 1887883a add r3,r3,r2
8031910: 008201b4 movhi r2,2054
8031914: 10f8bf15 stw r3,-7428(r2)
/*
* Add data to socket buffer.
*/
sbappend(&so->so_rcv, m);
8031918: e0bffa17 ldw r2,-24(fp)
803191c: 10800a04 addi r2,r2,40
8031920: e17fe417 ldw r5,-112(fp)
8031924: 1009883a mov r4,r2
8031928: 802fafc0 call 802fafc <sbappend>
sorwakeup(so);
803192c: e0bffa17 ldw r2,-24(fp)
8031930: 10800a04 addi r2,r2,40
8031934: 100b883a mov r5,r2
8031938: e13ffa17 ldw r4,-24(fp)
803193c: 802f94c0 call 802f94c <sbwakeup>
/*
* If this is a short packet, then ACK now - with Nagel
* congestion avoidance sender won't send more until
* he gets an ACK.
*/
if (tiflags & TH_PUSH)
8031940: e0bffb17 ldw r2,-20(fp)
8031944: 1080020c andi r2,r2,8
8031948: 10000726 beq r2,zero,8031968 <tcp_input+0x918>
tp->t_flags |= TF_ACKNOW;
803194c: e0bffc17 ldw r2,-16(fp)
8031950: 10800b0b ldhu r2,44(r2)
8031954: 10800054 ori r2,r2,1
8031958: 1007883a mov r3,r2
803195c: e0bffc17 ldw r2,-16(fp)
8031960: 10c00b0d sth r3,44(r2)
8031964: 00000606 br 8031980 <tcp_input+0x930>
else
tp->t_flags |= TF_DELACK;
8031968: e0bffc17 ldw r2,-16(fp)
803196c: 10800b0b ldhu r2,44(r2)
8031970: 10800094 ori r2,r2,2
8031974: 1007883a mov r3,r2
8031978: e0bffc17 ldw r2,-16(fp)
803197c: 10c00b0d sth r3,44(r2)
/* see if we need to send an ack */
adv = (int)(tp->rcv_wnd - (tcp_win)(tp->rcv_adv - tp->rcv_nxt));
8031980: e0bffc17 ldw r2,-16(fp)
8031984: 10c01517 ldw r3,84(r2)
8031988: e0bffc17 ldw r2,-16(fp)
803198c: 11001617 ldw r4,88(r2)
8031990: e0bffc17 ldw r2,-16(fp)
8031994: 10801917 ldw r2,100(r2)
8031998: 2085c83a sub r2,r4,r2
803199c: 1885883a add r2,r3,r2
80319a0: e0bfeb15 stw r2,-84(fp)
if ((adv >= (int)(tp->t_maxseg * 2)) ||
80319a4: e0bffc17 ldw r2,-16(fp)
80319a8: 10800a0b ldhu r2,40(r2)
80319ac: 10bfffcc andi r2,r2,65535
80319b0: 1085883a add r2,r2,r2
80319b4: 1007883a mov r3,r2
80319b8: e0bfeb17 ldw r2,-84(fp)
80319bc: 10c0050e bge r2,r3,80319d4 <tcp_input+0x984>
(tp->t_flags & TF_ACKNOW))
80319c0: e0bffc17 ldw r2,-16(fp)
80319c4: 10800b0b ldhu r2,44(r2)
80319c8: 10bfffcc andi r2,r2,65535
80319cc: 1080004c andi r2,r2,1
if ((adv >= (int)(tp->t_maxseg * 2)) ||
80319d0: 10061826 beq r2,zero,8033234 <tcp_input+0x21e4>
tp->t_flags &= ~TF_ACKNOW;
return;
}
#endif /* DO_DELAY_ACKS */
tp->t_flags |= TF_ACKNOW;
80319d4: e0bffc17 ldw r2,-16(fp)
80319d8: 10800b0b ldhu r2,44(r2)
80319dc: 10800054 ori r2,r2,1
80319e0: 1007883a mov r3,r2
80319e4: e0bffc17 ldw r2,-16(fp)
80319e8: 10c00b0d sth r3,44(r2)
tp->t_flags &= ~TF_DELACK;
80319ec: e0bffc17 ldw r2,-16(fp)
80319f0: 10c00b0b ldhu r3,44(r2)
80319f4: 00bfff44 movi r2,-3
80319f8: 1884703a and r2,r3,r2
80319fc: 1007883a mov r3,r2
8031a00: e0bffc17 ldw r2,-16(fp)
8031a04: 10c00b0d sth r3,44(r2)
tcp_output(tp); /* send the ack now... */
8031a08: e13ffc17 ldw r4,-16(fp)
8031a0c: 80338940 call 8033894 <tcp_output>
}
return;
8031a10: 00060806 br 8033234 <tcp_input+0x21e4>
}
}
switch (tp->t_state)
8031a14: e0bffc17 ldw r2,-16(fp)
8031a18: 10800217 ldw r2,8(r2)
8031a1c: 10c00060 cmpeqi r3,r2,1
8031a20: 1800031e bne r3,zero,8031a30 <tcp_input+0x9e0>
8031a24: 108000a0 cmpeqi r2,r2,2
8031a28: 1000a81e bne r2,zero,8031ccc <tcp_input+0xc7c>
8031a2c: 00017606 br 8032008 <tcp_input+0xfb8>
*/
case TCPS_LISTEN:
{
struct mbuf * am;
if (tiflags & TH_RST)
8031a30: e0bffb17 ldw r2,-20(fp)
8031a34: 1080010c andi r2,r2,4
8031a38: 10000326 beq r2,zero,8031a48 <tcp_input+0x9f8>
GOTO_DROP;
8031a3c: 0080bec4 movi r2,763
8031a40: d0a08715 stw r2,-32228(gp)
8031a44: 0005ed06 br 80331fc <tcp_input+0x21ac>
if (tiflags & TH_ACK)
8031a48: e0bffb17 ldw r2,-20(fp)
8031a4c: 1080040c andi r2,r2,16
8031a50: 10000326 beq r2,zero,8031a60 <tcp_input+0xa10>
GOTO_DROPWITHRESET;
8031a54: 0080bf44 movi r2,765
8031a58: d0a08715 stw r2,-32228(gp)
8031a5c: 0005a806 br 8033100 <tcp_input+0x20b0>
if ((tiflags & TH_SYN) == 0)
8031a60: e0bffb17 ldw r2,-20(fp)
8031a64: 1080008c andi r2,r2,2
8031a68: 1000031e bne r2,zero,8031a78 <tcp_input+0xa28>
GOTO_DROP;
8031a6c: 0080bfc4 movi r2,767
8031a70: d0a08715 stw r2,-32228(gp)
8031a74: 0005e106 br 80331fc <tcp_input+0x21ac>
if(in_broadcast(ti->ti_dst.s_addr))
8031a78: e0bff017 ldw r2,-64(fp)
8031a7c: 10800417 ldw r2,16(r2)
8031a80: 1009883a mov r4,r2
8031a84: 802abe00 call 802abe0 <in_broadcast>
8031a88: 10000326 beq r2,zero,8031a98 <tcp_input+0xa48>
GOTO_DROP;
8031a8c: 0080c044 movi r2,769
8031a90: d0a08715 stw r2,-32228(gp)
8031a94: 0005d906 br 80331fc <tcp_input+0x21ac>
am = m_getwithdata (MT_SONAME, sizeof (struct sockaddr));
8031a98: 01400404 movi r5,16
8031a9c: 01000244 movi r4,9
8031aa0: 8029a700 call 8029a70 <m_getnbuf>
8031aa4: e0bfea15 stw r2,-88(fp)
if (am == NULL)
8031aa8: e0bfea17 ldw r2,-88(fp)
8031aac: 1000031e bne r2,zero,8031abc <tcp_input+0xa6c>
GOTO_DROP;
8031ab0: 0080c104 movi r2,772
8031ab4: d0a08715 stw r2,-32228(gp)
8031ab8: 0005d006 br 80331fc <tcp_input+0x21ac>
#ifdef IP_V4
if(inp->inp_socket->so_domain == AF_INET)
8031abc: e0bffe17 ldw r2,-8(fp)
8031ac0: 10800817 ldw r2,32(r2)
8031ac4: 10800517 ldw r2,20(r2)
8031ac8: 10800098 cmpnei r2,r2,2
8031acc: 10002c1e bne r2,zero,8031b80 <tcp_input+0xb30>
{
struct sockaddr_in * sin;
am->m_len = sizeof (struct sockaddr_in);
8031ad0: e0bfea17 ldw r2,-88(fp)
8031ad4: 00c00404 movi r3,16
8031ad8: 10c00215 stw r3,8(r2)
sin = mtod(am, struct sockaddr_in *);
8031adc: e0bfea17 ldw r2,-88(fp)
8031ae0: 10800317 ldw r2,12(r2)
8031ae4: e0bfe915 stw r2,-92(fp)
sin->sin_family = AF_INET;
8031ae8: e0bfe917 ldw r2,-92(fp)
8031aec: 00c00084 movi r3,2
8031af0: 10c0000d sth r3,0(r2)
sin->sin_addr = ti->ti_src;
8031af4: e0bfe917 ldw r2,-92(fp)
8031af8: e0fff017 ldw r3,-64(fp)
8031afc: 18c00317 ldw r3,12(r3)
8031b00: 10c00115 stw r3,4(r2)
sin->sin_port = ti->ti_sport;
8031b04: e0bff017 ldw r2,-64(fp)
8031b08: 10c0050b ldhu r3,20(r2)
8031b0c: e0bfe917 ldw r2,-92(fp)
8031b10: 10c0008d sth r3,2(r2)
/* Assuming pcbconnect will work, we put the sender's address in
* the inp_laddr (after saving a local laddr copy). If the connect
* fails we restore the inpcb before going to drop:
*/
laddr = inp->inp_laddr; /* save tmp laddr */
8031b14: e0bffe17 ldw r2,-8(fp)
8031b18: 10800417 ldw r2,16(r2)
8031b1c: e0bfe515 stw r2,-108(fp)
if (inp->inp_laddr.s_addr == INADDR_ANY)
8031b20: e0bffe17 ldw r2,-8(fp)
8031b24: 10800417 ldw r2,16(r2)
8031b28: 1000041e bne r2,zero,8031b3c <tcp_input+0xaec>
inp->inp_laddr = ti->ti_dst;
8031b2c: e0bffe17 ldw r2,-8(fp)
8031b30: e0fff017 ldw r3,-64(fp)
8031b34: 18c00417 ldw r3,16(r3)
8031b38: 10c00415 stw r3,16(r2)
if (in_pcbconnect (inp, am))
8031b3c: e17fea17 ldw r5,-88(fp)
8031b40: e13ffe17 ldw r4,-8(fp)
8031b44: 804081c0 call 804081c <in_pcbconnect>
8031b48: 10000826 beq r2,zero,8031b6c <tcp_input+0xb1c>
{
inp->inp_laddr = laddr;
8031b4c: e0bffe17 ldw r2,-8(fp)
8031b50: e0ffe517 ldw r3,-108(fp)
8031b54: 10c00415 stw r3,16(r2)
(void) m_free(am);
8031b58: e13fea17 ldw r4,-88(fp)
8031b5c: 8029bf80 call 8029bf8 <m_free>
GOTO_DROP;
8031b60: 0080c684 movi r2,794
8031b64: d0a08715 stw r2,-32228(gp)
8031b68: 0005a406 br 80331fc <tcp_input+0x21ac>
}
inp->ifp = ifp; /* set interface for conn.*/
8031b6c: e0bffe17 ldw r2,-8(fp)
8031b70: e0ffe317 ldw r3,-116(fp)
8031b74: 10c00a15 stw r3,40(r2)
(void) m_free (am);
8031b78: e13fea17 ldw r4,-88(fp)
8031b7c: 8029bf80 call 8029bf8 <m_free>
}
(void) m_free(am);
}
#endif /* end v6 */
tp->t_template = tcp_template(tp);
8031b80: e13ffc17 ldw r4,-16(fp)
8031b84: 8034a400 call 8034a40 <tcp_template>
8031b88: 1007883a mov r3,r2
8031b8c: e0bffc17 ldw r2,-16(fp)
8031b90: 10c00c15 stw r3,48(r2)
if (tp->t_template == 0)
8031b94: e0bffc17 ldw r2,-16(fp)
8031b98: 10800c17 ldw r2,48(r2)
8031b9c: 1000071e bne r2,zero,8031bbc <tcp_input+0xb6c>
{
SETTP(tp, tcp_drop(tp, ENOBUFS));
8031ba0: 01401a44 movi r5,105
8031ba4: e13ffc17 ldw r4,-16(fp)
8031ba8: 803504c0 call 803504c <tcp_drop>
dropsocket = 0; /* socket is already gone */
8031bac: e03ff615 stw zero,-40(fp)
GOTO_DROP;
8031bb0: 0080d1c4 movi r2,839
8031bb4: d0a08715 stw r2,-32228(gp)
8031bb8: 00059006 br 80331fc <tcp_input+0x21ac>
}
if (om)
8031bbc: e0bffd17 ldw r2,-12(fp)
8031bc0: 10000526 beq r2,zero,8031bd8 <tcp_input+0xb88>
{
tcp_dooptions(tp, om, ti);
8031bc4: e1bff017 ldw r6,-64(fp)
8031bc8: e17ffd17 ldw r5,-12(fp)
8031bcc: e13ffc17 ldw r4,-16(fp)
8031bd0: 80332640 call 8033264 <tcp_dooptions>
om = 0;
8031bd4: e03ffd15 stw zero,-12(fp)
}
if (iss)
8031bd8: e0bff517 ldw r2,-44(fp)
8031bdc: 10000426 beq r2,zero,8031bf0 <tcp_input+0xba0>
tp->iss = iss;
8031be0: e0fff517 ldw r3,-44(fp)
8031be4: e0bffc17 ldw r2,-16(fp)
8031be8: 10c01315 stw r3,76(r2)
8031bec: 00000306 br 8031bfc <tcp_input+0xbac>
else
tp->iss = tcp_iss;
8031bf0: d0e08a17 ldw r3,-32216(gp)
8031bf4: e0bffc17 ldw r2,-16(fp)
8031bf8: 10c01315 stw r3,76(r2)
tcp_iss += (unsigned)(TCP_ISSINCR/2);
8031bfc: d0e08a17 ldw r3,-32216(gp)
8031c00: 00be9fd4 movui r2,64127
8031c04: 1885883a add r2,r3,r2
8031c08: d0a08a15 stw r2,-32216(gp)
tp->irs = ti->ti_seq;
8031c0c: e0bff017 ldw r2,-64(fp)
8031c10: 10c00617 ldw r3,24(r2)
8031c14: e0bffc17 ldw r2,-16(fp)
8031c18: 10c01815 stw r3,96(r2)
tcp_sendseqinit(tp);
8031c1c: e0bffc17 ldw r2,-16(fp)
8031c20: 10c01317 ldw r3,76(r2)
8031c24: e0bffc17 ldw r2,-16(fp)
8031c28: 10c01015 stw r3,64(r2)
8031c2c: e0bffc17 ldw r2,-16(fp)
8031c30: 10c01017 ldw r3,64(r2)
8031c34: e0bffc17 ldw r2,-16(fp)
8031c38: 10c01a15 stw r3,104(r2)
8031c3c: e0bffc17 ldw r2,-16(fp)
8031c40: 10c01a17 ldw r3,104(r2)
8031c44: e0bffc17 ldw r2,-16(fp)
8031c48: 10c00f15 stw r3,60(r2)
8031c4c: e0bffc17 ldw r2,-16(fp)
8031c50: 10c00f17 ldw r3,60(r2)
8031c54: e0bffc17 ldw r2,-16(fp)
8031c58: 10c00e15 stw r3,56(r2)
tcp_rcvseqinit(tp);
8031c5c: e0bffc17 ldw r2,-16(fp)
8031c60: 10801817 ldw r2,96(r2)
8031c64: 10c00044 addi r3,r2,1
8031c68: e0bffc17 ldw r2,-16(fp)
8031c6c: 10c01615 stw r3,88(r2)
8031c70: e0bffc17 ldw r2,-16(fp)
8031c74: 10c01617 ldw r3,88(r2)
8031c78: e0bffc17 ldw r2,-16(fp)
8031c7c: 10c01915 stw r3,100(r2)
tp->t_flags |= TF_ACKNOW;
8031c80: e0bffc17 ldw r2,-16(fp)
8031c84: 10800b0b ldhu r2,44(r2)
8031c88: 10800054 ori r2,r2,1
8031c8c: 1007883a mov r3,r2
8031c90: e0bffc17 ldw r2,-16(fp)
8031c94: 10c00b0d sth r3,44(r2)
tp->t_state = TCPS_SYN_RECEIVED;
8031c98: e0bffc17 ldw r2,-16(fp)
8031c9c: 00c000c4 movi r3,3
8031ca0: 10c00215 stw r3,8(r2)
tp->t_timer[TCPT_KEEP] = TCPTV_KEEP_INIT;
8031ca4: e0bffc17 ldw r2,-16(fp)
8031ca8: 00c02584 movi r3,150
8031cac: 10c00515 stw r3,20(r2)
dropsocket = 0; /* committed to socket */
8031cb0: e03ff615 stw zero,-40(fp)
tcpstat.tcps_accepts++;
8031cb4: 008201b4 movhi r2,2054
8031cb8: 10b8a517 ldw r2,-7532(r2)
8031cbc: 10c00044 addi r3,r2,1
8031cc0: 008201b4 movhi r2,2054
8031cc4: 10f8a515 stw r3,-7532(r2)
goto trimthenstep6;
8031cc8: 00008e06 br 8031f04 <tcp_input+0xeb4>
* if SYN has been acked change to ESTABLISHED else SYN_RCVD state
* arrange for segment to be acked (eventually)
* continue processing rest of data/controls, beginning with URG
*/
case TCPS_SYN_SENT:
inp->ifp = ifp;
8031ccc: e0bffe17 ldw r2,-8(fp)
8031cd0: e0ffe317 ldw r3,-116(fp)
8031cd4: 10c00a15 stw r3,40(r2)
if ((tiflags & TH_ACK) &&
8031cd8: e0bffb17 ldw r2,-20(fp)
8031cdc: 1080040c andi r2,r2,16
8031ce0: 10000f26 beq r2,zero,8031d20 <tcp_input+0xcd0>
(SEQ_LEQ(ti->ti_ack, tp->iss) ||
8031ce4: e0bff017 ldw r2,-64(fp)
8031ce8: 10c00717 ldw r3,28(r2)
8031cec: e0bffc17 ldw r2,-16(fp)
8031cf0: 10801317 ldw r2,76(r2)
8031cf4: 1885c83a sub r2,r3,r2
if ((tiflags & TH_ACK) &&
8031cf8: 0080060e bge zero,r2,8031d14 <tcp_input+0xcc4>
SEQ_GT(ti->ti_ack, tp->snd_max)))
8031cfc: e0bff017 ldw r2,-64(fp)
8031d00: 10c00717 ldw r3,28(r2)
8031d04: e0bffc17 ldw r2,-16(fp)
8031d08: 10801a17 ldw r2,104(r2)
8031d0c: 1885c83a sub r2,r3,r2
(SEQ_LEQ(ti->ti_ack, tp->iss) ||
8031d10: 0080030e bge zero,r2,8031d20 <tcp_input+0xcd0>
{
GOTO_DROPWITHRESET;
8031d14: 0080dc04 movi r2,880
8031d18: d0a08715 stw r2,-32228(gp)
8031d1c: 0004f806 br 8033100 <tcp_input+0x20b0>
}
if (tiflags & TH_RST)
8031d20: e0bffb17 ldw r2,-20(fp)
8031d24: 1080010c andi r2,r2,4
8031d28: 10000926 beq r2,zero,8031d50 <tcp_input+0xd00>
{
if (tiflags & TH_ACK)
8031d2c: e0bffb17 ldw r2,-20(fp)
8031d30: 1080040c andi r2,r2,16
8031d34: 10000326 beq r2,zero,8031d44 <tcp_input+0xcf4>
SETTP(tp, tcp_drop(tp, ECONNREFUSED));
8031d38: 01401bc4 movi r5,111
8031d3c: e13ffc17 ldw r4,-16(fp)
8031d40: 803504c0 call 803504c <tcp_drop>
GOTO_DROP;
8031d44: 0080dd84 movi r2,886
8031d48: d0a08715 stw r2,-32228(gp)
8031d4c: 00052b06 br 80331fc <tcp_input+0x21ac>
}
if ((tiflags & TH_SYN) == 0)
8031d50: e0bffb17 ldw r2,-20(fp)
8031d54: 1080008c andi r2,r2,2
8031d58: 1000031e bne r2,zero,8031d68 <tcp_input+0xd18>
GOTO_DROP;
8031d5c: 0080de44 movi r2,889
8031d60: d0a08715 stw r2,-32228(gp)
8031d64: 00052506 br 80331fc <tcp_input+0x21ac>
if (tiflags & TH_ACK)
8031d68: e0bffb17 ldw r2,-20(fp)
8031d6c: 1080040c andi r2,r2,16
8031d70: 10000e26 beq r2,zero,8031dac <tcp_input+0xd5c>
{
tp->snd_una = ti->ti_ack;
8031d74: e0bff017 ldw r2,-64(fp)
8031d78: 10c00717 ldw r3,28(r2)
8031d7c: e0bffc17 ldw r2,-16(fp)
8031d80: 10c00e15 stw r3,56(r2)
if (SEQ_LT(tp->snd_nxt, tp->snd_una))
8031d84: e0bffc17 ldw r2,-16(fp)
8031d88: 10c00f17 ldw r3,60(r2)
8031d8c: e0bffc17 ldw r2,-16(fp)
8031d90: 10800e17 ldw r2,56(r2)
8031d94: 1885c83a sub r2,r3,r2
8031d98: 1000040e bge r2,zero,8031dac <tcp_input+0xd5c>
tp->snd_nxt = tp->snd_una;
8031d9c: e0bffc17 ldw r2,-16(fp)
8031da0: 10c00e17 ldw r3,56(r2)
8031da4: e0bffc17 ldw r2,-16(fp)
8031da8: 10c00f15 stw r3,60(r2)
}
tp->t_timer[TCPT_REXMT] = 0;
8031dac: e0bffc17 ldw r2,-16(fp)
8031db0: 10000315 stw zero,12(r2)
tp->irs = ti->ti_seq;
8031db4: e0bff017 ldw r2,-64(fp)
8031db8: 10c00617 ldw r3,24(r2)
8031dbc: e0bffc17 ldw r2,-16(fp)
8031dc0: 10c01815 stw r3,96(r2)
tcp_rcvseqinit(tp);
8031dc4: e0bffc17 ldw r2,-16(fp)
8031dc8: 10801817 ldw r2,96(r2)
8031dcc: 10c00044 addi r3,r2,1
8031dd0: e0bffc17 ldw r2,-16(fp)
8031dd4: 10c01615 stw r3,88(r2)
8031dd8: e0bffc17 ldw r2,-16(fp)
8031ddc: 10c01617 ldw r3,88(r2)
8031de0: e0bffc17 ldw r2,-16(fp)
8031de4: 10c01915 stw r3,100(r2)
if (inp->inp_laddr.s_addr != ti->ti_dst.s_addr)
8031de8: e0bffe17 ldw r2,-8(fp)
8031dec: 10c00417 ldw r3,16(r2)
8031df0: e0bff017 ldw r2,-64(fp)
8031df4: 10800417 ldw r2,16(r2)
8031df8: 18801726 beq r3,r2,8031e58 <tcp_input+0xe08>
* the IP interface may have changed address since we sent our SYN
* (e.g. PPP brings link up as a result of said SYN and gets new
* address via IPCP); if so we need to update the inpcb and the
* TCP header template with the new address.
*/
if ((m->pkt->net != NULL)
8031dfc: e0bfe417 ldw r2,-112(fp)
8031e00: 10800117 ldw r2,4(r2)
8031e04: 10800617 ldw r2,24(r2)
8031e08: 10001326 beq r2,zero,8031e58 <tcp_input+0xe08>
&& (m->pkt->net->n_ipaddr == ti->ti_dst.s_addr))
8031e0c: e0bfe417 ldw r2,-112(fp)
8031e10: 10800117 ldw r2,4(r2)
8031e14: 10800617 ldw r2,24(r2)
8031e18: 10c00a17 ldw r3,40(r2)
8031e1c: e0bff017 ldw r2,-64(fp)
8031e20: 10800417 ldw r2,16(r2)
8031e24: 18800c1e bne r3,r2,8031e58 <tcp_input+0xe08>
/* send an ack */
{
inp->inp_laddr = ti->ti_dst;
8031e28: e0bffe17 ldw r2,-8(fp)
8031e2c: e0fff017 ldw r3,-64(fp)
8031e30: 18c00417 ldw r3,16(r3)
8031e34: 10c00415 stw r3,16(r2)
if (tp->t_template != NULL)
8031e38: e0bffc17 ldw r2,-16(fp)
8031e3c: 10800c17 ldw r2,48(r2)
8031e40: 10000526 beq r2,zero,8031e58 <tcp_input+0xe08>
tp->t_template->ti_src = ti->ti_dst;
8031e44: e0bffc17 ldw r2,-16(fp)
8031e48: 10800c17 ldw r2,48(r2)
8031e4c: e0fff017 ldw r3,-64(fp)
8031e50: 18c00417 ldw r3,16(r3)
8031e54: 10c00315 stw r3,12(r2)
}
}
tp->t_flags |= TF_ACKNOW;
8031e58: e0bffc17 ldw r2,-16(fp)
8031e5c: 10800b0b ldhu r2,44(r2)
8031e60: 10800054 ori r2,r2,1
8031e64: 1007883a mov r3,r2
8031e68: e0bffc17 ldw r2,-16(fp)
8031e6c: 10c00b0d sth r3,44(r2)
if (tiflags & TH_ACK && SEQ_GT(tp->snd_una, tp->iss))
8031e70: e0bffb17 ldw r2,-20(fp)
8031e74: 1080040c andi r2,r2,16
8031e78: 10001f26 beq r2,zero,8031ef8 <tcp_input+0xea8>
8031e7c: e0bffc17 ldw r2,-16(fp)
8031e80: 10c00e17 ldw r3,56(r2)
8031e84: e0bffc17 ldw r2,-16(fp)
8031e88: 10801317 ldw r2,76(r2)
8031e8c: 1885c83a sub r2,r3,r2
8031e90: 0080190e bge zero,r2,8031ef8 <tcp_input+0xea8>
{
tcpstat.tcps_connects++;
8031e94: 008201b4 movhi r2,2054
8031e98: 10b8a617 ldw r2,-7528(r2)
8031e9c: 10c00044 addi r3,r2,1
8031ea0: 008201b4 movhi r2,2054
8031ea4: 10f8a615 stw r3,-7528(r2)
tp->t_state = TCPS_ESTABLISHED;
8031ea8: e0bffc17 ldw r2,-16(fp)
8031eac: 00c00104 movi r3,4
8031eb0: 10c00215 stw r3,8(r2)
soisconnected (so);
8031eb4: e13ffa17 ldw r4,-24(fp)
8031eb8: 802f1e80 call 802f1e8 <soisconnected>
tp->t_maxseg = tcp_mss(so);
8031ebc: e13ffa17 ldw r4,-24(fp)
8031ec0: 803379c0 call 803379c <tcp_mss>
8031ec4: 1007883a mov r3,r2
8031ec8: e0bffc17 ldw r2,-16(fp)
8031ecc: 10c00a0d sth r3,40(r2)
(void) tcp_reass (tp, (struct tcpiphdr *)0, m);
8031ed0: e1bfe417 ldw r6,-112(fp)
8031ed4: 000b883a mov r5,zero
8031ed8: e13ffc17 ldw r4,-16(fp)
8031edc: 8030c600 call 8030c60 <tcp_reass>
/*
* if we didn't have to retransmit the SYN,
* use its rtt as our initial srtt & rtt var.
*/
if (tp->t_rttick)
8031ee0: e0bffc17 ldw r2,-16(fp)
8031ee4: 10801e17 ldw r2,120(r2)
8031ee8: 10000626 beq r2,zero,8031f04 <tcp_input+0xeb4>
{
tcp_xmit_timer(tp);
8031eec: e13ffc17 ldw r4,-16(fp)
8031ef0: 80335180 call 8033518 <tcp_xmit_timer>
if (tp->t_rttick)
8031ef4: 00000306 br 8031f04 <tcp_input+0xeb4>
}
} else
tp->t_state = TCPS_SYN_RECEIVED;
8031ef8: e0bffc17 ldw r2,-16(fp)
8031efc: 00c000c4 movi r3,3
8031f00: 10c00215 stw r3,8(r2)
/*
* Advance ti->ti_seq to correspond to first data byte.
* If data, trim to stay within window,
* dropping FIN if necessary.
*/
ti->ti_seq++;
8031f04: e0bff017 ldw r2,-64(fp)
8031f08: 10800617 ldw r2,24(r2)
8031f0c: 10c00044 addi r3,r2,1
8031f10: e0bff017 ldw r2,-64(fp)
8031f14: 10c00615 stw r3,24(r2)
if ((tcp_win)ti->ti_len > tp->rcv_wnd)
8031f18: e0bff017 ldw r2,-64(fp)
8031f1c: 1080028b ldhu r2,10(r2)
8031f20: 10bfffcc andi r2,r2,65535
8031f24: e0fffc17 ldw r3,-16(fp)
8031f28: 18c01517 ldw r3,84(r3)
8031f2c: 18802c2e bgeu r3,r2,8031fe0 <tcp_input+0xf90>
{
todrop = ti->ti_len - (u_short)tp->rcv_wnd;
8031f30: e0bff017 ldw r2,-64(fp)
8031f34: 1080028b ldhu r2,10(r2)
8031f38: 10ffffcc andi r3,r2,65535
8031f3c: e0bffc17 ldw r2,-16(fp)
8031f40: 10801517 ldw r2,84(r2)
8031f44: 10bfffcc andi r2,r2,65535
8031f48: 1885c83a sub r2,r3,r2
8031f4c: e0bff915 stw r2,-28(fp)
/* XXX work around 4.2 m_adj bug */
if (m->m_len)
8031f50: e0bfe417 ldw r2,-112(fp)
8031f54: 10800217 ldw r2,8(r2)
8031f58: 10000626 beq r2,zero,8031f74 <tcp_input+0xf24>
{
m_adj(m, -todrop);
8031f5c: e0bff917 ldw r2,-28(fp)
8031f60: 0085c83a sub r2,zero,r2
8031f64: 100b883a mov r5,r2
8031f68: e13fe417 ldw r4,-112(fp)
8031f6c: 802a0180 call 802a018 <m_adj>
8031f70: 00000706 br 8031f90 <tcp_input+0xf40>
}
else
{
/* skip tcp/ip header in first mbuf */
m_adj(m->m_next, -todrop);
8031f74: e0bfe417 ldw r2,-112(fp)
8031f78: 10c00617 ldw r3,24(r2)
8031f7c: e0bff917 ldw r2,-28(fp)
8031f80: 0085c83a sub r2,zero,r2
8031f84: 100b883a mov r5,r2
8031f88: 1809883a mov r4,r3
8031f8c: 802a0180 call 802a018 <m_adj>
}
ti->ti_len = (u_short)tp->rcv_wnd;
8031f90: e0bffc17 ldw r2,-16(fp)
8031f94: 10801517 ldw r2,84(r2)
8031f98: 1007883a mov r3,r2
8031f9c: e0bff017 ldw r2,-64(fp)
8031fa0: 10c0028d sth r3,10(r2)
tiflags &= ~TH_FIN;
8031fa4: e0fffb17 ldw r3,-20(fp)
8031fa8: 00bfff84 movi r2,-2
8031fac: 1884703a and r2,r3,r2
8031fb0: e0bffb15 stw r2,-20(fp)
tcpstat.tcps_rcvpackafterwin++;
8031fb4: 008201b4 movhi r2,2054
8031fb8: 10b8c917 ldw r2,-7388(r2)
8031fbc: 10c00044 addi r3,r2,1
8031fc0: 008201b4 movhi r2,2054
8031fc4: 10f8c915 stw r3,-7388(r2)
tcpstat.tcps_rcvbyteafterwin += todrop;
8031fc8: 008201b4 movhi r2,2054
8031fcc: 10f8ca17 ldw r3,-7384(r2)
8031fd0: e0bff917 ldw r2,-28(fp)
8031fd4: 1887883a add r3,r3,r2
8031fd8: 008201b4 movhi r2,2054
8031fdc: 10f8ca15 stw r3,-7384(r2)
}
tp->snd_wl1 = ti->ti_seq - 1;
8031fe0: e0bff017 ldw r2,-64(fp)
8031fe4: 10800617 ldw r2,24(r2)
8031fe8: 10ffffc4 addi r3,r2,-1
8031fec: e0bffc17 ldw r2,-16(fp)
8031ff0: 10c01115 stw r3,68(r2)
tp->rcv_up = ti->ti_seq;
8031ff4: e0bff017 ldw r2,-64(fp)
8031ff8: 10c00617 ldw r3,24(r2)
8031ffc: e0bffc17 ldw r2,-16(fp)
8032000: 10c01715 stw r3,92(r2)
goto step6;
8032004: 0002cb06 br 8032b34 <tcp_input+0x1ae4>
* States other than LISTEN or SYN_SENT.
* First check that at least some bytes of segment are within
* receive window. If segment begins before rcv_nxt,
* drop leading data (and SYN); if nothing left, just ack.
*/
todrop = (int)(tp->rcv_nxt - ti->ti_seq);
8032008: e0bffc17 ldw r2,-16(fp)
803200c: 10c01617 ldw r3,88(r2)
8032010: e0bff017 ldw r2,-64(fp)
8032014: 10800617 ldw r2,24(r2)
8032018: 1885c83a sub r2,r3,r2
803201c: e0bff915 stw r2,-28(fp)
if (todrop > 0)
8032020: e0bff917 ldw r2,-28(fp)
8032024: 0080890e bge zero,r2,803224c <tcp_input+0x11fc>
{
if (tiflags & TH_SYN)
8032028: e0bffb17 ldw r2,-20(fp)
803202c: 1080008c andi r2,r2,2
8032030: 10001c26 beq r2,zero,80320a4 <tcp_input+0x1054>
{
tiflags &= ~TH_SYN;
8032034: e0fffb17 ldw r3,-20(fp)
8032038: 00bfff44 movi r2,-3
803203c: 1884703a and r2,r3,r2
8032040: e0bffb15 stw r2,-20(fp)
ti->ti_seq++;
8032044: e0bff017 ldw r2,-64(fp)
8032048: 10800617 ldw r2,24(r2)
803204c: 10c00044 addi r3,r2,1
8032050: e0bff017 ldw r2,-64(fp)
8032054: 10c00615 stw r3,24(r2)
if (ti->ti_urp > 1)
8032058: e0bff017 ldw r2,-64(fp)
803205c: 1080098b ldhu r2,38(r2)
8032060: 10bfffcc andi r2,r2,65535
8032064: 108000b0 cmpltui r2,r2,2
8032068: 1000071e bne r2,zero,8032088 <tcp_input+0x1038>
ti->ti_urp--;
803206c: e0bff017 ldw r2,-64(fp)
8032070: 1080098b ldhu r2,38(r2)
8032074: 10bfffc4 addi r2,r2,-1
8032078: 1007883a mov r3,r2
803207c: e0bff017 ldw r2,-64(fp)
8032080: 10c0098d sth r3,38(r2)
8032084: 00000406 br 8032098 <tcp_input+0x1048>
else
tiflags &= ~TH_URG;
8032088: e0fffb17 ldw r3,-20(fp)
803208c: 00bff7c4 movi r2,-33
8032090: 1884703a and r2,r3,r2
8032094: e0bffb15 stw r2,-20(fp)
todrop--;
8032098: e0bff917 ldw r2,-28(fp)
803209c: 10bfffc4 addi r2,r2,-1
80320a0: e0bff915 stw r2,-28(fp)
/*
* Altera Niche Stack Nios port modification:
* Add parenthesis to remove implicit order of operaton
* & possible build warning.
*/
if ((todrop > (int)ti->ti_len) ||
80320a4: e0bff017 ldw r2,-64(fp)
80320a8: 1080028b ldhu r2,10(r2)
80320ac: 10ffffcc andi r3,r2,65535
80320b0: e0bff917 ldw r2,-28(fp)
80320b4: 18800816 blt r3,r2,80320d8 <tcp_input+0x1088>
((todrop == (int)ti->ti_len) &&
80320b8: e0bff017 ldw r2,-64(fp)
80320bc: 1080028b ldhu r2,10(r2)
80320c0: 10bfffcc andi r2,r2,65535
if ((todrop > (int)ti->ti_len) ||
80320c4: e0fff917 ldw r3,-28(fp)
80320c8: 1880311e bne r3,r2,8032190 <tcp_input+0x1140>
(tiflags&TH_FIN) == 0))
80320cc: e0bffb17 ldw r2,-20(fp)
80320d0: 1080004c andi r2,r2,1
((todrop == (int)ti->ti_len) &&
80320d4: 10002e1e bne r2,zero,8032190 <tcp_input+0x1140>
{
tcpstat.tcps_rcvduppack++;
80320d8: 008201b4 movhi r2,2054
80320dc: 10b8c317 ldw r2,-7412(r2)
80320e0: 10c00044 addi r3,r2,1
80320e4: 008201b4 movhi r2,2054
80320e8: 10f8c315 stw r3,-7412(r2)
tcpstat.tcps_rcvdupbyte += ti->ti_len;
80320ec: 008201b4 movhi r2,2054
80320f0: 10f8c417 ldw r3,-7408(r2)
80320f4: e0bff017 ldw r2,-64(fp)
80320f8: 1080028b ldhu r2,10(r2)
80320fc: 10bfffcc andi r2,r2,65535
8032100: 1887883a add r3,r3,r2
8032104: 008201b4 movhi r2,2054
8032108: 10f8c415 stw r3,-7408(r2)
* it, but check the ACK or we will get into FIN
* wars if our FINs crossed (both CLOSING).
* In either case, send ACK to resynchronize,
* but keep on processing for RST or ACK.
*/
if ((tiflags & TH_FIN && todrop == (int)ti->ti_len + 1) ||
803210c: e0bffb17 ldw r2,-20(fp)
8032110: 1080004c andi r2,r2,1
8032114: 10000626 beq r2,zero,8032130 <tcp_input+0x10e0>
8032118: e0bff017 ldw r2,-64(fp)
803211c: 1080028b ldhu r2,10(r2)
8032120: 10bfffcc andi r2,r2,65535
8032124: 10800044 addi r2,r2,1
8032128: e0fff917 ldw r3,-28(fp)
803212c: 18800926 beq r3,r2,8032154 <tcp_input+0x1104>
(tiflags & TH_RST && ti->ti_seq == tp->rcv_nxt - 1))
8032130: e0bffb17 ldw r2,-20(fp)
8032134: 1080010c andi r2,r2,4
if ((tiflags & TH_FIN && todrop == (int)ti->ti_len + 1) ||
8032138: 1003dd26 beq r2,zero,80330b0 <tcp_input+0x2060>
(tiflags & TH_RST && ti->ti_seq == tp->rcv_nxt - 1))
803213c: e0bff017 ldw r2,-64(fp)
8032140: 10c00617 ldw r3,24(r2)
8032144: e0bffc17 ldw r2,-16(fp)
8032148: 10801617 ldw r2,88(r2)
803214c: 10bfffc4 addi r2,r2,-1
8032150: 1883d71e bne r3,r2,80330b0 <tcp_input+0x2060>
{
todrop = ti->ti_len;
8032154: e0bff017 ldw r2,-64(fp)
8032158: 1080028b ldhu r2,10(r2)
803215c: 10bfffcc andi r2,r2,65535
8032160: e0bff915 stw r2,-28(fp)
tiflags &= ~TH_FIN;
8032164: e0fffb17 ldw r3,-20(fp)
8032168: 00bfff84 movi r2,-2
803216c: 1884703a and r2,r3,r2
8032170: e0bffb15 stw r2,-20(fp)
tp->t_flags |= TF_ACKNOW;
8032174: e0bffc17 ldw r2,-16(fp)
8032178: 10800b0b ldhu r2,44(r2)
803217c: 10800054 ori r2,r2,1
8032180: 1007883a mov r3,r2
8032184: e0bffc17 ldw r2,-16(fp)
8032188: 10c00b0d sth r3,44(r2)
if ((tiflags & TH_FIN && todrop == (int)ti->ti_len + 1) ||
803218c: 00000b06 br 80321bc <tcp_input+0x116c>
else
goto dropafterack;
}
else
{
tcpstat.tcps_rcvpartduppack++;
8032190: 008201b4 movhi r2,2054
8032194: 10b8c517 ldw r2,-7404(r2)
8032198: 10c00044 addi r3,r2,1
803219c: 008201b4 movhi r2,2054
80321a0: 10f8c515 stw r3,-7404(r2)
tcpstat.tcps_rcvpartdupbyte += todrop;
80321a4: 008201b4 movhi r2,2054
80321a8: 10f8c617 ldw r3,-7400(r2)
80321ac: e0bff917 ldw r2,-28(fp)
80321b0: 1887883a add r3,r3,r2
80321b4: 008201b4 movhi r2,2054
80321b8: 10f8c615 stw r3,-7400(r2)
}
m_adj(m, todrop);
80321bc: e17ff917 ldw r5,-28(fp)
80321c0: e13fe417 ldw r4,-112(fp)
80321c4: 802a0180 call 802a018 <m_adj>
ti->ti_seq += todrop;
80321c8: e0bff017 ldw r2,-64(fp)
80321cc: 10c00617 ldw r3,24(r2)
80321d0: e0bff917 ldw r2,-28(fp)
80321d4: 1887883a add r3,r3,r2
80321d8: e0bff017 ldw r2,-64(fp)
80321dc: 10c00615 stw r3,24(r2)
ti->ti_len -= (u_short)todrop;
80321e0: e0bff017 ldw r2,-64(fp)
80321e4: 1080028b ldhu r2,10(r2)
80321e8: e0fff917 ldw r3,-28(fp)
80321ec: 10c5c83a sub r2,r2,r3
80321f0: 1007883a mov r3,r2
80321f4: e0bff017 ldw r2,-64(fp)
80321f8: 10c0028d sth r3,10(r2)
if (ti->ti_urp > (u_short)todrop)
80321fc: e0bff017 ldw r2,-64(fp)
8032200: 1080098b ldhu r2,38(r2)
8032204: e0fff917 ldw r3,-28(fp)
8032208: 10bfffcc andi r2,r2,65535
803220c: 18ffffcc andi r3,r3,65535
8032210: 1880082e bgeu r3,r2,8032234 <tcp_input+0x11e4>
ti->ti_urp -= (u_short)todrop;
8032214: e0bff017 ldw r2,-64(fp)
8032218: 1080098b ldhu r2,38(r2)
803221c: e0fff917 ldw r3,-28(fp)
8032220: 10c5c83a sub r2,r2,r3
8032224: 1007883a mov r3,r2
8032228: e0bff017 ldw r2,-64(fp)
803222c: 10c0098d sth r3,38(r2)
8032230: 00000606 br 803224c <tcp_input+0x11fc>
else
{
tiflags &= ~TH_URG;
8032234: e0fffb17 ldw r3,-20(fp)
8032238: 00bff7c4 movi r2,-33
803223c: 1884703a and r2,r3,r2
8032240: e0bffb15 stw r2,-20(fp)
ti->ti_urp = 0;
8032244: e0bff017 ldw r2,-64(fp)
8032248: 1000098d sth zero,38(r2)
/*
* If new data are received on a connection after the
* user processes are gone, then RST the other end.
*/
if ((so->so_state & SS_NOFDREF) &&
803224c: e0bffa17 ldw r2,-24(fp)
8032250: 1080088b ldhu r2,34(r2)
8032254: 10bfffcc andi r2,r2,65535
8032258: 1080004c andi r2,r2,1
803225c: 10001326 beq r2,zero,80322ac <tcp_input+0x125c>
tp->t_state > TCPS_CLOSE_WAIT && ti->ti_len)
8032260: e0bffc17 ldw r2,-16(fp)
8032264: 10800217 ldw r2,8(r2)
if ((so->so_state & SS_NOFDREF) &&
8032268: 10800190 cmplti r2,r2,6
803226c: 10000f1e bne r2,zero,80322ac <tcp_input+0x125c>
tp->t_state > TCPS_CLOSE_WAIT && ti->ti_len)
8032270: e0bff017 ldw r2,-64(fp)
8032274: 1080028b ldhu r2,10(r2)
8032278: 10bfffcc andi r2,r2,65535
803227c: 10000b26 beq r2,zero,80322ac <tcp_input+0x125c>
{
tp = tcp_close(tp);
8032280: e13ffc17 ldw r4,-16(fp)
8032284: 80350e80 call 80350e8 <tcp_close>
8032288: e0bffc15 stw r2,-16(fp)
tcpstat.tcps_rcvafterclose++;
803228c: 008201b4 movhi r2,2054
8032290: 10b8cb17 ldw r2,-7380(r2)
8032294: 10c00044 addi r3,r2,1
8032298: 008201b4 movhi r2,2054
803229c: 10f8cb15 stw r3,-7380(r2)
GOTO_DROPWITHRESET;
80322a0: 00810444 movi r2,1041
80322a4: d0a08715 stw r2,-32228(gp)
80322a8: 00039506 br 8033100 <tcp_input+0x20b0>
/*
* If segment ends after window, drop trailing data
* (and PUSH and FIN); if nothing left, just ACK.
*/
todrop = (int)((ti->ti_seq + (short)ti->ti_len) - (tp->rcv_nxt+tp->rcv_wnd));
80322ac: e0bff017 ldw r2,-64(fp)
80322b0: 10c00617 ldw r3,24(r2)
80322b4: e0bff017 ldw r2,-64(fp)
80322b8: 1080028b ldhu r2,10(r2)
80322bc: 10bfffcc andi r2,r2,65535
80322c0: 10a0001c xori r2,r2,32768
80322c4: 10a00004 addi r2,r2,-32768
80322c8: 1887883a add r3,r3,r2
80322cc: e0bffc17 ldw r2,-16(fp)
80322d0: 11001617 ldw r4,88(r2)
80322d4: e0bffc17 ldw r2,-16(fp)
80322d8: 10801517 ldw r2,84(r2)
80322dc: 2085883a add r2,r4,r2
80322e0: 1885c83a sub r2,r3,r2
80322e4: e0bff915 stw r2,-28(fp)
if (todrop > 0)
80322e8: e0bff917 ldw r2,-28(fp)
80322ec: 0080610e bge zero,r2,8032474 <tcp_input+0x1424>
{
tcpstat.tcps_rcvpackafterwin++;
80322f0: 008201b4 movhi r2,2054
80322f4: 10b8c917 ldw r2,-7388(r2)
80322f8: 10c00044 addi r3,r2,1
80322fc: 008201b4 movhi r2,2054
8032300: 10f8c915 stw r3,-7388(r2)
if (todrop >= (int)ti->ti_len)
8032304: e0bff017 ldw r2,-64(fp)
8032308: 1080028b ldhu r2,10(r2)
803230c: 10bfffcc andi r2,r2,65535
8032310: e0fff917 ldw r3,-28(fp)
8032314: 18803616 blt r3,r2,80323f0 <tcp_input+0x13a0>
{
tcpstat.tcps_rcvbyteafterwin += ti->ti_len;
8032318: 008201b4 movhi r2,2054
803231c: 10f8ca17 ldw r3,-7384(r2)
8032320: e0bff017 ldw r2,-64(fp)
8032324: 1080028b ldhu r2,10(r2)
8032328: 10bfffcc andi r2,r2,65535
803232c: 1887883a add r3,r3,r2
8032330: 008201b4 movhi r2,2054
8032334: 10f8ca15 stw r3,-7384(r2)
* If a new connection request is received
* while in TIME_WAIT, drop the old connection
* and start over if the sequence numbers
* are above the previous ones.
*/
if (tiflags & TH_SYN &&
8032338: e0bffb17 ldw r2,-20(fp)
803233c: 1080008c andi r2,r2,2
8032340: 10001726 beq r2,zero,80323a0 <tcp_input+0x1350>
tp->t_state == TCPS_TIME_WAIT &&
8032344: e0bffc17 ldw r2,-16(fp)
8032348: 10800217 ldw r2,8(r2)
if (tiflags & TH_SYN &&
803234c: 10800298 cmpnei r2,r2,10
8032350: 1000131e bne r2,zero,80323a0 <tcp_input+0x1350>
SEQ_GT(ti->ti_seq, tp->rcv_nxt))
8032354: e0bff017 ldw r2,-64(fp)
8032358: 10c00617 ldw r3,24(r2)
803235c: e0bffc17 ldw r2,-16(fp)
8032360: 10801617 ldw r2,88(r2)
8032364: 1885c83a sub r2,r3,r2
tp->t_state == TCPS_TIME_WAIT &&
8032368: 00800d0e bge zero,r2,80323a0 <tcp_input+0x1350>
{
iss = (tcp_seq)(tp->rcv_nxt + (TCP_ISSINCR));
803236c: e0bffc17 ldw r2,-16(fp)
8032370: 10c01617 ldw r3,88(r2)
8032374: 008000b4 movhi r2,2
8032378: 10bd3fc4 addi r2,r2,-2817
803237c: 1885883a add r2,r3,r2
8032380: e0bff515 stw r2,-44(fp)
if (iss & 0xff000000)
8032384: e0bff517 ldw r2,-44(fp)
8032388: 10bfc02c andhi r2,r2,65280
803238c: 10000126 beq r2,zero,8032394 <tcp_input+0x1344>
{
iss = 0L;
8032390: e03ff515 stw zero,-44(fp)
}
(void) tcp_close(tp);
8032394: e13ffc17 ldw r4,-16(fp)
8032398: 80350e80 call 80350e8 <tcp_close>
goto findpcb;
803239c: 003bf806 br 8031380 <tcp_input+0x330>
* window edge, and have to drop data and PUSH from
* incoming segments. Continue processing, but
* remember to ack. Otherwise, drop segment
* and ack.
*/
if ((tp->rcv_wnd == 0) && (ti->ti_seq == tp->rcv_nxt))
80323a0: e0bffc17 ldw r2,-16(fp)
80323a4: 10801517 ldw r2,84(r2)
80323a8: 1003431e bne r2,zero,80330b8 <tcp_input+0x2068>
80323ac: e0bff017 ldw r2,-64(fp)
80323b0: 10c00617 ldw r3,24(r2)
80323b4: e0bffc17 ldw r2,-16(fp)
80323b8: 10801617 ldw r2,88(r2)
80323bc: 18833e1e bne r3,r2,80330b8 <tcp_input+0x2068>
{
tp->t_flags |= TF_ACKNOW;
80323c0: e0bffc17 ldw r2,-16(fp)
80323c4: 10800b0b ldhu r2,44(r2)
80323c8: 10800054 ori r2,r2,1
80323cc: 1007883a mov r3,r2
80323d0: e0bffc17 ldw r2,-16(fp)
80323d4: 10c00b0d sth r3,44(r2)
tcpstat.tcps_rcvwinprobe++;
80323d8: 008201b4 movhi r2,2054
80323dc: 10b8cc17 ldw r2,-7376(r2)
80323e0: 10c00044 addi r3,r2,1
80323e4: 008201b4 movhi r2,2054
80323e8: 10f8cc15 stw r3,-7376(r2)
80323ec: 00000606 br 8032408 <tcp_input+0x13b8>
} else
goto dropafterack;
} else
tcpstat.tcps_rcvbyteafterwin += todrop;
80323f0: 008201b4 movhi r2,2054
80323f4: 10f8ca17 ldw r3,-7384(r2)
80323f8: e0bff917 ldw r2,-28(fp)
80323fc: 1887883a add r3,r3,r2
8032400: 008201b4 movhi r2,2054
8032404: 10f8ca15 stw r3,-7384(r2)
/* XXX work around m_adj bug */
if (m->m_len)
8032408: e0bfe417 ldw r2,-112(fp)
803240c: 10800217 ldw r2,8(r2)
8032410: 10000626 beq r2,zero,803242c <tcp_input+0x13dc>
{
m_adj(m, -todrop);
8032414: e0bff917 ldw r2,-28(fp)
8032418: 0085c83a sub r2,zero,r2
803241c: 100b883a mov r5,r2
8032420: e13fe417 ldw r4,-112(fp)
8032424: 802a0180 call 802a018 <m_adj>
8032428: 00000706 br 8032448 <tcp_input+0x13f8>
}
else
{
/* skip tcp/ip header in first mbuf */
m_adj(m->m_next, -todrop);
803242c: e0bfe417 ldw r2,-112(fp)
8032430: 10c00617 ldw r3,24(r2)
8032434: e0bff917 ldw r2,-28(fp)
8032438: 0085c83a sub r2,zero,r2
803243c: 100b883a mov r5,r2
8032440: 1809883a mov r4,r3
8032444: 802a0180 call 802a018 <m_adj>
}
ti->ti_len -= (u_short)todrop;
8032448: e0bff017 ldw r2,-64(fp)
803244c: 1080028b ldhu r2,10(r2)
8032450: e0fff917 ldw r3,-28(fp)
8032454: 10c5c83a sub r2,r2,r3
8032458: 1007883a mov r3,r2
803245c: e0bff017 ldw r2,-64(fp)
8032460: 10c0028d sth r3,10(r2)
tiflags &= ~(TH_PUSH|TH_FIN);
8032464: e0fffb17 ldw r3,-20(fp)
8032468: 00bffd84 movi r2,-10
803246c: 1884703a and r2,r3,r2
8032470: e0bffb15 stw r2,-20(fp)
tiflags &= ~TH_RST; /* clear reset flag */
goto dropafterack; /* send an ack and drop current packet */
}
#endif /* DOS_RST */
if (tiflags&TH_RST)
8032474: e0bffb17 ldw r2,-20(fp)
8032478: 1080010c andi r2,r2,4
803247c: 10002f26 beq r2,zero,803253c <tcp_input+0x14ec>
{
switch (tp->t_state)
8032480: e0bffc17 ldw r2,-16(fp)
8032484: 10800217 ldw r2,8(r2)
8032488: 10bfff44 addi r2,r2,-3
803248c: 10c00228 cmpgeui r3,r2,8
8032490: 18002a1e bne r3,zero,803253c <tcp_input+0x14ec>
8032494: 100690ba slli r3,r2,2
8032498: 008200f4 movhi r2,2051
803249c: 1885883a add r2,r3,r2
80324a0: 10892a17 ldw r2,9384(r2)
80324a4: 1000683a jmp r2
80324a8: 080324c8 cmpgei zero,at,3219
80324ac: 080324d8 cmpnei zero,at,3219
80324b0: 080324ec andhi zero,at,3219
80324b4: 080324ec andhi zero,at,3219
80324b8: 08032528 cmpgeui zero,at,3220
80324bc: 08032528 cmpgeui zero,at,3220
80324c0: 080324ec andhi zero,at,3219
80324c4: 08032528 cmpgeui zero,at,3220
{
case TCPS_SYN_RECEIVED:
so->so_error = ECONNREFUSED;
80324c8: e0bffa17 ldw r2,-24(fp)
80324cc: 00c01bc4 movi r3,111
80324d0: 10c00615 stw r3,24(r2)
goto close;
80324d4: 00000806 br 80324f8 <tcp_input+0x14a8>
case TCPS_ESTABLISHED:
TCP_MIB_INC(tcpEstabResets); /* keep MIB stats */
80324d8: 008201b4 movhi r2,2054
80324dc: 10b87d17 ldw r2,-7692(r2)
80324e0: 10c00044 addi r3,r2,1
80324e4: 008201b4 movhi r2,2054
80324e8: 10f87d15 stw r3,-7692(r2)
case TCPS_FIN_WAIT_1:
case TCPS_FIN_WAIT_2:
case TCPS_CLOSE_WAIT:
so->so_error = ECONNRESET;
80324ec: e0bffa17 ldw r2,-24(fp)
80324f0: 00c01a04 movi r3,104
80324f4: 10c00615 stw r3,24(r2)
close:
tp->t_state = TCPS_CLOSED;
80324f8: e0bffc17 ldw r2,-16(fp)
80324fc: 10000215 stw zero,8(r2)
tcpstat.tcps_drops++;
8032500: 008201b4 movhi r2,2054
8032504: 10b8a717 ldw r2,-7524(r2)
8032508: 10c00044 addi r3,r2,1
803250c: 008201b4 movhi r2,2054
8032510: 10f8a715 stw r3,-7524(r2)
SETTP(tp, tcp_close(tp));
8032514: e13ffc17 ldw r4,-16(fp)
8032518: 80350e80 call 80350e8 <tcp_close>
#ifdef TCP_ZEROCOPY
if (so->rx_upcall)
so->rx_upcall(so, NULL, ECONNRESET);
#endif /* TCP_ZEROCOPY */
GOTO_DROP;
803251c: 00812204 movi r2,1160
8032520: d0a08715 stw r2,-32228(gp)
8032524: 00033506 br 80331fc <tcp_input+0x21ac>
case TCPS_CLOSING:
case TCPS_LAST_ACK:
case TCPS_TIME_WAIT:
SETTP(tp, tcp_close(tp));
8032528: e13ffc17 ldw r4,-16(fp)
803252c: 80350e80 call 80350e8 <tcp_close>
GOTO_DROP;
8032530: 00812384 movi r2,1166
8032534: d0a08715 stw r2,-32228(gp)
8032538: 00033006 br 80331fc <tcp_input+0x21ac>
tcp_trace("rcvd SYN in established state - ignoring SYN.\n");
#endif
GOTO_DROP;
}
#else
if (tiflags & TH_SYN)
803253c: e0bffb17 ldw r2,-20(fp)
8032540: 1080008c andi r2,r2,2
8032544: 10000726 beq r2,zero,8032564 <tcp_input+0x1514>
{
tp = tcp_drop(tp, ECONNRESET);
8032548: 01401a04 movi r5,104
803254c: e13ffc17 ldw r4,-16(fp)
8032550: 803504c0 call 803504c <tcp_drop>
8032554: e0bffc15 stw r2,-16(fp)
GOTO_DROPWITHRESET;
8032558: 00812b04 movi r2,1196
803255c: d0a08715 stw r2,-32228(gp)
8032560: 0002e706 br 8033100 <tcp_input+0x20b0>
#endif /* end of else of DOS_SYN */
/*
* If the ACK bit is off we drop the segment and return.
*/
if ((tiflags & TH_ACK) == 0)
8032564: e0bffb17 ldw r2,-20(fp)
8032568: 1080040c andi r2,r2,16
803256c: 1000031e bne r2,zero,803257c <tcp_input+0x152c>
GOTO_DROP;
8032570: 00812d04 movi r2,1204
8032574: d0a08715 stw r2,-32228(gp)
8032578: 00032006 br 80331fc <tcp_input+0x21ac>
/*
* Ack processing.
*/
switch (tp->t_state)
803257c: e0bffc17 ldw r2,-16(fp)
8032580: 10800217 ldw r2,8(r2)
8032584: 10c000e0 cmpeqi r3,r2,3
8032588: 1800051e bne r3,zero,80325a0 <tcp_input+0x1550>
803258c: 10c000d0 cmplti r3,r2,3
8032590: 1801681e bne r3,zero,8032b34 <tcp_input+0x1ae4>
8032594: 108002c8 cmpgei r2,r2,11
8032598: 1001661e bne r2,zero,8032b34 <tcp_input+0x1ae4>
803259c: 00002c06 br 8032650 <tcp_input+0x1600>
* In SYN_RECEIVED state if the ack ACKs our SYN then enter
* ESTABLISHED state and continue processing, otherwise
* send an RST.
*/
case TCPS_SYN_RECEIVED:
if (SEQ_GT(tp->snd_una, ti->ti_ack) ||
80325a0: e0bffc17 ldw r2,-16(fp)
80325a4: 10c00e17 ldw r3,56(r2)
80325a8: e0bff017 ldw r2,-64(fp)
80325ac: 10800717 ldw r2,28(r2)
80325b0: 1885c83a sub r2,r3,r2
80325b4: 00800616 blt zero,r2,80325d0 <tcp_input+0x1580>
SEQ_GT(ti->ti_ack, tp->snd_max))
80325b8: e0bff017 ldw r2,-64(fp)
80325bc: 10c00717 ldw r3,28(r2)
80325c0: e0bffc17 ldw r2,-16(fp)
80325c4: 10801a17 ldw r2,104(r2)
80325c8: 1885c83a sub r2,r3,r2
if (SEQ_GT(tp->snd_una, ti->ti_ack) ||
80325cc: 0080080e bge zero,r2,80325f0 <tcp_input+0x15a0>
{
TCP_MIB_INC(tcpEstabResets); /* keep MIB stats */
80325d0: 008201b4 movhi r2,2054
80325d4: 10b87d17 ldw r2,-7692(r2)
80325d8: 10c00044 addi r3,r2,1
80325dc: 008201b4 movhi r2,2054
80325e0: 10f87d15 stw r3,-7692(r2)
GOTO_DROPWITHRESET;
80325e4: 00813184 movi r2,1222
80325e8: d0a08715 stw r2,-32228(gp)
80325ec: 0002c406 br 8033100 <tcp_input+0x20b0>
}
tcpstat.tcps_connects++;
80325f0: 008201b4 movhi r2,2054
80325f4: 10b8a617 ldw r2,-7528(r2)
80325f8: 10c00044 addi r3,r2,1
80325fc: 008201b4 movhi r2,2054
8032600: 10f8a615 stw r3,-7528(r2)
tp->t_state = TCPS_ESTABLISHED;
8032604: e0bffc17 ldw r2,-16(fp)
8032608: 00c00104 movi r3,4
803260c: 10c00215 stw r3,8(r2)
soisconnected(so);
8032610: e13ffa17 ldw r4,-24(fp)
8032614: 802f1e80 call 802f1e8 <soisconnected>
tp->t_maxseg = tcp_mss(so);
8032618: e13ffa17 ldw r4,-24(fp)
803261c: 803379c0 call 803379c <tcp_mss>
8032620: 1007883a mov r3,r2
8032624: e0bffc17 ldw r2,-16(fp)
8032628: 10c00a0d sth r3,40(r2)
(void) tcp_reass(tp, (struct tcpiphdr *)0, m);
803262c: e1bfe417 ldw r6,-112(fp)
8032630: 000b883a mov r5,zero
8032634: e13ffc17 ldw r4,-16(fp)
8032638: 8030c600 call 8030c60 <tcp_reass>
tp->snd_wl1 = ti->ti_seq - 1;
803263c: e0bff017 ldw r2,-64(fp)
8032640: 10800617 ldw r2,24(r2)
8032644: 10ffffc4 addi r3,r2,-1
8032648: e0bffc17 ldw r2,-16(fp)
803264c: 10c01115 stw r3,68(r2)
case TCPS_CLOSE_WAIT:
case TCPS_CLOSING:
case TCPS_LAST_ACK:
case TCPS_TIME_WAIT:
if (SEQ_LEQ(ti->ti_ack, tp->snd_una))
8032650: e0bff017 ldw r2,-64(fp)
8032654: 10c00717 ldw r3,28(r2)
8032658: e0bffc17 ldw r2,-16(fp)
803265c: 10800e17 ldw r2,56(r2)
8032660: 1885c83a sub r2,r3,r2
8032664: 00806116 blt zero,r2,80327ec <tcp_input+0x179c>
{
if (ti->ti_len == 0 && rx_win == tp->snd_wnd)
8032668: e0bff017 ldw r2,-64(fp)
803266c: 1080028b ldhu r2,10(r2)
8032670: 10bfffcc andi r2,r2,65535
8032674: 1000581e bne r2,zero,80327d8 <tcp_input+0x1788>
8032678: e0bffc17 ldw r2,-16(fp)
803267c: 10801417 ldw r2,80(r2)
8032680: e0ffed17 ldw r3,-76(fp)
8032684: 1880541e bne r3,r2,80327d8 <tcp_input+0x1788>
{
tcpstat.tcps_rcvdupack++;
8032688: 008201b4 movhi r2,2054
803268c: 10b8cd17 ldw r2,-7372(r2)
8032690: 10c00044 addi r3,r2,1
8032694: 008201b4 movhi r2,2054
8032698: 10f8cd15 stw r3,-7372(r2)
* ack and the exp-to-linear thresh
* set for half the current window
* size (since we know we're losing at
* the current window size).
*/
if (tp->t_timer[TCPT_REXMT] == 0 ||
803269c: e0bffc17 ldw r2,-16(fp)
80326a0: 10800317 ldw r2,12(r2)
80326a4: 10000526 beq r2,zero,80326bc <tcp_input+0x166c>
ti->ti_ack != tp->snd_una)
80326a8: e0bff017 ldw r2,-64(fp)
80326ac: 10c00717 ldw r3,28(r2)
80326b0: e0bffc17 ldw r2,-16(fp)
80326b4: 10800e17 ldw r2,56(r2)
if (tp->t_timer[TCPT_REXMT] == 0 ||
80326b8: 18800326 beq r3,r2,80326c8 <tcp_input+0x1678>
{
tp->t_dupacks = 0;
80326bc: e0bffc17 ldw r2,-16(fp)
80326c0: 10000915 stw zero,36(r2)
if (tp->t_timer[TCPT_REXMT] == 0 ||
80326c4: 00004706 br 80327e4 <tcp_input+0x1794>
}
else if (++tp->t_dupacks == tcprexmtthresh)
80326c8: e0bffc17 ldw r2,-16(fp)
80326cc: 10800917 ldw r2,36(r2)
80326d0: 10c00044 addi r3,r2,1
80326d4: e0bffc17 ldw r2,-16(fp)
80326d8: 10c00915 stw r3,36(r2)
80326dc: e0bffc17 ldw r2,-16(fp)
80326e0: 10c00917 ldw r3,36(r2)
80326e4: d0a01c83 ldbu r2,-32654(gp)
80326e8: 10803fcc andi r2,r2,255
80326ec: 1080201c xori r2,r2,128
80326f0: 10bfe004 addi r2,r2,-128
80326f4: 18803b1e bne r3,r2,80327e4 <tcp_input+0x1794>
{
tcp_seq onxt = tp->snd_nxt;
80326f8: e0bffc17 ldw r2,-16(fp)
80326fc: 10800f17 ldw r2,60(r2)
8032700: e0bfe815 stw r2,-96(fp)
u_short win =
MIN(tp->snd_wnd, tp->snd_cwnd) / 2 /
8032704: e0bffc17 ldw r2,-16(fp)
8032708: 11001417 ldw r4,80(r2)
803270c: e0bffc17 ldw r2,-16(fp)
8032710: 10c01b17 ldw r3,108(r2)
8032714: 2005883a mov r2,r4
8032718: 1880012e bgeu r3,r2,8032720 <tcp_input+0x16d0>
803271c: 1805883a mov r2,r3
8032720: 1006d07a srli r3,r2,1
tp->t_maxseg;
8032724: e0bffc17 ldw r2,-16(fp)
8032728: 10800a0b ldhu r2,40(r2)
803272c: 10bfffcc andi r2,r2,65535
MIN(tp->snd_wnd, tp->snd_cwnd) / 2 /
8032730: 100b883a mov r5,r2
8032734: 1809883a mov r4,r3
8032738: 800cff80 call 800cff8 <__udivsi3>
u_short win =
803273c: e0bff28d sth r2,-54(fp)
if (win < 2)
8032740: e0bff28b ldhu r2,-54(fp)
8032744: 108000a8 cmpgeui r2,r2,2
8032748: 1000021e bne r2,zero,8032754 <tcp_input+0x1704>
win = 2;
803274c: 00800084 movi r2,2
8032750: e0bff28d sth r2,-54(fp)
tp->snd_ssthresh = (u_short)(win * tp->t_maxseg);
8032754: e0bffc17 ldw r2,-16(fp)
8032758: 10800a0b ldhu r2,40(r2)
803275c: e0fff28b ldhu r3,-54(fp)
8032760: 1885383a mul r2,r3,r2
8032764: 10ffffcc andi r3,r2,65535
8032768: e0bffc17 ldw r2,-16(fp)
803276c: 10c01c15 stw r3,112(r2)
tp->t_timer[TCPT_REXMT] = 0;
8032770: e0bffc17 ldw r2,-16(fp)
8032774: 10000315 stw zero,12(r2)
tp->t_rttick = 0;
8032778: e0bffc17 ldw r2,-16(fp)
803277c: 10001e15 stw zero,120(r2)
tp->snd_nxt = ti->ti_ack;
8032780: e0bff017 ldw r2,-64(fp)
8032784: 10c00717 ldw r3,28(r2)
8032788: e0bffc17 ldw r2,-16(fp)
803278c: 10c00f15 stw r3,60(r2)
tp->snd_cwnd = tp->t_maxseg;
8032790: e0bffc17 ldw r2,-16(fp)
8032794: 10800a0b ldhu r2,40(r2)
8032798: 10ffffcc andi r3,r2,65535
803279c: e0bffc17 ldw r2,-16(fp)
80327a0: 10c01b15 stw r3,108(r2)
(void) tcp_output(tp);
80327a4: e13ffc17 ldw r4,-16(fp)
80327a8: 80338940 call 8033894 <tcp_output>
if (SEQ_GT(onxt, tp->snd_nxt))
80327ac: e0bffc17 ldw r2,-16(fp)
80327b0: 10800f17 ldw r2,60(r2)
80327b4: e0ffe817 ldw r3,-96(fp)
80327b8: 1885c83a sub r2,r3,r2
80327bc: 0080030e bge zero,r2,80327cc <tcp_input+0x177c>
tp->snd_nxt = onxt;
80327c0: e0bffc17 ldw r2,-16(fp)
80327c4: e0ffe817 ldw r3,-96(fp)
80327c8: 10c00f15 stw r3,60(r2)
GOTO_DROP;
80327cc: 00814544 movi r2,1301
80327d0: d0a08715 stw r2,-32228(gp)
80327d4: 00028906 br 80331fc <tcp_input+0x21ac>
}
} else
tp->t_dupacks = 0;
80327d8: e0bffc17 ldw r2,-16(fp)
80327dc: 10000915 stw zero,36(r2)
break;
80327e0: 0000d406 br 8032b34 <tcp_input+0x1ae4>
if (tp->t_timer[TCPT_REXMT] == 0 ||
80327e4: 0001883a nop
break;
80327e8: 0000d206 br 8032b34 <tcp_input+0x1ae4>
}
tp->t_dupacks = 0;
80327ec: e0bffc17 ldw r2,-16(fp)
80327f0: 10000915 stw zero,36(r2)
if (SEQ_GT(ti->ti_ack, tp->snd_max))
80327f4: e0bff017 ldw r2,-64(fp)
80327f8: 10c00717 ldw r3,28(r2)
80327fc: e0bffc17 ldw r2,-16(fp)
8032800: 10801a17 ldw r2,104(r2)
8032804: 1885c83a sub r2,r3,r2
8032808: 0080060e bge zero,r2,8032824 <tcp_input+0x17d4>
{
tcpstat.tcps_rcvacktoomuch++;
803280c: 008201b4 movhi r2,2054
8032810: 10b8ce17 ldw r2,-7368(r2)
8032814: 10c00044 addi r3,r2,1
8032818: 008201b4 movhi r2,2054
803281c: 10f8ce15 stw r3,-7368(r2)
goto dropafterack;
8032820: 00022606 br 80330bc <tcp_input+0x206c>
}
acked = (int)(ti->ti_ack - tp->snd_una);
8032824: e0bff017 ldw r2,-64(fp)
8032828: 10c00717 ldw r3,28(r2)
803282c: e0bffc17 ldw r2,-16(fp)
8032830: 10800e17 ldw r2,56(r2)
8032834: 1885c83a sub r2,r3,r2
8032838: e0bfec15 stw r2,-80(fp)
tcpstat.tcps_rcvackpack++;
803283c: 008201b4 movhi r2,2054
8032840: 10b8cf17 ldw r2,-7364(r2)
8032844: 10c00044 addi r3,r2,1
8032848: 008201b4 movhi r2,2054
803284c: 10f8cf15 stw r3,-7364(r2)
tcpstat.tcps_rcvackbyte += acked;
8032850: 008201b4 movhi r2,2054
8032854: 10f8d017 ldw r3,-7360(r2)
8032858: e0bfec17 ldw r2,-80(fp)
803285c: 1887883a add r3,r3,r2
8032860: 008201b4 movhi r2,2054
8032864: 10f8d015 stw r3,-7360(r2)
* number was acked, update smoothed round trip time.
* Since we now have an rtt measurement, cancel the
* timer backoff (cf., Phil Karn's retransmit alg.).
* Recompute the initial retransmit timer.
*/
if((tp->t_rttick) &&
8032868: e0bffc17 ldw r2,-16(fp)
803286c: 10801e17 ldw r2,120(r2)
8032870: 10000826 beq r2,zero,8032894 <tcp_input+0x1844>
#ifdef TCP_TIMESTAMP
((tp->t_flags & TF_TIMESTAMP) == 0) &&
#endif /* TCP_TIMESTAMP */
(SEQ_GT(ti->ti_ack, tp->t_rtseq)))
8032874: e0bff017 ldw r2,-64(fp)
8032878: 10c00717 ldw r3,28(r2)
803287c: e0bffc17 ldw r2,-16(fp)
8032880: 10801f17 ldw r2,124(r2)
8032884: 1885c83a sub r2,r3,r2
if((tp->t_rttick) &&
8032888: 0080020e bge zero,r2,8032894 <tcp_input+0x1844>
tcp_xmit_timer(tp);
803288c: e13ffc17 ldw r4,-16(fp)
8032890: 80335180 call 8033518 <tcp_xmit_timer>
* If all outstanding data is acked, stop retransmit
* timer and remember to restart (more output or persist).
* If there is more data to be acked, restart retransmit
* timer, using current (possibly backed-off) value.
*/
if (ti->ti_ack == tp->snd_max)
8032894: e0bff017 ldw r2,-64(fp)
8032898: 10c00717 ldw r3,28(r2)
803289c: e0bffc17 ldw r2,-16(fp)
80328a0: 10801a17 ldw r2,104(r2)
80328a4: 1880051e bne r3,r2,80328bc <tcp_input+0x186c>
{
tp->t_timer[TCPT_REXMT] = 0;
80328a8: e0bffc17 ldw r2,-16(fp)
80328ac: 10000315 stw zero,12(r2)
needoutput = 1;
80328b0: 00800044 movi r2,1
80328b4: e0bff715 stw r2,-36(fp)
80328b8: 00000706 br 80328d8 <tcp_input+0x1888>
} else if (tp->t_timer[TCPT_PERSIST] == 0)
80328bc: e0bffc17 ldw r2,-16(fp)
80328c0: 10800417 ldw r2,16(r2)
80328c4: 1000041e bne r2,zero,80328d8 <tcp_input+0x1888>
tp->t_timer[TCPT_REXMT] = tp->t_rxtcur;
80328c8: e0bffc17 ldw r2,-16(fp)
80328cc: 10c00817 ldw r3,32(r2)
80328d0: e0bffc17 ldw r2,-16(fp)
80328d4: 10c00315 stw r3,12(r2)
* in flight, open exponentially (maxseg per packet).
* Otherwise open linearly (maxseg per window,
* or maxseg^2 / cwnd per packet).
*/
{
tcp_win cw = tp->snd_cwnd;
80328d8: e0bffc17 ldw r2,-16(fp)
80328dc: 10801b17 ldw r2,108(r2)
80328e0: e0bfe715 stw r2,-100(fp)
u_short incr = tp->t_maxseg;
80328e4: e0bffc17 ldw r2,-16(fp)
80328e8: 10800a0b ldhu r2,40(r2)
80328ec: e0bff20d sth r2,-56(fp)
if (cw > tp->snd_ssthresh)
80328f0: e0bffc17 ldw r2,-16(fp)
80328f4: 10c01c17 ldw r3,112(r2)
80328f8: e0bfe717 ldw r2,-100(fp)
80328fc: 18800a2e bgeu r3,r2,8032928 <tcp_input+0x18d8>
incr = MAX( (incr * incr / cw), (ALIGN_TYPE << 2) );
8032900: e0fff20b ldhu r3,-56(fp)
8032904: e0bff20b ldhu r2,-56(fp)
8032908: 1885383a mul r2,r3,r2
803290c: e17fe717 ldw r5,-100(fp)
8032910: 1009883a mov r4,r2
8032914: 800cff80 call 800cff8 <__udivsi3>
8032918: 10c00428 cmpgeui r3,r2,16
803291c: 1800011e bne r3,zero,8032924 <tcp_input+0x18d4>
8032920: 00800404 movi r2,16
8032924: e0bff20d sth r2,-56(fp)
tp->snd_cwnd = MIN(cw + (u_short)incr, (IP_MAXPACKET));
8032928: e0fff20b ldhu r3,-56(fp)
803292c: e0bfe717 ldw r2,-100(fp)
8032930: 1885883a add r2,r3,r2
8032934: 10d80070 cmpltui r3,r2,24577
8032938: 1800011e bne r3,zero,8032940 <tcp_input+0x18f0>
803293c: 00980004 movi r2,24576
8032940: e0fffc17 ldw r3,-16(fp)
8032944: 18801b15 stw r2,108(r3)
}
if (acked > (int)so->so_snd.sb_cc)
8032948: e0bffa17 ldw r2,-24(fp)
803294c: 10801217 ldw r2,72(r2)
8032950: 1007883a mov r3,r2
8032954: e0bfec17 ldw r2,-80(fp)
8032958: 1880120e bge r3,r2,80329a4 <tcp_input+0x1954>
{
tp->snd_wnd -= (u_short)so->so_snd.sb_cc;
803295c: e0bffc17 ldw r2,-16(fp)
8032960: 10c01417 ldw r3,80(r2)
8032964: e0bffa17 ldw r2,-24(fp)
8032968: 10801217 ldw r2,72(r2)
803296c: 10bfffcc andi r2,r2,65535
8032970: 1887c83a sub r3,r3,r2
8032974: e0bffc17 ldw r2,-16(fp)
8032978: 10c01415 stw r3,80(r2)
sbdrop(&so->so_snd, (int)so->so_snd.sb_cc);
803297c: e0bffa17 ldw r2,-24(fp)
8032980: 10c01204 addi r3,r2,72
8032984: e0bffa17 ldw r2,-24(fp)
8032988: 10801217 ldw r2,72(r2)
803298c: 100b883a mov r5,r2
8032990: 1809883a mov r4,r3
8032994: 80300b00 call 80300b0 <sbdrop>
ourfinisacked = 1;
8032998: 00800044 movi r2,1
803299c: e0bff815 stw r2,-32(fp)
80329a0: 00000d06 br 80329d8 <tcp_input+0x1988>
}
else
{
sbdrop(&so->so_snd, acked);
80329a4: e0bffa17 ldw r2,-24(fp)
80329a8: 10801204 addi r2,r2,72
80329ac: e17fec17 ldw r5,-80(fp)
80329b0: 1009883a mov r4,r2
80329b4: 80300b00 call 80300b0 <sbdrop>
tp->snd_wnd -= (u_short)acked;
80329b8: e0bffc17 ldw r2,-16(fp)
80329bc: 10c01417 ldw r3,80(r2)
80329c0: e0bfec17 ldw r2,-80(fp)
80329c4: 10bfffcc andi r2,r2,65535
80329c8: 1887c83a sub r3,r3,r2
80329cc: e0bffc17 ldw r2,-16(fp)
80329d0: 10c01415 stw r3,80(r2)
ourfinisacked = 0;
80329d4: e03ff815 stw zero,-32(fp)
}
if (so->so_snd.sb_flags & (SB_WAIT | SB_SEL))
80329d8: e0bffa17 ldw r2,-24(fp)
80329dc: 1080190b ldhu r2,100(r2)
80329e0: 10bfffcc andi r2,r2,65535
80329e4: 1080030c andi r2,r2,12
80329e8: 10000526 beq r2,zero,8032a00 <tcp_input+0x19b0>
sowwakeup(so);
80329ec: e0bffa17 ldw r2,-24(fp)
80329f0: 10801204 addi r2,r2,72
80329f4: 100b883a mov r5,r2
80329f8: e13ffa17 ldw r4,-24(fp)
80329fc: 802f94c0 call 802f94c <sbwakeup>
tp->snd_una = ti->ti_ack;
8032a00: e0bff017 ldw r2,-64(fp)
8032a04: 10c00717 ldw r3,28(r2)
8032a08: e0bffc17 ldw r2,-16(fp)
8032a0c: 10c00e15 stw r3,56(r2)
if (SEQ_LT(tp->snd_nxt, tp->snd_una))
8032a10: e0bffc17 ldw r2,-16(fp)
8032a14: 10c00f17 ldw r3,60(r2)
8032a18: e0bffc17 ldw r2,-16(fp)
8032a1c: 10800e17 ldw r2,56(r2)
8032a20: 1885c83a sub r2,r3,r2
8032a24: 1000040e bge r2,zero,8032a38 <tcp_input+0x19e8>
tp->snd_nxt = tp->snd_una;
8032a28: e0bffc17 ldw r2,-16(fp)
8032a2c: 10c00e17 ldw r3,56(r2)
8032a30: e0bffc17 ldw r2,-16(fp)
8032a34: 10c00f15 stw r3,60(r2)
switch (tp->t_state)
8032a38: e0bffc17 ldw r2,-16(fp)
8032a3c: 10800217 ldw r2,8(r2)
8032a40: 10c001e0 cmpeqi r3,r2,7
8032a44: 18001a1e bne r3,zero,8032ab0 <tcp_input+0x1a60>
8032a48: 10c00208 cmpgei r3,r2,8
8032a4c: 1800031e bne r3,zero,8032a5c <tcp_input+0x1a0c>
8032a50: 108001a0 cmpeqi r2,r2,6
8032a54: 1000061e bne r2,zero,8032a70 <tcp_input+0x1a20>
8032a58: 00003606 br 8032b34 <tcp_input+0x1ae4>
8032a5c: 10c00220 cmpeqi r3,r2,8
8032a60: 1800221e bne r3,zero,8032aec <tcp_input+0x1a9c>
8032a64: 108002a0 cmpeqi r2,r2,10
8032a68: 1000271e bne r2,zero,8032b08 <tcp_input+0x1ab8>
8032a6c: 00003106 br 8032b34 <tcp_input+0x1ae4>
* In FIN_WAIT_1 STATE in addition to the processing
* for the ESTABLISHED state if our FIN is now acknowledged
* then enter FIN_WAIT_2.
*/
case TCPS_FIN_WAIT_1:
if (ourfinisacked)
8032a70: e0bff817 ldw r2,-32(fp)
8032a74: 10002a26 beq r2,zero,8032b20 <tcp_input+0x1ad0>
* data, then closing user can proceed.
* Starting the timer is contrary to the
* specification, but if we don't get a FIN
* we'll hang forever.
*/
if (so->so_state & SS_CANTRCVMORE)
8032a78: e0bffa17 ldw r2,-24(fp)
8032a7c: 1080088b ldhu r2,34(r2)
8032a80: 10bfffcc andi r2,r2,65535
8032a84: 1080080c andi r2,r2,32
8032a88: 10000526 beq r2,zero,8032aa0 <tcp_input+0x1a50>
{
soisdisconnected(so);
8032a8c: e13ffa17 ldw r4,-24(fp)
8032a90: 802f3840 call 802f384 <soisdisconnected>
tp->t_timer[TCPT_2MSL] = tcp_maxidle;
8032a94: d0e08917 ldw r3,-32220(gp)
8032a98: e0bffc17 ldw r2,-16(fp)
8032a9c: 10c00615 stw r3,24(r2)
}
tp->t_state = TCPS_FIN_WAIT_2;
8032aa0: e0bffc17 ldw r2,-16(fp)
8032aa4: 00c00244 movi r3,9
8032aa8: 10c00215 stw r3,8(r2)
}
break;
8032aac: 00001c06 br 8032b20 <tcp_input+0x1ad0>
* the ESTABLISHED state if the ACK acknowledges our FIN
* then enter the TIME-WAIT state, otherwise ignore
* the segment.
*/
case TCPS_CLOSING:
if (ourfinisacked)
8032ab0: e0bff817 ldw r2,-32(fp)
8032ab4: 10001c26 beq r2,zero,8032b28 <tcp_input+0x1ad8>
{
tp->t_state = TCPS_TIME_WAIT;
8032ab8: e0bffc17 ldw r2,-16(fp)
8032abc: 00c00284 movi r3,10
8032ac0: 10c00215 stw r3,8(r2)
tcp_canceltimers(tp);
8032ac4: e13ffc17 ldw r4,-16(fp)
8032ac8: 80355640 call 8035564 <tcp_canceltimers>
tp->t_timer[TCPT_2MSL] = 2 * TCPTV_MSL;
8032acc: d0a01b17 ldw r2,-32660(gp)
8032ad0: 1085883a add r2,r2,r2
8032ad4: 1007883a mov r3,r2
8032ad8: e0bffc17 ldw r2,-16(fp)
8032adc: 10c00615 stw r3,24(r2)
soisdisconnected(so);
8032ae0: e13ffa17 ldw r4,-24(fp)
8032ae4: 802f3840 call 802f384 <soisdisconnected>
}
break;
8032ae8: 00000f06 br 8032b28 <tcp_input+0x1ad8>
* and/or to be acked, as well as for the ack of our FIN.
* If our FIN is now acknowledged, delete the TCB,
* enter the closed state and return.
*/
case TCPS_LAST_ACK:
if (ourfinisacked)
8032aec: e0bff817 ldw r2,-32(fp)
8032af0: 10000f26 beq r2,zero,8032b30 <tcp_input+0x1ae0>
{
SETTP(tp, tcp_close(tp));
8032af4: e13ffc17 ldw r4,-16(fp)
8032af8: 80350e80 call 80350e8 <tcp_close>
GOTO_DROP;
8032afc: 00816644 movi r2,1433
8032b00: d0a08715 stw r2,-32228(gp)
8032b04: 0001bd06 br 80331fc <tcp_input+0x21ac>
* In TIME_WAIT state the only thing that should arrive
* is a retransmission of the remote FIN. Acknowledge
* it and restart the finack timer.
*/
case TCPS_TIME_WAIT:
tp->t_timer[TCPT_2MSL] = 2 * TCPTV_MSL;
8032b08: d0a01b17 ldw r2,-32660(gp)
8032b0c: 1085883a add r2,r2,r2
8032b10: 1007883a mov r3,r2
8032b14: e0bffc17 ldw r2,-16(fp)
8032b18: 10c00615 stw r3,24(r2)
goto dropafterack;
8032b1c: 00016706 br 80330bc <tcp_input+0x206c>
break;
8032b20: 0001883a nop
8032b24: 00000306 br 8032b34 <tcp_input+0x1ae4>
break;
8032b28: 0001883a nop
8032b2c: 00000106 br 8032b34 <tcp_input+0x1ae4>
break;
8032b30: 0001883a nop
step6:
/*
* Update window information.
* Don't look at window if no ACK: TAC's send garbage on first SYN.
*/
if ((tiflags & TH_ACK) &&
8032b34: e0bffb17 ldw r2,-20(fp)
8032b38: 1080040c andi r2,r2,16
8032b3c: 10004226 beq r2,zero,8032c48 <tcp_input+0x1bf8>
/*
* Altera Niche Stack Nios port modification:
* Add parenthesis to remove implicit order of operation
* & possible build warnings.
*/
(SEQ_LT(tp->snd_wl1, ti->ti_seq) || (tp->snd_wl1 == ti->ti_seq &&
8032b40: e0bffc17 ldw r2,-16(fp)
8032b44: 10c01117 ldw r3,68(r2)
8032b48: e0bff017 ldw r2,-64(fp)
8032b4c: 10800617 ldw r2,24(r2)
8032b50: 1885c83a sub r2,r3,r2
if ((tiflags & TH_ACK) &&
8032b54: 10001416 blt r2,zero,8032ba8 <tcp_input+0x1b58>
(SEQ_LT(tp->snd_wl1, ti->ti_seq) || (tp->snd_wl1 == ti->ti_seq &&
8032b58: e0bffc17 ldw r2,-16(fp)
8032b5c: 10c01117 ldw r3,68(r2)
8032b60: e0bff017 ldw r2,-64(fp)
8032b64: 10800617 ldw r2,24(r2)
8032b68: 1880371e bne r3,r2,8032c48 <tcp_input+0x1bf8>
(SEQ_LT(tp->snd_wl2, ti->ti_ack) ||
8032b6c: e0bffc17 ldw r2,-16(fp)
8032b70: 10c01217 ldw r3,72(r2)
8032b74: e0bff017 ldw r2,-64(fp)
8032b78: 10800717 ldw r2,28(r2)
8032b7c: 1885c83a sub r2,r3,r2
(SEQ_LT(tp->snd_wl1, ti->ti_seq) || (tp->snd_wl1 == ti->ti_seq &&
8032b80: 10000916 blt r2,zero,8032ba8 <tcp_input+0x1b58>
((tp->snd_wl2 == ti->ti_ack) && (rx_win > tp->snd_wnd))))))
8032b84: e0bffc17 ldw r2,-16(fp)
8032b88: 10c01217 ldw r3,72(r2)
8032b8c: e0bff017 ldw r2,-64(fp)
8032b90: 10800717 ldw r2,28(r2)
(SEQ_LT(tp->snd_wl2, ti->ti_ack) ||
8032b94: 18802c1e bne r3,r2,8032c48 <tcp_input+0x1bf8>
((tp->snd_wl2 == ti->ti_ack) && (rx_win > tp->snd_wnd))))))
8032b98: e0bffc17 ldw r2,-16(fp)
8032b9c: 10c01417 ldw r3,80(r2)
8032ba0: e0bfed17 ldw r2,-76(fp)
8032ba4: 1880282e bgeu r3,r2,8032c48 <tcp_input+0x1bf8>
{
/* keep track of pure window updates */
if ((ti->ti_len == 0) &&
8032ba8: e0bff017 ldw r2,-64(fp)
8032bac: 1080028b ldhu r2,10(r2)
8032bb0: 10bfffcc andi r2,r2,65535
8032bb4: 10000e1e bne r2,zero,8032bf0 <tcp_input+0x1ba0>
(tp->snd_wl2 == ti->ti_ack) &&
8032bb8: e0bffc17 ldw r2,-16(fp)
8032bbc: 10c01217 ldw r3,72(r2)
8032bc0: e0bff017 ldw r2,-64(fp)
8032bc4: 10800717 ldw r2,28(r2)
if ((ti->ti_len == 0) &&
8032bc8: 1880091e bne r3,r2,8032bf0 <tcp_input+0x1ba0>
(rx_win > tp->snd_wnd))
8032bcc: e0bffc17 ldw r2,-16(fp)
8032bd0: 10c01417 ldw r3,80(r2)
(tp->snd_wl2 == ti->ti_ack) &&
8032bd4: e0bfed17 ldw r2,-76(fp)
8032bd8: 1880052e bgeu r3,r2,8032bf0 <tcp_input+0x1ba0>
{
tcpstat.tcps_rcvwinupd++;
8032bdc: 008201b4 movhi r2,2054
8032be0: 10b8d117 ldw r2,-7356(r2)
8032be4: 10c00044 addi r3,r2,1
8032be8: 008201b4 movhi r2,2054
8032bec: 10f8d115 stw r3,-7356(r2)
}
tp->snd_wnd = rx_win;
8032bf0: e0bffc17 ldw r2,-16(fp)
8032bf4: e0ffed17 ldw r3,-76(fp)
8032bf8: 10c01415 stw r3,80(r2)
tp->snd_wl1 = ti->ti_seq;
8032bfc: e0bff017 ldw r2,-64(fp)
8032c00: 10c00617 ldw r3,24(r2)
8032c04: e0bffc17 ldw r2,-16(fp)
8032c08: 10c01115 stw r3,68(r2)
tp->snd_wl2 = ti->ti_ack;
8032c0c: e0bff017 ldw r2,-64(fp)
8032c10: 10c00717 ldw r3,28(r2)
8032c14: e0bffc17 ldw r2,-16(fp)
8032c18: 10c01215 stw r3,72(r2)
if (tp->snd_wnd > tp->max_sndwnd)
8032c1c: e0bffc17 ldw r2,-16(fp)
8032c20: 10801417 ldw r2,80(r2)
8032c24: e0fffc17 ldw r3,-16(fp)
8032c28: 18c02317 ldw r3,140(r3)
8032c2c: 1880042e bgeu r3,r2,8032c40 <tcp_input+0x1bf0>
tp->max_sndwnd = tp->snd_wnd;
8032c30: e0bffc17 ldw r2,-16(fp)
8032c34: 10c01417 ldw r3,80(r2)
8032c38: e0bffc17 ldw r2,-16(fp)
8032c3c: 10c02315 stw r3,140(r2)
needoutput = 1;
8032c40: 00800044 movi r2,1
8032c44: e0bff715 stw r2,-36(fp)
}
/*
* Process segments with URG.
*/
if ((tiflags & TH_URG) && ti->ti_urp &&
8032c48: e0bffb17 ldw r2,-20(fp)
8032c4c: 1080080c andi r2,r2,32
8032c50: 10005626 beq r2,zero,8032dac <tcp_input+0x1d5c>
8032c54: e0bff017 ldw r2,-64(fp)
8032c58: 1080098b ldhu r2,38(r2)
8032c5c: 10bfffcc andi r2,r2,65535
8032c60: 10005226 beq r2,zero,8032dac <tcp_input+0x1d5c>
TCPS_HAVERCVDFIN(tp->t_state) == 0)
8032c64: e0bffc17 ldw r2,-16(fp)
8032c68: 10800217 ldw r2,8(r2)
if ((tiflags & TH_URG) && ti->ti_urp &&
8032c6c: 10800288 cmpgei r2,r2,10
8032c70: 10004e1e bne r2,zero,8032dac <tcp_input+0x1d5c>
* This is a kludge, but if we receive and accept
* random urgent pointers, we'll crash in
* soreceive. It's hard to imagine someone
* actually wanting to send this much urgent data.
*/
if (ti->ti_urp + so->so_rcv.sb_cc > SB_MAX)
8032c74: e0bff017 ldw r2,-64(fp)
8032c78: 1080098b ldhu r2,38(r2)
8032c7c: 10ffffcc andi r3,r2,65535
8032c80: e0bffa17 ldw r2,-24(fp)
8032c84: 10800a17 ldw r2,40(r2)
8032c88: 1885883a add r2,r3,r2
8032c8c: 10900070 cmpltui r2,r2,16385
8032c90: 1000071e bne r2,zero,8032cb0 <tcp_input+0x1c60>
{
ti->ti_urp = 0; /* XXX */
8032c94: e0bff017 ldw r2,-64(fp)
8032c98: 1000098d sth zero,38(r2)
tiflags &= ~TH_URG; /* XXX */
8032c9c: e0fffb17 ldw r3,-20(fp)
8032ca0: 00bff7c4 movi r2,-33
8032ca4: 1884703a and r2,r3,r2
8032ca8: e0bffb15 stw r2,-20(fp)
goto dodata; /* XXX */
8032cac: 00004d06 br 8032de4 <tcp_input+0x1d94>
* of urgent data. We continue, however,
* to consider it to indicate the first octet
* of data past the urgent section
* as the original spec states.
*/
if (SEQ_GT(ti->ti_seq+ti->ti_urp, tp->rcv_up))
8032cb0: e0bff017 ldw r2,-64(fp)
8032cb4: 10c00617 ldw r3,24(r2)
8032cb8: e0bff017 ldw r2,-64(fp)
8032cbc: 1080098b ldhu r2,38(r2)
8032cc0: 10bfffcc andi r2,r2,65535
8032cc4: 1887883a add r3,r3,r2
8032cc8: e0bffc17 ldw r2,-16(fp)
8032ccc: 10801717 ldw r2,92(r2)
8032cd0: 1885c83a sub r2,r3,r2
8032cd4: 0080250e bge zero,r2,8032d6c <tcp_input+0x1d1c>
{
tp->rcv_up = ti->ti_seq + ti->ti_urp;
8032cd8: e0bff017 ldw r2,-64(fp)
8032cdc: 10c00617 ldw r3,24(r2)
8032ce0: e0bff017 ldw r2,-64(fp)
8032ce4: 1080098b ldhu r2,38(r2)
8032ce8: 10bfffcc andi r2,r2,65535
8032cec: 1887883a add r3,r3,r2
8032cf0: e0bffc17 ldw r2,-16(fp)
8032cf4: 10c01715 stw r3,92(r2)
so->so_oobmark = so->so_rcv.sb_cc +
8032cf8: e0bffa17 ldw r2,-24(fp)
8032cfc: 10c00a17 ldw r3,40(r2)
(tp->rcv_up - tp->rcv_nxt) - 1;
8032d00: e0bffc17 ldw r2,-16(fp)
8032d04: 11001717 ldw r4,92(r2)
8032d08: e0bffc17 ldw r2,-16(fp)
8032d0c: 10801617 ldw r2,88(r2)
8032d10: 2085c83a sub r2,r4,r2
so->so_oobmark = so->so_rcv.sb_cc +
8032d14: 1885883a add r2,r3,r2
(tp->rcv_up - tp->rcv_nxt) - 1;
8032d18: 10ffffc4 addi r3,r2,-1
so->so_oobmark = so->so_rcv.sb_cc +
8032d1c: e0bffa17 ldw r2,-24(fp)
8032d20: 10c01a15 stw r3,104(r2)
if (so->so_oobmark == 0)
8032d24: e0bffa17 ldw r2,-24(fp)
8032d28: 10801a17 ldw r2,104(r2)
8032d2c: 1000061e bne r2,zero,8032d48 <tcp_input+0x1cf8>
so->so_state |= SS_RCVATMARK;
8032d30: e0bffa17 ldw r2,-24(fp)
8032d34: 1080088b ldhu r2,34(r2)
8032d38: 10801014 ori r2,r2,64
8032d3c: 1007883a mov r3,r2
8032d40: e0bffa17 ldw r2,-24(fp)
8032d44: 10c0088d sth r3,34(r2)
sohasoutofband(so);
8032d48: e13ffa17 ldw r4,-24(fp)
8032d4c: 802f12c0 call 802f12c <sohasoutofband>
tp->t_oobflags &= ~(TCPOOB_HAVEDATA | TCPOOB_HADDATA);
8032d50: e0bffc17 ldw r2,-16(fp)
8032d54: 10c02403 ldbu r3,144(r2)
8032d58: 00bfff04 movi r2,-4
8032d5c: 1884703a and r2,r3,r2
8032d60: 1007883a mov r3,r2
8032d64: e0bffc17 ldw r2,-16(fp)
8032d68: 10c02405 stb r3,144(r2)
* Remove out of band data so doesn't get presented to user.
* This can happen independent of advancing the URG pointer,
* but if two URG's are pending at once, some out-of-band
* data may creep in... ick.
*/
if ( (ti->ti_urp <= ti->ti_len)
8032d6c: e0bff017 ldw r2,-64(fp)
8032d70: 1100098b ldhu r4,38(r2)
8032d74: e0bff017 ldw r2,-64(fp)
8032d78: 10c0028b ldhu r3,10(r2)
8032d7c: 20bfffcc andi r2,r4,65535
8032d80: 18ffffcc andi r3,r3,65535
8032d84: 18801436 bltu r3,r2,8032dd8 <tcp_input+0x1d88>
#ifdef SO_OOBINLINE
&& (so->so_options & SO_OOBINLINE) == 0
8032d88: e0bffa17 ldw r2,-24(fp)
8032d8c: 10800417 ldw r2,16(r2)
8032d90: 1080400c andi r2,r2,256
8032d94: 1000101e bne r2,zero,8032dd8 <tcp_input+0x1d88>
#endif
)
{
tcp_pulloutofband(so, ti, m);
8032d98: e1bfe417 ldw r6,-112(fp)
8032d9c: e17ff017 ldw r5,-64(fp)
8032da0: e13ffa17 ldw r4,-24(fp)
8032da4: 80333ec0 call 80333ec <tcp_pulloutofband>
if ( (ti->ti_urp <= ti->ti_len)
8032da8: 00000b06 br 8032dd8 <tcp_input+0x1d88>
/*
* If no out of band data is expected,
* pull receive urgent pointer along
* with the receive window.
*/
if (SEQ_GT(tp->rcv_nxt, tp->rcv_up))
8032dac: e0bffc17 ldw r2,-16(fp)
8032db0: 10c01617 ldw r3,88(r2)
8032db4: e0bffc17 ldw r2,-16(fp)
8032db8: 10801717 ldw r2,92(r2)
8032dbc: 1885c83a sub r2,r3,r2
8032dc0: 0080070e bge zero,r2,8032de0 <tcp_input+0x1d90>
tp->rcv_up = tp->rcv_nxt;
8032dc4: e0bffc17 ldw r2,-16(fp)
8032dc8: 10c01617 ldw r3,88(r2)
8032dcc: e0bffc17 ldw r2,-16(fp)
8032dd0: 10c01715 stw r3,92(r2)
8032dd4: 00000306 br 8032de4 <tcp_input+0x1d94>
if ( (ti->ti_urp <= ti->ti_len)
8032dd8: 0001883a nop
8032ddc: 00000106 br 8032de4 <tcp_input+0x1d94>
dodata: /* XXX */
8032de0: 0001883a nop
* This process logically involves adjusting tp->rcv_wnd as data
* is presented to the user (this happens in tcp_usrreq.c,
* case PRU_RCVD). If a FIN has already been received on this
* connection then we just ignore the text.
*/
if ((ti->ti_len || (tiflags&TH_FIN)) &&
8032de4: e0bff017 ldw r2,-64(fp)
8032de8: 1080028b ldhu r2,10(r2)
8032dec: 10bfffcc andi r2,r2,65535
8032df0: 1000031e bne r2,zero,8032e00 <tcp_input+0x1db0>
8032df4: e0bffb17 ldw r2,-20(fp)
8032df8: 1080004c andi r2,r2,1
8032dfc: 10005a26 beq r2,zero,8032f68 <tcp_input+0x1f18>
TCPS_HAVERCVDFIN(tp->t_state) == 0)
8032e00: e0bffc17 ldw r2,-16(fp)
8032e04: 10800217 ldw r2,8(r2)
if ((ti->ti_len || (tiflags&TH_FIN)) &&
8032e08: 10800288 cmpgei r2,r2,10
8032e0c: 1000561e bne r2,zero,8032f68 <tcp_input+0x1f18>
{
/* Do the common segment reassembly case inline */
if((ti->ti_seq == tp->rcv_nxt) &&
8032e10: e0bff017 ldw r2,-64(fp)
8032e14: 10c00617 ldw r3,24(r2)
8032e18: e0bffc17 ldw r2,-16(fp)
8032e1c: 10801617 ldw r2,88(r2)
8032e20: 1880331e bne r3,r2,8032ef0 <tcp_input+0x1ea0>
(tp->seg_next == (struct tcpiphdr *)(tp) ) &&
8032e24: e0bffc17 ldw r2,-16(fp)
8032e28: 10800017 ldw r2,0(r2)
if((ti->ti_seq == tp->rcv_nxt) &&
8032e2c: e0fffc17 ldw r3,-16(fp)
8032e30: 18802f1e bne r3,r2,8032ef0 <tcp_input+0x1ea0>
(tp->t_state == TCPS_ESTABLISHED))
8032e34: e0bffc17 ldw r2,-16(fp)
8032e38: 10800217 ldw r2,8(r2)
(tp->seg_next == (struct tcpiphdr *)(tp) ) &&
8032e3c: 10800118 cmpnei r2,r2,4
8032e40: 10002b1e bne r2,zero,8032ef0 <tcp_input+0x1ea0>
else
{
tp->t_flags |= TF_ACKNOW;
}
#else /* not DO_DELAY_ACKS */
tp->t_flags |= TF_ACKNOW;
8032e44: e0bffc17 ldw r2,-16(fp)
8032e48: 10800b0b ldhu r2,44(r2)
8032e4c: 10800054 ori r2,r2,1
8032e50: 1007883a mov r3,r2
8032e54: e0bffc17 ldw r2,-16(fp)
8032e58: 10c00b0d sth r3,44(r2)
#endif /* DO_DELAY_ACKS */
tp->rcv_nxt += ti->ti_len;
8032e5c: e0bffc17 ldw r2,-16(fp)
8032e60: 10c01617 ldw r3,88(r2)
8032e64: e0bff017 ldw r2,-64(fp)
8032e68: 1080028b ldhu r2,10(r2)
8032e6c: 10bfffcc andi r2,r2,65535
8032e70: 1887883a add r3,r3,r2
8032e74: e0bffc17 ldw r2,-16(fp)
8032e78: 10c01615 stw r3,88(r2)
tiflags = ti->ti_flags & TH_FIN;
8032e7c: e0bff017 ldw r2,-64(fp)
8032e80: 10800843 ldbu r2,33(r2)
8032e84: 10803fcc andi r2,r2,255
8032e88: 1080004c andi r2,r2,1
8032e8c: e0bffb15 stw r2,-20(fp)
tcpstat.tcps_rcvpack++;
8032e90: 008201b4 movhi r2,2054
8032e94: 10b8be17 ldw r2,-7432(r2)
8032e98: 10c00044 addi r3,r2,1
8032e9c: 008201b4 movhi r2,2054
8032ea0: 10f8be15 stw r3,-7432(r2)
tcpstat.tcps_rcvbyte += ti->ti_len;
8032ea4: 008201b4 movhi r2,2054
8032ea8: 10f8bf17 ldw r3,-7428(r2)
8032eac: e0bff017 ldw r2,-64(fp)
8032eb0: 1080028b ldhu r2,10(r2)
8032eb4: 10bfffcc andi r2,r2,65535
8032eb8: 1887883a add r3,r3,r2
8032ebc: 008201b4 movhi r2,2054
8032ec0: 10f8bf15 stw r3,-7428(r2)
sbappend(&so->so_rcv, (m));
8032ec4: e0bffa17 ldw r2,-24(fp)
8032ec8: 10800a04 addi r2,r2,40
8032ecc: e17fe417 ldw r5,-112(fp)
8032ed0: 1009883a mov r4,r2
8032ed4: 802fafc0 call 802fafc <sbappend>
sorwakeup(so);
8032ed8: e0bffa17 ldw r2,-24(fp)
8032edc: 10800a04 addi r2,r2,40
8032ee0: 100b883a mov r5,r2
8032ee4: e13ffa17 ldw r4,-24(fp)
8032ee8: 802f94c0 call 802f94c <sbwakeup>
8032eec: 00000b06 br 8032f1c <tcp_input+0x1ecc>
#endif /* TCP_SACK */
}
else /* received out of sequence segment */
{
/* Drop it in the reassmbly queue */
tiflags = tcp_reass(tp, ti, m);
8032ef0: e1bfe417 ldw r6,-112(fp)
8032ef4: e17ff017 ldw r5,-64(fp)
8032ef8: e13ffc17 ldw r4,-16(fp)
8032efc: 8030c600 call 8030c60 <tcp_reass>
8032f00: e0bffb15 stw r2,-20(fp)
tp->t_flags |= TF_ACKNOW;
8032f04: e0bffc17 ldw r2,-16(fp)
8032f08: 10800b0b ldhu r2,44(r2)
8032f0c: 10800054 ori r2,r2,1
8032f10: 1007883a mov r3,r2
8032f14: e0bffc17 ldw r2,-16(fp)
8032f18: 10c00b0d sth r3,44(r2)
/*
* Note the amount of data that peer has sent into
* our window, in order to estimate the sender's
* buffer size.
*/
len = (int)(so->so_rcv.sb_hiwat - (tp->rcv_adv - tp->rcv_nxt));
8032f1c: e0bffa17 ldw r2,-24(fp)
8032f20: 10c00b17 ldw r3,44(r2)
8032f24: e0bffc17 ldw r2,-16(fp)
8032f28: 11001617 ldw r4,88(r2)
8032f2c: e0bffc17 ldw r2,-16(fp)
8032f30: 10801917 ldw r2,100(r2)
8032f34: 2085c83a sub r2,r4,r2
8032f38: 1885883a add r2,r3,r2
8032f3c: e0bfe615 stw r2,-104(fp)
if (len > (int)tp->max_rcvd)
8032f40: e0bffc17 ldw r2,-16(fp)
8032f44: 10802217 ldw r2,136(r2)
8032f48: 1007883a mov r3,r2
8032f4c: e0bfe617 ldw r2,-104(fp)
8032f50: 18800b0e bge r3,r2,8032f80 <tcp_input+0x1f30>
tp->max_rcvd = (u_short)len;
8032f54: e0bfe617 ldw r2,-104(fp)
8032f58: 10ffffcc andi r3,r2,65535
8032f5c: e0bffc17 ldw r2,-16(fp)
8032f60: 10c02215 stw r3,136(r2)
if (len > (int)tp->max_rcvd)
8032f64: 00000606 br 8032f80 <tcp_input+0x1f30>
}
#endif /* TCP_ZEROCOPY */
}
else
{
m_freem(m);
8032f68: e13fe417 ldw r4,-112(fp)
8032f6c: 8029cfc0 call 8029cfc <m_freem>
tiflags &= ~TH_FIN;
8032f70: e0fffb17 ldw r3,-20(fp)
8032f74: 00bfff84 movi r2,-2
8032f78: 1884703a and r2,r3,r2
8032f7c: e0bffb15 stw r2,-20(fp)
/*
* If FIN is received ACK the FIN and let the user know
* that the connection is closing.
*/
if (tiflags & TH_FIN)
8032f80: e0bffb17 ldw r2,-20(fp)
8032f84: 1080004c andi r2,r2,1
8032f88: 10003e26 beq r2,zero,8033084 <tcp_input+0x2034>
{
if (TCPS_HAVERCVDFIN(tp->t_state) == 0)
8032f8c: e0bffc17 ldw r2,-16(fp)
8032f90: 10800217 ldw r2,8(r2)
8032f94: 10800288 cmpgei r2,r2,10
8032f98: 10000d1e bne r2,zero,8032fd0 <tcp_input+0x1f80>
{
socantrcvmore(so);
8032f9c: e13ffa17 ldw r4,-24(fp)
8032fa0: 802f84c0 call 802f84c <socantrcvmore>
tp->t_flags |= TF_ACKNOW;
8032fa4: e0bffc17 ldw r2,-16(fp)
8032fa8: 10800b0b ldhu r2,44(r2)
8032fac: 10800054 ori r2,r2,1
8032fb0: 1007883a mov r3,r2
8032fb4: e0bffc17 ldw r2,-16(fp)
8032fb8: 10c00b0d sth r3,44(r2)
tp->rcv_nxt++;
8032fbc: e0bffc17 ldw r2,-16(fp)
8032fc0: 10801617 ldw r2,88(r2)
8032fc4: 10c00044 addi r3,r2,1
8032fc8: e0bffc17 ldw r2,-16(fp)
8032fcc: 10c01615 stw r3,88(r2)
}
switch (tp->t_state)
8032fd0: e0bffc17 ldw r2,-16(fp)
8032fd4: 10800217 ldw r2,8(r2)
8032fd8: 10bfff44 addi r2,r2,-3
8032fdc: 10c00228 cmpgeui r3,r2,8
8032fe0: 1800291e bne r3,zero,8033088 <tcp_input+0x2038>
8032fe4: 100690ba slli r3,r2,2
8032fe8: 008200f4 movhi r2,2051
8032fec: 1885883a add r2,r3,r2
8032ff0: 108bfe17 ldw r2,12280(r2)
8032ff4: 1000683a jmp r2
8032ff8: 08033018 cmpnei zero,at,3264
8032ffc: 08033018 cmpnei zero,at,3264
8033000: 08033088 cmpgei zero,at,3266
8033004: 08033028 cmpgeui zero,at,3264
8033008: 08033088 cmpgei zero,at,3266
803300c: 08033088 cmpgei zero,at,3266
8033010: 08033038 rdprs zero,at,3264
8033014: 0803306c andhi zero,at,3265
* In SYN_RECEIVED and ESTABLISHED STATES
* enter the CLOSE_WAIT state.
*/
case TCPS_SYN_RECEIVED:
case TCPS_ESTABLISHED:
tp->t_state = TCPS_CLOSE_WAIT;
8033018: e0bffc17 ldw r2,-16(fp)
803301c: 00c00144 movi r3,5
8033020: 10c00215 stw r3,8(r2)
break;
8033024: 00001806 br 8033088 <tcp_input+0x2038>
/*
* If still in FIN_WAIT_1 STATE FIN has not been acked so
* enter the CLOSING state.
*/
case TCPS_FIN_WAIT_1:
tp->t_state = TCPS_CLOSING;
8033028: e0bffc17 ldw r2,-16(fp)
803302c: 00c001c4 movi r3,7
8033030: 10c00215 stw r3,8(r2)
break;
8033034: 00001406 br 8033088 <tcp_input+0x2038>
* In FIN_WAIT_2 state enter the TIME_WAIT state,
* starting the time-wait timer, turning off the other
* standard timers.
*/
case TCPS_FIN_WAIT_2:
tp->t_state = TCPS_TIME_WAIT;
8033038: e0bffc17 ldw r2,-16(fp)
803303c: 00c00284 movi r3,10
8033040: 10c00215 stw r3,8(r2)
tcp_canceltimers(tp);
8033044: e13ffc17 ldw r4,-16(fp)
8033048: 80355640 call 8035564 <tcp_canceltimers>
tp->t_timer[TCPT_2MSL] = 2 * TCPTV_MSL;
803304c: d0a01b17 ldw r2,-32660(gp)
8033050: 1085883a add r2,r2,r2
8033054: 1007883a mov r3,r2
8033058: e0bffc17 ldw r2,-16(fp)
803305c: 10c00615 stw r3,24(r2)
soisdisconnected(so);
8033060: e13ffa17 ldw r4,-24(fp)
8033064: 802f3840 call 802f384 <soisdisconnected>
break;
8033068: 00000706 br 8033088 <tcp_input+0x2038>
/*
* In TIME_WAIT state restart the 2 MSL time_wait timer.
*/
case TCPS_TIME_WAIT:
tp->t_timer[TCPT_2MSL] = 2 * TCPTV_MSL;
803306c: d0a01b17 ldw r2,-32660(gp)
8033070: 1085883a add r2,r2,r2
8033074: 1007883a mov r3,r2
8033078: e0bffc17 ldw r2,-16(fp)
803307c: 10c00615 stw r3,24(r2)
break;
8033080: 00000106 br 8033088 <tcp_input+0x2038>
}
}
8033084: 0001883a nop
ostate, tp, &tcp_saveti);
#endif
/*
* Return any desired output.
*/
if (needoutput || (tp->t_flags & TF_ACKNOW))
8033088: e0bff717 ldw r2,-36(fp)
803308c: 1000051e bne r2,zero,80330a4 <tcp_input+0x2054>
8033090: e0bffc17 ldw r2,-16(fp)
8033094: 10800b0b ldhu r2,44(r2)
8033098: 10bfffcc andi r2,r2,65535
803309c: 1080004c andi r2,r2,1
80330a0: 10006626 beq r2,zero,803323c <tcp_input+0x21ec>
(void) tcp_output(tp);
80330a4: e13ffc17 ldw r4,-16(fp)
80330a8: 80338940 call 8033894 <tcp_output>
return;
80330ac: 00006306 br 803323c <tcp_input+0x21ec>
goto dropafterack;
80330b0: 0001883a nop
80330b4: 00000106 br 80330bc <tcp_input+0x206c>
goto dropafterack;
80330b8: 0001883a nop
dropafterack:
/*
* Generate an ACK dropping incoming segment if it occupies
* sequence space, where the ACK reflects our state.
*/
if (tiflags & TH_RST)
80330bc: e0bffb17 ldw r2,-20(fp)
80330c0: 1080010c andi r2,r2,4
80330c4: 10000326 beq r2,zero,80330d4 <tcp_input+0x2084>
GOTO_DROP;
80330c8: 0081a904 movi r2,1700
80330cc: d0a08715 stw r2,-32228(gp)
80330d0: 00004a06 br 80331fc <tcp_input+0x21ac>
m_freem (m);
80330d4: e13fe417 ldw r4,-112(fp)
80330d8: 8029cfc0 call 8029cfc <m_freem>
tp->t_flags |= TF_ACKNOW;
80330dc: e0bffc17 ldw r2,-16(fp)
80330e0: 10800b0b ldhu r2,44(r2)
80330e4: 10800054 ori r2,r2,1
80330e8: 1007883a mov r3,r2
80330ec: e0bffc17 ldw r2,-16(fp)
80330f0: 10c00b0d sth r3,44(r2)
(void) tcp_output (tp);
80330f4: e13ffc17 ldw r4,-16(fp)
80330f8: 80338940 call 8033894 <tcp_output>
return;
80330fc: 00005406 br 8033250 <tcp_input+0x2200>
dropwithreset:
TCP_MIB_INC(tcpInErrs); /* keep MIB stats */
8033100: 008201b4 movhi r2,2054
8033104: 10b88317 ldw r2,-7668(r2)
8033108: 10c00044 addi r3,r2,1
803310c: 008201b4 movhi r2,2054
8033110: 10f88315 stw r3,-7668(r2)
if (om)
8033114: e0bffd17 ldw r2,-12(fp)
8033118: 10000326 beq r2,zero,8033128 <tcp_input+0x20d8>
{
(void) m_free(om);
803311c: e13ffd17 ldw r4,-12(fp)
8033120: 8029bf80 call 8029bf8 <m_free>
om = 0;
8033124: e03ffd15 stw zero,-12(fp)
}
/* Don't reset resets */
if (tiflags & TH_RST)
8033128: e0bffb17 ldw r2,-20(fp)
803312c: 1080010c andi r2,r2,4
8033130: 10000326 beq r2,zero,8033140 <tcp_input+0x20f0>
GOTO_DROP;
8033134: 0081ad04 movi r2,1716
8033138: d0a08715 stw r2,-32228(gp)
803313c: 00002f06 br 80331fc <tcp_input+0x21ac>
* Generate a RST, dropping incoming segment.
* Make ACK acceptable to originator of segment.
* Don't bother to respond if destination was broadcast.
*/
#ifdef IP_V4
if (in_broadcast(ti->ti_dst.s_addr))
8033140: e0bff017 ldw r2,-64(fp)
8033144: 10800417 ldw r2,16(r2)
8033148: 1009883a mov r4,r2
803314c: 802abe00 call 802abe0 <in_broadcast>
8033150: 10000326 beq r2,zero,8033160 <tcp_input+0x2110>
GOTO_DROP;
8033154: 0081af44 movi r2,1725
8033158: d0a08715 stw r2,-32228(gp)
803315c: 00002706 br 80331fc <tcp_input+0x21ac>
IP6CPY(&(m->pkt->ip6_hdr->ip_src), &ip6_src);
IP6CPY(&(m->pkt->ip6_hdr->ip_dest), &ip6_dst);
}
#endif /* IP_V6 */
if (tiflags & TH_ACK)
8033160: e0bffb17 ldw r2,-20(fp)
8033164: 1080040c andi r2,r2,16
8033168: 10000c26 beq r2,zero,803319c <tcp_input+0x214c>
tcp_respond (tp, ti, (tcp_seq)0, ti->ti_ack, TH_RST, m);
803316c: e0bff017 ldw r2,-64(fp)
8033170: 10c00717 ldw r3,28(r2)
8033174: e0bfe417 ldw r2,-112(fp)
8033178: d8800115 stw r2,4(sp)
803317c: 00800104 movi r2,4
8033180: d8800015 stw r2,0(sp)
8033184: 180f883a mov r7,r3
8033188: 000d883a mov r6,zero
803318c: e17ff017 ldw r5,-64(fp)
8033190: e13ffc17 ldw r4,-16(fp)
8033194: 8034b480 call 8034b48 <tcp_respond>
8033198: 00001306 br 80331e8 <tcp_input+0x2198>
else
{
if (tiflags & TH_SYN)
803319c: e0bffb17 ldw r2,-20(fp)
80331a0: 1080008c andi r2,r2,2
80331a4: 10000526 beq r2,zero,80331bc <tcp_input+0x216c>
ti->ti_seq++;
80331a8: e0bff017 ldw r2,-64(fp)
80331ac: 10800617 ldw r2,24(r2)
80331b0: 10c00044 addi r3,r2,1
80331b4: e0bff017 ldw r2,-64(fp)
80331b8: 10c00615 stw r3,24(r2)
tcp_respond(tp, ti, ti->ti_seq, (tcp_seq)0, TH_RST|TH_ACK, m);
80331bc: e0bff017 ldw r2,-64(fp)
80331c0: 10c00617 ldw r3,24(r2)
80331c4: e0bfe417 ldw r2,-112(fp)
80331c8: d8800115 stw r2,4(sp)
80331cc: 00800504 movi r2,20
80331d0: d8800015 stw r2,0(sp)
80331d4: 000f883a mov r7,zero
80331d8: 180d883a mov r6,r3
80331dc: e17ff017 ldw r5,-64(fp)
80331e0: e13ffc17 ldw r4,-16(fp)
80331e4: 8034b480 call 8034b48 <tcp_respond>
}
/* destroy temporarily created socket */
if (dropsocket)
80331e8: e0bff617 ldw r2,-40(fp)
80331ec: 10001526 beq r2,zero,8033244 <tcp_input+0x21f4>
(void) soabort(so);
80331f0: e13ffa17 ldw r4,-24(fp)
80331f4: 802d6fc0 call 802d6fc <soabort>
return;
80331f8: 00001206 br 8033244 <tcp_input+0x21f4>
drop:
if (om)
80331fc: e0bffd17 ldw r2,-12(fp)
8033200: 10000226 beq r2,zero,803320c <tcp_input+0x21bc>
(void) m_free(om);
8033204: e13ffd17 ldw r4,-12(fp)
8033208: 8029bf80 call 8029bf8 <m_free>
#ifdef DO_TCPTRACE
if (tp && (tp->t_inpcb->inp_socket->so_options & SO_DEBUG))
tcp_trace("drop: state %d, tcpcb: %x, saveti: %x",
ostate, tp, &tcp_saveti);
#endif
m_freem(m);
803320c: e13fe417 ldw r4,-112(fp)
8033210: 8029cfc0 call 8029cfc <m_freem>
/* destroy temporarily created socket */
if (dropsocket)
8033214: e0bff617 ldw r2,-40(fp)
8033218: 10000c26 beq r2,zero,803324c <tcp_input+0x21fc>
(void) soabort(so);
803321c: e13ffa17 ldw r4,-24(fp)
8033220: 802d6fc0 call 802d6fc <soabort>
return;
8033224: 0001883a nop
8033228: 00000806 br 803324c <tcp_input+0x21fc>
return;
803322c: 0001883a nop
8033230: 00000706 br 8033250 <tcp_input+0x2200>
return;
8033234: 0001883a nop
8033238: 00000506 br 8033250 <tcp_input+0x2200>
return;
803323c: 0001883a nop
8033240: 00000306 br 8033250 <tcp_input+0x2200>
return;
8033244: 0001883a nop
8033248: 00000106 br 8033250 <tcp_input+0x2200>
return;
803324c: 0001883a nop
}
8033250: e037883a mov sp,fp
8033254: dfc00117 ldw ra,4(sp)
8033258: df000017 ldw fp,0(sp)
803325c: dec00204 addi sp,sp,8
8033260: f800283a ret
08033264 <tcp_dooptions>:
void
tcp_dooptions(struct tcpcb * tp,
struct mbuf * om,
struct tcpiphdr * ti)
{
8033264: defff504 addi sp,sp,-44
8033268: dfc00a15 stw ra,40(sp)
803326c: df000915 stw fp,36(sp)
8033270: df000904 addi fp,sp,36
8033274: e13ff915 stw r4,-28(fp)
8033278: e17ff815 stw r5,-32(fp)
803327c: e1bff715 stw r6,-36(fp)
u_char * cp; /* pointer into option buffer */
int opt; /* current option code */
int optlen; /* length of current option */
int cnt; /* byte count left in header */
struct socket * so = tp->t_inpcb->inp_socket;
8033280: e0bff917 ldw r2,-28(fp)
8033284: 10800d17 ldw r2,52(r2)
8033288: 10800817 ldw r2,32(r2)
803328c: e0bffc15 stw r2,-16(fp)
#ifdef TCP_TIMESTAMP
int gotstamp = FALSE; /* TRUE if we got a timestamp */
#endif /* TCP_TIMESTAMP */
cp = mtod(om, u_char *);
8033290: e0bff817 ldw r2,-32(fp)
8033294: 10800317 ldw r2,12(r2)
8033298: e0bfff15 stw r2,-4(fp)
cnt = om->m_len;
803329c: e0bff817 ldw r2,-32(fp)
80332a0: 10800217 ldw r2,8(r2)
80332a4: e0bffd15 stw r2,-12(fp)
for (; cnt > 0; cnt -= optlen, cp += optlen)
80332a8: 00004206 br 80333b4 <tcp_dooptions+0x150>
{
opt = cp[0];
80332ac: e0bfff17 ldw r2,-4(fp)
80332b0: 10800003 ldbu r2,0(r2)
80332b4: 10803fcc andi r2,r2,255
80332b8: e0bffb15 stw r2,-20(fp)
if (opt == TCPOPT_EOL)
80332bc: e0bffb17 ldw r2,-20(fp)
80332c0: 10003f26 beq r2,zero,80333c0 <tcp_dooptions+0x15c>
break;
if (opt == TCPOPT_NOP)
80332c4: e0bffb17 ldw r2,-20(fp)
80332c8: 10800058 cmpnei r2,r2,1
80332cc: 1000031e bne r2,zero,80332dc <tcp_dooptions+0x78>
optlen = 1;
80332d0: 00800044 movi r2,1
80332d4: e0bffe15 stw r2,-8(fp)
80332d8: 00000706 br 80332f8 <tcp_dooptions+0x94>
else
{
optlen = cp[1];
80332dc: e0bfff17 ldw r2,-4(fp)
80332e0: 10800044 addi r2,r2,1
80332e4: 10800003 ldbu r2,0(r2)
80332e8: 10803fcc andi r2,r2,255
80332ec: e0bffe15 stw r2,-8(fp)
if (optlen <= 0)
80332f0: e0bffe17 ldw r2,-8(fp)
80332f4: 0080340e bge zero,r2,80333c8 <tcp_dooptions+0x164>
break;
}
switch (opt)
80332f8: e0bffb17 ldw r2,-20(fp)
80332fc: 10800098 cmpnei r2,r2,2
8033300: 10001f1e bne r2,zero,8033380 <tcp_dooptions+0x11c>
{
case TCPOPT_MAXSEG:
{
u_short mssval;
if (optlen != 4)
8033304: e0bffe17 ldw r2,-8(fp)
8033308: 10800120 cmpeqi r2,r2,4
803330c: 10001e26 beq r2,zero,8033388 <tcp_dooptions+0x124>
continue;
if (!(ti->ti_flags & TH_SYN)) /* MSS only on SYN */
8033310: e0bff717 ldw r2,-36(fp)
8033314: 10800843 ldbu r2,33(r2)
8033318: 10803fcc andi r2,r2,255
803331c: 1080008c andi r2,r2,2
8033320: 10001b26 beq r2,zero,8033390 <tcp_dooptions+0x12c>
continue;
mssval = *(u_short *)(cp + 2);
8033324: e0bfff17 ldw r2,-4(fp)
8033328: 1080008b ldhu r2,2(r2)
803332c: e0bffa8d sth r2,-22(fp)
mssval = ntohs(mssval);
8033330: e0bffa8b ldhu r2,-22(fp)
8033334: 1004d23a srli r2,r2,8
8033338: 1007883a mov r3,r2
803333c: e0bffa8b ldhu r2,-22(fp)
8033340: 1004923a slli r2,r2,8
8033344: 1884b03a or r2,r3,r2
8033348: e0bffa8d sth r2,-22(fp)
tp->t_maxseg = (u_short)MIN(mssval, (u_short)tcp_mss(so));
803334c: e13ffc17 ldw r4,-16(fp)
8033350: 803379c0 call 803379c <tcp_mss>
8033354: 1007883a mov r3,r2
8033358: e0bffa8b ldhu r2,-22(fp)
803335c: 18ffffcc andi r3,r3,65535
8033360: 1880032e bgeu r3,r2,8033370 <tcp_dooptions+0x10c>
8033364: e13ffc17 ldw r4,-16(fp)
8033368: 803379c0 call 803379c <tcp_mss>
803336c: 00000106 br 8033374 <tcp_dooptions+0x110>
8033370: e0bffa8b ldhu r2,-22(fp)
8033374: e0fff917 ldw r3,-28(fp)
8033378: 18800a0d sth r2,40(r3)
break;
803337c: 00000506 br 8033394 <tcp_dooptions+0x130>
}
break;
#endif /* TCP_TIMESTAMP */
default:
break;
8033380: 0001883a nop
8033384: 00000306 br 8033394 <tcp_dooptions+0x130>
continue;
8033388: 0001883a nop
803338c: 00000106 br 8033394 <tcp_dooptions+0x130>
continue;
8033390: 0001883a nop
for (; cnt > 0; cnt -= optlen, cp += optlen)
8033394: e0fffd17 ldw r3,-12(fp)
8033398: e0bffe17 ldw r2,-8(fp)
803339c: 1885c83a sub r2,r3,r2
80333a0: e0bffd15 stw r2,-12(fp)
80333a4: e0bffe17 ldw r2,-8(fp)
80333a8: e0ffff17 ldw r3,-4(fp)
80333ac: 1885883a add r2,r3,r2
80333b0: e0bfff15 stw r2,-4(fp)
80333b4: e0bffd17 ldw r2,-12(fp)
80333b8: 00bfbc16 blt zero,r2,80332ac <tcp_dooptions+0x48>
80333bc: 00000306 br 80333cc <tcp_dooptions+0x168>
break;
80333c0: 0001883a nop
80333c4: 00000106 br 80333cc <tcp_dooptions+0x168>
break;
80333c8: 0001883a nop
}
}
(void) m_free(om);
80333cc: e13ff817 ldw r4,-32(fp)
80333d0: 8029bf80 call 8029bf8 <m_free>
if(!gotstamp)
tp->t_flags &= ~TF_TIMESTAMP;
}
#endif /* TCP_TIMESTAMP */
return;
80333d4: 0001883a nop
}
80333d8: e037883a mov sp,fp
80333dc: dfc00117 ldw ra,4(sp)
80333e0: df000017 ldw fp,0(sp)
80333e4: dec00204 addi sp,sp,8
80333e8: f800283a ret
080333ec <tcp_pulloutofband>:
void
tcp_pulloutofband(struct socket * so,
struct tcpiphdr * ti,
struct mbuf * m)
{
80333ec: defff804 addi sp,sp,-32
80333f0: dfc00715 stw ra,28(sp)
80333f4: df000615 stw fp,24(sp)
80333f8: df000604 addi fp,sp,24
80333fc: e13ffc15 stw r4,-16(fp)
8033400: e17ffb15 stw r5,-20(fp)
8033404: e1bffa15 stw r6,-24(fp)
int cnt = ti->ti_urp - 1;
8033408: e0bffb17 ldw r2,-20(fp)
803340c: 1080098b ldhu r2,38(r2)
8033410: 10bfffcc andi r2,r2,65535
8033414: 10bfffc4 addi r2,r2,-1
8033418: e0bfff15 stw r2,-4(fp)
/**m = dtom(ti);**/
while (cnt >= 0)
803341c: 00003206 br 80334e8 <tcp_pulloutofband+0xfc>
{
if (m->m_len > (unsigned)cnt)
8033420: e0bffa17 ldw r2,-24(fp)
8033424: 10800217 ldw r2,8(r2)
8033428: e0ffff17 ldw r3,-4(fp)
803342c: 1880242e bgeu r3,r2,80334c0 <tcp_pulloutofband+0xd4>
{
char * cp = mtod(m, char *) + cnt;
8033430: e0bffa17 ldw r2,-24(fp)
8033434: 10c00317 ldw r3,12(r2)
8033438: e0bfff17 ldw r2,-4(fp)
803343c: 1885883a add r2,r3,r2
8033440: e0bffe15 stw r2,-8(fp)
struct tcpcb * tp = sototcpcb(so);
8033444: e0bffc17 ldw r2,-16(fp)
8033448: 10800117 ldw r2,4(r2)
803344c: 10800917 ldw r2,36(r2)
8033450: e0bffd15 stw r2,-12(fp)
tp->t_iobc = *cp;
8033454: e0bffe17 ldw r2,-8(fp)
8033458: 10c00003 ldbu r3,0(r2)
803345c: e0bffd17 ldw r2,-12(fp)
8033460: 10c02445 stb r3,145(r2)
tp->t_oobflags |= TCPOOB_HAVEDATA;
8033464: e0bffd17 ldw r2,-12(fp)
8033468: 10802403 ldbu r2,144(r2)
803346c: 10800054 ori r2,r2,1
8033470: 1007883a mov r3,r2
8033474: e0bffd17 ldw r2,-12(fp)
8033478: 10c02405 stb r3,144(r2)
MEMCPY(cp, cp+1, (unsigned)(m->m_len - cnt - 1));
803347c: e0bffe17 ldw r2,-8(fp)
8033480: 11000044 addi r4,r2,1
8033484: e0bffa17 ldw r2,-24(fp)
8033488: 10c00217 ldw r3,8(r2)
803348c: e0bfff17 ldw r2,-4(fp)
8033490: 1885c83a sub r2,r3,r2
8033494: 10bfffc4 addi r2,r2,-1
8033498: 100d883a mov r6,r2
803349c: 200b883a mov r5,r4
80334a0: e13ffe17 ldw r4,-8(fp)
80334a4: 80086b80 call 80086b8 <memcpy>
m->m_len--;
80334a8: e0bffa17 ldw r2,-24(fp)
80334ac: 10800217 ldw r2,8(r2)
80334b0: 10ffffc4 addi r3,r2,-1
80334b4: e0bffa17 ldw r2,-24(fp)
80334b8: 10c00215 stw r3,8(r2)
return;
80334bc: 00001106 br 8033504 <tcp_pulloutofband+0x118>
}
cnt -= m->m_len;
80334c0: e0ffff17 ldw r3,-4(fp)
80334c4: e0bffa17 ldw r2,-24(fp)
80334c8: 10800217 ldw r2,8(r2)
80334cc: 1885c83a sub r2,r3,r2
80334d0: e0bfff15 stw r2,-4(fp)
m = m->m_next;
80334d4: e0bffa17 ldw r2,-24(fp)
80334d8: 10800617 ldw r2,24(r2)
80334dc: e0bffa15 stw r2,-24(fp)
if (m == 0)
80334e0: e0bffa17 ldw r2,-24(fp)
80334e4: 10000326 beq r2,zero,80334f4 <tcp_pulloutofband+0x108>
while (cnt >= 0)
80334e8: e0bfff17 ldw r2,-4(fp)
80334ec: 103fcc0e bge r2,zero,8033420 <tcp_pulloutofband+0x34>
80334f0: 00000106 br 80334f8 <tcp_pulloutofband+0x10c>
break;
80334f4: 0001883a nop
}
panic("tcp_pulloutofband");
80334f8: 01020174 movhi r4,2053
80334fc: 212a9d04 addi r4,r4,-21900
8033500: 80271780 call 8027178 <panic>
}
8033504: e037883a mov sp,fp
8033508: dfc00117 ldw ra,4(sp)
803350c: df000017 ldw fp,0(sp)
8033510: dec00204 addi sp,sp,8
8033514: f800283a ret
08033518 <tcp_xmit_timer>:
* RETURNS:
*/
void
tcp_xmit_timer(struct tcpcb * tp)
{
8033518: defffb04 addi sp,sp,-20
803351c: dfc00415 stw ra,16(sp)
8033520: df000315 stw fp,12(sp)
8033524: df000304 addi fp,sp,12
8033528: e13ffd15 stw r4,-12(fp)
int delta;
int rtt;
#ifdef NPDEBUG
if(tp->t_rttick == 0){ dtrap(); return; }
803352c: e0bffd17 ldw r2,-12(fp)
8033530: 10801e17 ldw r2,120(r2)
8033534: 1000021e bne r2,zero,8033540 <tcp_xmit_timer+0x28>
8033538: 8028cd40 call 8028cd4 <dtrap>
803353c: 00008006 br 8033740 <tcp_xmit_timer+0x228>
#endif
tcpstat.tcps_rttupdated++;
8033540: 008201b4 movhi r2,2054
8033544: 10b8ab17 ldw r2,-7508(r2)
8033548: 10c00044 addi r3,r2,1
803354c: 008201b4 movhi r2,2054
8033550: 10f8ab15 stw r3,-7508(r2)
/* get this rtt. Convert from cticks to TCP slow ticks */
rtt = (int)((cticks - tp->t_rttick) / (TPS/2));
8033554: d0e07d17 ldw r3,-32268(gp)
8033558: e0bffd17 ldw r2,-12(fp)
803355c: 10801e17 ldw r2,120(r2)
8033560: 1885c83a sub r2,r3,r2
8033564: 01400c84 movi r5,50
8033568: 1009883a mov r4,r2
803356c: 800cff80 call 800cff8 <__udivsi3>
8033570: e0bffe15 stw r2,-8(fp)
if(tp->t_srtt != 0)
8033574: e0bffd17 ldw r2,-12(fp)
8033578: 10802017 ldw r2,128(r2)
803357c: 10004426 beq r2,zero,8033690 <tcp_xmit_timer+0x178>
{
if(rtt == 0) /* fast path for small round trip */
8033580: e0bffe17 ldw r2,-8(fp)
8033584: 1000131e bne r2,zero,80335d4 <tcp_xmit_timer+0xbc>
{
/* if either the rtt or varience is over 1, reduce it. */
if(tp->t_srtt > 1)
8033588: e0bffd17 ldw r2,-12(fp)
803358c: 10802017 ldw r2,128(r2)
8033590: 10800090 cmplti r2,r2,2
8033594: 1000051e bne r2,zero,80335ac <tcp_xmit_timer+0x94>
tp->t_srtt--;
8033598: e0bffd17 ldw r2,-12(fp)
803359c: 10802017 ldw r2,128(r2)
80335a0: 10ffffc4 addi r3,r2,-1
80335a4: e0bffd17 ldw r2,-12(fp)
80335a8: 10c02015 stw r3,128(r2)
if(tp->t_rttvar > 1)
80335ac: e0bffd17 ldw r2,-12(fp)
80335b0: 10802117 ldw r2,132(r2)
80335b4: 10800090 cmplti r2,r2,2
80335b8: 1000421e bne r2,zero,80336c4 <tcp_xmit_timer+0x1ac>
tp->t_rttvar--;
80335bc: e0bffd17 ldw r2,-12(fp)
80335c0: 10802117 ldw r2,132(r2)
80335c4: 10ffffc4 addi r3,r2,-1
80335c8: e0bffd17 ldw r2,-12(fp)
80335cc: 10c02115 stw r3,132(r2)
80335d0: 00003c06 br 80336c4 <tcp_xmit_timer+0x1ac>
* The following magic is equivalent
* to the smoothing algorithm in rfc793
* with an alpha of .875
* (srtt = rtt/8 + srtt*7/8 in fixed point).
*/
delta = ((rtt - 1) << 2) - (int)(tp->t_srtt >> 3);
80335d4: e0bffe17 ldw r2,-8(fp)
80335d8: 10bfffc4 addi r2,r2,-1
80335dc: 100690ba slli r3,r2,2
80335e0: e0bffd17 ldw r2,-12(fp)
80335e4: 10802017 ldw r2,128(r2)
80335e8: 1005d0fa srai r2,r2,3
80335ec: 1885c83a sub r2,r3,r2
80335f0: e0bfff15 stw r2,-4(fp)
if ((tp->t_srtt += delta) <= 0)
80335f4: e0bffd17 ldw r2,-12(fp)
80335f8: 10c02017 ldw r3,128(r2)
80335fc: e0bfff17 ldw r2,-4(fp)
8033600: 1887883a add r3,r3,r2
8033604: e0bffd17 ldw r2,-12(fp)
8033608: 10c02015 stw r3,128(r2)
803360c: e0bffd17 ldw r2,-12(fp)
8033610: 10802017 ldw r2,128(r2)
8033614: 00800316 blt zero,r2,8033624 <tcp_xmit_timer+0x10c>
tp->t_srtt = 1;
8033618: e0bffd17 ldw r2,-12(fp)
803361c: 00c00044 movi r3,1
8033620: 10c02015 stw r3,128(r2)
* (scaled by 4). The following is equivalent
* to rfc793 smoothing with an alpha of .75
* (rttvar = rttvar*3/4 + |delta| / 4).
* This replaces rfc793's wired-in beta.
*/
if (delta < 0)
8033624: e0bfff17 ldw r2,-4(fp)
8033628: 1000030e bge r2,zero,8033638 <tcp_xmit_timer+0x120>
delta = -delta;
803362c: e0bfff17 ldw r2,-4(fp)
8033630: 0085c83a sub r2,zero,r2
8033634: e0bfff15 stw r2,-4(fp)
delta -= (short)(tp->t_rttvar >> 1);
8033638: e0bffd17 ldw r2,-12(fp)
803363c: 10802117 ldw r2,132(r2)
8033640: 1005d07a srai r2,r2,1
8033644: 10bfffcc andi r2,r2,65535
8033648: 10a0001c xori r2,r2,32768
803364c: 10a00004 addi r2,r2,-32768
8033650: e0ffff17 ldw r3,-4(fp)
8033654: 1885c83a sub r2,r3,r2
8033658: e0bfff15 stw r2,-4(fp)
if ((tp->t_rttvar += delta) <= 0)
803365c: e0bffd17 ldw r2,-12(fp)
8033660: 10c02117 ldw r3,132(r2)
8033664: e0bfff17 ldw r2,-4(fp)
8033668: 1887883a add r3,r3,r2
803366c: e0bffd17 ldw r2,-12(fp)
8033670: 10c02115 stw r3,132(r2)
8033674: e0bffd17 ldw r2,-12(fp)
8033678: 10802117 ldw r2,132(r2)
803367c: 00801116 blt zero,r2,80336c4 <tcp_xmit_timer+0x1ac>
tp->t_rttvar = 1;
8033680: e0bffd17 ldw r2,-12(fp)
8033684: 00c00044 movi r3,1
8033688: 10c02115 stw r3,132(r2)
803368c: 00000d06 br 80336c4 <tcp_xmit_timer+0x1ac>
* No rtt measurement yet - use the
* unsmoothed rtt. Set the variance
* to half the rtt (so our first
* retransmit happens at 2*rtt)
*/
if(rtt < 1)
8033690: e0bffe17 ldw r2,-8(fp)
8033694: 00800216 blt zero,r2,80336a0 <tcp_xmit_timer+0x188>
rtt = 1;
8033698: 00800044 movi r2,1
803369c: e0bffe15 stw r2,-8(fp)
tp->t_srtt = rtt << 3;
80336a0: e0bffe17 ldw r2,-8(fp)
80336a4: 100690fa slli r3,r2,3
80336a8: e0bffd17 ldw r2,-12(fp)
80336ac: 10c02015 stw r3,128(r2)
tp->t_rttvar = rtt << 1;
80336b0: e0bffe17 ldw r2,-8(fp)
80336b4: 1085883a add r2,r2,r2
80336b8: 1007883a mov r3,r2
80336bc: e0bffd17 ldw r2,-12(fp)
80336c0: 10c02115 stw r3,132(r2)
}
tp->t_rttick = 0; /* clear RT timer */
80336c4: e0bffd17 ldw r2,-12(fp)
80336c8: 10001e15 stw zero,120(r2)
tp->t_rxtshift = 0;
80336cc: e0bffd17 ldw r2,-12(fp)
80336d0: 10000715 stw zero,28(r2)
TCPT_RANGESET(tp->t_rxtcur,
80336d4: e0bffd17 ldw r2,-12(fp)
80336d8: 10802017 ldw r2,128(r2)
80336dc: 1007d0ba srai r3,r2,2
80336e0: e0bffd17 ldw r2,-12(fp)
80336e4: 10802117 ldw r2,132(r2)
80336e8: 1885883a add r2,r3,r2
80336ec: 1005d07a srai r2,r2,1
80336f0: 10ffffcc andi r3,r2,65535
80336f4: 18e0001c xori r3,r3,32768
80336f8: 18e00004 addi r3,r3,-32768
80336fc: e0bffd17 ldw r2,-12(fp)
8033700: 10c00815 stw r3,32(r2)
8033704: e0bffd17 ldw r2,-12(fp)
8033708: 10800817 ldw r2,32(r2)
803370c: 10800088 cmpgei r2,r2,2
8033710: 1000041e bne r2,zero,8033724 <tcp_xmit_timer+0x20c>
8033714: e0bffd17 ldw r2,-12(fp)
8033718: 00c00084 movi r3,2
803371c: 10c00815 stw r3,32(r2)
8033720: 00000706 br 8033740 <tcp_xmit_timer+0x228>
8033724: e0bffd17 ldw r2,-12(fp)
8033728: 10800817 ldw r2,32(r2)
803372c: 10802050 cmplti r2,r2,129
8033730: 1000031e bne r2,zero,8033740 <tcp_xmit_timer+0x228>
8033734: e0bffd17 ldw r2,-12(fp)
8033738: 00c02004 movi r3,128
803373c: 10c00815 stw r3,32(r2)
((tp->t_srtt >> 2) + tp->t_rttvar) >> 1,
TCPTV_MIN, TCPTV_REXMTMAX);
}
8033740: e037883a mov sp,fp
8033744: dfc00117 ldw ra,4(sp)
8033748: df000017 ldw fp,0(sp)
803374c: dec00204 addi sp,sp,8
8033750: f800283a ret
08033754 <ip4_tcpmss>:
#ifdef IP_V4
int
ip4_tcpmss(struct socket * so)
{
8033754: defffd04 addi sp,sp,-12
8033758: df000215 stw fp,8(sp)
803375c: df000204 addi fp,sp,8
8033760: e13ffe15 stw r4,-8(fp)
NET ifp;
ifp = so->so_pcb->ifp;
8033764: e0bffe17 ldw r2,-8(fp)
8033768: 10800117 ldw r2,4(r2)
803376c: 10800a17 ldw r2,40(r2)
8033770: e0bfff15 stw r2,-4(fp)
return(ifp->n_mtu - (40 + ifp->n_lnh));
8033774: e0bfff17 ldw r2,-4(fp)
8033778: 10c00917 ldw r3,36(r2)
803377c: e0bfff17 ldw r2,-4(fp)
8033780: 10800817 ldw r2,32(r2)
8033784: 10800a04 addi r2,r2,40
8033788: 1885c83a sub r2,r3,r2
}
803378c: e037883a mov sp,fp
8033790: df000017 ldw fp,0(sp)
8033794: dec00104 addi sp,sp,4
8033798: f800283a ret
0803379c <tcp_mss>:
*/
int
tcp_mss(struct socket * so)
{
803379c: defffa04 addi sp,sp,-24
80337a0: dfc00515 stw ra,20(sp)
80337a4: df000415 stw fp,16(sp)
80337a8: df000404 addi fp,sp,16
80337ac: e13ffc15 stw r4,-16(fp)
struct tcpcb * tp;
#ifdef IP_V6
NET ifp = 0;
#endif
if ((so == NULL) ||
80337b0: e0bffc17 ldw r2,-16(fp)
80337b4: 10000726 beq r2,zero,80337d4 <tcp_mss+0x38>
(so->so_pcb == NULL) ||
80337b8: e0bffc17 ldw r2,-16(fp)
80337bc: 10800117 ldw r2,4(r2)
if ((so == NULL) ||
80337c0: 10000426 beq r2,zero,80337d4 <tcp_mss+0x38>
(so->so_pcb->ifp == NULL))
80337c4: e0bffc17 ldw r2,-16(fp)
80337c8: 10800117 ldw r2,4(r2)
80337cc: 10800a17 ldw r2,40(r2)
(so->so_pcb == NULL) ||
80337d0: 1000061e bne r2,zero,80337ec <tcp_mss+0x50>
{
if (so->so_domain == AF_INET) /* IPv4 */
80337d4: e0bffc17 ldw r2,-16(fp)
80337d8: 10800517 ldw r2,20(r2)
80337dc: 10800098 cmpnei r2,r2,2
80337e0: 1000021e bne r2,zero,80337ec <tcp_mss+0x50>
return TCP_MSS; /* user defined */
80337e4: 00816d04 movi r2,1460
80337e8: 00002506 br 8033880 <tcp_mss+0xe4>
#endif /* IP_V6 */
#ifdef IP_V4 /* Begin messy domain defines */
#ifndef IP_V6 /* V4 only version */
mss = ip4_tcpmss(so);
80337ec: e13ffc17 ldw r4,-16(fp)
80337f0: 80337540 call 8033754 <ip4_tcpmss>
80337f4: e0bfff15 stw r2,-4(fp)
#endif /* end of dual mode */
#else /* no IP_v4, assume V6 only */
mss = ip6_tcpmss(so, ifp);
#endif /* end messy domain defines */
if (mss > TCP_MSS) /* check upper limit from compile */
80337f8: e0bfff17 ldw r2,-4(fp)
80337fc: 10816d50 cmplti r2,r2,1461
8033800: 1000021e bne r2,zero,803380c <tcp_mss+0x70>
mss = TCP_MSS;
8033804: 00816d04 movi r2,1460
8033808: e0bfff15 stw r2,-4(fp)
/* check upper limit which may be set by setsockopt() */
inp = (struct inpcb *)so->so_pcb; /* Map socket to IP cb */
803380c: e0bffc17 ldw r2,-16(fp)
8033810: 10800117 ldw r2,4(r2)
8033814: e0bffe15 stw r2,-8(fp)
tp = (struct tcpcb *)inp->inp_ppcb; /* Map IP to TCP cb */
8033818: e0bffe17 ldw r2,-8(fp)
803381c: 10800917 ldw r2,36(r2)
8033820: e0bffd15 stw r2,-12(fp)
/* has user set max seg? */
if (tp->t_flags & TF_MAXSEG)
8033824: e0bffd17 ldw r2,-12(fp)
8033828: 10800b0b ldhu r2,44(r2)
803382c: 10bfffcc andi r2,r2,65535
8033830: 1081000c andi r2,r2,1024
8033834: 10000426 beq r2,zero,8033848 <tcp_mss+0xac>
return tp->t_maxseg; /* yup */
8033838: e0bffd17 ldw r2,-12(fp)
803383c: 10800a0b ldhu r2,40(r2)
8033840: 10bfffcc andi r2,r2,65535
8033844: 00000e06 br 8033880 <tcp_mss+0xe4>
if (tp->t_maxseg && (mss > tp->t_maxseg)) /* check tcp's mss */
8033848: e0bffd17 ldw r2,-12(fp)
803384c: 10800a0b ldhu r2,40(r2)
8033850: 10bfffcc andi r2,r2,65535
8033854: 10000926 beq r2,zero,803387c <tcp_mss+0xe0>
8033858: e0bffd17 ldw r2,-12(fp)
803385c: 10800a0b ldhu r2,40(r2)
8033860: 10ffffcc andi r3,r2,65535
8033864: e0bfff17 ldw r2,-4(fp)
8033868: 1880040e bge r3,r2,803387c <tcp_mss+0xe0>
{
mss = tp->t_maxseg; /* limit new MSS to set MSS */
803386c: e0bffd17 ldw r2,-12(fp)
8033870: 10800a0b ldhu r2,40(r2)
8033874: 10bfffcc andi r2,r2,65535
8033878: e0bfff15 stw r2,-4(fp)
}
return mss;
803387c: e0bfff17 ldw r2,-4(fp)
}
8033880: e037883a mov sp,fp
8033884: dfc00117 ldw ra,4(sp)
8033888: df000017 ldw fp,0(sp)
803388c: dec00204 addi sp,sp,8
8033890: f800283a ret
08033894 <tcp_output>:
* RETURNS: 0 if OK, else a sockets error code.
*/
int
tcp_output(struct tcpcb * tp)
{
8033894: deffe804 addi sp,sp,-96
8033898: dfc01715 stw ra,92(sp)
803389c: df001615 stw fp,88(sp)
80338a0: df001604 addi fp,sp,88
80338a4: e13fea15 stw r4,-88(fp)
struct socket * so = tp->t_inpcb->inp_socket;
80338a8: e0bfea17 ldw r2,-88(fp)
80338ac: 10800d17 ldw r2,52(r2)
80338b0: 10800817 ldw r2,32(r2)
80338b4: e0bff715 stw r2,-36(fp)
int len;
long win;
int off, flags, error;
struct mbuf * m;
struct tcpiphdr * ti;
unsigned optlen = 0;
80338b8: e03ffb15 stw zero,-20(fp)
* Determine length of data that should be transmitted,
* and flags that will be used.
* If there is some data or critical controls (SYN, RST)
* to send, then transmit; otherwise, investigate further.
*/
idle = (tp->snd_max == tp->snd_una);
80338bc: e0bfea17 ldw r2,-88(fp)
80338c0: 10c01a17 ldw r3,104(r2)
80338c4: e0bfea17 ldw r2,-88(fp)
80338c8: 10800e17 ldw r2,56(r2)
80338cc: 1885003a cmpeq r2,r3,r2
80338d0: 10803fcc andi r2,r2,255
80338d4: e0bff615 stw r2,-40(fp)
again:
sendalot = 0;
80338d8: e03ffa15 stw zero,-24(fp)
off = (int)(tp->snd_nxt - tp->snd_una);
80338dc: e0bfea17 ldw r2,-88(fp)
80338e0: 10c00f17 ldw r3,60(r2)
80338e4: e0bfea17 ldw r2,-88(fp)
80338e8: 10800e17 ldw r2,56(r2)
80338ec: 1885c83a sub r2,r3,r2
80338f0: e0bff515 stw r2,-44(fp)
win = (long)tp->snd_wnd; /* set basic send window */
80338f4: e0bfea17 ldw r2,-88(fp)
80338f8: 10801417 ldw r2,80(r2)
80338fc: e0bffe15 stw r2,-8(fp)
if (win > (long)tp->snd_cwnd) /* see if we need congestion control */
8033900: e0bfea17 ldw r2,-88(fp)
8033904: 10801b17 ldw r2,108(r2)
8033908: 1007883a mov r3,r2
803390c: e0bffe17 ldw r2,-8(fp)
8033910: 1880060e bge r3,r2,803392c <tcp_output+0x98>
{
win = (int)(tp->snd_cwnd & ~(ALIGN_TYPE-1)); /* keep data aligned */
8033914: e0bfea17 ldw r2,-88(fp)
8033918: 10801b17 ldw r2,108(r2)
803391c: 1007883a mov r3,r2
8033920: 00bfff04 movi r2,-4
8033924: 1884703a and r2,r3,r2
8033928: e0bffe15 stw r2,-8(fp)
* If in persist timeout with window of 0, send 1 byte.
* Otherwise, if window is small but nonzero
* and timer expired, we will send what we can
* and go to transmit state.
*/
if (tp->t_force)
803392c: e0bfea17 ldw r2,-88(fp)
8033930: 10800a83 ldbu r2,42(r2)
8033934: 10803fcc andi r2,r2,255
8033938: 1080201c xori r2,r2,128
803393c: 10bfe004 addi r2,r2,-128
8033940: 10000926 beq r2,zero,8033968 <tcp_output+0xd4>
{
if (win == 0)
8033944: e0bffe17 ldw r2,-8(fp)
8033948: 1000031e bne r2,zero,8033958 <tcp_output+0xc4>
win = 1;
803394c: 00800044 movi r2,1
8033950: e0bffe15 stw r2,-8(fp)
8033954: 00000406 br 8033968 <tcp_output+0xd4>
else
{
tp->t_timer[TCPT_PERSIST] = 0;
8033958: e0bfea17 ldw r2,-88(fp)
803395c: 10000415 stw zero,16(r2)
tp->t_rxtshift = 0;
8033960: e0bfea17 ldw r2,-88(fp)
8033964: 10000715 stw zero,28(r2)
}
else
#endif /* TCP_SACK */
{
/* set length of packets which are not sack resends */
len = (int)MIN(so->so_snd.sb_cc, (unsigned)win) - off;
8033968: e0bff717 ldw r2,-36(fp)
803396c: 10801217 ldw r2,72(r2)
8033970: e0fffe17 ldw r3,-8(fp)
8033974: 1880012e bgeu r3,r2,803397c <tcp_output+0xe8>
8033978: 1805883a mov r2,r3
803397c: 1007883a mov r3,r2
8033980: e0bff517 ldw r2,-44(fp)
8033984: 1885c83a sub r2,r3,r2
8033988: e0bfff15 stw r2,-4(fp)
}
flags = tcp_outflags[tp->t_state];
803398c: e0bfea17 ldw r2,-88(fp)
8033990: 10c00217 ldw r3,8(r2)
8033994: 00820174 movhi r2,2053
8033998: 1885883a add r2,r3,r2
803399c: 10b20a03 ldbu r2,-14296(r2)
80339a0: 10803fcc andi r2,r2,255
80339a4: e0bffd15 stw r2,-12(fp)
}
#else
/* If other options not defined this build then don't bother to call bld_options() except
* on SYN packets
*/
if(flags & TH_SYN)
80339a8: e0bffd17 ldw r2,-12(fp)
80339ac: 1080008c andi r2,r2,2
80339b0: 10000926 beq r2,zero,80339d8 <tcp_output+0x144>
{
optlen = bld_options(tp, &tcp_optionbuf[optlen], flags, so);
80339b4: e0fffb17 ldw r3,-20(fp)
80339b8: d0a08804 addi r2,gp,-32224
80339bc: 1885883a add r2,r3,r2
80339c0: e1fff717 ldw r7,-36(fp)
80339c4: e1bffd17 ldw r6,-12(fp)
80339c8: 100b883a mov r5,r2
80339cc: e13fea17 ldw r4,-88(fp)
80339d0: 803492c0 call 803492c <bld_options>
80339d4: e0bffb15 stw r2,-20(fp)
}
#endif
if (len < 0)
80339d8: e0bfff17 ldw r2,-4(fp)
80339dc: 1000090e bge r2,zero,8033a04 <tcp_output+0x170>
* cancel pending retransmit and pull snd_nxt
* back to (closed) window. We will enter persist
* state below. If the window didn't close completely,
* just wait for an ACK.
*/
len = 0;
80339e0: e03fff15 stw zero,-4(fp)
if (win == 0)
80339e4: e0bffe17 ldw r2,-8(fp)
80339e8: 1000061e bne r2,zero,8033a04 <tcp_output+0x170>
{
tp->t_timer[TCPT_REXMT] = 0;
80339ec: e0bfea17 ldw r2,-88(fp)
80339f0: 10000315 stw zero,12(r2)
tp->snd_nxt = tp->snd_una;
80339f4: e0bfea17 ldw r2,-88(fp)
80339f8: 10c00e17 ldw r3,56(r2)
80339fc: e0bfea17 ldw r2,-88(fp)
8033a00: 10c00f15 stw r3,60(r2)
}
}
if (len > (int)tp->t_maxseg)
8033a04: e0bfea17 ldw r2,-88(fp)
8033a08: 10800a0b ldhu r2,40(r2)
8033a0c: 10ffffcc andi r3,r2,65535
8033a10: e0bfff17 ldw r2,-4(fp)
8033a14: 1880060e bge r3,r2,8033a30 <tcp_output+0x19c>
{
len = tp->t_maxseg;
8033a18: e0bfea17 ldw r2,-88(fp)
8033a1c: 10800a0b ldhu r2,40(r2)
8033a20: 10bfffcc andi r2,r2,65535
8033a24: e0bfff15 stw r2,-4(fp)
sendalot = 1;
8033a28: 00800044 movi r2,1
8033a2c: e0bffa15 stw r2,-24(fp)
/* We don't need a pmtu test for IPv6. V6 code limits t_maxseg to
* the Path MTU, so the test above the v4 ifdef above covers us.
*/
#endif /* IP_V4 */
if (SEQ_LT(tp->snd_nxt + len, tp->snd_una + so->so_snd.sb_cc))
8033a30: e0bfea17 ldw r2,-88(fp)
8033a34: 10c00f17 ldw r3,60(r2)
8033a38: e0bfff17 ldw r2,-4(fp)
8033a3c: 1887883a add r3,r3,r2
8033a40: e0bfea17 ldw r2,-88(fp)
8033a44: 11000e17 ldw r4,56(r2)
8033a48: e0bff717 ldw r2,-36(fp)
8033a4c: 10801217 ldw r2,72(r2)
8033a50: 2085883a add r2,r4,r2
8033a54: 1885c83a sub r2,r3,r2
8033a58: 1000040e bge r2,zero,8033a6c <tcp_output+0x1d8>
flags &= ~TH_FIN;
8033a5c: e0fffd17 ldw r3,-12(fp)
8033a60: 00bfff84 movi r2,-2
8033a64: 1884703a and r2,r3,r2
8033a68: e0bffd15 stw r2,-12(fp)
win = (long)(sbspace(&so->so_rcv));
8033a6c: e0bff717 ldw r2,-36(fp)
8033a70: 10800b17 ldw r2,44(r2)
8033a74: 1007883a mov r3,r2
8033a78: e0bff717 ldw r2,-36(fp)
8033a7c: 10800a17 ldw r2,40(r2)
8033a80: 1885c83a sub r2,r3,r2
8033a84: 10000616 blt r2,zero,8033aa0 <tcp_output+0x20c>
8033a88: e0bff717 ldw r2,-36(fp)
8033a8c: 10c00b17 ldw r3,44(r2)
8033a90: e0bff717 ldw r2,-36(fp)
8033a94: 10800a17 ldw r2,40(r2)
8033a98: 1885c83a sub r2,r3,r2
8033a9c: 00000106 br 8033aa4 <tcp_output+0x210>
8033aa0: 0005883a mov r2,zero
8033aa4: e0bffe15 stw r2,-8(fp)
/*
* If our state indicates that FIN should be sent
* and we have not yet done so, or we're retransmitting the FIN,
* then we need to send.
*/
if ((flags & TH_FIN) &&
8033aa8: e0bffd17 ldw r2,-12(fp)
8033aac: 1080004c andi r2,r2,1
8033ab0: 10000d26 beq r2,zero,8033ae8 <tcp_output+0x254>
(so->so_snd.sb_cc == 0) &&
8033ab4: e0bff717 ldw r2,-36(fp)
8033ab8: 10801217 ldw r2,72(r2)
if ((flags & TH_FIN) &&
8033abc: 10000a1e bne r2,zero,8033ae8 <tcp_output+0x254>
((tp->t_flags & TF_SENTFIN) == 0 || tp->snd_nxt == tp->snd_una))
8033ac0: e0bfea17 ldw r2,-88(fp)
8033ac4: 10800b0b ldhu r2,44(r2)
8033ac8: 10bfffcc andi r2,r2,65535
8033acc: 1080040c andi r2,r2,16
(so->so_snd.sb_cc == 0) &&
8033ad0: 10006626 beq r2,zero,8033c6c <tcp_output+0x3d8>
((tp->t_flags & TF_SENTFIN) == 0 || tp->snd_nxt == tp->snd_una))
8033ad4: e0bfea17 ldw r2,-88(fp)
8033ad8: 10c00f17 ldw r3,60(r2)
8033adc: e0bfea17 ldw r2,-88(fp)
8033ae0: 10800e17 ldw r2,56(r2)
8033ae4: 18806126 beq r3,r2,8033c6c <tcp_output+0x3d8>
goto send;
}
/*
* Send if we owe peer an ACK.
*/
if (tp->t_flags & TF_ACKNOW)
8033ae8: e0bfea17 ldw r2,-88(fp)
8033aec: 10800b0b ldhu r2,44(r2)
8033af0: 10bfffcc andi r2,r2,65535
8033af4: 1080004c andi r2,r2,1
8033af8: 10005e1e bne r2,zero,8033c74 <tcp_output+0x3e0>
goto send;
if (flags & (TH_SYN|TH_RST))
8033afc: e0bffd17 ldw r2,-12(fp)
8033b00: 1080018c andi r2,r2,6
8033b04: 10005d1e bne r2,zero,8033c7c <tcp_output+0x3e8>
goto send;
if (SEQ_GT(tp->snd_up, tp->snd_una))
8033b08: e0bfea17 ldw r2,-88(fp)
8033b0c: 10c01017 ldw r3,64(r2)
8033b10: e0bfea17 ldw r2,-88(fp)
8033b14: 10800e17 ldw r2,56(r2)
8033b18: 1885c83a sub r2,r3,r2
8033b1c: 00805916 blt zero,r2,8033c84 <tcp_output+0x3f0>
* If peer's buffer is tiny, then send
* when window is at least half open.
* If retransmitting (possibly after persist timer forced us
* to send into a small window), then must resend.
*/
if (len)
8033b20: e0bfff17 ldw r2,-4(fp)
8033b24: 10002426 beq r2,zero,8033bb8 <tcp_output+0x324>
{
if (len == (int)tp->t_maxseg)
8033b28: e0bfea17 ldw r2,-88(fp)
8033b2c: 10800a0b ldhu r2,40(r2)
8033b30: 10bfffcc andi r2,r2,65535
8033b34: e0ffff17 ldw r3,-4(fp)
8033b38: 18805426 beq r3,r2,8033c8c <tcp_output+0x3f8>
goto send;
if ((idle || tp->t_flags & TF_NODELAY) &&
8033b3c: e0bff617 ldw r2,-40(fp)
8033b40: 1000051e bne r2,zero,8033b58 <tcp_output+0x2c4>
8033b44: e0bfea17 ldw r2,-88(fp)
8033b48: 10800b0b ldhu r2,44(r2)
8033b4c: 10bfffcc andi r2,r2,65535
8033b50: 1080010c andi r2,r2,4
8033b54: 10000626 beq r2,zero,8033b70 <tcp_output+0x2dc>
len + off >= (int)so->so_snd.sb_cc)
8033b58: e0ffff17 ldw r3,-4(fp)
8033b5c: e0bff517 ldw r2,-44(fp)
8033b60: 1885883a add r2,r3,r2
8033b64: e0fff717 ldw r3,-36(fp)
8033b68: 18c01217 ldw r3,72(r3)
if ((idle || tp->t_flags & TF_NODELAY) &&
8033b6c: 10c0490e bge r2,r3,8033c94 <tcp_output+0x400>
{
goto send;
}
if (tp->t_force)
8033b70: e0bfea17 ldw r2,-88(fp)
8033b74: 10800a83 ldbu r2,42(r2)
8033b78: 10803fcc andi r2,r2,255
8033b7c: 1080201c xori r2,r2,128
8033b80: 10bfe004 addi r2,r2,-128
8033b84: 1000451e bne r2,zero,8033c9c <tcp_output+0x408>
goto send;
if (len >= (int)(tp->max_sndwnd / 2))
8033b88: e0bfea17 ldw r2,-88(fp)
8033b8c: 10802317 ldw r2,140(r2)
8033b90: 1004d07a srli r2,r2,1
8033b94: 1007883a mov r3,r2
8033b98: e0bfff17 ldw r2,-4(fp)
8033b9c: 10c0410e bge r2,r3,8033ca4 <tcp_output+0x410>
goto send;
if (SEQ_LT(tp->snd_nxt, tp->snd_max))
8033ba0: e0bfea17 ldw r2,-88(fp)
8033ba4: 10c00f17 ldw r3,60(r2)
8033ba8: e0bfea17 ldw r2,-88(fp)
8033bac: 10801a17 ldw r2,104(r2)
8033bb0: 1885c83a sub r2,r3,r2
8033bb4: 10003d16 blt r2,zero,8033cac <tcp_output+0x418>
* known to peer (as advertised window less
* next expected input). If the difference is at least two
* max size segments or at least 35% of the maximum possible
* window, then want to send a window update to peer.
*/
if (win > 0)
8033bb8: e0bffe17 ldw r2,-8(fp)
8033bbc: 00801c0e bge zero,r2,8033c30 <tcp_output+0x39c>
{
int adv = (int)win - (int)(tp->rcv_adv - tp->rcv_nxt);
8033bc0: e0bfea17 ldw r2,-88(fp)
8033bc4: 10c01917 ldw r3,100(r2)
8033bc8: e0bfea17 ldw r2,-88(fp)
8033bcc: 10801617 ldw r2,88(r2)
8033bd0: 1885c83a sub r2,r3,r2
8033bd4: 1007883a mov r3,r2
8033bd8: e0bffe17 ldw r2,-8(fp)
8033bdc: 10c5c83a sub r2,r2,r3
8033be0: e0bff415 stw r2,-48(fp)
if (so->so_rcv.sb_cc == 0 && adv >= (int)(tp->t_maxseg * 2))
8033be4: e0bff717 ldw r2,-36(fp)
8033be8: 10800a17 ldw r2,40(r2)
8033bec: 1000071e bne r2,zero,8033c0c <tcp_output+0x378>
8033bf0: e0bfea17 ldw r2,-88(fp)
8033bf4: 10800a0b ldhu r2,40(r2)
8033bf8: 10bfffcc andi r2,r2,65535
8033bfc: 1085883a add r2,r2,r2
8033c00: 1007883a mov r3,r2
8033c04: e0bff417 ldw r2,-48(fp)
8033c08: 10c02a0e bge r2,r3,8033cb4 <tcp_output+0x420>
goto send;
if (100 * (u_int)adv / so->so_rcv.sb_hiwat >= 35)
8033c0c: e0bff417 ldw r2,-48(fp)
8033c10: 10c01924 muli r3,r2,100
8033c14: e0bff717 ldw r2,-36(fp)
8033c18: 10800b17 ldw r2,44(r2)
8033c1c: 100b883a mov r5,r2
8033c20: 1809883a mov r4,r3
8033c24: 800cff80 call 800cff8 <__udivsi3>
8033c28: 108008f0 cmpltui r2,r2,35
8033c2c: 10002326 beq r2,zero,8033cbc <tcp_output+0x428>
* retransmit or persist is pending, then go to persist state.
* If nothing happens soon, send when timer expires:
* if window is nonzero, transmit what we can,
* otherwise force out a byte.
*/
if (so->so_snd.sb_cc && tp->t_timer[TCPT_REXMT] == 0 &&
8033c30: e0bff717 ldw r2,-36(fp)
8033c34: 10801217 ldw r2,72(r2)
8033c38: 10000a26 beq r2,zero,8033c64 <tcp_output+0x3d0>
8033c3c: e0bfea17 ldw r2,-88(fp)
8033c40: 10800317 ldw r2,12(r2)
8033c44: 1000071e bne r2,zero,8033c64 <tcp_output+0x3d0>
tp->t_timer[TCPT_PERSIST] == 0)
8033c48: e0bfea17 ldw r2,-88(fp)
8033c4c: 10800417 ldw r2,16(r2)
if (so->so_snd.sb_cc && tp->t_timer[TCPT_REXMT] == 0 &&
8033c50: 1000041e bne r2,zero,8033c64 <tcp_output+0x3d0>
{
tp->t_rxtshift = 0;
8033c54: e0bfea17 ldw r2,-88(fp)
8033c58: 10000715 stw zero,28(r2)
tcp_setpersist(tp);
8033c5c: e13fea17 ldw r4,-88(fp)
8033c60: 80348300 call 8034830 <tcp_setpersist>
}
/*
* No reason to send a segment, just return.
*/
return (0);
8033c64: 0005883a mov r2,zero
8033c68: 0002ec06 br 803481c <tcp_output+0xf88>
goto send;
8033c6c: 0001883a nop
8033c70: 00001306 br 8033cc0 <tcp_output+0x42c>
goto send;
8033c74: 0001883a nop
8033c78: 00001106 br 8033cc0 <tcp_output+0x42c>
goto send;
8033c7c: 0001883a nop
8033c80: 00000f06 br 8033cc0 <tcp_output+0x42c>
goto send;
8033c84: 0001883a nop
8033c88: 00000d06 br 8033cc0 <tcp_output+0x42c>
goto send;
8033c8c: 0001883a nop
8033c90: 00000b06 br 8033cc0 <tcp_output+0x42c>
goto send;
8033c94: 0001883a nop
8033c98: 00000906 br 8033cc0 <tcp_output+0x42c>
goto send;
8033c9c: 0001883a nop
8033ca0: 00000706 br 8033cc0 <tcp_output+0x42c>
goto send;
8033ca4: 0001883a nop
8033ca8: 00000506 br 8033cc0 <tcp_output+0x42c>
goto send;
8033cac: 0001883a nop
8033cb0: 00000306 br 8033cc0 <tcp_output+0x42c>
goto send;
8033cb4: 0001883a nop
8033cb8: 00000106 br 8033cc0 <tcp_output+0x42c>
goto send;
8033cbc: 0001883a nop
send:
ENTER_CRIT_SECTION(tp);
8033cc0: 8028e940 call 8028e94 <irq_Mask>
/* Limit send length to the current buffer so as to
* avoid doing the "mbuf shuffle" in m_copy().
*/
bufoff = off;
8033cc4: e0bff517 ldw r2,-44(fp)
8033cc8: e0bff815 stw r2,-32(fp)
sendm = so->so_snd.sb_mb;
8033ccc: e0bff717 ldw r2,-36(fp)
8033cd0: 10801817 ldw r2,96(r2)
8033cd4: e0bff915 stw r2,-28(fp)
if (len)
8033cd8: e0bfff17 ldw r2,-4(fp)
8033cdc: 10005526 beq r2,zero,8033e34 <tcp_output+0x5a0>
{
/* find mbuf containing data to send (at "off") */
while (sendm) /* loop through socket send list */
8033ce0: 00000a06 br 8033d0c <tcp_output+0x478>
{
bufoff -= sendm->m_len;
8033ce4: e0fff817 ldw r3,-32(fp)
8033ce8: e0bff917 ldw r2,-28(fp)
8033cec: 10800217 ldw r2,8(r2)
8033cf0: 1885c83a sub r2,r3,r2
8033cf4: e0bff815 stw r2,-32(fp)
if (bufoff < 0) /* if off is in this buffer, break */
8033cf8: e0bff817 ldw r2,-32(fp)
8033cfc: 10000616 blt r2,zero,8033d18 <tcp_output+0x484>
break;
sendm = sendm->m_next;
8033d00: e0bff917 ldw r2,-28(fp)
8033d04: 10800617 ldw r2,24(r2)
8033d08: e0bff915 stw r2,-28(fp)
while (sendm) /* loop through socket send list */
8033d0c: e0bff917 ldw r2,-28(fp)
8033d10: 103ff41e bne r2,zero,8033ce4 <tcp_output+0x450>
8033d14: 00000106 br 8033d1c <tcp_output+0x488>
break;
8033d18: 0001883a nop
}
if (!sendm) { dtrap(); /* shouldn't happen */ }
8033d1c: e0bff917 ldw r2,-28(fp)
8033d20: 1000011e bne r2,zero,8033d28 <tcp_output+0x494>
8033d24: 8028cd40 call 8028cd4 <dtrap>
bufoff += sendm->m_len; /* index to next data to send in msend */
8033d28: e0bff917 ldw r2,-28(fp)
8033d2c: 10c00217 ldw r3,8(r2)
8033d30: e0bff817 ldw r2,-32(fp)
8033d34: 1885883a add r2,r3,r2
8033d38: e0bff815 stw r2,-32(fp)
/* if socket has multiple unsent mbufs, set flag for send to loop */
if ((sendm->m_next) && (len > (int)sendm->m_len))
8033d3c: e0bff917 ldw r2,-28(fp)
8033d40: 10800617 ldw r2,24(r2)
8033d44: 10000b26 beq r2,zero,8033d74 <tcp_output+0x4e0>
8033d48: e0bff917 ldw r2,-28(fp)
8033d4c: 10800217 ldw r2,8(r2)
8033d50: 1007883a mov r3,r2
8033d54: e0bfff17 ldw r2,-4(fp)
8033d58: 1880060e bge r3,r2,8033d74 <tcp_output+0x4e0>
{
flags &= ~TH_FIN; /* don't FIN on segment prior to last */
8033d5c: e0fffd17 ldw r3,-12(fp)
8033d60: 00bfff84 movi r2,-2
8033d64: 1884703a and r2,r3,r2
8033d68: e0bffd15 stw r2,-12(fp)
sendalot = 1; /* set to send more segments */
8033d6c: 00800044 movi r2,1
8033d70: e0bffa15 stw r2,-24(fp)
}
if((flags & TH_FIN) && (so->so_snd.sb_cc > (unsigned)len))
8033d74: e0bffd17 ldw r2,-12(fp)
8033d78: 1080004c andi r2,r2,1
8033d7c: 10000826 beq r2,zero,8033da0 <tcp_output+0x50c>
8033d80: e0bff717 ldw r2,-36(fp)
8033d84: 10801217 ldw r2,72(r2)
8033d88: e0ffff17 ldw r3,-4(fp)
8033d8c: 1880042e bgeu r3,r2,8033da0 <tcp_output+0x50c>
{
/* This can happen on slow links (PPP) which retry the last
* segment - the one with the FIN bit attached to data.
*/
flags &= ~TH_FIN; /* don't FIN on segment prior to last */
8033d90: e0fffd17 ldw r3,-12(fp)
8033d94: 00bfff84 movi r2,-2
8033d98: 1884703a and r2,r3,r2
8033d9c: e0bffd15 stw r2,-12(fp)
}
/* only send the rest of msend */
len = min(len, (int)sendm->m_len);
8033da0: e0bff917 ldw r2,-28(fp)
8033da4: 10800217 ldw r2,8(r2)
8033da8: 1007883a mov r3,r2
8033dac: e0bfff17 ldw r2,-4(fp)
8033db0: 1880010e bge r3,r2,8033db8 <tcp_output+0x524>
8033db4: 1805883a mov r2,r3
8033db8: e0bfff15 stw r2,-4(fp)
* Similarly, if sendm->m_data is not aligned with respect to
* sendm->m_base and ALIGN_TYPE, we will copy the data to
* ensure that it (and the then-prepended IP/TCP headers) will
* be aligned according to ALIGN_TYPE.
*/
if ((bufoff != 0) || /* data not front aligned in send mbuf? */
8033dbc: e0bff817 ldw r2,-32(fp)
8033dc0: 1000071e bne r2,zero,8033de0 <tcp_output+0x54c>
(((sendm->m_data - sendm->m_base) & (ALIGN_TYPE - 1)) != 0))
8033dc4: e0bff917 ldw r2,-28(fp)
8033dc8: 10c00317 ldw r3,12(r2)
8033dcc: e0bff917 ldw r2,-28(fp)
8033dd0: 10800417 ldw r2,16(r2)
8033dd4: 1885c83a sub r2,r3,r2
8033dd8: 108000cc andi r2,r2,3
if ((bufoff != 0) || /* data not front aligned in send mbuf? */
8033ddc: 10001526 beq r2,zero,8033e34 <tcp_output+0x5a0>
{
len = min(len, (int)(sendm->m_len - bufoff)); /* limit len again */
8033de0: e0bff917 ldw r2,-28(fp)
8033de4: 10c00217 ldw r3,8(r2)
8033de8: e0bff817 ldw r2,-32(fp)
8033dec: 1885c83a sub r2,r3,r2
8033df0: 1007883a mov r3,r2
8033df4: e0bfff17 ldw r2,-4(fp)
8033df8: 1880010e bge r3,r2,8033e00 <tcp_output+0x56c>
8033dfc: 1805883a mov r2,r3
8033e00: e0bfff15 stw r2,-4(fp)
* of the m_data buffer then we can't use it in place, else we
* might write the IP/TCP header over data that has not yet
* been acked. In this case we must make sure our send
* fits into a little buffer and send what we can.
*/
if ((len > (int)(lilbufsiz - HDRSLEN)) && /* length is bigger the small buffer? */
8033e04: d0a01717 ldw r2,-32676(gp)
8033e08: 10bff204 addi r2,r2,-56
8033e0c: 1007883a mov r3,r2
8033e10: e0bfff17 ldw r2,-4(fp)
8033e14: 1880070e bge r3,r2,8033e34 <tcp_output+0x5a0>
(bigfreeq.q_len < 2)) /* and we are low on big buffers */
8033e18: 008201b4 movhi r2,2054
8033e1c: 10b7dd17 ldw r2,-8332(r2)
if ((len > (int)(lilbufsiz - HDRSLEN)) && /* length is bigger the small buffer? */
8033e20: 10800088 cmpgei r2,r2,2
8033e24: 1000031e bne r2,zero,8033e34 <tcp_output+0x5a0>
{
len = lilbufsiz - HDRSLEN;
8033e28: d0a01717 ldw r2,-32676(gp)
8033e2c: 10bff204 addi r2,r2,-56
8033e30: e0bfff15 stw r2,-4(fp)
}
/* if send data is sufficiently aligned in packet, prepend TCP/IP header
* in the space provided.
*/
if (len && (bufoff == 0) &&
8033e34: e0bfff17 ldw r2,-4(fp)
8033e38: 10003526 beq r2,zero,8033f10 <tcp_output+0x67c>
8033e3c: e0bff817 ldw r2,-32(fp)
8033e40: 1000331e bne r2,zero,8033f10 <tcp_output+0x67c>
(sendm->pkt->inuse == 1) &&
8033e44: e0bff917 ldw r2,-28(fp)
8033e48: 10800117 ldw r2,4(r2)
8033e4c: 10800917 ldw r2,36(r2)
if (len && (bufoff == 0) &&
8033e50: 10800058 cmpnei r2,r2,1
8033e54: 10002e1e bne r2,zero,8033f10 <tcp_output+0x67c>
(((sendm->m_data - sendm->m_base) & (ALIGN_TYPE - 1)) == 0) &&
8033e58: e0bff917 ldw r2,-28(fp)
8033e5c: 10c00317 ldw r3,12(r2)
8033e60: e0bff917 ldw r2,-28(fp)
8033e64: 10800417 ldw r2,16(r2)
8033e68: 1885c83a sub r2,r3,r2
8033e6c: 108000cc andi r2,r2,3
(sendm->pkt->inuse == 1) &&
8033e70: 1000271e bne r2,zero,8033f10 <tcp_output+0x67c>
(((sendm->m_data - sendm->m_base) & (ALIGN_TYPE - 1)) == 0) &&
8033e74: e0bffb17 ldw r2,-20(fp)
8033e78: 1000251e bne r2,zero,8033f10 <tcp_output+0x67c>
(optlen == 0))
{
/* get an empty mbuf to "clone" the data */
m = m_getnbuf(MT_TXDATA, 0);
8033e7c: 000b883a mov r5,zero
8033e80: 01000084 movi r4,2
8033e84: 8029a700 call 8029a70 <m_getnbuf>
8033e88: e0bffc15 stw r2,-16(fp)
if (!m)
8033e8c: e0bffc17 ldw r2,-16(fp)
8033e90: 1000031e bne r2,zero,8033ea0 <tcp_output+0x60c>
{
EXIT_CRIT_SECTION(tp);
8033e94: 8028ef40 call 8028ef4 <irq_Unmask>
return (ENOBUFS);
8033e98: 00801a44 movi r2,105
8033e9c: 00025f06 br 803481c <tcp_output+0xf88>
}
m->pkt = sendm->pkt; /* copy packet location in new mbuf */
8033ea0: e0bff917 ldw r2,-28(fp)
8033ea4: 10c00117 ldw r3,4(r2)
8033ea8: e0bffc17 ldw r2,-16(fp)
8033eac: 10c00115 stw r3,4(r2)
m->pkt->inuse++; /* bump packet's use count */
8033eb0: e0bffc17 ldw r2,-16(fp)
8033eb4: 10800117 ldw r2,4(r2)
8033eb8: 10c00917 ldw r3,36(r2)
8033ebc: 18c00044 addi r3,r3,1
8033ec0: 10c00915 stw r3,36(r2)
m->m_base = sendm->m_base; /* clone mbuf members */
8033ec4: e0bff917 ldw r2,-28(fp)
8033ec8: 10c00417 ldw r3,16(r2)
8033ecc: e0bffc17 ldw r2,-16(fp)
8033ed0: 10c00415 stw r3,16(r2)
m->m_memsz = sendm->m_memsz;
8033ed4: e0bff917 ldw r2,-28(fp)
8033ed8: 10c00517 ldw r3,20(r2)
8033edc: e0bffc17 ldw r2,-16(fp)
8033ee0: 10c00515 stw r3,20(r2)
m->m_len = len + TCPIPHDRSZ; /* adjust clone for header */
8033ee4: e0bfff17 ldw r2,-4(fp)
8033ee8: 10800a04 addi r2,r2,40
8033eec: 1007883a mov r3,r2
8033ef0: e0bffc17 ldw r2,-16(fp)
8033ef4: 10c00215 stw r3,8(r2)
m->m_data = sendm->m_data - TCPIPHDRSZ;
8033ef8: e0bff917 ldw r2,-28(fp)
8033efc: 10800317 ldw r2,12(r2)
8033f00: 10fff604 addi r3,r2,-40
8033f04: e0bffc17 ldw r2,-16(fp)
8033f08: 10c00315 stw r3,12(r2)
8033f0c: 00002706 br 8033fac <tcp_output+0x718>
{
/* Grab a header mbuf, attaching a copy of data to be
* transmitted, and initialize the header from
* the template for sends on this connection.
*/
m = m_getwithdata (MT_HEADER, IFNETHDR_SIZE + TCPIPHDRSZ);
8033f10: d0a06417 ldw r2,-32368(gp)
8033f14: 10800a04 addi r2,r2,40
8033f18: 100b883a mov r5,r2
8033f1c: 010000c4 movi r4,3
8033f20: 8029a700 call 8029a70 <m_getnbuf>
8033f24: e0bffc15 stw r2,-16(fp)
if (m ==(struct mbuf *)NULL)
8033f28: e0bffc17 ldw r2,-16(fp)
8033f2c: 1000031e bne r2,zero,8033f3c <tcp_output+0x6a8>
{
EXIT_CRIT_SECTION(tp);
8033f30: 8028ef40 call 8028ef4 <irq_Unmask>
return ENOBUFS;
8033f34: 00801a44 movi r2,105
8033f38: 00023806 br 803481c <tcp_output+0xf88>
}
m->m_len = TCPIPHDRSZ;
8033f3c: e0bffc17 ldw r2,-16(fp)
8033f40: 00c00a04 movi r3,40
8033f44: 10c00215 stw r3,8(r2)
m->m_data += IFNETHDR_SIZE;/* Move this to sizeof tcpip hdr leave*/
8033f48: e0bffc17 ldw r2,-16(fp)
8033f4c: 10800317 ldw r2,12(r2)
8033f50: d0e06417 ldw r3,-32368(gp)
8033f54: 10c7883a add r3,r2,r3
8033f58: e0bffc17 ldw r2,-16(fp)
8033f5c: 10c00315 stw r3,12(r2)
/* 14 bytes for ethernet header */
if (len) /* attach any data to send */
8033f60: e0bfff17 ldw r2,-4(fp)
8033f64: 10001126 beq r2,zero,8033fac <tcp_output+0x718>
{
m->m_next = m_copy(so->so_snd.sb_mb, off, (int) len);
8033f68: e0bff717 ldw r2,-36(fp)
8033f6c: 10801817 ldw r2,96(r2)
8033f70: e1bfff17 ldw r6,-4(fp)
8033f74: e17ff517 ldw r5,-44(fp)
8033f78: 1009883a mov r4,r2
8033f7c: 8029d400 call 8029d40 <m_copy>
8033f80: 1007883a mov r3,r2
8033f84: e0bffc17 ldw r2,-16(fp)
8033f88: 10c00615 stw r3,24(r2)
if (m->m_next == 0)
8033f8c: e0bffc17 ldw r2,-16(fp)
8033f90: 10800617 ldw r2,24(r2)
8033f94: 1000051e bne r2,zero,8033fac <tcp_output+0x718>
{
m_freem(m);
8033f98: e13ffc17 ldw r4,-16(fp)
8033f9c: 8029cfc0 call 8029cfc <m_freem>
EXIT_CRIT_SECTION(tp);
8033fa0: 8028ef40 call 8028ef4 <irq_Unmask>
return ENOBUFS;
8033fa4: 00801a44 movi r2,105
8033fa8: 00021c06 br 803481c <tcp_output+0xf88>
}
}
}
EXIT_CRIT_SECTION(tp);
8033fac: 8028ef40 call 8028ef4 <irq_Unmask>
if (len)
8033fb0: e0bfff17 ldw r2,-4(fp)
8033fb4: 10002d26 beq r2,zero,803406c <tcp_output+0x7d8>
{
if (tp->t_force && len == 1)
8033fb8: e0bfea17 ldw r2,-88(fp)
8033fbc: 10800a83 ldbu r2,42(r2)
8033fc0: 10803fcc andi r2,r2,255
8033fc4: 1080201c xori r2,r2,128
8033fc8: 10bfe004 addi r2,r2,-128
8033fcc: 10000926 beq r2,zero,8033ff4 <tcp_output+0x760>
8033fd0: e0bfff17 ldw r2,-4(fp)
8033fd4: 10800058 cmpnei r2,r2,1
8033fd8: 1000061e bne r2,zero,8033ff4 <tcp_output+0x760>
tcpstat.tcps_sndprobe++;
8033fdc: 008201b4 movhi r2,2054
8033fe0: 10b8b917 ldw r2,-7452(r2)
8033fe4: 10c00044 addi r3,r2,1
8033fe8: 008201b4 movhi r2,2054
8033fec: 10f8b915 stw r3,-7452(r2)
8033ff0: 00004306 br 8034100 <tcp_output+0x86c>
else if (SEQ_LT(tp->snd_nxt, tp->snd_max))
8033ff4: e0bfea17 ldw r2,-88(fp)
8033ff8: 10c00f17 ldw r3,60(r2)
8033ffc: e0bfea17 ldw r2,-88(fp)
8034000: 10801a17 ldw r2,104(r2)
8034004: 1885c83a sub r2,r3,r2
8034008: 10000c0e bge r2,zero,803403c <tcp_output+0x7a8>
{
tcpstat.tcps_sndrexmitpack++;
803400c: 008201b4 movhi r2,2054
8034010: 10b8b617 ldw r2,-7464(r2)
8034014: 10c00044 addi r3,r2,1
8034018: 008201b4 movhi r2,2054
803401c: 10f8b615 stw r3,-7464(r2)
tcpstat.tcps_sndrexmitbyte += len;
8034020: 008201b4 movhi r2,2054
8034024: 10f8b717 ldw r3,-7460(r2)
8034028: e0bfff17 ldw r2,-4(fp)
803402c: 1887883a add r3,r3,r2
8034030: 008201b4 movhi r2,2054
8034034: 10f8b715 stw r3,-7460(r2)
8034038: 00003106 br 8034100 <tcp_output+0x86c>
tcpstat.tcps_sackresend++;
#endif
}
else
{
tcpstat.tcps_sndpack++;
803403c: 008201b4 movhi r2,2054
8034040: 10b8b417 ldw r2,-7472(r2)
8034044: 10c00044 addi r3,r2,1
8034048: 008201b4 movhi r2,2054
803404c: 10f8b415 stw r3,-7472(r2)
tcpstat.tcps_sndbyte += len;
8034050: 008201b4 movhi r2,2054
8034054: 10f8b517 ldw r3,-7468(r2)
8034058: e0bfff17 ldw r2,-4(fp)
803405c: 1887883a add r3,r3,r2
8034060: 008201b4 movhi r2,2054
8034064: 10f8b515 stw r3,-7468(r2)
8034068: 00002506 br 8034100 <tcp_output+0x86c>
}
}
else if (tp->t_flags & TF_ACKNOW)
803406c: e0bfea17 ldw r2,-88(fp)
8034070: 10800b0b ldhu r2,44(r2)
8034074: 10bfffcc andi r2,r2,65535
8034078: 1080004c andi r2,r2,1
803407c: 10000626 beq r2,zero,8034098 <tcp_output+0x804>
{
tcpstat.tcps_sndacks++;
8034080: 008201b4 movhi r2,2054
8034084: 10b8b817 ldw r2,-7456(r2)
8034088: 10c00044 addi r3,r2,1
803408c: 008201b4 movhi r2,2054
8034090: 10f8b815 stw r3,-7456(r2)
8034094: 00001a06 br 8034100 <tcp_output+0x86c>
}
else if (flags & (TH_SYN|TH_FIN|TH_RST))
8034098: e0bffd17 ldw r2,-12(fp)
803409c: 108001cc andi r2,r2,7
80340a0: 10000626 beq r2,zero,80340bc <tcp_output+0x828>
tcpstat.tcps_sndctrl++;
80340a4: 008201b4 movhi r2,2054
80340a8: 10b8bc17 ldw r2,-7440(r2)
80340ac: 10c00044 addi r3,r2,1
80340b0: 008201b4 movhi r2,2054
80340b4: 10f8bc15 stw r3,-7440(r2)
80340b8: 00001106 br 8034100 <tcp_output+0x86c>
else if (SEQ_GT(tp->snd_up, tp->snd_una))
80340bc: e0bfea17 ldw r2,-88(fp)
80340c0: 10c01017 ldw r3,64(r2)
80340c4: e0bfea17 ldw r2,-88(fp)
80340c8: 10800e17 ldw r2,56(r2)
80340cc: 1885c83a sub r2,r3,r2
80340d0: 0080060e bge zero,r2,80340ec <tcp_output+0x858>
tcpstat.tcps_sndurg++;
80340d4: 008201b4 movhi r2,2054
80340d8: 10b8ba17 ldw r2,-7448(r2)
80340dc: 10c00044 addi r3,r2,1
80340e0: 008201b4 movhi r2,2054
80340e4: 10f8ba15 stw r3,-7448(r2)
80340e8: 00000506 br 8034100 <tcp_output+0x86c>
else
tcpstat.tcps_sndwinup++;
80340ec: 008201b4 movhi r2,2054
80340f0: 10b8bb17 ldw r2,-7444(r2)
80340f4: 10c00044 addi r3,r2,1
80340f8: 008201b4 movhi r2,2054
80340fc: 10f8bb15 stw r3,-7444(r2)
ti = (struct tcpiphdr *)(m->m_data+sizeof(struct ip)-sizeof(struct ipovly));
8034100: e0bffc17 ldw r2,-16(fp)
8034104: 10800317 ldw r2,12(r2)
8034108: e0bff315 stw r2,-52(fp)
if ((char *)ti < m->pkt->nb_buff)
803410c: e0bffc17 ldw r2,-16(fp)
8034110: 10800117 ldw r2,4(r2)
8034114: 10800117 ldw r2,4(r2)
8034118: e0fff317 ldw r3,-52(fp)
803411c: 1880032e bgeu r3,r2,803412c <tcp_output+0x898>
{
panic("tcp_out- packet ptr underflow\n");
8034120: 01020174 movhi r4,2053
8034124: 212aa204 addi r4,r4,-21880
8034128: 80271780 call 8027178 <panic>
}
tcp_mbuf = m; /* flag TCP header mbuf */
803412c: e0bffc17 ldw r2,-16(fp)
8034130: e0bff215 stw r2,-56(fp)
tcp_mbuf->m_data += sizeof(struct ipovly);
tcp_mbuf->m_len -= sizeof(struct ipovly);
}
#endif /* end IP_V6 */
if (tp->t_template == 0)
8034134: e0bfea17 ldw r2,-88(fp)
8034138: 10800c17 ldw r2,48(r2)
803413c: 1000031e bne r2,zero,803414c <tcp_output+0x8b8>
panic("tcp_output");
8034140: 01020174 movhi r4,2053
8034144: 212aaa04 addi r4,r4,-21848
8034148: 80271780 call 8027178 <panic>
MEMCPY((char*)ti, (char*)tp->t_template, sizeof(struct tcpiphdr));
803414c: e0bfea17 ldw r2,-88(fp)
8034150: 10800c17 ldw r2,48(r2)
8034154: 01800a04 movi r6,40
8034158: 100b883a mov r5,r2
803415c: e13ff317 ldw r4,-52(fp)
8034160: 80086b80 call 80086b8 <memcpy>
/*
* Fill in fields, remembering maximum advertised
* window for use in delaying messages about window sizes.
* If resending a FIN, be sure not to use a new sequence number.
*/
if (flags & TH_FIN && tp->t_flags & TF_SENTFIN &&
8034164: e0bffd17 ldw r2,-12(fp)
8034168: 1080004c andi r2,r2,1
803416c: 10000f26 beq r2,zero,80341ac <tcp_output+0x918>
8034170: e0bfea17 ldw r2,-88(fp)
8034174: 10800b0b ldhu r2,44(r2)
8034178: 10bfffcc andi r2,r2,65535
803417c: 1080040c andi r2,r2,16
8034180: 10000a26 beq r2,zero,80341ac <tcp_output+0x918>
tp->snd_nxt == tp->snd_max)
8034184: e0bfea17 ldw r2,-88(fp)
8034188: 10c00f17 ldw r3,60(r2)
803418c: e0bfea17 ldw r2,-88(fp)
8034190: 10801a17 ldw r2,104(r2)
if (flags & TH_FIN && tp->t_flags & TF_SENTFIN &&
8034194: 1880051e bne r3,r2,80341ac <tcp_output+0x918>
{
tp->snd_nxt--;
8034198: e0bfea17 ldw r2,-88(fp)
803419c: 10800f17 ldw r2,60(r2)
80341a0: 10ffffc4 addi r3,r2,-1
80341a4: e0bfea17 ldw r2,-88(fp)
80341a8: 10c00f15 stw r3,60(r2)
}
ti->ti_seq = htonl(tp->snd_nxt);
80341ac: e0bfea17 ldw r2,-88(fp)
80341b0: 10800f17 ldw r2,60(r2)
80341b4: 1006d63a srli r3,r2,24
80341b8: e0bfea17 ldw r2,-88(fp)
80341bc: 10800f17 ldw r2,60(r2)
80341c0: 1004d23a srli r2,r2,8
80341c4: 10bfc00c andi r2,r2,65280
80341c8: 1886b03a or r3,r3,r2
80341cc: e0bfea17 ldw r2,-88(fp)
80341d0: 10800f17 ldw r2,60(r2)
80341d4: 1004923a slli r2,r2,8
80341d8: 10803fec andhi r2,r2,255
80341dc: 1886b03a or r3,r3,r2
80341e0: e0bfea17 ldw r2,-88(fp)
80341e4: 10800f17 ldw r2,60(r2)
80341e8: 1004963a slli r2,r2,24
80341ec: 1886b03a or r3,r3,r2
80341f0: e0bff317 ldw r2,-52(fp)
80341f4: 10c00615 stw r3,24(r2)
ti->ti_ack = htonl(tp->rcv_nxt);
80341f8: e0bfea17 ldw r2,-88(fp)
80341fc: 10801617 ldw r2,88(r2)
8034200: 1006d63a srli r3,r2,24
8034204: e0bfea17 ldw r2,-88(fp)
8034208: 10801617 ldw r2,88(r2)
803420c: 1004d23a srli r2,r2,8
8034210: 10bfc00c andi r2,r2,65280
8034214: 1886b03a or r3,r3,r2
8034218: e0bfea17 ldw r2,-88(fp)
803421c: 10801617 ldw r2,88(r2)
8034220: 1004923a slli r2,r2,8
8034224: 10803fec andhi r2,r2,255
8034228: 1886b03a or r3,r3,r2
803422c: e0bfea17 ldw r2,-88(fp)
8034230: 10801617 ldw r2,88(r2)
8034234: 1004963a slli r2,r2,24
8034238: 1886b03a or r3,r3,r2
803423c: e0bff317 ldw r2,-52(fp)
8034240: 10c00715 stw r3,28(r2)
* a retransmission, and the original SYN caused PPP to start
* bringing the interface up, and PPP has got a new IP address
* via IPCP), update the template and the inpcb with the new
* address.
*/
if (flags & TH_SYN)
8034244: e0bffd17 ldw r2,-12(fp)
8034248: 1080008c andi r2,r2,2
803424c: 10002326 beq r2,zero,80342dc <tcp_output+0xa48>
{
struct inpcb * inp;
inp = (struct inpcb *)so->so_pcb;
8034250: e0bff717 ldw r2,-36(fp)
8034254: 10800117 ldw r2,4(r2)
8034258: e0bff115 stw r2,-60(fp)
switch(so->so_domain)
803425c: e0bff717 ldw r2,-36(fp)
8034260: 10800517 ldw r2,20(r2)
8034264: 10800098 cmpnei r2,r2,2
8034268: 10001a1e bne r2,zero,80342d4 <tcp_output+0xa40>
}
}
#endif /* INCLUDE_PPP */
/* If this is a SYN (not a SYN/ACK) then set the pmtu */
if((flags & TH_ACK) == 0)
803426c: e0bffd17 ldw r2,-12(fp)
8034270: 1080040c andi r2,r2,16
8034274: 10001b1e bne r2,zero,80342e4 <tcp_output+0xa50>
inp->inp_pmtu = pmtucache_get(inp->inp_faddr.s_addr);
#else /* not compiled for pathmtu, guess based on iface */
{
NET ifp;
/* find iface for route. Pass "src" as nexthop return */
ifp = iproute(ti->ti_dst.s_addr, &src);
8034278: e0bff317 ldw r2,-52(fp)
803427c: 10800417 ldw r2,16(r2)
8034280: e0ffeb04 addi r3,fp,-84
8034284: 180b883a mov r5,r3
8034288: 1009883a mov r4,r2
803428c: 803b3700 call 803b370 <iproute>
8034290: e0bff015 stw r2,-64(fp)
if(ifp)
8034294: e0bff017 ldw r2,-64(fp)
8034298: 10000926 beq r2,zero,80342c0 <tcp_output+0xa2c>
inp->inp_pmtu = ifp->n_mtu - (ifp->n_lnh + 40);
803429c: e0bff017 ldw r2,-64(fp)
80342a0: 10c00917 ldw r3,36(r2)
80342a4: e0bff017 ldw r2,-64(fp)
80342a8: 10800817 ldw r2,32(r2)
80342ac: 10800a04 addi r2,r2,40
80342b0: 1887c83a sub r3,r3,r2
80342b4: e0bff117 ldw r2,-60(fp)
80342b8: 10c00615 stw r3,24(r2)
else
inp->inp_pmtu = 580; /* Ugh. */
}
#endif /* IP_PMTU */
}
break;
80342bc: 00000906 br 80342e4 <tcp_output+0xa50>
inp->inp_pmtu = 580; /* Ugh. */
80342c0: e0bff117 ldw r2,-60(fp)
80342c4: 00c09104 movi r3,580
80342c8: 10c00615 stw r3,24(r2)
break;
80342cc: 0001883a nop
80342d0: 00000406 br 80342e4 <tcp_output+0xa50>
}
break;
}
#endif /* IP_V6 */
default:
dtrap(); /* bad domain setting */
80342d4: 8028cd40 call 8028cd4 <dtrap>
80342d8: 00000306 br 80342e8 <tcp_output+0xa54>
}
}
80342dc: 0001883a nop
80342e0: 00000106 br 80342e8 <tcp_output+0xa54>
break;
80342e4: 0001883a nop
/* fill in options if any are set */
if (optlen)
80342e8: e0bffb17 ldw r2,-20(fp)
80342ec: 10002b26 beq r2,zero,803439c <tcp_output+0xb08>
{
struct mbuf * mopt;
mopt = m_getwithdata(MT_TXDATA, MAXOPTLEN);
80342f0: 01404004 movi r5,256
80342f4: 01000084 movi r4,2
80342f8: 8029a700 call 8029a70 <m_getnbuf>
80342fc: e0bfef15 stw r2,-68(fp)
if (mopt == NULL)
8034300: e0bfef17 ldw r2,-68(fp)
8034304: 1000041e bne r2,zero,8034318 <tcp_output+0xa84>
{
m_freem(m);
8034308: e13ffc17 ldw r4,-16(fp)
803430c: 8029cfc0 call 8029cfc <m_freem>
return (ENOBUFS);
8034310: 00801a44 movi r2,105
8034314: 00014106 br 803481c <tcp_output+0xf88>
}
/* insert options mbuf after after tmp_mbuf */
mopt->m_next = tcp_mbuf->m_next;
8034318: e0bff217 ldw r2,-56(fp)
803431c: 10c00617 ldw r3,24(r2)
8034320: e0bfef17 ldw r2,-68(fp)
8034324: 10c00615 stw r3,24(r2)
tcp_mbuf->m_next = mopt;
8034328: e0bff217 ldw r2,-56(fp)
803432c: e0ffef17 ldw r3,-68(fp)
8034330: 10c00615 stw r3,24(r2)
/* extend options to aligned address */
while(optlen & 0x03)
8034334: 00000606 br 8034350 <tcp_output+0xabc>
tcp_optionbuf[optlen++] = TCPOPT_EOL;
8034338: e0bffb17 ldw r2,-20(fp)
803433c: 10c00044 addi r3,r2,1
8034340: e0fffb15 stw r3,-20(fp)
8034344: d0e08804 addi r3,gp,-32224
8034348: 10c5883a add r2,r2,r3
803434c: 10000005 stb zero,0(r2)
while(optlen & 0x03)
8034350: e0bffb17 ldw r2,-20(fp)
8034354: 108000cc andi r2,r2,3
8034358: 103ff71e bne r2,zero,8034338 <tcp_output+0xaa4>
MEMCPY(mtod(mopt, char *), tcp_optionbuf, optlen);
803435c: e0bfef17 ldw r2,-68(fp)
8034360: 10800317 ldw r2,12(r2)
8034364: e1bffb17 ldw r6,-20(fp)
8034368: d1608804 addi r5,gp,-32224
803436c: 1009883a mov r4,r2
8034370: 80086b80 call 80086b8 <memcpy>
mopt->m_len = optlen;
8034374: e0bfef17 ldw r2,-68(fp)
8034378: e0fffb17 ldw r3,-20(fp)
803437c: 10c00215 stw r3,8(r2)
/* use portable macro to set tcp data offset bits */
SET_TH_OFF(ti->ti_t, ((sizeof (struct tcphdr) + optlen) >> 2));
8034380: e0bffb17 ldw r2,-20(fp)
8034384: 10800504 addi r2,r2,20
8034388: 1004d0ba srli r2,r2,2
803438c: 1004913a slli r2,r2,4
8034390: 1007883a mov r3,r2
8034394: e0bff317 ldw r2,-52(fp)
8034398: 10c00805 stb r3,32(r2)
}
ti->ti_flags = (u_char)flags;
803439c: e0bffd17 ldw r2,-12(fp)
80343a0: 1007883a mov r3,r2
80343a4: e0bff317 ldw r2,-52(fp)
80343a8: 10c00845 stb r3,33(r2)
/*
* Calculate receive window. Don't shrink window,
* but avoid silly window syndrome.
*/
if (win < (long)(so->so_rcv.sb_hiwat / 4) && win < (long)tp->t_maxseg)
80343ac: e0bff717 ldw r2,-36(fp)
80343b0: 10800b17 ldw r2,44(r2)
80343b4: 1004d0ba srli r2,r2,2
80343b8: 1007883a mov r3,r2
80343bc: e0bffe17 ldw r2,-8(fp)
80343c0: 10c0060e bge r2,r3,80343dc <tcp_output+0xb48>
80343c4: e0bfea17 ldw r2,-88(fp)
80343c8: 10800a0b ldhu r2,40(r2)
80343cc: 10bfffcc andi r2,r2,65535
80343d0: e0fffe17 ldw r3,-8(fp)
80343d4: 1880010e bge r3,r2,80343dc <tcp_output+0xb48>
win = 0;
80343d8: e03ffe15 stw zero,-8(fp)
if (win < (long)(tp->rcv_adv - tp->rcv_nxt))
80343dc: e0bfea17 ldw r2,-88(fp)
80343e0: 10c01917 ldw r3,100(r2)
80343e4: e0bfea17 ldw r2,-88(fp)
80343e8: 10801617 ldw r2,88(r2)
80343ec: 1885c83a sub r2,r3,r2
80343f0: 1007883a mov r3,r2
80343f4: e0bffe17 ldw r2,-8(fp)
80343f8: 10c0060e bge r2,r3,8034414 <tcp_output+0xb80>
win = (long)(tp->rcv_adv - tp->rcv_nxt);
80343fc: e0bfea17 ldw r2,-88(fp)
8034400: 10c01917 ldw r3,100(r2)
8034404: e0bfea17 ldw r2,-88(fp)
8034408: 10801617 ldw r2,88(r2)
803440c: 1885c83a sub r2,r3,r2
8034410: e0bffe15 stw r2,-8(fp)
/* do check for Iniche buffer limits -JB- */
if (bigfreeq.q_len == 0) /* If queue length is 0, set window to 0 */
8034414: 008201b4 movhi r2,2054
8034418: 10b7dd17 ldw r2,-8332(r2)
803441c: 1000021e bne r2,zero,8034428 <tcp_output+0xb94>
{
win = 0;
8034420: e03ffe15 stw zero,-8(fp)
8034424: 00000e06 br 8034460 <tcp_output+0xbcc>
}
else if(win > (((long)bigfreeq.q_len - 1) * (long)bigbufsiz))
8034428: 008201b4 movhi r2,2054
803442c: 10b7dd17 ldw r2,-8332(r2)
8034430: 10bfffc4 addi r2,r2,-1
8034434: d0e01917 ldw r3,-32668(gp)
8034438: 10c7383a mul r3,r2,r3
803443c: e0bffe17 ldw r2,-8(fp)
8034440: 1880070e bge r3,r2,8034460 <tcp_output+0xbcc>
{
win = ((long)bigfreeq.q_len - 1) * bigbufsiz;
8034444: 008201b4 movhi r2,2054
8034448: 10b7dd17 ldw r2,-8332(r2)
803444c: 10bfffc4 addi r2,r2,-1
8034450: 1007883a mov r3,r2
8034454: d0a01917 ldw r2,-32668(gp)
8034458: 1885383a mul r2,r3,r2
803445c: e0bffe15 stw r2,-8(fp)
ti->ti_win = htons((u_short)(win >> tp->rcv_wind_scale)); /* apply scale */
}
else
#endif /* TCP_WIN_SCALE */
{
ti->ti_win = htons((u_short)win);
8034460: e0bffe17 ldw r2,-8(fp)
8034464: 10bfffcc andi r2,r2,65535
8034468: 1004d23a srli r2,r2,8
803446c: 1007883a mov r3,r2
8034470: e0bffe17 ldw r2,-8(fp)
8034474: 10bfffcc andi r2,r2,65535
8034478: 1004923a slli r2,r2,8
803447c: 1884b03a or r2,r3,r2
8034480: 1007883a mov r3,r2
8034484: e0bff317 ldw r2,-52(fp)
8034488: 10c0088d sth r3,34(r2)
}
if (SEQ_GT(tp->snd_up, tp->snd_nxt))
803448c: e0bfea17 ldw r2,-88(fp)
8034490: 10c01017 ldw r3,64(r2)
8034494: e0bfea17 ldw r2,-88(fp)
8034498: 10800f17 ldw r2,60(r2)
803449c: 1885c83a sub r2,r3,r2
80344a0: 00801c0e bge zero,r2,8034514 <tcp_output+0xc80>
{
ti->ti_urp = htons((u_short)(tp->snd_up - tp->snd_nxt));
80344a4: e0bfea17 ldw r2,-88(fp)
80344a8: 10801017 ldw r2,64(r2)
80344ac: 1007883a mov r3,r2
80344b0: e0bfea17 ldw r2,-88(fp)
80344b4: 10800f17 ldw r2,60(r2)
80344b8: 1885c83a sub r2,r3,r2
80344bc: 10bfffcc andi r2,r2,65535
80344c0: 1004d23a srli r2,r2,8
80344c4: 1007883a mov r3,r2
80344c8: e0bfea17 ldw r2,-88(fp)
80344cc: 10801017 ldw r2,64(r2)
80344d0: 1009883a mov r4,r2
80344d4: e0bfea17 ldw r2,-88(fp)
80344d8: 10800f17 ldw r2,60(r2)
80344dc: 2085c83a sub r2,r4,r2
80344e0: 10bfffcc andi r2,r2,65535
80344e4: 1004923a slli r2,r2,8
80344e8: 1884b03a or r2,r3,r2
80344ec: 1007883a mov r3,r2
80344f0: e0bff317 ldw r2,-52(fp)
80344f4: 10c0098d sth r3,38(r2)
ti->ti_flags |= TH_URG;
80344f8: e0bff317 ldw r2,-52(fp)
80344fc: 10800843 ldbu r2,33(r2)
8034500: 10800814 ori r2,r2,32
8034504: 1007883a mov r3,r2
8034508: e0bff317 ldw r2,-52(fp)
803450c: 10c00845 stb r3,33(r2)
8034510: 00000406 br 8034524 <tcp_output+0xc90>
* If no urgent pointer to send, then we pull
* the urgent pointer to the left edge of the send window
* so that it doesn't drift into the send window on sequence
* number wraparound.
*/
tp->snd_up = tp->snd_una; /* drag it along */
8034514: e0bfea17 ldw r2,-88(fp)
8034518: 10c00e17 ldw r3,56(r2)
803451c: e0bfea17 ldw r2,-88(fp)
8034520: 10c01015 stw r3,64(r2)
/*
* If anything to send and we can send it all, set PUSH.
* (This will keep happy those implementations which only
* give data to the user when a buffer fills or a PUSH comes in.)
*/
if (len && off+len == (int)so->so_snd.sb_cc)
8034524: e0bfff17 ldw r2,-4(fp)
8034528: 10000c26 beq r2,zero,803455c <tcp_output+0xcc8>
803452c: e0fff517 ldw r3,-44(fp)
8034530: e0bfff17 ldw r2,-4(fp)
8034534: 1885883a add r2,r3,r2
8034538: e0fff717 ldw r3,-36(fp)
803453c: 18c01217 ldw r3,72(r3)
8034540: 10c0061e bne r2,r3,803455c <tcp_output+0xcc8>
ti->ti_flags |= TH_PUSH;
8034544: e0bff317 ldw r2,-52(fp)
8034548: 10800843 ldbu r2,33(r2)
803454c: 10800214 ori r2,r2,8
8034550: 1007883a mov r3,r2
8034554: e0bff317 ldw r2,-52(fp)
8034558: 10c00845 stb r3,33(r2)
/*
* In transmit state, time the transmission and arrange for
* the retransmit. In persist state, just set snd_max.
*/
if (tp->t_force == 0 || tp->t_timer[TCPT_PERSIST] == 0)
803455c: e0bfea17 ldw r2,-88(fp)
8034560: 10800a83 ldbu r2,42(r2)
8034564: 10803fcc andi r2,r2,255
8034568: 1080201c xori r2,r2,128
803456c: 10bfe004 addi r2,r2,-128
8034570: 10000326 beq r2,zero,8034580 <tcp_output+0xcec>
8034574: e0bfea17 ldw r2,-88(fp)
8034578: 10800417 ldw r2,16(r2)
803457c: 10004b1e bne r2,zero,80346ac <tcp_output+0xe18>
{
tcp_seq startseq = tp->snd_nxt;
8034580: e0bfea17 ldw r2,-88(fp)
8034584: 10800f17 ldw r2,60(r2)
8034588: e0bfee15 stw r2,-72(fp)
/*
* Advance snd_nxt over sequence space of this segment.
*/
if (flags & TH_SYN)
803458c: e0bffd17 ldw r2,-12(fp)
8034590: 1080008c andi r2,r2,2
8034594: 10000526 beq r2,zero,80345ac <tcp_output+0xd18>
tp->snd_nxt++;
8034598: e0bfea17 ldw r2,-88(fp)
803459c: 10800f17 ldw r2,60(r2)
80345a0: 10c00044 addi r3,r2,1
80345a4: e0bfea17 ldw r2,-88(fp)
80345a8: 10c00f15 stw r3,60(r2)
if (flags & TH_FIN)
80345ac: e0bffd17 ldw r2,-12(fp)
80345b0: 1080004c andi r2,r2,1
80345b4: 10000b26 beq r2,zero,80345e4 <tcp_output+0xd50>
{
tp->snd_nxt++;
80345b8: e0bfea17 ldw r2,-88(fp)
80345bc: 10800f17 ldw r2,60(r2)
80345c0: 10c00044 addi r3,r2,1
80345c4: e0bfea17 ldw r2,-88(fp)
80345c8: 10c00f15 stw r3,60(r2)
tp->t_flags |= TF_SENTFIN;
80345cc: e0bfea17 ldw r2,-88(fp)
80345d0: 10800b0b ldhu r2,44(r2)
80345d4: 10800414 ori r2,r2,16
80345d8: 1007883a mov r3,r2
80345dc: e0bfea17 ldw r2,-88(fp)
80345e0: 10c00b0d sth r3,44(r2)
}
tp->snd_nxt += len;
80345e4: e0bfea17 ldw r2,-88(fp)
80345e8: 10c00f17 ldw r3,60(r2)
80345ec: e0bfff17 ldw r2,-4(fp)
80345f0: 1887883a add r3,r3,r2
80345f4: e0bfea17 ldw r2,-88(fp)
80345f8: 10c00f15 stw r3,60(r2)
if (SEQ_GT(tp->snd_nxt, tp->snd_max))
80345fc: e0bfea17 ldw r2,-88(fp)
8034600: 10c00f17 ldw r3,60(r2)
8034604: e0bfea17 ldw r2,-88(fp)
8034608: 10801a17 ldw r2,104(r2)
803460c: 1885c83a sub r2,r3,r2
8034610: 0080120e bge zero,r2,803465c <tcp_output+0xdc8>
{
tp->snd_max = tp->snd_nxt;
8034614: e0bfea17 ldw r2,-88(fp)
8034618: 10c00f17 ldw r3,60(r2)
803461c: e0bfea17 ldw r2,-88(fp)
8034620: 10c01a15 stw r3,104(r2)
/*
* Time this transmission if not a retransmission and
* not currently timing anything.
*/
if (tp->t_rttick == 0)
8034624: e0bfea17 ldw r2,-88(fp)
8034628: 10801e17 ldw r2,120(r2)
803462c: 10000b1e bne r2,zero,803465c <tcp_output+0xdc8>
{
tp->t_rttick = cticks;
8034630: d0e07d17 ldw r3,-32268(gp)
8034634: e0bfea17 ldw r2,-88(fp)
8034638: 10c01e15 stw r3,120(r2)
tp->t_rtseq = startseq;
803463c: e0bfea17 ldw r2,-88(fp)
8034640: e0ffee17 ldw r3,-72(fp)
8034644: 10c01f15 stw r3,124(r2)
tcpstat.tcps_segstimed++;
8034648: 008201b4 movhi r2,2054
803464c: 10b8aa17 ldw r2,-7512(r2)
8034650: 10c00044 addi r3,r2,1
8034654: 008201b4 movhi r2,2054
8034658: 10f8aa15 stw r3,-7512(r2)
* Initial value for retransmit timer is smoothed
* round-trip time + 2 * round-trip time variance.
* Initialize shift counter which is used for backoff
* of retransmit time.
*/
if (tp->t_timer[TCPT_REXMT] == 0 &&
803465c: e0bfea17 ldw r2,-88(fp)
8034660: 10800317 ldw r2,12(r2)
8034664: 1000201e bne r2,zero,80346e8 <tcp_output+0xe54>
tp->snd_nxt != tp->snd_una)
8034668: e0bfea17 ldw r2,-88(fp)
803466c: 10c00f17 ldw r3,60(r2)
8034670: e0bfea17 ldw r2,-88(fp)
8034674: 10800e17 ldw r2,56(r2)
if (tp->t_timer[TCPT_REXMT] == 0 &&
8034678: 18801b26 beq r3,r2,80346e8 <tcp_output+0xe54>
{
tp->t_timer[TCPT_REXMT] = tp->t_rxtcur;
803467c: e0bfea17 ldw r2,-88(fp)
8034680: 10c00817 ldw r3,32(r2)
8034684: e0bfea17 ldw r2,-88(fp)
8034688: 10c00315 stw r3,12(r2)
if (tp->t_timer[TCPT_PERSIST])
803468c: e0bfea17 ldw r2,-88(fp)
8034690: 10800417 ldw r2,16(r2)
8034694: 10001426 beq r2,zero,80346e8 <tcp_output+0xe54>
{
tp->t_timer[TCPT_PERSIST] = 0;
8034698: e0bfea17 ldw r2,-88(fp)
803469c: 10000415 stw zero,16(r2)
tp->t_rxtshift = 0;
80346a0: e0bfea17 ldw r2,-88(fp)
80346a4: 10000715 stw zero,28(r2)
{
80346a8: 00000f06 br 80346e8 <tcp_output+0xe54>
}
}
}
else
{
if (SEQ_GT(tp->snd_nxt + len, tp->snd_max))
80346ac: e0bfea17 ldw r2,-88(fp)
80346b0: 10c00f17 ldw r3,60(r2)
80346b4: e0bfff17 ldw r2,-4(fp)
80346b8: 1887883a add r3,r3,r2
80346bc: e0bfea17 ldw r2,-88(fp)
80346c0: 10801a17 ldw r2,104(r2)
80346c4: 1885c83a sub r2,r3,r2
80346c8: 0080080e bge zero,r2,80346ec <tcp_output+0xe58>
tp->snd_max = tp->snd_nxt + len;
80346cc: e0bfea17 ldw r2,-88(fp)
80346d0: 10c00f17 ldw r3,60(r2)
80346d4: e0bfff17 ldw r2,-4(fp)
80346d8: 1887883a add r3,r3,r2
80346dc: e0bfea17 ldw r2,-88(fp)
80346e0: 10c01a15 stw r3,104(r2)
80346e4: 00000106 br 80346ec <tcp_output+0xe58>
{
80346e8: 0001883a nop
tcp_trace("tcp_output: sending, state %d, tcpcb: %x",
tp->t_state, tp );
#endif
#ifdef MUTE_WARNS
error = 0;
80346ec: e03fed15 stw zero,-76(fp)
if(so->so_domain != AF_INET6)
#endif /* IP_V6 */
{
struct ip * pip;
pip = mtod(m, struct ip *);
80346f0: e0bffc17 ldw r2,-16(fp)
80346f4: 10800317 ldw r2,12(r2)
80346f8: e0bfec15 stw r2,-80(fp)
/* Fill in IP length and send to IP level. */
pip->ip_len = (u_short)(TCPIPHDRSZ + optlen + len);
80346fc: e0bffb17 ldw r2,-20(fp)
8034700: 1007883a mov r3,r2
8034704: e0bfff17 ldw r2,-4(fp)
8034708: 1885883a add r2,r3,r2
803470c: 10800a04 addi r2,r2,40
8034710: 1007883a mov r3,r2
8034714: e0bfec17 ldw r2,-80(fp)
8034718: 10c0008d sth r3,2(r2)
error = ip_output(m, so->so_optsPack);
803471c: e0bff717 ldw r2,-36(fp)
8034720: 10801f17 ldw r2,124(r2)
8034724: 100b883a mov r5,r2
8034728: e13ffc17 ldw r4,-16(fp)
803472c: 802a6580 call 802a658 <ip_output>
8034730: e0bfed15 stw r2,-76(fp)
(sizeof(struct ipv6) + sizeof(struct tcphdr) + optlen + len),
(struct ip_socopts *)0);
}
#endif /* IP_V6 */
if (error)
8034734: e0bfed17 ldw r2,-76(fp)
8034738: 10001326 beq r2,zero,8034788 <tcp_output+0xef4>
{
if (error == ENOBUFS) /* ip_output needed a copy buffer it couldn't get */
803473c: e0bfed17 ldw r2,-76(fp)
8034740: 10801a58 cmpnei r2,r2,105
8034744: 10000e1e bne r2,zero,8034780 <tcp_output+0xeec>
{
if (m->m_type == MT_FREE) /* ip_output() probably freed first mbuf */
8034748: e0bffc17 ldw r2,-16(fp)
803474c: 10800817 ldw r2,32(r2)
8034750: 1000031e bne r2,zero,8034760 <tcp_output+0xecc>
m = m->m_next;
8034754: e0bffc17 ldw r2,-16(fp)
8034758: 10800617 ldw r2,24(r2)
803475c: e0bffc15 stw r2,-16(fp)
m_freem(m); /* free the mbuf chain */
8034760: e13ffc17 ldw r4,-16(fp)
8034764: 8029cfc0 call 8029cfc <m_freem>
tcp_quench(tp->t_inpcb);
8034768: e0bfea17 ldw r2,-88(fp)
803476c: 10800d17 ldw r2,52(r2)
8034770: 1009883a mov r4,r2
8034774: 80351d00 call 80351d0 <tcp_quench>
return (error);
8034778: e0bfed17 ldw r2,-76(fp)
803477c: 00002706 br 803481c <tcp_output+0xf88>
}
return (error);
8034780: e0bfed17 ldw r2,-76(fp)
8034784: 00002506 br 803481c <tcp_output+0xf88>
/*
* Data sent (as far as we can tell).
*/
TCP_MIB_INC(tcpOutSegs); /* keep MIB stats */
8034788: 008201b4 movhi r2,2054
803478c: 10b88017 ldw r2,-7680(r2)
8034790: 10c00044 addi r3,r2,1
8034794: 008201b4 movhi r2,2054
8034798: 10f88015 stw r3,-7680(r2)
tcpstat.tcps_sndtotal++;
803479c: 008201b4 movhi r2,2054
80347a0: 10b8b317 ldw r2,-7476(r2)
80347a4: 10c00044 addi r3,r2,1
80347a8: 008201b4 movhi r2,2054
80347ac: 10f8b315 stw r3,-7476(r2)
/*
* If this advertises a larger window than any other segment,
* then remember the size of the advertised window.
* Any pending ACK has now been sent.
*/
if (win > 0 && SEQ_GT(tp->rcv_nxt+win, tp->rcv_adv))
80347b0: e0bffe17 ldw r2,-8(fp)
80347b4: 00800e0e bge zero,r2,80347f0 <tcp_output+0xf5c>
80347b8: e0bfea17 ldw r2,-88(fp)
80347bc: 10c01617 ldw r3,88(r2)
80347c0: e0bffe17 ldw r2,-8(fp)
80347c4: 1887883a add r3,r3,r2
80347c8: e0bfea17 ldw r2,-88(fp)
80347cc: 10801917 ldw r2,100(r2)
80347d0: 1885c83a sub r2,r3,r2
80347d4: 0080060e bge zero,r2,80347f0 <tcp_output+0xf5c>
tp->rcv_adv = tp->rcv_nxt + (unsigned)win;
80347d8: e0bfea17 ldw r2,-88(fp)
80347dc: 10c01617 ldw r3,88(r2)
80347e0: e0bffe17 ldw r2,-8(fp)
80347e4: 1887883a add r3,r3,r2
80347e8: e0bfea17 ldw r2,-88(fp)
80347ec: 10c01915 stw r3,100(r2)
tp->t_flags &= ~(TF_ACKNOW|TF_SACKNOW|TF_DELACK);
80347f0: e0bfea17 ldw r2,-88(fp)
80347f4: 10c00b0b ldhu r3,44(r2)
80347f8: 00bfef04 movi r2,-68
80347fc: 1884703a and r2,r3,r2
8034800: 1007883a mov r3,r2
8034804: e0bfea17 ldw r2,-88(fp)
8034808: 10c00b0d sth r3,44(r2)
if (sendalot)
803480c: e0bffa17 ldw r2,-24(fp)
8034810: 10000126 beq r2,zero,8034818 <tcp_output+0xf84>
goto again;
8034814: 003c3006 br 80338d8 <tcp_output+0x44>
return (0);
8034818: 0005883a mov r2,zero
}
803481c: e037883a mov sp,fp
8034820: dfc00117 ldw ra,4(sp)
8034824: df000017 ldw fp,0(sp)
8034828: dec00204 addi sp,sp,8
803482c: f800283a ret
08034830 <tcp_setpersist>:
* RETURNS: NA
*/
void
tcp_setpersist(struct tcpcb * tp)
{
8034830: defffc04 addi sp,sp,-16
8034834: dfc00315 stw ra,12(sp)
8034838: df000215 stw fp,8(sp)
803483c: df000204 addi fp,sp,8
8034840: e13ffe15 stw r4,-8(fp)
int t;
t = ((tp->t_srtt >> 2) + tp->t_rttvar) >> 1;
8034844: e0bffe17 ldw r2,-8(fp)
8034848: 10802017 ldw r2,128(r2)
803484c: 1007d0ba srai r3,r2,2
8034850: e0bffe17 ldw r2,-8(fp)
8034854: 10802117 ldw r2,132(r2)
8034858: 1885883a add r2,r3,r2
803485c: 1005d07a srai r2,r2,1
8034860: e0bfff15 stw r2,-4(fp)
if (tp->t_timer[TCPT_REXMT])
8034864: e0bffe17 ldw r2,-8(fp)
8034868: 10800317 ldw r2,12(r2)
803486c: 10000326 beq r2,zero,803487c <tcp_setpersist+0x4c>
panic("tcp_output REXMT");
8034870: 01020174 movhi r4,2053
8034874: 212aad04 addi r4,r4,-21836
8034878: 80271780 call 8027178 <panic>
/*
* Start/restart persistance timer.
*/
TCPT_RANGESET(tp->t_timer[TCPT_PERSIST],
803487c: e0bfff17 ldw r2,-4(fp)
8034880: 1009883a mov r4,r2
8034884: e0bffe17 ldw r2,-8(fp)
8034888: 10c00717 ldw r3,28(r2)
803488c: 00820174 movhi r2,2053
8034890: 1885883a add r2,r3,r2
8034894: 10b20cc3 ldbu r2,-14285(r2)
8034898: 10803fcc andi r2,r2,255
803489c: 2085383a mul r2,r4,r2
80348a0: 10ffffcc andi r3,r2,65535
80348a4: 18e0001c xori r3,r3,32768
80348a8: 18e00004 addi r3,r3,-32768
80348ac: e0bffe17 ldw r2,-8(fp)
80348b0: 10c00415 stw r3,16(r2)
80348b4: e0bffe17 ldw r2,-8(fp)
80348b8: 10800417 ldw r2,16(r2)
80348bc: 10800288 cmpgei r2,r2,10
80348c0: 1000041e bne r2,zero,80348d4 <tcp_setpersist+0xa4>
80348c4: e0bffe17 ldw r2,-8(fp)
80348c8: 00c00284 movi r3,10
80348cc: 10c00415 stw r3,16(r2)
80348d0: 00000706 br 80348f0 <tcp_setpersist+0xc0>
80348d4: e0bffe17 ldw r2,-8(fp)
80348d8: 10800417 ldw r2,16(r2)
80348dc: 10801e50 cmplti r2,r2,121
80348e0: 1000031e bne r2,zero,80348f0 <tcp_setpersist+0xc0>
80348e4: e0bffe17 ldw r2,-8(fp)
80348e8: 00c01e04 movi r3,120
80348ec: 10c00415 stw r3,16(r2)
t * tcp_backoff[tp->t_rxtshift],
TCPTV_PERSMIN, TCPTV_PERSMAX);
if (tp->t_rxtshift < TCP_MAXRXTSHIFT)
80348f0: e0bffe17 ldw r2,-8(fp)
80348f4: 10800717 ldw r2,28(r2)
80348f8: 10800308 cmpgei r2,r2,12
80348fc: 1000051e bne r2,zero,8034914 <tcp_setpersist+0xe4>
tp->t_rxtshift++;
8034900: e0bffe17 ldw r2,-8(fp)
8034904: 10800717 ldw r2,28(r2)
8034908: 10c00044 addi r3,r2,1
803490c: e0bffe17 ldw r2,-8(fp)
8034910: 10c00715 stw r3,28(r2)
}
8034914: 0001883a nop
8034918: e037883a mov sp,fp
803491c: dfc00117 ldw ra,4(sp)
8034920: df000017 ldw fp,0(sp)
8034924: dec00204 addi sp,sp,8
8034928: f800283a ret
0803492c <bld_options>:
* RETURNS: length of option data added to buffer
*/
static int
bld_options(struct tcpcb * tp, u_char * cp, int flags, struct socket * so)
{
803492c: defff804 addi sp,sp,-32
8034930: dfc00715 stw ra,28(sp)
8034934: df000615 stw fp,24(sp)
8034938: df000604 addi fp,sp,24
803493c: e13ffd15 stw r4,-12(fp)
8034940: e17ffc15 stw r5,-16(fp)
8034944: e1bffb15 stw r6,-20(fp)
8034948: e1fffa15 stw r7,-24(fp)
int len;
u_short mss;
if(tp->t_flags & TF_NOOPT) /* no options allowed? */
803494c: e0bffd17 ldw r2,-12(fp)
8034950: 10800b0b ldhu r2,44(r2)
8034954: 10bfffcc andi r2,r2,65535
8034958: 1080020c andi r2,r2,8
803495c: 10000226 beq r2,zero,8034968 <bld_options+0x3c>
return 0;
8034960: 0005883a mov r2,zero
8034964: 00001f06 br 80349e4 <bld_options+0xb8>
/* Alway put MSS option on SYN packets */
if (flags & TH_SYN)
8034968: e0bffb17 ldw r2,-20(fp)
803496c: 1080008c andi r2,r2,2
8034970: 10001a26 beq r2,zero,80349dc <bld_options+0xb0>
{
mss = (u_short)tcp_mss(so);
8034974: e13ffa17 ldw r4,-24(fp)
8034978: 803379c0 call 803379c <tcp_mss>
803497c: e0bffe8d sth r2,-6(fp)
/* always send MSS option on SYN, fill in MSS parm */
*(cp + 0) = TCPOPT_MAXSEG;
8034980: e0bffc17 ldw r2,-16(fp)
8034984: 00c00084 movi r3,2
8034988: 10c00005 stb r3,0(r2)
*(cp + 1) = MSSOPT_LEN; /* length byte */
803498c: e0bffc17 ldw r2,-16(fp)
8034990: 10800044 addi r2,r2,1
8034994: 00c00104 movi r3,4
8034998: 10c00005 stb r3,0(r2)
*(cp + 2) = (u_char) ((mss & 0xff00) >> 8);
803499c: e0bffe8b ldhu r2,-6(fp)
80349a0: 1004d23a srli r2,r2,8
80349a4: 1007883a mov r3,r2
80349a8: e0bffc17 ldw r2,-16(fp)
80349ac: 10800084 addi r2,r2,2
80349b0: 10c00005 stb r3,0(r2)
*(cp + 3) = (u_char) (mss & 0xff);
80349b4: e0bffc17 ldw r2,-16(fp)
80349b8: 108000c4 addi r2,r2,3
80349bc: e0fffe8b ldhu r3,-6(fp)
80349c0: 10c00005 stb r3,0(r2)
len = 4;
80349c4: 00800104 movi r2,4
80349c8: e0bfff15 stw r2,-4(fp)
cp += 4;
80349cc: e0bffc17 ldw r2,-16(fp)
80349d0: 10800104 addi r2,r2,4
80349d4: e0bffc15 stw r2,-16(fp)
80349d8: 00000106 br 80349e0 <bld_options+0xb4>
}
else
len = 0;
80349dc: e03fff15 stw zero,-4(fp)
len += 10;
}
#endif /* TCP_TIMESTAMP */
USE_ARG(so);
return len;
80349e0: e0bfff17 ldw r2,-4(fp)
}
80349e4: e037883a mov sp,fp
80349e8: dfc00117 ldw ra,4(sp)
80349ec: df000017 ldw fp,0(sp)
80349f0: dec00204 addi sp,sp,8
80349f4: f800283a ret
080349f8 <tcp_init>:
* RETURNS:
*/
void
tcp_init()
{
80349f8: deffff04 addi sp,sp,-4
80349fc: df000015 stw fp,0(sp)
8034a00: d839883a mov fp,sp
tcp_iss = 1; /* wrong */
8034a04: 00800044 movi r2,1
8034a08: d0a08a15 stw r2,-32216(gp)
tcb.inp_next = tcb.inp_prev = &tcb;
8034a0c: 008201b4 movhi r2,2054
8034a10: 10b89904 addi r2,r2,-7580
8034a14: 00c201b4 movhi r3,2054
8034a18: 18b89a15 stw r2,-7576(r3)
8034a1c: 008201b4 movhi r2,2054
8034a20: 10f89a17 ldw r3,-7576(r2)
8034a24: 008201b4 movhi r2,2054
8034a28: 10f89915 stw r3,-7580(r2)
}
8034a2c: 0001883a nop
8034a30: e037883a mov sp,fp
8034a34: df000017 ldw fp,0(sp)
8034a38: dec00104 addi sp,sp,4
8034a3c: f800283a ret
08034a40 <tcp_template>:
* RETURNS:
*/
struct tcpiphdr *
tcp_template(struct tcpcb * tp)
{
8034a40: defffb04 addi sp,sp,-20
8034a44: dfc00415 stw ra,16(sp)
8034a48: df000315 stw fp,12(sp)
8034a4c: df000304 addi fp,sp,12
8034a50: e13ffd15 stw r4,-12(fp)
struct inpcb * inp = tp->t_inpcb;
8034a54: e0bffd17 ldw r2,-12(fp)
8034a58: 10800d17 ldw r2,52(r2)
8034a5c: e0bffe15 stw r2,-8(fp)
struct tcpiphdr * n;
if ((n = tp->t_template) == 0)
8034a60: e0bffd17 ldw r2,-12(fp)
8034a64: 10800c17 ldw r2,48(r2)
8034a68: e0bfff15 stw r2,-4(fp)
8034a6c: e0bfff17 ldw r2,-4(fp)
8034a70: 1000071e bne r2,zero,8034a90 <tcp_template+0x50>
{
n = (struct tcpiphdr *)TPH_ALLOC (sizeof (*n));
8034a74: 01000a04 movi r4,40
8034a78: 802982c0 call 802982c <npalloc>
8034a7c: e0bfff15 stw r2,-4(fp)
if (n == NULL)
8034a80: e0bfff17 ldw r2,-4(fp)
8034a84: 1000021e bne r2,zero,8034a90 <tcp_template+0x50>
return (0);
8034a88: 0005883a mov r2,zero
8034a8c: 00002906 br 8034b34 <tcp_template+0xf4>
}
n->ti_next = n->ti_prev = 0;
8034a90: e0bfff17 ldw r2,-4(fp)
8034a94: 10000115 stw zero,4(r2)
8034a98: e0bfff17 ldw r2,-4(fp)
8034a9c: 10c00117 ldw r3,4(r2)
8034aa0: e0bfff17 ldw r2,-4(fp)
8034aa4: 10c00015 stw r3,0(r2)
n->ti_len = htons(sizeof (struct tcpiphdr) - sizeof (struct ip));
8034aa8: e0bfff17 ldw r2,-4(fp)
8034aac: 00c50004 movi r3,5120
8034ab0: 10c0028d sth r3,10(r2)
n->ti_src = inp->inp_laddr;
8034ab4: e0bfff17 ldw r2,-4(fp)
8034ab8: e0fffe17 ldw r3,-8(fp)
8034abc: 18c00417 ldw r3,16(r3)
8034ac0: 10c00315 stw r3,12(r2)
n->ti_dst = inp->inp_faddr;
8034ac4: e0bfff17 ldw r2,-4(fp)
8034ac8: e0fffe17 ldw r3,-8(fp)
8034acc: 18c00317 ldw r3,12(r3)
8034ad0: 10c00415 stw r3,16(r2)
n->ti_sport = inp->inp_lport;
8034ad4: e0bffe17 ldw r2,-8(fp)
8034ad8: 10c0078b ldhu r3,30(r2)
8034adc: e0bfff17 ldw r2,-4(fp)
8034ae0: 10c0050d sth r3,20(r2)
n->ti_dport = inp->inp_fport;
8034ae4: e0bffe17 ldw r2,-8(fp)
8034ae8: 10c0070b ldhu r3,28(r2)
8034aec: e0bfff17 ldw r2,-4(fp)
8034af0: 10c0058d sth r3,22(r2)
n->ti_seq = 0;
8034af4: e0bfff17 ldw r2,-4(fp)
8034af8: 10000615 stw zero,24(r2)
n->ti_ack = 0;
8034afc: e0bfff17 ldw r2,-4(fp)
8034b00: 10000715 stw zero,28(r2)
n->ti_t.th_doff = (5 << 4); /* NetPort */
8034b04: e0bfff17 ldw r2,-4(fp)
8034b08: 00c01404 movi r3,80
8034b0c: 10c00805 stb r3,32(r2)
n->ti_flags = 0;
8034b10: e0bfff17 ldw r2,-4(fp)
8034b14: 10000845 stb zero,33(r2)
n->ti_win = 0;
8034b18: e0bfff17 ldw r2,-4(fp)
8034b1c: 1000088d sth zero,34(r2)
n->ti_sum = 0;
8034b20: e0bfff17 ldw r2,-4(fp)
8034b24: 1000090d sth zero,36(r2)
n->ti_urp = 0;
8034b28: e0bfff17 ldw r2,-4(fp)
8034b2c: 1000098d sth zero,38(r2)
return (n);
8034b30: e0bfff17 ldw r2,-4(fp)
}
8034b34: e037883a mov sp,fp
8034b38: dfc00117 ldw ra,4(sp)
8034b3c: df000017 ldw fp,0(sp)
8034b40: dec00204 addi sp,sp,8
8034b44: f800283a ret
08034b48 <tcp_respond>:
struct tcpiphdr * ti,
tcp_seq ack,
tcp_seq seq,
int flags,
struct mbuf * ti_mbuf)
{
8034b48: defff204 addi sp,sp,-56
8034b4c: dfc00d15 stw ra,52(sp)
8034b50: df000c15 stw fp,48(sp)
8034b54: df000c04 addi fp,sp,48
8034b58: e13ff715 stw r4,-36(fp)
8034b5c: e17ff615 stw r5,-40(fp)
8034b60: e1bff515 stw r6,-44(fp)
8034b64: e1fff415 stw r7,-48(fp)
int tlen; /* tcp data len - 0 or 1 */
int domain; /* AF_INET or AF_INET6 */
int win = 0; /* window to use in sent packet */
8034b68: e03ffd15 stw zero,-12(fp)
struct mbuf * m; /* mbuf to send */
struct tcpiphdr * tmp_thdr; /* scratch */
if (tp)
8034b6c: e0bff717 ldw r2,-36(fp)
8034b70: 10001726 beq r2,zero,8034bd0 <tcp_respond+0x88>
win = (int)sbspace(&tp->t_inpcb->inp_socket->so_rcv);
8034b74: e0bff717 ldw r2,-36(fp)
8034b78: 10800d17 ldw r2,52(r2)
8034b7c: 10800817 ldw r2,32(r2)
8034b80: 10800b17 ldw r2,44(r2)
8034b84: 1007883a mov r3,r2
8034b88: e0bff717 ldw r2,-36(fp)
8034b8c: 10800d17 ldw r2,52(r2)
8034b90: 10800817 ldw r2,32(r2)
8034b94: 10800a17 ldw r2,40(r2)
8034b98: 1885c83a sub r2,r3,r2
8034b9c: 10000a16 blt r2,zero,8034bc8 <tcp_respond+0x80>
8034ba0: e0bff717 ldw r2,-36(fp)
8034ba4: 10800d17 ldw r2,52(r2)
8034ba8: 10800817 ldw r2,32(r2)
8034bac: 10c00b17 ldw r3,44(r2)
8034bb0: e0bff717 ldw r2,-36(fp)
8034bb4: 10800d17 ldw r2,52(r2)
8034bb8: 10800817 ldw r2,32(r2)
8034bbc: 10800a17 ldw r2,40(r2)
8034bc0: 1885c83a sub r2,r3,r2
8034bc4: 00000106 br 8034bcc <tcp_respond+0x84>
8034bc8: 0005883a mov r2,zero
8034bcc: e0bffd15 stw r2,-12(fp)
/* Figure out of we can recycle the passed buffer or if we need a
* new one. Construct the easy parts of the the TCP and IP headers.
*/
if (flags == 0) /* sending keepalive from timer */
8034bd0: e0800217 ldw r2,8(fp)
8034bd4: 1000261e bne r2,zero,8034c70 <tcp_respond+0x128>
{
/* no flags == need a new buffer */
m = m_getwithdata (MT_HEADER, 64);
8034bd8: 01401004 movi r5,64
8034bdc: 010000c4 movi r4,3
8034be0: 8029a700 call 8029a70 <m_getnbuf>
8034be4: e0bffc15 stw r2,-16(fp)
if (m == NULL)
8034be8: e0bffc17 ldw r2,-16(fp)
8034bec: 1000ce26 beq r2,zero,8034f28 <tcp_respond+0x3e0>
return;
tlen = 1; /* Keepalives have one byte of data */
8034bf0: 00800044 movi r2,1
8034bf4: e0bfff15 stw r2,-4(fp)
m->m_len = TCPIPHDRSZ + tlen;
8034bf8: e0bfff17 ldw r2,-4(fp)
8034bfc: 10800a04 addi r2,r2,40
8034c00: 1007883a mov r3,r2
8034c04: e0bffc17 ldw r2,-16(fp)
8034c08: 10c00215 stw r3,8(r2)
/*
* Copy template contents into the mbuf and set ti to point
* to the header structure in the mbuf.
*/
tmp_thdr = (struct tcpiphdr *)((char *)m->m_data+sizeof(struct ip)
8034c0c: e0bffc17 ldw r2,-16(fp)
8034c10: 10800317 ldw r2,12(r2)
8034c14: e0bffb15 stw r2,-20(fp)
- sizeof(struct ipovly));
if ((char *)tmp_thdr < m->pkt->nb_buff)
8034c18: e0bffc17 ldw r2,-16(fp)
8034c1c: 10800117 ldw r2,4(r2)
8034c20: 10800117 ldw r2,4(r2)
8034c24: e0fffb17 ldw r3,-20(fp)
8034c28: 1880032e bgeu r3,r2,8034c38 <tcp_respond+0xf0>
{
panic("tcp_respond- packet ptr underflow\n");
8034c2c: 01020174 movhi r4,2053
8034c30: 212ab204 addi r4,r4,-21816
8034c34: 80271780 call 8027178 <panic>
}
MEMCPY(tmp_thdr, ti, sizeof(struct tcpiphdr));
8034c38: 01800a04 movi r6,40
8034c3c: e17ff617 ldw r5,-40(fp)
8034c40: e13ffb17 ldw r4,-20(fp)
8034c44: 80086b80 call 80086b8 <memcpy>
ti = tmp_thdr;
8034c48: e0bffb17 ldw r2,-20(fp)
8034c4c: e0bff615 stw r2,-40(fp)
flags = TH_ACK;
8034c50: 00800404 movi r2,16
8034c54: e0800215 stw r2,8(fp)
domain = tp->t_inpcb->inp_socket->so_domain;
8034c58: e0bff717 ldw r2,-36(fp)
8034c5c: 10800d17 ldw r2,52(r2)
8034c60: 10800817 ldw r2,32(r2)
8034c64: 10800517 ldw r2,20(r2)
8034c68: e0bffe15 stw r2,-8(fp)
8034c6c: 00003906 br 8034d54 <tcp_respond+0x20c>
}
else /* Flag was passed (e.g. reset); recycle passed mbuf */
{
m = ti_mbuf; /*dtom(ti);*/
8034c70: e0800317 ldw r2,12(fp)
8034c74: e0bffc15 stw r2,-16(fp)
if(m->pkt->type == IPTP) /* IPv4 packet */
8034c78: e0bffc17 ldw r2,-16(fp)
8034c7c: 10800117 ldw r2,4(r2)
8034c80: 1080080b ldhu r2,32(r2)
8034c84: 10bfffcc andi r2,r2,65535
8034c88: 10800218 cmpnei r2,r2,8
8034c8c: 1000031e bne r2,zero,8034c9c <tcp_respond+0x154>
domain = AF_INET;
8034c90: 00800084 movi r2,2
8034c94: e0bffe15 stw r2,-8(fp)
8034c98: 00000206 br 8034ca4 <tcp_respond+0x15c>
else
domain = AF_INET6;
8034c9c: 008000c4 movi r2,3
8034ca0: e0bffe15 stw r2,-8(fp)
m_freem(m->m_next);
8034ca4: e0bffc17 ldw r2,-16(fp)
8034ca8: 10800617 ldw r2,24(r2)
8034cac: 1009883a mov r4,r2
8034cb0: 8029cfc0 call 8029cfc <m_freem>
m->m_next = 0;
8034cb4: e0bffc17 ldw r2,-16(fp)
8034cb8: 10000615 stw zero,24(r2)
tlen = 0; /* NO data */
8034cbc: e03fff15 stw zero,-4(fp)
m->m_len = TCPIPHDRSZ;
8034cc0: e0bffc17 ldw r2,-16(fp)
8034cc4: 00c00a04 movi r3,40
8034cc8: 10c00215 stw r3,8(r2)
xchg(ti->ti_dport, ti->ti_sport, u_short);
8034ccc: e0bff617 ldw r2,-40(fp)
8034cd0: 1080058b ldhu r2,22(r2)
8034cd4: e0bffa8d sth r2,-22(fp)
8034cd8: e0bff617 ldw r2,-40(fp)
8034cdc: 10c0050b ldhu r3,20(r2)
8034ce0: e0bff617 ldw r2,-40(fp)
8034ce4: 10c0058d sth r3,22(r2)
8034ce8: e0bff617 ldw r2,-40(fp)
8034cec: e0fffa8b ldhu r3,-22(fp)
8034cf0: 10c0050d sth r3,20(r2)
if(m->pkt->type == IPTP)
8034cf4: e0bffc17 ldw r2,-16(fp)
8034cf8: 10800117 ldw r2,4(r2)
8034cfc: 1080080b ldhu r2,32(r2)
8034d00: 10bfffcc andi r2,r2,65535
8034d04: 10800218 cmpnei r2,r2,8
8034d08: 10000a1e bne r2,zero,8034d34 <tcp_respond+0x1ec>
xchg(ti->ti_dst.s_addr, ti->ti_src.s_addr, u_long);
8034d0c: e0bff617 ldw r2,-40(fp)
8034d10: 10800417 ldw r2,16(r2)
8034d14: e0bff915 stw r2,-28(fp)
8034d18: e0bff617 ldw r2,-40(fp)
8034d1c: 10c00317 ldw r3,12(r2)
8034d20: e0bff617 ldw r2,-40(fp)
8034d24: 10c00415 stw r3,16(r2)
8034d28: e0bff617 ldw r2,-40(fp)
8034d2c: e0fff917 ldw r3,-28(fp)
8034d30: 10c00315 stw r3,12(r2)
if (flags & TH_RST) /* count resets in MIB */
8034d34: e0800217 ldw r2,8(fp)
8034d38: 1080010c andi r2,r2,4
8034d3c: 10000526 beq r2,zero,8034d54 <tcp_respond+0x20c>
TCP_MIB_INC(tcpOutRsts); /* keep MIB stats */
8034d40: 008201b4 movhi r2,2054
8034d44: 10b88417 ldw r2,-7664(r2)
8034d48: 10c00044 addi r3,r2,1
8034d4c: 008201b4 movhi r2,2054
8034d50: 10f88415 stw r3,-7664(r2)
}
/* finish constructing the TCP header */
ti->ti_seq = htonl(seq);
8034d54: e0bff417 ldw r2,-48(fp)
8034d58: 1006d63a srli r3,r2,24
8034d5c: e0bff417 ldw r2,-48(fp)
8034d60: 1004d23a srli r2,r2,8
8034d64: 10bfc00c andi r2,r2,65280
8034d68: 1886b03a or r3,r3,r2
8034d6c: e0bff417 ldw r2,-48(fp)
8034d70: 1004923a slli r2,r2,8
8034d74: 10803fec andhi r2,r2,255
8034d78: 1886b03a or r3,r3,r2
8034d7c: e0bff417 ldw r2,-48(fp)
8034d80: 1004963a slli r2,r2,24
8034d84: 1886b03a or r3,r3,r2
8034d88: e0bff617 ldw r2,-40(fp)
8034d8c: 10c00615 stw r3,24(r2)
ti->ti_ack = htonl(ack);
8034d90: e0bff517 ldw r2,-44(fp)
8034d94: 1006d63a srli r3,r2,24
8034d98: e0bff517 ldw r2,-44(fp)
8034d9c: 1004d23a srli r2,r2,8
8034da0: 10bfc00c andi r2,r2,65280
8034da4: 1886b03a or r3,r3,r2
8034da8: e0bff517 ldw r2,-44(fp)
8034dac: 1004923a slli r2,r2,8
8034db0: 10803fec andhi r2,r2,255
8034db4: 1886b03a or r3,r3,r2
8034db8: e0bff517 ldw r2,-44(fp)
8034dbc: 1004963a slli r2,r2,24
8034dc0: 1886b03a or r3,r3,r2
8034dc4: e0bff617 ldw r2,-40(fp)
8034dc8: 10c00715 stw r3,28(r2)
ti->ti_t.th_doff = 0x50; /* NetPort: init data offset bits */
8034dcc: e0bff617 ldw r2,-40(fp)
8034dd0: 00c01404 movi r3,80
8034dd4: 10c00805 stb r3,32(r2)
ti->ti_flags = (u_char)flags;
8034dd8: e0800217 ldw r2,8(fp)
8034ddc: 1007883a mov r3,r2
8034de0: e0bff617 ldw r2,-40(fp)
8034de4: 10c00845 stb r3,33(r2)
ti->ti_win = htons((u_short)win);
8034de8: e0bffd17 ldw r2,-12(fp)
8034dec: 10bfffcc andi r2,r2,65535
8034df0: 1004d23a srli r2,r2,8
8034df4: 1007883a mov r3,r2
8034df8: e0bffd17 ldw r2,-12(fp)
8034dfc: 10bfffcc andi r2,r2,65535
8034e00: 1004923a slli r2,r2,8
8034e04: 1884b03a or r2,r3,r2
8034e08: 1007883a mov r3,r2
8034e0c: e0bff617 ldw r2,-40(fp)
8034e10: 10c0088d sth r3,34(r2)
ti->ti_urp = 0;
8034e14: e0bff617 ldw r2,-40(fp)
8034e18: 1000098d sth zero,38(r2)
/* Finish constructing IP header and send, based on IP type in use */
switch(domain)
8034e1c: e0bffe17 ldw r2,-8(fp)
8034e20: 10800098 cmpnei r2,r2,2
8034e24: 10003c1e bne r2,zero,8034f18 <tcp_respond+0x3d0>
#ifdef IP_V4
case AF_INET:
{
struct ip * pip;
pip = (struct ip *)((char*)ti+sizeof(struct ipovly)-sizeof(struct ip));
8034e28: e0bff617 ldw r2,-40(fp)
8034e2c: e0bff815 stw r2,-32(fp)
pip->ip_len = (unshort)(TCPIPHDRSZ + tlen);
8034e30: e0bfff17 ldw r2,-4(fp)
8034e34: 10800a04 addi r2,r2,40
8034e38: 1007883a mov r3,r2
8034e3c: e0bff817 ldw r2,-32(fp)
8034e40: 10c0008d sth r3,2(r2)
/* If our system's max. MAC header size is geater than the size
* of the MAC header in the received packet then we need to
* adjust the IP header offset to allow for this. Since the packets
* are only headers they should always fit.
*/
if(pip >= (struct ip *)(m->pkt->nb_buff + MaxLnh))
8034e44: e0bffc17 ldw r2,-16(fp)
8034e48: 10800117 ldw r2,4(r2)
8034e4c: 10800117 ldw r2,4(r2)
8034e50: d0e06417 ldw r3,-32368(gp)
8034e54: 10c5883a add r2,r2,r3
8034e58: e0fff817 ldw r3,-32(fp)
8034e5c: 18800436 bltu r3,r2,8034e70 <tcp_respond+0x328>
{
m->m_data = (char*)pip; /* headers will fit, just set pointer */
8034e60: e0bffc17 ldw r2,-16(fp)
8034e64: e0fff817 ldw r3,-32(fp)
8034e68: 10c00315 stw r3,12(r2)
8034e6c: 00001206 br 8034eb8 <tcp_respond+0x370>
}
else /* MAC may not fit, adjust pointer and move headers back */
{
m->m_data = m->pkt->nb_prot = m->pkt->nb_buff + MaxLnh; /* new ptr */
8034e70: e0bffc17 ldw r2,-16(fp)
8034e74: 10800117 ldw r2,4(r2)
8034e78: 10c00117 ldw r3,4(r2)
8034e7c: d0a06417 ldw r2,-32368(gp)
8034e80: 1009883a mov r4,r2
8034e84: e0bffc17 ldw r2,-16(fp)
8034e88: 10800117 ldw r2,4(r2)
8034e8c: 1907883a add r3,r3,r4
8034e90: 10c00315 stw r3,12(r2)
8034e94: 10c00317 ldw r3,12(r2)
8034e98: e0bffc17 ldw r2,-16(fp)
8034e9c: 10c00315 stw r3,12(r2)
MEMMOVE(m->m_data, pip, TCPIPHDRSZ); /* move back tcp/ip headers */
8034ea0: e0bffc17 ldw r2,-16(fp)
8034ea4: 10800317 ldw r2,12(r2)
8034ea8: 01800a04 movi r6,40
8034eac: e17ff817 ldw r5,-32(fp)
8034eb0: 1009883a mov r4,r2
8034eb4: 80087b80 call 80087b8 <memmove>
/*
* In the case of a SYN DOS attack, many RST|ACK replies
* have no tp structure and need to be freed.
*/
if (!tp)
8034eb8: e0bff717 ldw r2,-36(fp)
8034ebc: 1000031e bne r2,zero,8034ecc <tcp_respond+0x384>
m_freem(m);
8034ec0: e13ffc17 ldw r4,-16(fp)
8034ec4: 8029cfc0 call 8029cfc <m_freem>
ip_output(m, tp->t_inpcb->inp_socket->so_optsPack);
else
ip_output(m, (struct ip_socopts *)NULL);
}
break;
8034ec8: 00001506 br 8034f20 <tcp_respond+0x3d8>
if ((tp->t_inpcb) && (tp->t_inpcb->inp_socket))
8034ecc: e0bff717 ldw r2,-36(fp)
8034ed0: 10800d17 ldw r2,52(r2)
8034ed4: 10000c26 beq r2,zero,8034f08 <tcp_respond+0x3c0>
8034ed8: e0bff717 ldw r2,-36(fp)
8034edc: 10800d17 ldw r2,52(r2)
8034ee0: 10800817 ldw r2,32(r2)
8034ee4: 10000826 beq r2,zero,8034f08 <tcp_respond+0x3c0>
ip_output(m, tp->t_inpcb->inp_socket->so_optsPack);
8034ee8: e0bff717 ldw r2,-36(fp)
8034eec: 10800d17 ldw r2,52(r2)
8034ef0: 10800817 ldw r2,32(r2)
8034ef4: 10801f17 ldw r2,124(r2)
8034ef8: 100b883a mov r5,r2
8034efc: e13ffc17 ldw r4,-16(fp)
8034f00: 802a6580 call 802a658 <ip_output>
break;
8034f04: 00000606 br 8034f20 <tcp_respond+0x3d8>
ip_output(m, (struct ip_socopts *)NULL);
8034f08: 000b883a mov r5,zero
8034f0c: e13ffc17 ldw r4,-16(fp)
8034f10: 802a6580 call 802a658 <ip_output>
break;
8034f14: 00000206 br 8034f20 <tcp_respond+0x3d8>
break;
}
#endif /* IP_V6 */
default:
dtrap();
8034f18: 8028cd40 call 8028cd4 <dtrap>
break;
8034f1c: 0001883a nop
}
return;
8034f20: 0001883a nop
8034f24: 00000106 br 8034f2c <tcp_respond+0x3e4>
return;
8034f28: 0001883a nop
}
8034f2c: e037883a mov sp,fp
8034f30: dfc00117 ldw ra,4(sp)
8034f34: df000017 ldw fp,0(sp)
8034f38: dec00204 addi sp,sp,8
8034f3c: f800283a ret
08034f40 <tcp_newtcpcb>:
* RETURNS:
*/
struct tcpcb *
tcp_newtcpcb(struct inpcb * inp)
{
8034f40: defffb04 addi sp,sp,-20
8034f44: dfc00415 stw ra,16(sp)
8034f48: df000315 stw fp,12(sp)
8034f4c: df000304 addi fp,sp,12
8034f50: e13ffd15 stw r4,-12(fp)
struct tcpcb * tp;
short t_time;
tp = TCB_ALLOC(sizeof (*tp));
8034f54: 01002504 movi r4,148
8034f58: 802982c0 call 802982c <npalloc>
8034f5c: e0bfff15 stw r2,-4(fp)
if (tp == NULL)
8034f60: e0bfff17 ldw r2,-4(fp)
8034f64: 1000021e bne r2,zero,8034f70 <tcp_newtcpcb+0x30>
return (struct tcpcb *)NULL;
8034f68: 0005883a mov r2,zero
8034f6c: 00003206 br 8035038 <tcp_newtcpcb+0xf8>
tp->seg_next = tp->seg_prev = (struct tcpiphdr *)tp;
8034f70: e0bfff17 ldw r2,-4(fp)
8034f74: e0ffff17 ldw r3,-4(fp)
8034f78: 10c00115 stw r3,4(r2)
8034f7c: e0bfff17 ldw r2,-4(fp)
8034f80: 10c00117 ldw r3,4(r2)
8034f84: e0bfff17 ldw r2,-4(fp)
8034f88: 10c00015 stw r3,0(r2)
tp->t_maxseg = TCP_MSS;
8034f8c: e0bfff17 ldw r2,-4(fp)
8034f90: 00c16d04 movi r3,1460
8034f94: 10c00a0d sth r3,40(r2)
tp->t_flags = 0; /* sends options! */
8034f98: e0bfff17 ldw r2,-4(fp)
8034f9c: 10000b0d sth zero,44(r2)
tp->t_inpcb = inp;
8034fa0: e0bfff17 ldw r2,-4(fp)
8034fa4: e0fffd17 ldw r3,-12(fp)
8034fa8: 10c00d15 stw r3,52(r2)
/*
* Init srtt to TCPTV_SRTTBASE (0), so we can tell that we have no
* rtt estimate. Set rttvar so that srtt + 2 * rttvar gives
* reasonable initial retransmit time.
*/
tp->t_srtt = TCPTV_SRTTBASE;
8034fac: e0bfff17 ldw r2,-4(fp)
8034fb0: 10002015 stw zero,128(r2)
tp->t_rttvar = TCPTV_SRTTDFLT << 2;
8034fb4: e0bfff17 ldw r2,-4(fp)
8034fb8: 00c00604 movi r3,24
8034fbc: 10c02115 stw r3,132(r2)
t_time = ((TCPTV_SRTTBASE >> 2) + (TCPTV_SRTTDFLT << 2)) >> 1;
8034fc0: 00800304 movi r2,12
8034fc4: e0bffe8d sth r2,-6(fp)
TCPT_RANGESET(tp->t_rxtcur, t_time, TCPTV_MIN, TCPTV_REXMTMAX);
8034fc8: e0fffe8f ldh r3,-6(fp)
8034fcc: e0bfff17 ldw r2,-4(fp)
8034fd0: 10c00815 stw r3,32(r2)
8034fd4: e0bfff17 ldw r2,-4(fp)
8034fd8: 10800817 ldw r2,32(r2)
8034fdc: 10800088 cmpgei r2,r2,2
8034fe0: 1000041e bne r2,zero,8034ff4 <tcp_newtcpcb+0xb4>
8034fe4: e0bfff17 ldw r2,-4(fp)
8034fe8: 00c00084 movi r3,2
8034fec: 10c00815 stw r3,32(r2)
8034ff0: 00000706 br 8035010 <tcp_newtcpcb+0xd0>
8034ff4: e0bfff17 ldw r2,-4(fp)
8034ff8: 10800817 ldw r2,32(r2)
8034ffc: 10802050 cmplti r2,r2,129
8035000: 1000031e bne r2,zero,8035010 <tcp_newtcpcb+0xd0>
8035004: e0bfff17 ldw r2,-4(fp)
8035008: 00c02004 movi r3,128
803500c: 10c00815 stw r3,32(r2)
/* Set initial congestion window - RFC-2581, pg 4. */
tp->snd_cwnd = 2 * TCP_MSS;
8035010: e0bfff17 ldw r2,-4(fp)
8035014: 00c2da04 movi r3,2920
8035018: 10c01b15 stw r3,108(r2)
#ifdef DO_DELAY_ACKS
tp->t_delacktime = 1;
#endif /* DO_DELAY_ACKS */
tp->snd_ssthresh = 65535; /* Start with high slow-start threshold */
803501c: e0bfff17 ldw r2,-4(fp)
8035020: 00ffffd4 movui r3,65535
8035024: 10c01c15 stw r3,112(r2)
inp->inp_ppcb = (char *)tp;
8035028: e0bffd17 ldw r2,-12(fp)
803502c: e0ffff17 ldw r3,-4(fp)
8035030: 10c00915 stw r3,36(r2)
return (tp);
8035034: e0bfff17 ldw r2,-4(fp)
}
8035038: e037883a mov sp,fp
803503c: dfc00117 ldw ra,4(sp)
8035040: df000017 ldw fp,0(sp)
8035044: dec00204 addi sp,sp,8
8035048: f800283a ret
0803504c <tcp_drop>:
* RETURNS:
*/
struct tcpcb *
tcp_drop(struct tcpcb * tp, int err)
{
803504c: defffb04 addi sp,sp,-20
8035050: dfc00415 stw ra,16(sp)
8035054: df000315 stw fp,12(sp)
8035058: df000304 addi fp,sp,12
803505c: e13ffe15 stw r4,-8(fp)
8035060: e17ffd15 stw r5,-12(fp)
struct socket * so = tp->t_inpcb->inp_socket;
8035064: e0bffe17 ldw r2,-8(fp)
8035068: 10800d17 ldw r2,52(r2)
803506c: 10800817 ldw r2,32(r2)
8035070: e0bfff15 stw r2,-4(fp)
if (TCPS_HAVERCVDSYN(tp->t_state))
8035074: e0bffe17 ldw r2,-8(fp)
8035078: 10800217 ldw r2,8(r2)
803507c: 108000d0 cmplti r2,r2,3
8035080: 10000a1e bne r2,zero,80350ac <tcp_drop+0x60>
{
tp->t_state = TCPS_CLOSED;
8035084: e0bffe17 ldw r2,-8(fp)
8035088: 10000215 stw zero,8(r2)
(void) tcp_output(tp);
803508c: e13ffe17 ldw r4,-8(fp)
8035090: 80338940 call 8033894 <tcp_output>
tcpstat.tcps_drops++;
8035094: 008201b4 movhi r2,2054
8035098: 10b8a717 ldw r2,-7524(r2)
803509c: 10c00044 addi r3,r2,1
80350a0: 008201b4 movhi r2,2054
80350a4: 10f8a715 stw r3,-7524(r2)
80350a8: 00000506 br 80350c0 <tcp_drop+0x74>
}
else
tcpstat.tcps_conndrops++;
80350ac: 008201b4 movhi r2,2054
80350b0: 10b8a817 ldw r2,-7520(r2)
80350b4: 10c00044 addi r3,r2,1
80350b8: 008201b4 movhi r2,2054
80350bc: 10f8a815 stw r3,-7520(r2)
so->so_error = err;
80350c0: e0bfff17 ldw r2,-4(fp)
80350c4: e0fffd17 ldw r3,-12(fp)
80350c8: 10c00615 stw r3,24(r2)
#ifdef TCP_ZEROCOPY
if (so->rx_upcall)
so->rx_upcall(so, NULL, err);
#endif /* TCP_ZEROCOPY */
return (tcp_close(tp));
80350cc: e13ffe17 ldw r4,-8(fp)
80350d0: 80350e80 call 80350e8 <tcp_close>
}
80350d4: e037883a mov sp,fp
80350d8: dfc00117 ldw ra,4(sp)
80350dc: df000017 ldw fp,0(sp)
80350e0: dec00204 addi sp,sp,8
80350e4: f800283a ret
080350e8 <tcp_close>:
* RETURNS:
*/
struct tcpcb *
tcp_close(struct tcpcb * tp)
{
80350e8: defff904 addi sp,sp,-28
80350ec: dfc00615 stw ra,24(sp)
80350f0: df000515 stw fp,20(sp)
80350f4: df000504 addi fp,sp,20
80350f8: e13ffb15 stw r4,-20(fp)
struct tcpiphdr * t;
struct inpcb * inp = tp->t_inpcb;
80350fc: e0bffb17 ldw r2,-20(fp)
8035100: 10800d17 ldw r2,52(r2)
8035104: e0bffe15 stw r2,-8(fp)
struct socket * so = inp->inp_socket;
8035108: e0bffe17 ldw r2,-8(fp)
803510c: 10800817 ldw r2,32(r2)
8035110: e0bffd15 stw r2,-12(fp)
struct mbuf * m;
t = tp->seg_next;
8035114: e0bffb17 ldw r2,-20(fp)
8035118: 10800017 ldw r2,0(r2)
803511c: e0bfff15 stw r2,-4(fp)
while (t != (struct tcpiphdr *)tp)
8035120: 00000e06 br 803515c <tcp_close+0x74>
{
t = (struct tcpiphdr *)t->ti_next;
8035124: e0bfff17 ldw r2,-4(fp)
8035128: 10800017 ldw r2,0(r2)
803512c: e0bfff15 stw r2,-4(fp)
m = dtom(t->ti_prev);
8035130: e0bfff17 ldw r2,-4(fp)
8035134: 10800117 ldw r2,4(r2)
8035138: 1009883a mov r4,r2
803513c: 802a22c0 call 802a22c <dtom>
8035140: e0bffc15 stw r2,-16(fp)
remque(t->ti_prev);
8035144: e0bfff17 ldw r2,-4(fp)
8035148: 10800117 ldw r2,4(r2)
803514c: 1009883a mov r4,r2
8035150: 802a2c40 call 802a2c4 <remque>
m_freem (m);
8035154: e13ffc17 ldw r4,-16(fp)
8035158: 8029cfc0 call 8029cfc <m_freem>
while (t != (struct tcpiphdr *)tp)
803515c: e0ffff17 ldw r3,-4(fp)
8035160: e0bffb17 ldw r2,-20(fp)
8035164: 18bfef1e bne r3,r2,8035124 <tcp_close+0x3c>
}
if (tp->t_template)
8035168: e0bffb17 ldw r2,-20(fp)
803516c: 10800c17 ldw r2,48(r2)
8035170: 10000426 beq r2,zero,8035184 <tcp_close+0x9c>
TPH_FREE (tp->t_template);
8035174: e0bffb17 ldw r2,-20(fp)
8035178: 10800c17 ldw r2,48(r2)
803517c: 1009883a mov r4,r2
8035180: 80298600 call 8029860 <npfree>
TCB_FREE (tp);
8035184: e13ffb17 ldw r4,-20(fp)
8035188: 80298600 call 8029860 <npfree>
inp->inp_ppcb = 0;
803518c: e0bffe17 ldw r2,-8(fp)
8035190: 10000915 stw zero,36(r2)
soisdisconnected(so);
8035194: e13ffd17 ldw r4,-12(fp)
8035198: 802f3840 call 802f384 <soisdisconnected>
in_pcbdetach(inp);
803519c: e13ffe17 ldw r4,-8(fp)
80351a0: 80405b40 call 80405b4 <in_pcbdetach>
tcpstat.tcps_closed++;
80351a4: 008201b4 movhi r2,2054
80351a8: 10b8a917 ldw r2,-7516(r2)
80351ac: 10c00044 addi r3,r2,1
80351b0: 008201b4 movhi r2,2054
80351b4: 10f8a915 stw r3,-7516(r2)
return ((struct tcpcb *)0);
80351b8: 0005883a mov r2,zero
}
80351bc: e037883a mov sp,fp
80351c0: dfc00117 ldw ra,4(sp)
80351c4: df000017 ldw fp,0(sp)
80351c8: dec00204 addi sp,sp,8
80351cc: f800283a ret
080351d0 <tcp_quench>:
* RETURNS:
*/
void
tcp_quench(struct inpcb * inp)
{
80351d0: defffd04 addi sp,sp,-12
80351d4: df000215 stw fp,8(sp)
80351d8: df000204 addi fp,sp,8
80351dc: e13ffe15 stw r4,-8(fp)
struct tcpcb * tp = intotcpcb(inp);
80351e0: e0bffe17 ldw r2,-8(fp)
80351e4: 10800917 ldw r2,36(r2)
80351e8: e0bfff15 stw r2,-4(fp)
if (tp)
80351ec: e0bfff17 ldw r2,-4(fp)
80351f0: 10000526 beq r2,zero,8035208 <tcp_quench+0x38>
tp->snd_cwnd = tp->t_maxseg;
80351f4: e0bfff17 ldw r2,-4(fp)
80351f8: 10800a0b ldhu r2,40(r2)
80351fc: 10ffffcc andi r3,r2,65535
8035200: e0bfff17 ldw r2,-4(fp)
8035204: 10c01b15 stw r3,108(r2)
}
8035208: 0001883a nop
803520c: e037883a mov sp,fp
8035210: df000017 ldw fp,0(sp)
8035214: dec00104 addi sp,sp,4
8035218: f800283a ret
0803521c <tcp_putseq>:
/* tcp_putseq() */
u_char *
tcp_putseq(u_char * cp, tcp_seq seq)
{
803521c: defffc04 addi sp,sp,-16
8035220: df000315 stw fp,12(sp)
8035224: df000304 addi fp,sp,12
8035228: e13ffe15 stw r4,-8(fp)
803522c: e17ffd15 stw r5,-12(fp)
int i;
cp += 3; /* do low byte first */
8035230: e0bffe17 ldw r2,-8(fp)
8035234: 108000c4 addi r2,r2,3
8035238: e0bffe15 stw r2,-8(fp)
for(i = 0; i< 4; i++) /* put 4 bytes into buffer */
803523c: e03fff15 stw zero,-4(fp)
8035240: 00000b06 br 8035270 <tcp_putseq+0x54>
{
*cp-- = (u_char)(seq & 0xFF); /* back through buffer */
8035244: e0bffe17 ldw r2,-8(fp)
8035248: 10ffffc4 addi r3,r2,-1
803524c: e0fffe15 stw r3,-8(fp)
8035250: e0fffd17 ldw r3,-12(fp)
8035254: 10c00005 stb r3,0(r2)
seq >>= 8;
8035258: e0bffd17 ldw r2,-12(fp)
803525c: 1004d23a srli r2,r2,8
8035260: e0bffd15 stw r2,-12(fp)
for(i = 0; i< 4; i++) /* put 4 bytes into buffer */
8035264: e0bfff17 ldw r2,-4(fp)
8035268: 10800044 addi r2,r2,1
803526c: e0bfff15 stw r2,-4(fp)
8035270: e0bfff17 ldw r2,-4(fp)
8035274: 10800110 cmplti r2,r2,4
8035278: 103ff21e bne r2,zero,8035244 <tcp_putseq+0x28>
}
return (cp + 5);
803527c: e0bffe17 ldw r2,-8(fp)
8035280: 10800144 addi r2,r2,5
}
8035284: e037883a mov sp,fp
8035288: df000017 ldw fp,0(sp)
803528c: dec00104 addi sp,sp,4
8035290: f800283a ret
08035294 <tcp_getseq>:
* RETURNS: a long in local endian
*/
u_long
tcp_getseq(u_char * cp)
{
8035294: defffc04 addi sp,sp,-16
8035298: df000315 stw fp,12(sp)
803529c: df000304 addi fp,sp,12
80352a0: e13ffd15 stw r4,-12(fp)
int i;
ulong seq = 0;
80352a4: e03ffe15 stw zero,-8(fp)
for(i = 0; i < 4; i++)
80352a8: e03fff15 stw zero,-4(fp)
80352ac: 00000e06 br 80352e8 <tcp_getseq+0x54>
{
seq <<= 8;
80352b0: e0bffe17 ldw r2,-8(fp)
80352b4: 1004923a slli r2,r2,8
80352b8: e0bffe15 stw r2,-8(fp)
seq += (u_long)*(cp++);
80352bc: e0bffd17 ldw r2,-12(fp)
80352c0: 10c00044 addi r3,r2,1
80352c4: e0fffd15 stw r3,-12(fp)
80352c8: 10800003 ldbu r2,0(r2)
80352cc: 10803fcc andi r2,r2,255
80352d0: e0fffe17 ldw r3,-8(fp)
80352d4: 1885883a add r2,r3,r2
80352d8: e0bffe15 stw r2,-8(fp)
for(i = 0; i < 4; i++)
80352dc: e0bfff17 ldw r2,-4(fp)
80352e0: 10800044 addi r2,r2,1
80352e4: e0bfff15 stw r2,-4(fp)
80352e8: e0bfff17 ldw r2,-4(fp)
80352ec: 10800110 cmplti r2,r2,4
80352f0: 103fef1e bne r2,zero,80352b0 <tcp_getseq+0x1c>
}
return seq;
80352f4: e0bffe17 ldw r2,-8(fp)
}
80352f8: e037883a mov sp,fp
80352fc: df000017 ldw fp,0(sp)
8035300: dec00104 addi sp,sp,4
8035304: f800283a ret
08035308 <tcp_slowtimo>:
* RETURNS:
*/
void
tcp_slowtimo(void)
{
8035308: defff704 addi sp,sp,-36
803530c: dfc00815 stw ra,32(sp)
8035310: df000715 stw fp,28(sp)
8035314: df000704 addi fp,sp,28
struct tcpcb * tp;
int i;
struct socket * so, * sonext;
struct sockbuf * sb;
tcp_maxidle = TCPTV_KEEPCNT * tcp_keepintvl;
8035318: d0a01f17 ldw r2,-32644(gp)
803531c: 100490fa slli r2,r2,3
8035320: d0a08915 stw r2,-32220(gp)
/* search through open sockets */
for (so = (struct socket *)soq.q_head; so != NULL; so = sonext)
8035324: 008201b4 movhi r2,2054
8035328: 10b87117 ldw r2,-7740(r2)
803532c: e0bffe15 stw r2,-8(fp)
8035330: 00007c06 br 8035524 <tcp_slowtimo+0x21c>
{
sonext = so->next;
8035334: e0bffe17 ldw r2,-8(fp)
8035338: 10800017 ldw r2,0(r2)
803533c: e0bffd15 stw r2,-12(fp)
/* for SOCK_STREAM (TCP) sockets, we must do slow-timeout
* processing and (optionally) processing of pending
* zero-copy socket upcalls.
*/
if (so->so_type == SOCK_STREAM)
8035340: e0bffe17 ldw r2,-8(fp)
8035344: 10800983 ldbu r2,38(r2)
8035348: 10803fcc andi r2,r2,255
803534c: 1080201c xori r2,r2,128
8035350: 10bfe004 addi r2,r2,-128
8035354: 10800058 cmpnei r2,r2,1
8035358: 1000421e bne r2,zero,8035464 <tcp_slowtimo+0x15c>
{
ip = so->so_pcb;
803535c: e0bffe17 ldw r2,-8(fp)
8035360: 10800117 ldw r2,4(r2)
8035364: e0bffc15 stw r2,-16(fp)
if (!ip)
8035368: e0bffc17 ldw r2,-16(fp)
803536c: 10006626 beq r2,zero,8035508 <tcp_slowtimo+0x200>
continue;
ipnxt = ip->inp_next;
8035370: e0bffc17 ldw r2,-16(fp)
8035374: 10800017 ldw r2,0(r2)
8035378: e0bffb15 stw r2,-20(fp)
tp = intotcpcb(so->so_pcb);
803537c: e0bffe17 ldw r2,-8(fp)
8035380: 10800117 ldw r2,4(r2)
8035384: 10800917 ldw r2,36(r2)
8035388: e0bffa15 stw r2,-24(fp)
if (!tp)
803538c: e0bffa17 ldw r2,-24(fp)
8035390: 10005f26 beq r2,zero,8035510 <tcp_slowtimo+0x208>
continue;
for (i = 0; i < TCPT_NTIMERS; i++)
8035394: e03fff15 stw zero,-4(fp)
8035398: 00002a06 br 8035444 <tcp_slowtimo+0x13c>
{
if (tp->t_timer[i] && --tp->t_timer[i] == 0)
803539c: e0fffa17 ldw r3,-24(fp)
80353a0: e0bfff17 ldw r2,-4(fp)
80353a4: 108000c4 addi r2,r2,3
80353a8: 100490ba slli r2,r2,2
80353ac: 1885883a add r2,r3,r2
80353b0: 10800017 ldw r2,0(r2)
80353b4: 10002026 beq r2,zero,8035438 <tcp_slowtimo+0x130>
80353b8: e0fffa17 ldw r3,-24(fp)
80353bc: e0bfff17 ldw r2,-4(fp)
80353c0: 108000c4 addi r2,r2,3
80353c4: 100490ba slli r2,r2,2
80353c8: 1885883a add r2,r3,r2
80353cc: 10800017 ldw r2,0(r2)
80353d0: 10ffffc4 addi r3,r2,-1
80353d4: e13ffa17 ldw r4,-24(fp)
80353d8: e0bfff17 ldw r2,-4(fp)
80353dc: 108000c4 addi r2,r2,3
80353e0: 100490ba slli r2,r2,2
80353e4: 2085883a add r2,r4,r2
80353e8: 10c00015 stw r3,0(r2)
80353ec: e0fffa17 ldw r3,-24(fp)
80353f0: e0bfff17 ldw r2,-4(fp)
80353f4: 108000c4 addi r2,r2,3
80353f8: 100490ba slli r2,r2,2
80353fc: 1885883a add r2,r3,r2
8035400: 10800017 ldw r2,0(r2)
8035404: 10000c1e bne r2,zero,8035438 <tcp_slowtimo+0x130>
{
/* call usrreq to do actual work */
so->so_req = PRU_SLOWTIMO;
8035408: e0bffe17 ldw r2,-8(fp)
803540c: 00c004c4 movi r3,19
8035410: 10c00715 stw r3,28(r2)
(void) tcp_usrreq(so, (struct mbuf *)0,
8035414: e0bfff17 ldw r2,-4(fp)
8035418: 100d883a mov r6,r2
803541c: 000b883a mov r5,zero
8035420: e13ffe17 ldw r4,-8(fp)
8035424: 8035a140 call 8035a14 <tcp_usrreq>
LONG2MBUF((long)i));
/* If ip disappeared on us, handle it */
if (ipnxt->inp_prev != ip)
8035428: e0bffb17 ldw r2,-20(fp)
803542c: 10800117 ldw r2,4(r2)
8035430: e0fffc17 ldw r3,-16(fp)
8035434: 1880381e bne r3,r2,8035518 <tcp_slowtimo+0x210>
for (i = 0; i < TCPT_NTIMERS; i++)
8035438: e0bfff17 ldw r2,-4(fp)
803543c: 10800044 addi r2,r2,1
8035440: e0bfff15 stw r2,-4(fp)
8035444: e0bfff17 ldw r2,-4(fp)
8035448: 10800110 cmplti r2,r2,4
803544c: 103fd31e bne r2,zero,803539c <tcp_slowtimo+0x94>
}
}
}
#endif /* TCP_ZEROCOPY */
tp->t_idle++;
8035450: e0bffa17 ldw r2,-24(fp)
8035454: 10801d17 ldw r2,116(r2)
8035458: 10c00044 addi r3,r2,1
803545c: e0bffa17 ldw r2,-24(fp)
8035460: 10c01d15 stw r3,116(r2)
}
/* wake up anyone sleeping in a select() involving this socket */
sb = &so->so_rcv;
8035464: e0bffe17 ldw r2,-8(fp)
8035468: 10800a04 addi r2,r2,40
803546c: e0bff915 stw r2,-28(fp)
if (sb->sb_flags & SB_SEL)
8035470: e0bff917 ldw r2,-28(fp)
8035474: 1080070b ldhu r2,28(r2)
8035478: 10bfffcc andi r2,r2,65535
803547c: 1080020c andi r2,r2,8
8035480: 10000a26 beq r2,zero,80354ac <tcp_slowtimo+0x1a4>
{
select_wait = 0;
8035484: d020850d sth zero,-32236(gp)
#ifndef SOCK_MAP_EVENTS
tcp_wakeup ((char *)&select_wait);
8035488: d1208504 addi r4,gp,-32236
803548c: 8027ba00 call 8027ba0 <tcp_wakeup>
#else
tcp_wakeup2 (so->owner);
#endif
sb->sb_flags &= ~SB_SEL;
8035490: e0bff917 ldw r2,-28(fp)
8035494: 10c0070b ldhu r3,28(r2)
8035498: 00bffdc4 movi r2,-9
803549c: 1884703a and r2,r3,r2
80354a0: 1007883a mov r3,r2
80354a4: e0bff917 ldw r2,-28(fp)
80354a8: 10c0070d sth r3,28(r2)
}
sb = &so->so_snd;
80354ac: e0bffe17 ldw r2,-8(fp)
80354b0: 10801204 addi r2,r2,72
80354b4: e0bff915 stw r2,-28(fp)
if (sb->sb_flags & SB_SEL)
80354b8: e0bff917 ldw r2,-28(fp)
80354bc: 1080070b ldhu r2,28(r2)
80354c0: 10bfffcc andi r2,r2,65535
80354c4: 1080020c andi r2,r2,8
80354c8: 10000a26 beq r2,zero,80354f4 <tcp_slowtimo+0x1ec>
{
select_wait = 0;
80354cc: d020850d sth zero,-32236(gp)
#ifndef SOCK_MAP_EVENTS
tcp_wakeup ((char *)&select_wait);
80354d0: d1208504 addi r4,gp,-32236
80354d4: 8027ba00 call 8027ba0 <tcp_wakeup>
#else
tcp_wakeup2 (so->owner);
#endif
sb->sb_flags &= ~SB_SEL;
80354d8: e0bff917 ldw r2,-28(fp)
80354dc: 10c0070b ldhu r3,28(r2)
80354e0: 00bffdc4 movi r2,-9
80354e4: 1884703a and r2,r3,r2
80354e8: 1007883a mov r3,r2
80354ec: e0bff917 ldw r2,-28(fp)
80354f0: 10c0070d sth r3,28(r2)
}
/* wake any thread with a timer going for a connection state change */
tcp_wakeup((char*)&so->so_timeo);
80354f4: e0bffe17 ldw r2,-8(fp)
80354f8: 10800904 addi r2,r2,36
80354fc: 1009883a mov r4,r2
8035500: 8027ba00 call 8027ba0 <tcp_wakeup>
8035504: 00000506 br 803551c <tcp_slowtimo+0x214>
continue;
8035508: 0001883a nop
803550c: 00000306 br 803551c <tcp_slowtimo+0x214>
continue;
8035510: 0001883a nop
8035514: 00000106 br 803551c <tcp_slowtimo+0x214>
goto tpgone;
8035518: 0001883a nop
for (so = (struct socket *)soq.q_head; so != NULL; so = sonext)
803551c: e0bffd17 ldw r2,-12(fp)
8035520: e0bffe15 stw r2,-8(fp)
8035524: e0bffe17 ldw r2,-8(fp)
8035528: 103f821e bne r2,zero,8035334 <tcp_slowtimo+0x2c>
tpgone:
;
}
tcp_iss += (unsigned)(TCP_ISSINCR/PR_SLOWHZ); /* increment iss */
803552c: d0e08a17 ldw r3,-32216(gp)
8035530: 00be9fd4 movui r2,64127
8035534: 1885883a add r2,r3,r2
8035538: d0a08a15 stw r2,-32216(gp)
if (tcp_iss & 0xff000000)
803553c: d0a08a17 ldw r2,-32216(gp)
8035540: 10bfc02c andhi r2,r2,65280
8035544: 10000126 beq r2,zero,803554c <tcp_slowtimo+0x244>
tcp_iss = 0L;
8035548: d0208a15 stw zero,-32216(gp)
}
803554c: 0001883a nop
8035550: e037883a mov sp,fp
8035554: dfc00117 ldw ra,4(sp)
8035558: df000017 ldw fp,0(sp)
803555c: dec00204 addi sp,sp,8
8035560: f800283a ret
08035564 <tcp_canceltimers>:
* RETURNS:
*/
void
tcp_canceltimers(struct tcpcb * tp)
{
8035564: defffd04 addi sp,sp,-12
8035568: df000215 stw fp,8(sp)
803556c: df000204 addi fp,sp,8
8035570: e13ffe15 stw r4,-8(fp)
int i;
for (i = 0; i < TCPT_NTIMERS; i++)
8035574: e03fff15 stw zero,-4(fp)
8035578: 00000906 br 80355a0 <tcp_canceltimers+0x3c>
tp->t_timer[i] = 0;
803557c: e0fffe17 ldw r3,-8(fp)
8035580: e0bfff17 ldw r2,-4(fp)
8035584: 108000c4 addi r2,r2,3
8035588: 100490ba slli r2,r2,2
803558c: 1885883a add r2,r3,r2
8035590: 10000015 stw zero,0(r2)
for (i = 0; i < TCPT_NTIMERS; i++)
8035594: e0bfff17 ldw r2,-4(fp)
8035598: 10800044 addi r2,r2,1
803559c: e0bfff15 stw r2,-4(fp)
80355a0: e0bfff17 ldw r2,-4(fp)
80355a4: 10800110 cmplti r2,r2,4
80355a8: 103ff41e bne r2,zero,803557c <tcp_canceltimers+0x18>
}
80355ac: 0001883a nop
80355b0: e037883a mov sp,fp
80355b4: df000017 ldw fp,0(sp)
80355b8: dec00104 addi sp,sp,4
80355bc: f800283a ret
080355c0 <tcp_timers>:
* RETURNS:
*/
struct tcpcb *
tcp_timers(struct tcpcb * tp, int timer)
{
80355c0: defff804 addi sp,sp,-32
80355c4: dfc00715 stw ra,28(sp)
80355c8: df000615 stw fp,24(sp)
80355cc: df000604 addi fp,sp,24
80355d0: e13ffd15 stw r4,-12(fp)
80355d4: e17ffc15 stw r5,-16(fp)
int rexmt;
switch (timer)
80355d8: e0bffc17 ldw r2,-16(fp)
80355dc: 10800060 cmpeqi r2,r2,1
80355e0: 1000af1e bne r2,zero,80358a0 <tcp_timers+0x2e0>
80355e4: e0bffc17 ldw r2,-16(fp)
80355e8: 10800088 cmpgei r2,r2,2
80355ec: 1000031e bne r2,zero,80355fc <tcp_timers+0x3c>
80355f0: e0bffc17 ldw r2,-16(fp)
80355f4: 10001a26 beq r2,zero,8035660 <tcp_timers+0xa0>
80355f8: 00010006 br 80359fc <tcp_timers+0x43c>
80355fc: e0bffc17 ldw r2,-16(fp)
8035600: 108000a0 cmpeqi r2,r2,2
8035604: 1000b51e bne r2,zero,80358dc <tcp_timers+0x31c>
8035608: e0bffc17 ldw r2,-16(fp)
803560c: 108000d8 cmpnei r2,r2,3
8035610: 1000fa1e bne r2,zero,80359fc <tcp_timers+0x43c>
* still waiting for peer to close and connection has been idle
* too long, or if 2MSL time is up from TIME_WAIT, delete connection
* control block. Otherwise, check again in a bit.
*/
case TCPT_2MSL:
if (tp->t_state != TCPS_TIME_WAIT &&
8035614: e0bffd17 ldw r2,-12(fp)
8035618: 10800217 ldw r2,8(r2)
803561c: 108002a0 cmpeqi r2,r2,10
8035620: 10000b1e bne r2,zero,8035650 <tcp_timers+0x90>
tp->t_idle <= tcp_maxidle)
8035624: e0bffd17 ldw r2,-12(fp)
8035628: 10801d17 ldw r2,116(r2)
803562c: d0e08917 ldw r3,-32220(gp)
if (tp->t_state != TCPS_TIME_WAIT &&
8035630: 18800716 blt r3,r2,8035650 <tcp_timers+0x90>
{
tp->t_timer[TCPT_2MSL] = (short)tcp_keepintvl;
8035634: d0a01f17 ldw r2,-32644(gp)
8035638: 10ffffcc andi r3,r2,65535
803563c: 18e0001c xori r3,r3,32768
8035640: 18e00004 addi r3,r3,-32768
8035644: e0bffd17 ldw r2,-12(fp)
8035648: 10c00615 stw r3,24(r2)
}
else
tp = tcp_close(tp);
break;
803564c: 0000eb06 br 80359fc <tcp_timers+0x43c>
tp = tcp_close(tp);
8035650: e13ffd17 ldw r4,-12(fp)
8035654: 80350e80 call 80350e8 <tcp_close>
8035658: e0bffd15 stw r2,-12(fp)
break;
803565c: 0000e706 br 80359fc <tcp_timers+0x43c>
* Retransmission timer went off. Message has not
* been acked within retransmit interval. Back off
* to a longer retransmit interval and retransmit one segment.
*/
case TCPT_REXMT:
TCP_MIB_INC(tcpRetransSegs); /* keep MIB stats */
8035660: 008201b4 movhi r2,2054
8035664: 10b88117 ldw r2,-7676(r2)
8035668: 10c00044 addi r3,r2,1
803566c: 008201b4 movhi r2,2054
8035670: 10f88115 stw r3,-7676(r2)
if (++tp->t_rxtshift > TCP_MAXRXTSHIFT)
8035674: e0bffd17 ldw r2,-12(fp)
8035678: 10800717 ldw r2,28(r2)
803567c: 10c00044 addi r3,r2,1
8035680: e0bffd17 ldw r2,-12(fp)
8035684: 10c00715 stw r3,28(r2)
8035688: e0bffd17 ldw r2,-12(fp)
803568c: 10800717 ldw r2,28(r2)
8035690: 10800350 cmplti r2,r2,13
8035694: 10000d1e bne r2,zero,80356cc <tcp_timers+0x10c>
{
tp->t_rxtshift = TCP_MAXRXTSHIFT;
8035698: e0bffd17 ldw r2,-12(fp)
803569c: 00c00304 movi r3,12
80356a0: 10c00715 stw r3,28(r2)
tcpstat.tcps_timeoutdrop++;
80356a4: 008201b4 movhi r2,2054
80356a8: 10b8ad17 ldw r2,-7500(r2)
80356ac: 10c00044 addi r3,r2,1
80356b0: 008201b4 movhi r2,2054
80356b4: 10f8ad15 stw r3,-7500(r2)
tp = tcp_drop(tp, ETIMEDOUT);
80356b8: 01401d04 movi r5,116
80356bc: e13ffd17 ldw r4,-12(fp)
80356c0: 803504c0 call 803504c <tcp_drop>
80356c4: e0bffd15 stw r2,-12(fp)
break;
80356c8: 0000cc06 br 80359fc <tcp_timers+0x43c>
}
tcpstat.tcps_rexmttimeo++;
80356cc: 008201b4 movhi r2,2054
80356d0: 10b8ae17 ldw r2,-7496(r2)
80356d4: 10c00044 addi r3,r2,1
80356d8: 008201b4 movhi r2,2054
80356dc: 10f8ae15 stw r3,-7496(r2)
rexmt = ((tp->t_srtt >> 2) + tp->t_rttvar) >> 1;
80356e0: e0bffd17 ldw r2,-12(fp)
80356e4: 10802017 ldw r2,128(r2)
80356e8: 1007d0ba srai r3,r2,2
80356ec: e0bffd17 ldw r2,-12(fp)
80356f0: 10802117 ldw r2,132(r2)
80356f4: 1885883a add r2,r3,r2
80356f8: 1005d07a srai r2,r2,1
80356fc: e0bffe15 stw r2,-8(fp)
rexmt *= tcp_backoff[tp->t_rxtshift];
8035700: e0bffd17 ldw r2,-12(fp)
8035704: 10c00717 ldw r3,28(r2)
8035708: 00820174 movhi r2,2053
803570c: 1885883a add r2,r3,r2
8035710: 10b20cc3 ldbu r2,-14285(r2)
8035714: 10803fcc andi r2,r2,255
8035718: e0fffe17 ldw r3,-8(fp)
803571c: 1885383a mul r2,r3,r2
8035720: e0bffe15 stw r2,-8(fp)
TCPT_RANGESET(tp->t_rxtcur, rexmt, TCPTV_MIN, TCPTV_REXMTMAX);
8035724: e0bffe17 ldw r2,-8(fp)
8035728: 10ffffcc andi r3,r2,65535
803572c: 18e0001c xori r3,r3,32768
8035730: 18e00004 addi r3,r3,-32768
8035734: e0bffd17 ldw r2,-12(fp)
8035738: 10c00815 stw r3,32(r2)
803573c: e0bffd17 ldw r2,-12(fp)
8035740: 10800817 ldw r2,32(r2)
8035744: 10800088 cmpgei r2,r2,2
8035748: 1000041e bne r2,zero,803575c <tcp_timers+0x19c>
803574c: e0bffd17 ldw r2,-12(fp)
8035750: 00c00084 movi r3,2
8035754: 10c00815 stw r3,32(r2)
8035758: 00000706 br 8035778 <tcp_timers+0x1b8>
803575c: e0bffd17 ldw r2,-12(fp)
8035760: 10800817 ldw r2,32(r2)
8035764: 10802050 cmplti r2,r2,129
8035768: 1000031e bne r2,zero,8035778 <tcp_timers+0x1b8>
803576c: e0bffd17 ldw r2,-12(fp)
8035770: 00c02004 movi r3,128
8035774: 10c00815 stw r3,32(r2)
tp->t_timer[TCPT_REXMT] = tp->t_rxtcur;
8035778: e0bffd17 ldw r2,-12(fp)
803577c: 10c00817 ldw r3,32(r2)
8035780: e0bffd17 ldw r2,-12(fp)
8035784: 10c00315 stw r3,12(r2)
* so we'll take the next rtt measurement as our srtt;
* move the current srtt into rttvar to keep the current
* retransmit times until then. Don't clobber with rtt
* if we got it from a timestamp option.
*/
if((tp->t_rxtshift > TCP_MAXRXTSHIFT / 4) &&
8035788: e0bffd17 ldw r2,-12(fp)
803578c: 10800717 ldw r2,28(r2)
8035790: 10800110 cmplti r2,r2,4
8035794: 10000f1e bne r2,zero,80357d4 <tcp_timers+0x214>
((tp->t_flags & TF_TIMESTAMP) == 0))
8035798: e0bffd17 ldw r2,-12(fp)
803579c: 10800b0b ldhu r2,44(r2)
80357a0: 10bfffcc andi r2,r2,65535
80357a4: 1080400c andi r2,r2,256
if((tp->t_rxtshift > TCP_MAXRXTSHIFT / 4) &&
80357a8: 10000a1e bne r2,zero,80357d4 <tcp_timers+0x214>
{
tp->t_rttvar += (tp->t_srtt >> 2);
80357ac: e0bffd17 ldw r2,-12(fp)
80357b0: 10c02117 ldw r3,132(r2)
80357b4: e0bffd17 ldw r2,-12(fp)
80357b8: 10802017 ldw r2,128(r2)
80357bc: 1005d0ba srai r2,r2,2
80357c0: 1887883a add r3,r3,r2
80357c4: e0bffd17 ldw r2,-12(fp)
80357c8: 10c02115 stw r3,132(r2)
tp->t_srtt = 0;
80357cc: e0bffd17 ldw r2,-12(fp)
80357d0: 10002015 stw zero,128(r2)
}
tp->snd_nxt = tp->snd_una;
80357d4: e0bffd17 ldw r2,-12(fp)
80357d8: 10c00e17 ldw r3,56(r2)
80357dc: e0bffd17 ldw r2,-12(fp)
80357e0: 10c00f15 stw r3,60(r2)
/*
* If timing a segment in this window, stop the timer.
*/
tp->t_rttick = 0;
80357e4: e0bffd17 ldw r2,-12(fp)
80357e8: 10001e15 stw zero,120(r2)
* to go below this.)
*
* Vers 1.9 - Skip slow start if the SO_NOSLOWSTART socket option
* is set.
*/
if((tp->t_inpcb->inp_socket->so_options & SO_NOSLOWSTART) == 0)
80357ec: e0bffd17 ldw r2,-12(fp)
80357f0: 10800d17 ldw r2,52(r2)
80357f4: 10800817 ldw r2,32(r2)
80357f8: 10800417 ldw r2,16(r2)
80357fc: 1090000c andi r2,r2,16384
8035800: 1000241e bne r2,zero,8035894 <tcp_timers+0x2d4>
{
u_int win = MIN(tp->snd_wnd, tp->snd_cwnd);
8035804: e0bffd17 ldw r2,-12(fp)
8035808: 11001417 ldw r4,80(r2)
803580c: e0bffd17 ldw r2,-12(fp)
8035810: 10c01b17 ldw r3,108(r2)
8035814: 2005883a mov r2,r4
8035818: 1880012e bgeu r3,r2,8035820 <tcp_timers+0x260>
803581c: 1805883a mov r2,r3
8035820: e0bfff15 stw r2,-4(fp)
win = win / 2 / tp->t_maxseg;
8035824: e0bfff17 ldw r2,-4(fp)
8035828: 1006d07a srli r3,r2,1
803582c: e0bffd17 ldw r2,-12(fp)
8035830: 10800a0b ldhu r2,40(r2)
8035834: 10bfffcc andi r2,r2,65535
8035838: 100b883a mov r5,r2
803583c: 1809883a mov r4,r3
8035840: 800cff80 call 800cff8 <__udivsi3>
8035844: e0bfff15 stw r2,-4(fp)
if (win < 2)
8035848: e0bfff17 ldw r2,-4(fp)
803584c: 108000a8 cmpgeui r2,r2,2
8035850: 1000021e bne r2,zero,803585c <tcp_timers+0x29c>
win = 2;
8035854: 00800084 movi r2,2
8035858: e0bfff15 stw r2,-4(fp)
tp->snd_cwnd = tp->t_maxseg;
803585c: e0bffd17 ldw r2,-12(fp)
8035860: 10800a0b ldhu r2,40(r2)
8035864: 10ffffcc andi r3,r2,65535
8035868: e0bffd17 ldw r2,-12(fp)
803586c: 10c01b15 stw r3,108(r2)
tp->snd_ssthresh = (u_short)win * tp->t_maxseg;
8035870: e0bfff17 ldw r2,-4(fp)
8035874: 10ffffcc andi r3,r2,65535
8035878: e0bffd17 ldw r2,-12(fp)
803587c: 10800a0b ldhu r2,40(r2)
8035880: 10bfffcc andi r2,r2,65535
8035884: 1885383a mul r2,r3,r2
8035888: 1007883a mov r3,r2
803588c: e0bffd17 ldw r2,-12(fp)
8035890: 10c01c15 stw r3,112(r2)
}
(void) tcp_output(tp);
8035894: e13ffd17 ldw r4,-12(fp)
8035898: 80338940 call 8033894 <tcp_output>
break;
803589c: 00005706 br 80359fc <tcp_timers+0x43c>
/*
* Persistance timer into zero window.
* Force a byte to be output, if possible.
*/
case TCPT_PERSIST:
tcpstat.tcps_persisttimeo++;
80358a0: 008201b4 movhi r2,2054
80358a4: 10b8af17 ldw r2,-7492(r2)
80358a8: 10c00044 addi r3,r2,1
80358ac: 008201b4 movhi r2,2054
80358b0: 10f8af15 stw r3,-7492(r2)
tcp_setpersist(tp);
80358b4: e13ffd17 ldw r4,-12(fp)
80358b8: 80348300 call 8034830 <tcp_setpersist>
tp->t_force = 1;
80358bc: e0bffd17 ldw r2,-12(fp)
80358c0: 00c00044 movi r3,1
80358c4: 10c00a85 stb r3,42(r2)
(void) tcp_output(tp);
80358c8: e13ffd17 ldw r4,-12(fp)
80358cc: 80338940 call 8033894 <tcp_output>
tp->t_force = 0;
80358d0: e0bffd17 ldw r2,-12(fp)
80358d4: 10000a85 stb zero,42(r2)
break;
80358d8: 00004806 br 80359fc <tcp_timers+0x43c>
/*
* Keep-alive timer went off; send something
* or drop connection if idle for too long.
*/
case TCPT_KEEP:
tcpstat.tcps_keeptimeo++;
80358dc: 008201b4 movhi r2,2054
80358e0: 10b8b017 ldw r2,-7488(r2)
80358e4: 10c00044 addi r3,r2,1
80358e8: 008201b4 movhi r2,2054
80358ec: 10f8b015 stw r3,-7488(r2)
if (tp->t_state < TCPS_ESTABLISHED)
80358f0: e0bffd17 ldw r2,-12(fp)
80358f4: 10800217 ldw r2,8(r2)
80358f8: 10800108 cmpgei r2,r2,4
80358fc: 10003226 beq r2,zero,80359c8 <tcp_timers+0x408>
goto dropit;
if (tp->t_inpcb->inp_socket->so_options & SO_KEEPALIVE &&
8035900: e0bffd17 ldw r2,-12(fp)
8035904: 10800d17 ldw r2,52(r2)
8035908: 10800817 ldw r2,32(r2)
803590c: 10800417 ldw r2,16(r2)
8035910: 1080020c andi r2,r2,8
8035914: 10002526 beq r2,zero,80359ac <tcp_timers+0x3ec>
tp->t_state <= TCPS_CLOSE_WAIT)
8035918: e0bffd17 ldw r2,-12(fp)
803591c: 10800217 ldw r2,8(r2)
if (tp->t_inpcb->inp_socket->so_options & SO_KEEPALIVE &&
8035920: 10800188 cmpgei r2,r2,6
8035924: 1000211e bne r2,zero,80359ac <tcp_timers+0x3ec>
{
if (tp->t_idle >= tcp_keepidle + tcp_maxidle)
8035928: e0bffd17 ldw r2,-12(fp)
803592c: 10c01d17 ldw r3,116(r2)
8035930: d1201e17 ldw r4,-32648(gp)
8035934: d0a08917 ldw r2,-32220(gp)
8035938: 2085883a add r2,r4,r2
803593c: 1880240e bge r3,r2,80359d0 <tcp_timers+0x410>
* causes the transmitted zero-length segment
* to lie outside the receive window;
* by the protocol spec, this requires the
* correspondent TCP to respond.
*/
tcpstat.tcps_keepprobe++;
8035940: 008201b4 movhi r2,2054
8035944: 10b8b117 ldw r2,-7484(r2)
8035948: 10c00044 addi r3,r2,1
803594c: 008201b4 movhi r2,2054
8035950: 10f8b115 stw r3,-7484(r2)
/*
* The keepalive packet must have nonzero length
* to get a 4.2 host to respond.
*/
tcp_respond(tp, tp->t_template, tp->rcv_nxt - 1,
8035954: e0bffd17 ldw r2,-12(fp)
8035958: 10c00c17 ldw r3,48(r2)
803595c: e0bffd17 ldw r2,-12(fp)
8035960: 10801617 ldw r2,88(r2)
8035964: 113fffc4 addi r4,r2,-1
tp->snd_una - 1, 0, (struct mbuf *)NULL);
8035968: e0bffd17 ldw r2,-12(fp)
803596c: 10800e17 ldw r2,56(r2)
tcp_respond(tp, tp->t_template, tp->rcv_nxt - 1,
8035970: 10bfffc4 addi r2,r2,-1
8035974: d8000115 stw zero,4(sp)
8035978: d8000015 stw zero,0(sp)
803597c: 100f883a mov r7,r2
8035980: 200d883a mov r6,r4
8035984: 180b883a mov r5,r3
8035988: e13ffd17 ldw r4,-12(fp)
803598c: 8034b480 call 8034b48 <tcp_respond>
tp->t_timer[TCPT_KEEP] = (short)tcp_keepintvl;
8035990: d0a01f17 ldw r2,-32644(gp)
8035994: 10ffffcc andi r3,r2,65535
8035998: 18e0001c xori r3,r3,32768
803599c: 18e00004 addi r3,r3,-32768
80359a0: e0bffd17 ldw r2,-12(fp)
80359a4: 10c00515 stw r3,20(r2)
}
else
tp->t_timer[TCPT_KEEP] = (short)tcp_keepidle;
break;
80359a8: 00001406 br 80359fc <tcp_timers+0x43c>
tp->t_timer[TCPT_KEEP] = (short)tcp_keepidle;
80359ac: d0a01e17 ldw r2,-32648(gp)
80359b0: 10ffffcc andi r3,r2,65535
80359b4: 18e0001c xori r3,r3,32768
80359b8: 18e00004 addi r3,r3,-32768
80359bc: e0bffd17 ldw r2,-12(fp)
80359c0: 10c00515 stw r3,20(r2)
break;
80359c4: 00000d06 br 80359fc <tcp_timers+0x43c>
goto dropit;
80359c8: 0001883a nop
80359cc: 00000106 br 80359d4 <tcp_timers+0x414>
goto dropit;
80359d0: 0001883a nop
dropit:
tcpstat.tcps_keepdrops++;
80359d4: 008201b4 movhi r2,2054
80359d8: 10b8b217 ldw r2,-7480(r2)
80359dc: 10c00044 addi r3,r2,1
80359e0: 008201b4 movhi r2,2054
80359e4: 10f8b215 stw r3,-7480(r2)
tp = tcp_drop (tp, ETIMEDOUT);
80359e8: 01401d04 movi r5,116
80359ec: e13ffd17 ldw r4,-12(fp)
80359f0: 803504c0 call 803504c <tcp_drop>
80359f4: e0bffd15 stw r2,-12(fp)
break;
80359f8: 0001883a nop
}
return tp;
80359fc: e0bffd17 ldw r2,-12(fp)
}
8035a00: e037883a mov sp,fp
8035a04: dfc00117 ldw ra,4(sp)
8035a08: df000017 ldw fp,0(sp)
8035a0c: dec00204 addi sp,sp,8
8035a10: f800283a ret
08035a14 <tcp_usrreq>:
int
tcp_usrreq(struct socket * so,
struct mbuf * m,
struct mbuf * nam)
{
8035a14: defff604 addi sp,sp,-40
8035a18: dfc00915 stw ra,36(sp)
8035a1c: df000815 stw fp,32(sp)
8035a20: df000804 addi fp,sp,32
8035a24: e13ffa15 stw r4,-24(fp)
8035a28: e17ff915 stw r5,-28(fp)
8035a2c: e1bff815 stw r6,-32(fp)
struct inpcb * inp;
struct tcpcb * tp;
int error = 0;
8035a30: e03ffe15 stw zero,-8(fp)
#ifdef DO_TCPTRACE
int ostate;
#endif
req = so->so_req; /* get request from socket struct */
8035a34: e0bffa17 ldw r2,-24(fp)
8035a38: 10800717 ldw r2,28(r2)
8035a3c: e0bffd15 stw r2,-12(fp)
inp = sotoinpcb(so);
8035a40: e0bffa17 ldw r2,-24(fp)
8035a44: 10800117 ldw r2,4(r2)
8035a48: e0bffc15 stw r2,-16(fp)
/*
* When a TCP is attached to a socket, then there will be
* a (struct inpcb) pointed at by the socket, and this
* structure will point at a subsidary (struct tcpcb).
*/
if (inp == 0 && req != PRU_ATTACH)
8035a4c: e0bffc17 ldw r2,-16(fp)
8035a50: 1000041e bne r2,zero,8035a64 <tcp_usrreq+0x50>
8035a54: e0bffd17 ldw r2,-12(fp)
8035a58: 10000226 beq r2,zero,8035a64 <tcp_usrreq+0x50>
{
return (EINVAL);
8035a5c: 00800584 movi r2,22
8035a60: 00019506 br 80360b8 <tcp_usrreq+0x6a4>
}
if (inp)
8035a64: e0bffc17 ldw r2,-16(fp)
8035a68: 10000426 beq r2,zero,8035a7c <tcp_usrreq+0x68>
tp = intotcpcb(inp);
8035a6c: e0bffc17 ldw r2,-16(fp)
8035a70: 10800917 ldw r2,36(r2)
8035a74: e0bfff15 stw r2,-4(fp)
8035a78: 00000706 br 8035a98 <tcp_usrreq+0x84>
else /* inp and tp not set, make sure this is OK: */
{
if (req == PRU_ATTACH)
8035a7c: e0bffd17 ldw r2,-12(fp)
8035a80: 1000021e bne r2,zero,8035a8c <tcp_usrreq+0x78>
tp = NULL; /* stifle compiler warnings about using unassigned tp*/
8035a84: e03fff15 stw zero,-4(fp)
8035a88: 00000306 br 8035a98 <tcp_usrreq+0x84>
else
{
dtrap(); /* programming error? */
8035a8c: 8028cd40 call 8028cd4 <dtrap>
return EINVAL;
8035a90: 00800584 movi r2,22
8035a94: 00018806 br 80360b8 <tcp_usrreq+0x6a4>
}
}
switch (req)
8035a98: e0bffd17 ldw r2,-12(fp)
8035a9c: 10800528 cmpgeui r2,r2,20
8035aa0: 10016f1e bne r2,zero,8036060 <tcp_usrreq+0x64c>
8035aa4: e0bffd17 ldw r2,-12(fp)
8035aa8: 100690ba slli r3,r2,2
8035aac: 008200f4 movhi r2,2051
8035ab0: 1885883a add r2,r3,r2
8035ab4: 1096af17 ldw r2,23228(r2)
8035ab8: 1000683a jmp r2
8035abc: 08035b0c andi zero,at,3436
8035ac0: 08035b6c andhi zero,at,3437
8035ac4: 08035b94 ori zero,at,3438
8035ac8: 08035bcc andi zero,at,3439
8035acc: 08035c04 addi zero,at,3440
8035ad0: 08035d4c andi zero,at,3445
8035ad4: 08035d40 call 8035d4 <OSCtxSw_SWITCH_PC+0x803594>
8035ad8: 08035df4 orhi zero,at,3447
8035adc: 08035e20 cmpeqi zero,at,3448
8035ae0: 08035e2c andhi zero,at,3448
8035ae4: 08035e88 cmpgei zero,at,3450
8035ae8: 08036060 cmpeqi zero,at,3457
8035aec: 08035e98 cmpnei zero,at,3450
8035af0: 08035ea4 muli zero,at,3450
8035af4: 08035f5c xori zero,at,3453
8035af8: 0803602c andhi zero,at,3456
8035afc: 0803603c xorhi zero,at,3456
8035b00: 08035d34 orhi zero,at,3444
8035b04: 08036060 cmpeqi zero,at,3457
8035b08: 0803604c andi zero,at,3457
/*
* TCP attaches to socket via PRU_ATTACH, reserving space,
* and an internet control block.
*/
case PRU_ATTACH:
if (inp)
8035b0c: e0bffc17 ldw r2,-16(fp)
8035b10: 10000326 beq r2,zero,8035b20 <tcp_usrreq+0x10c>
{
error = EISCONN;
8035b14: 00801fc4 movi r2,127
8035b18: e0bffe15 stw r2,-8(fp)
break;
8035b1c: 00016506 br 80360b4 <tcp_usrreq+0x6a0>
}
error = tcp_attach(so);
8035b20: e13ffa17 ldw r4,-24(fp)
8035b24: 80360cc0 call 80360cc <tcp_attach>
8035b28: e0bffe15 stw r2,-8(fp)
if (error)
8035b2c: e0bffe17 ldw r2,-8(fp)
8035b30: 10014f1e bne r2,zero,8036070 <tcp_usrreq+0x65c>
break;
if ((so->so_options & SO_LINGER) && so->so_linger == 0)
8035b34: e0bffa17 ldw r2,-24(fp)
8035b38: 10800417 ldw r2,16(r2)
8035b3c: 1080200c andi r2,r2,128
8035b40: 10014d26 beq r2,zero,8036078 <tcp_usrreq+0x664>
8035b44: e0bffa17 ldw r2,-24(fp)
8035b48: 1080080b ldhu r2,32(r2)
8035b4c: 10bfffcc andi r2,r2,65535
8035b50: 10a0001c xori r2,r2,32768
8035b54: 10a00004 addi r2,r2,-32768
8035b58: 1001471e bne r2,zero,8036078 <tcp_usrreq+0x664>
so->so_linger = TCP_LINGERTIME;
8035b5c: e0bffa17 ldw r2,-24(fp)
8035b60: 00c01e04 movi r3,120
8035b64: 10c0080d sth r3,32(r2)
#ifdef DO_TCPTRACE
SETTP(tp, sototcpcb(so));
#endif
break;
8035b68: 00014306 br 8036078 <tcp_usrreq+0x664>
* do this directly: have to initiate a PRU_DISCONNECT,
* which may finish later; embryonic TCB's can just
* be discarded here.
*/
case PRU_DETACH:
if (tp->t_state > TCPS_LISTEN)
8035b6c: e0bfff17 ldw r2,-4(fp)
8035b70: 10800217 ldw r2,8(r2)
8035b74: 10800090 cmplti r2,r2,2
8035b78: 1000031e bne r2,zero,8035b88 <tcp_usrreq+0x174>
SETTP(tp, tcp_disconnect(tp));
8035b7c: e13fff17 ldw r4,-4(fp)
8035b80: 80361e40 call 80361e4 <tcp_disconnect>
else
SETTP(tp, tcp_close(tp));
break;
8035b84: 00014b06 br 80360b4 <tcp_usrreq+0x6a0>
SETTP(tp, tcp_close(tp));
8035b88: e13fff17 ldw r4,-4(fp)
8035b8c: 80350e80 call 80350e8 <tcp_close>
break;
8035b90: 00014806 br 80360b4 <tcp_usrreq+0x6a0>
/* bind is quite different for IPv4 and v6, so we use two
* seperate pcbbind routines. so_domain was checked for
* validity way up in t_bind()
*/
#ifdef IP_V4
if(inp->inp_socket->so_domain == AF_INET)
8035b94: e0bffc17 ldw r2,-16(fp)
8035b98: 10800817 ldw r2,32(r2)
8035b9c: 10800517 ldw r2,20(r2)
8035ba0: 10800098 cmpnei r2,r2,2
8035ba4: 1000051e bne r2,zero,8035bbc <tcp_usrreq+0x1a8>
{
error = in_pcbbind(inp, nam);
8035ba8: e17ff817 ldw r5,-32(fp)
8035bac: e13ffc17 ldw r4,-16(fp)
8035bb0: 804060c0 call 804060c <in_pcbbind>
8035bb4: e0bffe15 stw r2,-8(fp)
break;
8035bb8: 00013e06 br 80360b4 <tcp_usrreq+0x6a0>
{
error = ip6_pcbbind(inp, nam);
break;
}
#endif /* IP_V6 */
dtrap(); /* not v4 or v6? */
8035bbc: 8028cd40 call 8028cd4 <dtrap>
error = EINVAL;
8035bc0: 00800584 movi r2,22
8035bc4: e0bffe15 stw r2,-8(fp)
break;
8035bc8: 00013a06 br 80360b4 <tcp_usrreq+0x6a0>
/*
* Prepare to accept connections.
*/
case PRU_LISTEN:
if (inp->inp_lport == 0)
8035bcc: e0bffc17 ldw r2,-16(fp)
8035bd0: 1080078b ldhu r2,30(r2)
8035bd4: 10bfffcc andi r2,r2,65535
8035bd8: 1000041e bne r2,zero,8035bec <tcp_usrreq+0x1d8>
error = in_pcbbind(inp, (struct mbuf *)0);
8035bdc: 000b883a mov r5,zero
8035be0: e13ffc17 ldw r4,-16(fp)
8035be4: 804060c0 call 804060c <in_pcbbind>
8035be8: e0bffe15 stw r2,-8(fp)
if (error == 0)
8035bec: e0bffe17 ldw r2,-8(fp)
8035bf0: 1001231e bne r2,zero,8036080 <tcp_usrreq+0x66c>
tp->t_state = TCPS_LISTEN;
8035bf4: e0bfff17 ldw r2,-4(fp)
8035bf8: 00c00044 movi r3,1
8035bfc: 10c00215 stw r3,8(r2)
break;
8035c00: 00011f06 br 8036080 <tcp_usrreq+0x66c>
* Enter SYN_SENT state, and mark socket as connecting.
* Start keep-alive timer, and seed output sequence space.
* Send initial segment on connection.
*/
case PRU_CONNECT:
if (inp->inp_lport == 0)
8035c04: e0bffc17 ldw r2,-16(fp)
8035c08: 1080078b ldhu r2,30(r2)
8035c0c: 10bfffcc andi r2,r2,65535
8035c10: 1000061e bne r2,zero,8035c2c <tcp_usrreq+0x218>
{
#ifdef IP_V4
#ifndef IP_V6 /* v4 only */
error = in_pcbbind(inp, (struct mbuf *)0);
8035c14: 000b883a mov r5,zero
8035c18: e13ffc17 ldw r4,-16(fp)
8035c1c: 804060c0 call 804060c <in_pcbbind>
8035c20: e0bffe15 stw r2,-8(fp)
#endif /* end dual mode code */
#else /* no v4, v6 only */
error = ip6_pcbbind(inp, (struct mbuf *)0);
#endif /* end v6 only */
if (error)
8035c24: e0bffe17 ldw r2,-8(fp)
8035c28: 1001171e bne r2,zero,8036088 <tcp_usrreq+0x674>
break;
}
#ifdef IP_V4
#ifndef IP_V6 /* v4 only */
error = in_pcbconnect(inp, nam);
8035c2c: e17ff817 ldw r5,-32(fp)
8035c30: e13ffc17 ldw r4,-16(fp)
8035c34: 804081c0 call 804081c <in_pcbconnect>
8035c38: e0bffe15 stw r2,-8(fp)
#endif /* end dual mode code */
#else /* no v4, v6 only */
error = ip6_pcbconnect(inp, nam);
#endif /* end v6 only */
if (error)
8035c3c: e0bffe17 ldw r2,-8(fp)
8035c40: 1001131e bne r2,zero,8036090 <tcp_usrreq+0x67c>
break;
tp->t_template = tcp_template(tp);
8035c44: e13fff17 ldw r4,-4(fp)
8035c48: 8034a400 call 8034a40 <tcp_template>
8035c4c: 1007883a mov r3,r2
8035c50: e0bfff17 ldw r2,-4(fp)
8035c54: 10c00c15 stw r3,48(r2)
if (tp->t_template == 0)
8035c58: e0bfff17 ldw r2,-4(fp)
8035c5c: 10800c17 ldw r2,48(r2)
8035c60: 1000051e bne r2,zero,8035c78 <tcp_usrreq+0x264>
{
#ifdef IP_V4
#ifndef IP_V6 /* v4 only */
in_pcbdisconnect(inp);
8035c64: e13ffc17 ldw r4,-16(fp)
8035c68: 80409fc0 call 80409fc <in_pcbdisconnect>
#endif /* end dual mode code */
#else /* no v4, v6 only */
ip6_pcbdisconnect(inp);
#endif /* end v6 only */
error = ENOBUFS;
8035c6c: 00801a44 movi r2,105
8035c70: e0bffe15 stw r2,-8(fp)
break;
8035c74: 00010f06 br 80360b4 <tcp_usrreq+0x6a0>
}
soisconnecting(so);
8035c78: e13ffa17 ldw r4,-24(fp)
8035c7c: 802f1780 call 802f178 <soisconnecting>
tcpstat.tcps_connattempt++;
8035c80: 008201b4 movhi r2,2054
8035c84: 10b8a417 ldw r2,-7536(r2)
8035c88: 10c00044 addi r3,r2,1
8035c8c: 008201b4 movhi r2,2054
8035c90: 10f8a415 stw r3,-7536(r2)
tp->t_state = TCPS_SYN_SENT;
8035c94: e0bfff17 ldw r2,-4(fp)
8035c98: 00c00084 movi r3,2
8035c9c: 10c00215 stw r3,8(r2)
tp->t_timer[TCPT_KEEP] = TCPTV_KEEP_INIT;
8035ca0: e0bfff17 ldw r2,-4(fp)
8035ca4: 00c02584 movi r3,150
8035ca8: 10c00515 stw r3,20(r2)
tp->iss = tcp_iss;
8035cac: d0e08a17 ldw r3,-32216(gp)
8035cb0: e0bfff17 ldw r2,-4(fp)
8035cb4: 10c01315 stw r3,76(r2)
tcp_iss += (tcp_seq)(TCP_ISSINCR/2);
8035cb8: d0e08a17 ldw r3,-32216(gp)
8035cbc: 00be9fd4 movui r2,64127
8035cc0: 1885883a add r2,r3,r2
8035cc4: d0a08a15 stw r2,-32216(gp)
tcp_sendseqinit(tp);
8035cc8: e0bfff17 ldw r2,-4(fp)
8035ccc: 10c01317 ldw r3,76(r2)
8035cd0: e0bfff17 ldw r2,-4(fp)
8035cd4: 10c01015 stw r3,64(r2)
8035cd8: e0bfff17 ldw r2,-4(fp)
8035cdc: 10c01017 ldw r3,64(r2)
8035ce0: e0bfff17 ldw r2,-4(fp)
8035ce4: 10c01a15 stw r3,104(r2)
8035ce8: e0bfff17 ldw r2,-4(fp)
8035cec: 10c01a17 ldw r3,104(r2)
8035cf0: e0bfff17 ldw r2,-4(fp)
8035cf4: 10c00f15 stw r3,60(r2)
8035cf8: e0bfff17 ldw r2,-4(fp)
8035cfc: 10c00f17 ldw r3,60(r2)
8035d00: e0bfff17 ldw r2,-4(fp)
8035d04: 10c00e15 stw r3,56(r2)
error = tcp_output(tp);
8035d08: e13fff17 ldw r4,-4(fp)
8035d0c: 80338940 call 8033894 <tcp_output>
8035d10: e0bffe15 stw r2,-8(fp)
if (!error)
8035d14: e0bffe17 ldw r2,-8(fp)
8035d18: 1000df1e bne r2,zero,8036098 <tcp_usrreq+0x684>
TCP_MIB_INC(tcpActiveOpens); /* keep MIB stats */
8035d1c: 008201b4 movhi r2,2054
8035d20: 10b87a17 ldw r2,-7704(r2)
8035d24: 10c00044 addi r3,r2,1
8035d28: 008201b4 movhi r2,2054
8035d2c: 10f87a15 stw r3,-7704(r2)
break;
8035d30: 0000d906 br 8036098 <tcp_usrreq+0x684>
/*
* Create a TCP connection between two sockets.
*/
case PRU_CONNECT2:
error = EOPNOTSUPP;
8035d34: 008017c4 movi r2,95
8035d38: e0bffe15 stw r2,-8(fp)
break;
8035d3c: 0000dd06 br 80360b4 <tcp_usrreq+0x6a0>
* when peer sends FIN and acks ours.
*
* SHOULD IMPLEMENT LATER PRU_CONNECT VIA REALLOC TCPCB.
*/
case PRU_DISCONNECT:
SETTP(tp, tcp_disconnect(tp));
8035d40: e13fff17 ldw r4,-4(fp)
8035d44: 80361e40 call 80361e4 <tcp_disconnect>
break;
8035d48: 0000da06 br 80360b4 <tcp_usrreq+0x6a0>
* done at higher levels; just return the address
* of the peer, storing through addr.
*/
case PRU_ACCEPT:
{
struct sockaddr_in * sin = mtod(nam, struct sockaddr_in *);
8035d4c: e0bff817 ldw r2,-32(fp)
8035d50: 10800317 ldw r2,12(r2)
8035d54: e0bffb15 stw r2,-20(fp)
IP6CPY(&sin6->sin6_addr, &inp->ip6_faddr);
}
#endif
#ifdef IP_V4
if (so->so_domain == AF_INET)
8035d58: e0bffa17 ldw r2,-24(fp)
8035d5c: 10800517 ldw r2,20(r2)
8035d60: 10800098 cmpnei r2,r2,2
8035d64: 10000e1e bne r2,zero,8035da0 <tcp_usrreq+0x38c>
{
nam->m_len = sizeof (struct sockaddr_in);
8035d68: e0bff817 ldw r2,-32(fp)
8035d6c: 00c00404 movi r3,16
8035d70: 10c00215 stw r3,8(r2)
sin->sin_family = AF_INET;
8035d74: e0bffb17 ldw r2,-20(fp)
8035d78: 00c00084 movi r3,2
8035d7c: 10c0000d sth r3,0(r2)
sin->sin_port = inp->inp_fport;
8035d80: e0bffc17 ldw r2,-16(fp)
8035d84: 10c0070b ldhu r3,28(r2)
8035d88: e0bffb17 ldw r2,-20(fp)
8035d8c: 10c0008d sth r3,2(r2)
sin->sin_addr = inp->inp_faddr;
8035d90: e0bffb17 ldw r2,-20(fp)
8035d94: e0fffc17 ldw r3,-16(fp)
8035d98: 18c00317 ldw r3,12(r3)
8035d9c: 10c00115 stw r3,4(r2)
}
#endif
if ( !(so->so_domain == AF_INET) &&
8035da0: e0bffa17 ldw r2,-24(fp)
8035da4: 10800517 ldw r2,20(r2)
8035da8: 108000a0 cmpeqi r2,r2,2
8035dac: 10000b1e bne r2,zero,8035ddc <tcp_usrreq+0x3c8>
!(so->so_domain == AF_INET6)
8035db0: e0bffa17 ldw r2,-24(fp)
8035db4: 10800517 ldw r2,20(r2)
if ( !(so->so_domain == AF_INET) &&
8035db8: 108000e0 cmpeqi r2,r2,3
8035dbc: 1000071e bne r2,zero,8035ddc <tcp_usrreq+0x3c8>
)
{
dprintf("*** PRU_ACCEPT bad domain = %d\n", so->so_domain);
8035dc0: e0bffa17 ldw r2,-24(fp)
8035dc4: 10800517 ldw r2,20(r2)
8035dc8: 100b883a mov r5,r2
8035dcc: 01020174 movhi r4,2053
8035dd0: 212abb04 addi r4,r4,-21780
8035dd4: 8002c780 call 8002c78 <printf>
dtrap();
8035dd8: 8028cd40 call 8028cd4 <dtrap>
}
TCP_MIB_INC(tcpPassiveOpens); /* keep MIB stats */
8035ddc: 008201b4 movhi r2,2054
8035de0: 10b87b17 ldw r2,-7700(r2)
8035de4: 10c00044 addi r3,r2,1
8035de8: 008201b4 movhi r2,2054
8035dec: 10f87b15 stw r3,-7700(r2)
break;
8035df0: 0000b006 br 80360b4 <tcp_usrreq+0x6a0>
/*
* Mark the connection as being incapable of further output.
*/
case PRU_SHUTDOWN:
socantsendmore(so);
8035df4: e13ffa17 ldw r4,-24(fp)
8035df8: 802f7f40 call 802f7f4 <socantsendmore>
tp = tcp_usrclosed(tp);
8035dfc: e13fff17 ldw r4,-4(fp)
8035e00: 80362b00 call 80362b0 <tcp_usrclosed>
8035e04: e0bfff15 stw r2,-4(fp)
if (tp)
8035e08: e0bfff17 ldw r2,-4(fp)
8035e0c: 1000a426 beq r2,zero,80360a0 <tcp_usrreq+0x68c>
error = tcp_output(tp);
8035e10: e13fff17 ldw r4,-4(fp)
8035e14: 80338940 call 8033894 <tcp_output>
8035e18: e0bffe15 stw r2,-8(fp)
break;
8035e1c: 0000a006 br 80360a0 <tcp_usrreq+0x68c>
/*
* After a receive, possibly send window update to peer.
*/
case PRU_RCVD:
(void) tcp_output(tp);
8035e20: e13fff17 ldw r4,-4(fp)
8035e24: 80338940 call 8033894 <tcp_output>
break;
8035e28: 0000a206 br 80360b4 <tcp_usrreq+0x6a0>
/*
* Do a send by putting data in output queue and updating urgent
* marker if URG set. Possibly send more data.
*/
case PRU_SEND:
if (so->so_pcb == NULL)
8035e2c: e0bffa17 ldw r2,-24(fp)
8035e30: 10800117 ldw r2,4(r2)
8035e34: 1000031e bne r2,zero,8035e44 <tcp_usrreq+0x430>
{ /* Return EPIPE error if socket is not connected */
error = EPIPE;
8035e38: 00800804 movi r2,32
8035e3c: e0bffe15 stw r2,-8(fp)
break;
8035e40: 00009c06 br 80360b4 <tcp_usrreq+0x6a0>
}
sbappend(&so->so_snd, m);
8035e44: e0bffa17 ldw r2,-24(fp)
8035e48: 10801204 addi r2,r2,72
8035e4c: e17ff917 ldw r5,-28(fp)
8035e50: 1009883a mov r4,r2
8035e54: 802fafc0 call 802fafc <sbappend>
error = tcp_output(tp);
8035e58: e13fff17 ldw r4,-4(fp)
8035e5c: 80338940 call 8033894 <tcp_output>
8035e60: e0bffe15 stw r2,-8(fp)
if (error == ENOBUFS)
8035e64: e0bffe17 ldw r2,-8(fp)
8035e68: 10801a58 cmpnei r2,r2,105
8035e6c: 10008e1e bne r2,zero,80360a8 <tcp_usrreq+0x694>
sbdropend(&so->so_snd,m); /* Remove data from socket buffer */
8035e70: e0bffa17 ldw r2,-24(fp)
8035e74: 10801204 addi r2,r2,72
8035e78: e17ff917 ldw r5,-28(fp)
8035e7c: 1009883a mov r4,r2
8035e80: 80302680 call 8030268 <sbdropend>
break;
8035e84: 00008806 br 80360a8 <tcp_usrreq+0x694>
/*
* Abort the TCP.
*/
case PRU_ABORT:
SETTP(tp, tcp_drop(tp, ECONNABORTED));
8035e88: 01401c44 movi r5,113
8035e8c: e13fff17 ldw r4,-4(fp)
8035e90: 803504c0 call 803504c <tcp_drop>
break;
8035e94: 00008706 br 80360b4 <tcp_usrreq+0x6a0>
case PRU_SENSE:
/* ((struct stat *) m)->st_blksize = so->so_snd.sb_hiwat; */
dtrap(); /* does this ever happen? */
8035e98: 8028cd40 call 8028cd4 <dtrap>
return (0);
8035e9c: 0005883a mov r2,zero
8035ea0: 00008506 br 80360b8 <tcp_usrreq+0x6a4>
case PRU_RCVOOB:
if ((so->so_oobmark == 0 &&
8035ea4: e0bffa17 ldw r2,-24(fp)
8035ea8: 10801a17 ldw r2,104(r2)
8035eac: 1000051e bne r2,zero,8035ec4 <tcp_usrreq+0x4b0>
(so->so_state & SS_RCVATMARK) == 0) ||
8035eb0: e0bffa17 ldw r2,-24(fp)
8035eb4: 1080088b ldhu r2,34(r2)
8035eb8: 10bfffcc andi r2,r2,65535
8035ebc: 1080100c andi r2,r2,64
if ((so->so_oobmark == 0 &&
8035ec0: 10000926 beq r2,zero,8035ee8 <tcp_usrreq+0x4d4>
#ifdef SO_OOBINLINE
so->so_options & SO_OOBINLINE ||
8035ec4: e0bffa17 ldw r2,-24(fp)
8035ec8: 10800417 ldw r2,16(r2)
8035ecc: 1080400c andi r2,r2,256
(so->so_state & SS_RCVATMARK) == 0) ||
8035ed0: 1000051e bne r2,zero,8035ee8 <tcp_usrreq+0x4d4>
#endif
tp->t_oobflags & TCPOOB_HADDATA)
8035ed4: e0bfff17 ldw r2,-4(fp)
8035ed8: 10802403 ldbu r2,144(r2)
8035edc: 10803fcc andi r2,r2,255
8035ee0: 1080008c andi r2,r2,2
so->so_options & SO_OOBINLINE ||
8035ee4: 10000326 beq r2,zero,8035ef4 <tcp_usrreq+0x4e0>
{
error = EINVAL;
8035ee8: 00800584 movi r2,22
8035eec: e0bffe15 stw r2,-8(fp)
break;
8035ef0: 00007006 br 80360b4 <tcp_usrreq+0x6a0>
}
if ((tp->t_oobflags & TCPOOB_HAVEDATA) == 0)
8035ef4: e0bfff17 ldw r2,-4(fp)
8035ef8: 10802403 ldbu r2,144(r2)
8035efc: 10803fcc andi r2,r2,255
8035f00: 1080004c andi r2,r2,1
8035f04: 1000031e bne r2,zero,8035f14 <tcp_usrreq+0x500>
{
error = EWOULDBLOCK;
8035f08: 008002c4 movi r2,11
8035f0c: e0bffe15 stw r2,-8(fp)
break;
8035f10: 00006806 br 80360b4 <tcp_usrreq+0x6a0>
}
m->m_len = 1;
8035f14: e0bff917 ldw r2,-28(fp)
8035f18: 00c00044 movi r3,1
8035f1c: 10c00215 stw r3,8(r2)
*mtod(m, char *) = tp->t_iobc;
8035f20: e0bff917 ldw r2,-28(fp)
8035f24: 10800317 ldw r2,12(r2)
8035f28: e0ffff17 ldw r3,-4(fp)
8035f2c: 18c02443 ldbu r3,145(r3)
8035f30: 10c00005 stb r3,0(r2)
if ((MBUF2LONG(nam) & MSG_PEEK) == 0)
8035f34: e0bff817 ldw r2,-32(fp)
8035f38: 1080008c andi r2,r2,2
8035f3c: 10005c1e bne r2,zero,80360b0 <tcp_usrreq+0x69c>
tp->t_oobflags ^= (TCPOOB_HAVEDATA | TCPOOB_HADDATA);
8035f40: e0bfff17 ldw r2,-4(fp)
8035f44: 10802403 ldbu r2,144(r2)
8035f48: 108000dc xori r2,r2,3
8035f4c: 1007883a mov r3,r2
8035f50: e0bfff17 ldw r2,-4(fp)
8035f54: 10c02405 stb r3,144(r2)
break;
8035f58: 00005506 br 80360b0 <tcp_usrreq+0x69c>
case PRU_SENDOOB:
if (so->so_pcb == NULL)
8035f5c: e0bffa17 ldw r2,-24(fp)
8035f60: 10800117 ldw r2,4(r2)
8035f64: 1000031e bne r2,zero,8035f74 <tcp_usrreq+0x560>
{ /* Return EPIPE error if socket is not connected */
error = EPIPE;
8035f68: 00800804 movi r2,32
8035f6c: e0bffe15 stw r2,-8(fp)
break;
8035f70: 00005006 br 80360b4 <tcp_usrreq+0x6a0>
}
if (sbspace(&so->so_snd) == 0)
8035f74: e0bffa17 ldw r2,-24(fp)
8035f78: 10801317 ldw r2,76(r2)
8035f7c: 1007883a mov r3,r2
8035f80: e0bffa17 ldw r2,-24(fp)
8035f84: 10801217 ldw r2,72(r2)
8035f88: 1885c83a sub r2,r3,r2
8035f8c: 10000516 blt r2,zero,8035fa4 <tcp_usrreq+0x590>
8035f90: e0bffa17 ldw r2,-24(fp)
8035f94: 10c01317 ldw r3,76(r2)
8035f98: e0bffa17 ldw r2,-24(fp)
8035f9c: 10801217 ldw r2,72(r2)
8035fa0: 1880051e bne r3,r2,8035fb8 <tcp_usrreq+0x5a4>
{
m_freem(m);
8035fa4: e13ff917 ldw r4,-28(fp)
8035fa8: 8029cfc0 call 8029cfc <m_freem>
error = ENOBUFS;
8035fac: 00801a44 movi r2,105
8035fb0: e0bffe15 stw r2,-8(fp)
break;
8035fb4: 00003f06 br 80360b4 <tcp_usrreq+0x6a0>
* of urgent data. We continue, however,
* to consider it to indicate the first octet
* of data past the urgent section.
* Otherwise, snd_up should be one lower.
*/
sbappend(&so->so_snd, m);
8035fb8: e0bffa17 ldw r2,-24(fp)
8035fbc: 10801204 addi r2,r2,72
8035fc0: e17ff917 ldw r5,-28(fp)
8035fc4: 1009883a mov r4,r2
8035fc8: 802fafc0 call 802fafc <sbappend>
tp->snd_up = tp->snd_una + so->so_snd.sb_cc;
8035fcc: e0bfff17 ldw r2,-4(fp)
8035fd0: 10c00e17 ldw r3,56(r2)
8035fd4: e0bffa17 ldw r2,-24(fp)
8035fd8: 10801217 ldw r2,72(r2)
8035fdc: 1887883a add r3,r3,r2
8035fe0: e0bfff17 ldw r2,-4(fp)
8035fe4: 10c01015 stw r3,64(r2)
tp->t_force = 1;
8035fe8: e0bfff17 ldw r2,-4(fp)
8035fec: 00c00044 movi r3,1
8035ff0: 10c00a85 stb r3,42(r2)
error = tcp_output(tp);
8035ff4: e13fff17 ldw r4,-4(fp)
8035ff8: 80338940 call 8033894 <tcp_output>
8035ffc: e0bffe15 stw r2,-8(fp)
if (error == ENOBUFS)
8036000: e0bffe17 ldw r2,-8(fp)
8036004: 10801a58 cmpnei r2,r2,105
8036008: 1000051e bne r2,zero,8036020 <tcp_usrreq+0x60c>
sbdropend(&so->so_snd,m); /* Remove data from socket buffer */
803600c: e0bffa17 ldw r2,-24(fp)
8036010: 10801204 addi r2,r2,72
8036014: e17ff917 ldw r5,-28(fp)
8036018: 1009883a mov r4,r2
803601c: 80302680 call 8030268 <sbdropend>
tp->t_force = 0;
8036020: e0bfff17 ldw r2,-4(fp)
8036024: 10000a85 stb zero,42(r2)
break;
8036028: 00002206 br 80360b4 <tcp_usrreq+0x6a0>
case PRU_SOCKADDR:
/* sockaddr and peeraddr have to switch based on IP type */
#ifdef IP_V4
#ifndef IP_V6 /* v4 only */
in_setsockaddr(inp, nam);
803602c: e17ff817 ldw r5,-32(fp)
8036030: e13ffc17 ldw r4,-16(fp)
8036034: 8040a580 call 8040a58 <in_setsockaddr>
in_setsockaddr(inp, nam);
#endif /* dual mode */
#else /* IP_V6 */
ip6_setsockaddr(inp, nam);
#endif
break;
8036038: 00001e06 br 80360b4 <tcp_usrreq+0x6a0>
case PRU_PEERADDR:
#ifdef IP_V4
#ifndef IP_V6 /* v4 only */
in_setpeeraddr(inp, nam);
803603c: e17ff817 ldw r5,-32(fp)
8036040: e13ffc17 ldw r4,-16(fp)
8036044: 8040adc0 call 8040adc <in_setpeeraddr>
in_setpeeraddr(inp, nam);
#endif /* dual mode */
#else /* IP_V6 */
ip6_setpeeraddr(inp, nam);
#endif
break;
8036048: 00001a06 br 80360b4 <tcp_usrreq+0x6a0>
case PRU_SLOWTIMO:
SETTP(tp, tcp_timers(tp, (int)MBUF2LONG(nam)));
803604c: e0bff817 ldw r2,-32(fp)
8036050: 100b883a mov r5,r2
8036054: e13fff17 ldw r4,-4(fp)
8036058: 80355c00 call 80355c0 <tcp_timers>
#ifdef DO_TCPTRACE
req |= (long)nam << 8; /* for debug's sake */
#endif
break;
803605c: 00001506 br 80360b4 <tcp_usrreq+0x6a0>
default:
panic("tcp_usrreq");
8036060: 01020174 movhi r4,2053
8036064: 212ac304 addi r4,r4,-21748
8036068: 80271780 call 8027178 <panic>
803606c: 00001106 br 80360b4 <tcp_usrreq+0x6a0>
break;
8036070: 0001883a nop
8036074: 00000f06 br 80360b4 <tcp_usrreq+0x6a0>
break;
8036078: 0001883a nop
803607c: 00000d06 br 80360b4 <tcp_usrreq+0x6a0>
break;
8036080: 0001883a nop
8036084: 00000b06 br 80360b4 <tcp_usrreq+0x6a0>
break;
8036088: 0001883a nop
803608c: 00000906 br 80360b4 <tcp_usrreq+0x6a0>
break;
8036090: 0001883a nop
8036094: 00000706 br 80360b4 <tcp_usrreq+0x6a0>
break;
8036098: 0001883a nop
803609c: 00000506 br 80360b4 <tcp_usrreq+0x6a0>
break;
80360a0: 0001883a nop
80360a4: 00000306 br 80360b4 <tcp_usrreq+0x6a0>
break;
80360a8: 0001883a nop
80360ac: 00000106 br 80360b4 <tcp_usrreq+0x6a0>
break;
80360b0: 0001883a nop
#ifdef DO_TCPTRACE
if (tp && (so->so_options & SO_DEBUG))
tcp_trace("usrreq: state: %d, tcpcb: %x, req: %d",
ostate, tp, req);
#endif
return (error);
80360b4: e0bffe17 ldw r2,-8(fp)
}
80360b8: e037883a mov sp,fp
80360bc: dfc00117 ldw ra,4(sp)
80360c0: df000017 ldw fp,0(sp)
80360c4: dec00204 addi sp,sp,8
80360c8: f800283a ret
080360cc <tcp_attach>:
* RETURNS: 0 if OK, or nonzero error code.
*/
int
tcp_attach(struct socket * so)
{
80360cc: defff904 addi sp,sp,-28
80360d0: dfc00615 stw ra,24(sp)
80360d4: df000515 stw fp,20(sp)
80360d8: df000504 addi fp,sp,20
80360dc: e13ffb15 stw r4,-20(fp)
struct tcpcb * tp;
struct inpcb * inp;
int error;
if (so->so_snd.sb_hiwat == 0 || so->so_rcv.sb_hiwat == 0)
80360e0: e0bffb17 ldw r2,-20(fp)
80360e4: 10801317 ldw r2,76(r2)
80360e8: 10000326 beq r2,zero,80360f8 <tcp_attach+0x2c>
80360ec: e0bffb17 ldw r2,-20(fp)
80360f0: 10800b17 ldw r2,44(r2)
80360f4: 10000b1e bne r2,zero,8036124 <tcp_attach+0x58>
{
error = soreserve(so, tcp_sendspace, tcp_recvspace);
80360f8: d0a02017 ldw r2,-32640(gp)
80360fc: d0e02117 ldw r3,-32636(gp)
8036100: 180d883a mov r6,r3
8036104: 100b883a mov r5,r2
8036108: e13ffb17 ldw r4,-20(fp)
803610c: 802f9d80 call 802f9d8 <soreserve>
8036110: e0bfff15 stw r2,-4(fp)
if (error)
8036114: e0bfff17 ldw r2,-4(fp)
8036118: 10000226 beq r2,zero,8036124 <tcp_attach+0x58>
return (error);
803611c: e0bfff17 ldw r2,-4(fp)
8036120: 00002b06 br 80361d0 <tcp_attach+0x104>
}
error = in_pcballoc(so, &tcb);
8036124: 014201b4 movhi r5,2054
8036128: 29789904 addi r5,r5,-7580
803612c: e13ffb17 ldw r4,-20(fp)
8036130: 804052c0 call 804052c <in_pcballoc>
8036134: e0bfff15 stw r2,-4(fp)
if (error)
8036138: e0bfff17 ldw r2,-4(fp)
803613c: 10000226 beq r2,zero,8036148 <tcp_attach+0x7c>
return (error);
8036140: e0bfff17 ldw r2,-4(fp)
8036144: 00002206 br 80361d0 <tcp_attach+0x104>
inp = sotoinpcb(so);
8036148: e0bffb17 ldw r2,-20(fp)
803614c: 10800117 ldw r2,4(r2)
8036150: e0bffe15 stw r2,-8(fp)
tp = tcp_newtcpcb(inp);
8036154: e13ffe17 ldw r4,-8(fp)
8036158: 8034f400 call 8034f40 <tcp_newtcpcb>
803615c: e0bffd15 stw r2,-12(fp)
if (tp == 0)
8036160: e0bffd17 ldw r2,-12(fp)
8036164: 1000171e bne r2,zero,80361c4 <tcp_attach+0xf8>
{
int nofd = so->so_state & SS_NOFDREF; /* XXX */
8036168: e0bffb17 ldw r2,-20(fp)
803616c: 1080088b ldhu r2,34(r2)
8036170: 10bfffcc andi r2,r2,65535
8036174: 1080004c andi r2,r2,1
8036178: e0bffc15 stw r2,-16(fp)
so->so_state &= ~SS_NOFDREF; /* don't free the socket yet */
803617c: e0bffb17 ldw r2,-20(fp)
8036180: 10c0088b ldhu r3,34(r2)
8036184: 00bfff84 movi r2,-2
8036188: 1884703a and r2,r3,r2
803618c: 1007883a mov r3,r2
8036190: e0bffb17 ldw r2,-20(fp)
8036194: 10c0088d sth r3,34(r2)
in_pcbdetach(inp);
8036198: e13ffe17 ldw r4,-8(fp)
803619c: 80405b40 call 80405b4 <in_pcbdetach>
so->so_state |= nofd;
80361a0: e0bffb17 ldw r2,-20(fp)
80361a4: 1080088b ldhu r2,34(r2)
80361a8: e0fffc17 ldw r3,-16(fp)
80361ac: 10c4b03a or r2,r2,r3
80361b0: 1007883a mov r3,r2
80361b4: e0bffb17 ldw r2,-20(fp)
80361b8: 10c0088d sth r3,34(r2)
return (ENOBUFS);
80361bc: 00801a44 movi r2,105
80361c0: 00000306 br 80361d0 <tcp_attach+0x104>
}
tp->t_state = TCPS_CLOSED;
80361c4: e0bffd17 ldw r2,-12(fp)
80361c8: 10000215 stw zero,8(r2)
return (0);
80361cc: 0005883a mov r2,zero
}
80361d0: e037883a mov sp,fp
80361d4: dfc00117 ldw ra,4(sp)
80361d8: df000017 ldw fp,0(sp)
80361dc: dec00204 addi sp,sp,8
80361e0: f800283a ret
080361e4 <tcp_disconnect>:
* RETURNS:
*/
struct tcpcb *
tcp_disconnect(struct tcpcb * tp)
{
80361e4: defffc04 addi sp,sp,-16
80361e8: dfc00315 stw ra,12(sp)
80361ec: df000215 stw fp,8(sp)
80361f0: df000204 addi fp,sp,8
80361f4: e13ffe15 stw r4,-8(fp)
struct socket * so = tp->t_inpcb->inp_socket;
80361f8: e0bffe17 ldw r2,-8(fp)
80361fc: 10800d17 ldw r2,52(r2)
8036200: 10800817 ldw r2,32(r2)
8036204: e0bfff15 stw r2,-4(fp)
if (tp->t_state < TCPS_ESTABLISHED)
8036208: e0bffe17 ldw r2,-8(fp)
803620c: 10800217 ldw r2,8(r2)
8036210: 10800108 cmpgei r2,r2,4
8036214: 1000041e bne r2,zero,8036228 <tcp_disconnect+0x44>
tp = tcp_close(tp);
8036218: e13ffe17 ldw r4,-8(fp)
803621c: 80350e80 call 80350e8 <tcp_close>
8036220: e0bffe15 stw r2,-8(fp)
8036224: 00001c06 br 8036298 <tcp_disconnect+0xb4>
else if ((so->so_options & SO_LINGER) && so->so_linger == 0)
8036228: e0bfff17 ldw r2,-4(fp)
803622c: 10800417 ldw r2,16(r2)
8036230: 1080200c andi r2,r2,128
8036234: 10000b26 beq r2,zero,8036264 <tcp_disconnect+0x80>
8036238: e0bfff17 ldw r2,-4(fp)
803623c: 1080080b ldhu r2,32(r2)
8036240: 10bfffcc andi r2,r2,65535
8036244: 10a0001c xori r2,r2,32768
8036248: 10a00004 addi r2,r2,-32768
803624c: 1000051e bne r2,zero,8036264 <tcp_disconnect+0x80>
tp = tcp_drop(tp, 0);
8036250: 000b883a mov r5,zero
8036254: e13ffe17 ldw r4,-8(fp)
8036258: 803504c0 call 803504c <tcp_drop>
803625c: e0bffe15 stw r2,-8(fp)
8036260: 00000d06 br 8036298 <tcp_disconnect+0xb4>
else
{
soisdisconnecting(so);
8036264: e13fff17 ldw r4,-4(fp)
8036268: 802f2ec0 call 802f2ec <soisdisconnecting>
sbflush(&so->so_rcv);
803626c: e0bfff17 ldw r2,-4(fp)
8036270: 10800a04 addi r2,r2,40
8036274: 1009883a mov r4,r2
8036278: 803002c0 call 803002c <sbflush>
tp = tcp_usrclosed(tp);
803627c: e13ffe17 ldw r4,-8(fp)
8036280: 80362b00 call 80362b0 <tcp_usrclosed>
8036284: e0bffe15 stw r2,-8(fp)
if (tp)
8036288: e0bffe17 ldw r2,-8(fp)
803628c: 10000226 beq r2,zero,8036298 <tcp_disconnect+0xb4>
(void) tcp_output(tp);
8036290: e13ffe17 ldw r4,-8(fp)
8036294: 80338940 call 8033894 <tcp_output>
}
return (tp);
8036298: e0bffe17 ldw r2,-8(fp)
}
803629c: e037883a mov sp,fp
80362a0: dfc00117 ldw ra,4(sp)
80362a4: df000017 ldw fp,0(sp)
80362a8: dec00204 addi sp,sp,8
80362ac: f800283a ret
080362b0 <tcp_usrclosed>:
* RETURNS:
*/
struct tcpcb *
tcp_usrclosed(struct tcpcb * tp)
{
80362b0: defffd04 addi sp,sp,-12
80362b4: dfc00215 stw ra,8(sp)
80362b8: df000115 stw fp,4(sp)
80362bc: df000104 addi fp,sp,4
80362c0: e13fff15 stw r4,-4(fp)
switch (tp->t_state)
80362c4: e0bfff17 ldw r2,-4(fp)
80362c8: 10800217 ldw r2,8(r2)
80362cc: 10c001a8 cmpgeui r3,r2,6
80362d0: 1800191e bne r3,zero,8036338 <tcp_usrclosed+0x88>
80362d4: 100690ba slli r3,r2,2
80362d8: 008200f4 movhi r2,2051
80362dc: 1885883a add r2,r3,r2
80362e0: 1098ba17 ldw r2,25320(r2)
80362e4: 1000683a jmp r2
80362e8: 08036300 call 803630 <OSCtxSw_SWITCH_PC+0x8035f0>
80362ec: 08036300 call 803630 <OSCtxSw_SWITCH_PC+0x8035f0>
80362f0: 08036300 call 803630 <OSCtxSw_SWITCH_PC+0x8035f0>
80362f4: 08036318 cmpnei zero,at,3468
80362f8: 08036318 cmpnei zero,at,3468
80362fc: 08036328 cmpgeui zero,at,3468
{
case TCPS_CLOSED:
case TCPS_LISTEN:
case TCPS_SYN_SENT:
tp->t_state = TCPS_CLOSED;
8036300: e0bfff17 ldw r2,-4(fp)
8036304: 10000215 stw zero,8(r2)
tp = tcp_close(tp);
8036308: e13fff17 ldw r4,-4(fp)
803630c: 80350e80 call 80350e8 <tcp_close>
8036310: e0bfff15 stw r2,-4(fp)
break;
8036314: 00000806 br 8036338 <tcp_usrclosed+0x88>
case TCPS_SYN_RECEIVED:
case TCPS_ESTABLISHED:
tp->t_state = TCPS_FIN_WAIT_1;
8036318: e0bfff17 ldw r2,-4(fp)
803631c: 00c00184 movi r3,6
8036320: 10c00215 stw r3,8(r2)
break;
8036324: 00000406 br 8036338 <tcp_usrclosed+0x88>
case TCPS_CLOSE_WAIT:
tp->t_state = TCPS_LAST_ACK;
8036328: e0bfff17 ldw r2,-4(fp)
803632c: 00c00204 movi r3,8
8036330: 10c00215 stw r3,8(r2)
break;
8036334: 0001883a nop
}
if (tp && tp->t_state >= TCPS_FIN_WAIT_2)
8036338: e0bfff17 ldw r2,-4(fp)
803633c: 10000926 beq r2,zero,8036364 <tcp_usrclosed+0xb4>
8036340: e0bfff17 ldw r2,-4(fp)
8036344: 10800217 ldw r2,8(r2)
8036348: 10800250 cmplti r2,r2,9
803634c: 1000051e bne r2,zero,8036364 <tcp_usrclosed+0xb4>
soisdisconnected(tp->t_inpcb->inp_socket);
8036350: e0bfff17 ldw r2,-4(fp)
8036354: 10800d17 ldw r2,52(r2)
8036358: 10800817 ldw r2,32(r2)
803635c: 1009883a mov r4,r2
8036360: 802f3840 call 802f384 <soisdisconnected>
return (tp);
8036364: e0bfff17 ldw r2,-4(fp)
}
8036368: e037883a mov sp,fp
803636c: dfc00117 ldw ra,4(sp)
8036370: df000017 ldw fp,0(sp)
8036374: dec00204 addi sp,sp,8
8036378: f800283a ret
0803637c <tcpinit>:
* RETURNS: 0 if OK, else one of the ENP_ error codes
*/
int
tcpinit(void)
{
803637c: defffd04 addi sp,sp,-12
8036380: dfc00215 stw ra,8(sp)
8036384: df000115 stw fp,4(sp)
8036388: df000104 addi fp,sp,4
tcp_sendspace = (TCP_MSS) * 2;
tcp_recvspace = (TCP_MSS) * 2;
TCPTV_MSL = (4 * PR_SLOWHZ); /* max seg lifetime default */
#endif
e = nptcp_init(); /* call the NetPort init in nptcp.c */
803638c: 802a3b00 call 802a3b0 <nptcp_init>
8036390: e0bfff15 stw r2,-4(fp)
if (e)
8036394: e0bfff17 ldw r2,-4(fp)
8036398: 10000226 beq r2,zero,80363a4 <tcpinit+0x28>
return e;
803639c: e0bfff17 ldw r2,-4(fp)
80363a0: 00000106 br 80363a8 <tcpinit+0x2c>
return 0; /* good return */
80363a4: 0005883a mov r2,zero
}
80363a8: e037883a mov sp,fp
80363ac: dfc00117 ldw ra,4(sp)
80363b0: df000017 ldw fp,0(sp)
80363b4: dec00204 addi sp,sp,8
80363b8: f800283a ret
080363bc <udp_lookup>:
* RETURNS:
*/
UDPCONN
udp_lookup(struct socket * so)
{
80363bc: defffd04 addi sp,sp,-12
80363c0: df000215 stw fp,8(sp)
80363c4: df000204 addi fp,sp,8
80363c8: e13ffe15 stw r4,-8(fp)
UDPCONN tmp;
for (tmp = firstudp; tmp; tmp = tmp->u_next)
80363cc: d0a09e17 ldw r2,-32136(gp)
80363d0: e0bfff15 stw r2,-4(fp)
80363d4: 00000906 br 80363fc <udp_lookup+0x40>
if (tmp->u_data == (void*)so)
80363d8: e0bfff17 ldw r2,-4(fp)
80363dc: 10800617 ldw r2,24(r2)
80363e0: e0fffe17 ldw r3,-8(fp)
80363e4: 1880021e bne r3,r2,80363f0 <udp_lookup+0x34>
return (tmp);
80363e8: e0bfff17 ldw r2,-4(fp)
80363ec: 00000606 br 8036408 <udp_lookup+0x4c>
for (tmp = firstudp; tmp; tmp = tmp->u_next)
80363f0: e0bfff17 ldw r2,-4(fp)
80363f4: 10800017 ldw r2,0(r2)
80363f8: e0bfff15 stw r2,-4(fp)
80363fc: e0bfff17 ldw r2,-4(fp)
8036400: 103ff51e bne r2,zero,80363d8 <udp_lookup+0x1c>
return NULL; /* didn't find it */
8036404: 0005883a mov r2,zero
}
8036408: e037883a mov sp,fp
803640c: df000017 ldw fp,0(sp)
8036410: dec00104 addi sp,sp,4
8036414: f800283a ret
08036418 <udp_soinput>:
* RETURNS:
*/
int
udp_soinput(PACKET pkt, void * so_ptr)
{
8036418: defff504 addi sp,sp,-44
803641c: dfc00a15 stw ra,40(sp)
8036420: df000915 stw fp,36(sp)
8036424: df000904 addi fp,sp,36
8036428: e13ff815 stw r4,-32(fp)
803642c: e17ff715 stw r5,-36(fp)
struct mbuf * m_in; /* packet/data mbuf */
struct socket * so = (struct socket *)so_ptr;
8036430: e0bff717 ldw r2,-36(fp)
8036434: e0bfff15 stw r2,-4(fp)
struct sockaddr_in sin;
struct udp * udpp;
LOCK_NET_RESOURCE(NET_RESID);
8036438: 0009883a mov r4,zero
803643c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/* make sure we're not flooding input buffers */
if ((so->so_rcv.sb_cc + pkt->nb_plen) >= so->so_rcv.sb_hiwat)
8036440: e0bfff17 ldw r2,-4(fp)
8036444: 10c00a17 ldw r3,40(r2)
8036448: e0bff817 ldw r2,-32(fp)
803644c: 10800417 ldw r2,16(r2)
8036450: 1887883a add r3,r3,r2
8036454: e0bfff17 ldw r2,-4(fp)
8036458: 10800b17 ldw r2,44(r2)
803645c: 18800436 bltu r3,r2,8036470 <udp_soinput+0x58>
{
UNLOCK_NET_RESOURCE(NET_RESID);
8036460: 0009883a mov r4,zero
8036464: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENOBUFS;
8036468: 00801a44 movi r2,105
803646c: 00004d06 br 80365a4 <udp_soinput+0x18c>
}
/* alloc mbuf for received data */
m_in = m_getnbuf(MT_RXDATA, 0);
8036470: 000b883a mov r5,zero
8036474: 01000044 movi r4,1
8036478: 8029a700 call 8029a70 <m_getnbuf>
803647c: e0bffe15 stw r2,-8(fp)
if (!m_in)
8036480: e0bffe17 ldw r2,-8(fp)
8036484: 1000041e bne r2,zero,8036498 <udp_soinput+0x80>
{
UNLOCK_NET_RESOURCE(NET_RESID);
8036488: 0009883a mov r4,zero
803648c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENOBUFS;
8036490: 00801a44 movi r2,105
8036494: 00004306 br 80365a4 <udp_soinput+0x18c>
}
/* set data mbuf to point to start of UDP data */
m_in->pkt = pkt;
8036498: e0bffe17 ldw r2,-8(fp)
803649c: e0fff817 ldw r3,-32(fp)
80364a0: 10c00115 stw r3,4(r2)
m_in->m_data = pkt->nb_prot;
80364a4: e0bff817 ldw r2,-32(fp)
80364a8: 10c00317 ldw r3,12(r2)
80364ac: e0bffe17 ldw r2,-8(fp)
80364b0: 10c00315 stw r3,12(r2)
m_in->m_len = pkt->nb_plen;
80364b4: e0bff817 ldw r2,-32(fp)
80364b8: 10c00417 ldw r3,16(r2)
80364bc: e0bffe17 ldw r2,-8(fp)
80364c0: 10c00215 stw r3,8(r2)
m_in->m_base = pkt->nb_buff;
80364c4: e0bff817 ldw r2,-32(fp)
80364c8: 10c00117 ldw r3,4(r2)
80364cc: e0bffe17 ldw r2,-8(fp)
80364d0: 10c00415 stw r3,16(r2)
m_in->m_memsz = pkt->nb_blen;
80364d4: e0bff817 ldw r2,-32(fp)
80364d8: 10c00217 ldw r3,8(r2)
80364dc: e0bffe17 ldw r2,-8(fp)
80364e0: 10c00515 stw r3,20(r2)
/* fill in net address info for pass to socket append()ers */
sin.sin_addr.s_addr = pkt->fhost;
80364e4: e0bff817 ldw r2,-32(fp)
80364e8: 10800717 ldw r2,28(r2)
80364ec: e0bffa15 stw r2,-24(fp)
udpp = (struct udp *)(pkt->nb_prot - sizeof(struct udp));
80364f0: e0bff817 ldw r2,-32(fp)
80364f4: 10800317 ldw r2,12(r2)
80364f8: 10bffe04 addi r2,r2,-8
80364fc: e0bffd15 stw r2,-12(fp)
sin.sin_port = htons(udpp->ud_srcp);
8036500: e0bffd17 ldw r2,-12(fp)
8036504: 1080000b ldhu r2,0(r2)
8036508: 10bfffcc andi r2,r2,65535
803650c: 1004d23a srli r2,r2,8
8036510: 1007883a mov r3,r2
8036514: e0bffd17 ldw r2,-12(fp)
8036518: 1080000b ldhu r2,0(r2)
803651c: 10bfffcc andi r2,r2,65535
8036520: 1004923a slli r2,r2,8
8036524: 1884b03a or r2,r3,r2
8036528: e0bff98d sth r2,-26(fp)
sin.sin_family = AF_INET;
803652c: 00800084 movi r2,2
8036530: e0bff90d sth r2,-28(fp)
/* attempt to append address information to mbuf */
if (!sbappendaddr(&so->so_rcv, (struct sockaddr *)&sin, m_in))
8036534: e0bfff17 ldw r2,-4(fp)
8036538: 10800a04 addi r2,r2,40
803653c: e0fff904 addi r3,fp,-28
8036540: e1bffe17 ldw r6,-8(fp)
8036544: 180b883a mov r5,r3
8036548: 1009883a mov r4,r2
803654c: 802fc740 call 802fc74 <sbappendaddr>
8036550: 1000081e bne r2,zero,8036574 <udp_soinput+0x15c>
{
/* set the pkt field in the mbuf to NULL so m_free() below wont
* free the packet buffer, because that is left to the
*/
m_in->pkt = NULL;
8036554: e0bffe17 ldw r2,-8(fp)
8036558: 10000115 stw zero,4(r2)
/* free only the mbuf itself */
m_free(m_in);
803655c: e13ffe17 ldw r4,-8(fp)
8036560: 8029bf80 call 8029bf8 <m_free>
/* return error condition so caller can free the packet buffer */
UNLOCK_NET_RESOURCE(NET_RESID);
8036564: 0009883a mov r4,zero
8036568: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENOBUFS;
803656c: 00801a44 movi r2,105
8036570: 00000c06 br 80365a4 <udp_soinput+0x18c>
}
tcp_wakeup(&so->so_rcv); /* wake anyone waiting for this */
8036574: e0bfff17 ldw r2,-4(fp)
8036578: 10800a04 addi r2,r2,40
803657c: 1009883a mov r4,r2
8036580: 8027ba00 call 8027ba0 <tcp_wakeup>
sorwakeup(so); /* wake up selects too */
8036584: e0bfff17 ldw r2,-4(fp)
8036588: 10800a04 addi r2,r2,40
803658c: 100b883a mov r5,r2
8036590: e13fff17 ldw r4,-4(fp)
8036594: 802f94c0 call 802f94c <sbwakeup>
UNLOCK_NET_RESOURCE(NET_RESID);
8036598: 0009883a mov r4,zero
803659c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return 0;
80365a0: 0005883a mov r2,zero
}
80365a4: e037883a mov sp,fp
80365a8: dfc00117 ldw ra,4(sp)
80365ac: df000017 ldw fp,0(sp)
80365b0: dec00204 addi sp,sp,8
80365b4: f800283a ret
080365b8 <udp_usrreq>:
int
udp_usrreq(struct socket * so,
struct mbuf * m,
struct mbuf * nam)
{
80365b8: defff804 addi sp,sp,-32
80365bc: dfc00715 stw ra,28(sp)
80365c0: df000615 stw fp,24(sp)
80365c4: df000604 addi fp,sp,24
80365c8: e13ffd15 stw r4,-12(fp)
80365cc: e17ffc15 stw r5,-16(fp)
80365d0: e1bffb15 stw r6,-20(fp)
UDPCONN udpconn = (UDPCONN)NULL;
80365d4: e03fff15 stw zero,-4(fp)
int req;
req = so->so_req; /* get request from socket struct */
80365d8: e0bffd17 ldw r2,-12(fp)
80365dc: 10800717 ldw r2,28(r2)
80365e0: e0bffe15 stw r2,-8(fp)
switch (req)
80365e4: e0bffe17 ldw r2,-8(fp)
80365e8: 10800468 cmpgeui r2,r2,17
80365ec: 10007a1e bne r2,zero,80367d8 <udp_usrreq+0x220>
80365f0: e0bffe17 ldw r2,-8(fp)
80365f4: 100690ba slli r3,r2,2
80365f8: 008200f4 movhi r2,2051
80365fc: 1885883a add r2,r3,r2
8036600: 10998217 ldw r2,26120(r2)
8036604: 1000683a jmp r2
8036608: 0803664c andi zero,at,3481
803660c: 080366d0 cmplti zero,at,3483
8036610: 0803670c andi zero,at,3484
8036614: 080367d8 cmpnei zero,at,3487
8036618: 0803670c andi zero,at,3484
803661c: 080367d8 cmpnei zero,at,3487
8036620: 080367cc andi zero,at,3487
8036624: 080367d8 cmpnei zero,at,3487
8036628: 080367cc andi zero,at,3487
803662c: 0803674c andi zero,at,3485
8036630: 080367d8 cmpnei zero,at,3487
8036634: 080367d8 cmpnei zero,at,3487
8036638: 080367d8 cmpnei zero,at,3487
803663c: 080367d8 cmpnei zero,at,3487
8036640: 080367d8 cmpnei zero,at,3487
8036644: 0803678c andi zero,at,3486
8036648: 0803678c andi zero,at,3486
{
case PRU_ATTACH:
/* fake small windows so sockets asks us to move data */
so->so_rcv.sb_hiwat = so->so_snd.sb_hiwat = udp_maxalloc();
803664c: 803dd940 call 803dd94 <udp_maxalloc>
8036650: 1007883a mov r3,r2
8036654: e0bffd17 ldw r2,-12(fp)
8036658: 10c01315 stw r3,76(r2)
803665c: e0bffd17 ldw r2,-12(fp)
8036660: 10c01317 ldw r3,76(r2)
8036664: e0bffd17 ldw r2,-12(fp)
8036668: 10c00b15 stw r3,44(r2)
#ifdef IP_V4
/* make a NetPort UDP connection */
/* unlock the net resource; UDP will immediatly re-lock it */
if (so->so_domain == AF_INET){
803666c: e0bffd17 ldw r2,-12(fp)
8036670: 10800517 ldw r2,20(r2)
8036674: 10800098 cmpnei r2,r2,2
8036678: 10000f1e bne r2,zero,80366b8 <udp_usrreq+0x100>
UNLOCK_NET_RESOURCE(NET_RESID);
803667c: 0009883a mov r4,zero
8036680: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
udpconn = udp_open(0L, 0, udp_socket(), udp_soinput, so);
8036684: 803dc280 call 803dc28 <udp_socket>
8036688: 10ffffcc andi r3,r2,65535
803668c: e0bffd17 ldw r2,-12(fp)
8036690: d8800015 stw r2,0(sp)
8036694: 01c200f4 movhi r7,2051
8036698: 39d90604 addi r7,r7,25624
803669c: 180d883a mov r6,r3
80366a0: 000b883a mov r5,zero
80366a4: 0009883a mov r4,zero
80366a8: 80402540 call 8040254 <udp_open>
80366ac: e0bfff15 stw r2,-4(fp)
LOCK_NET_RESOURCE(NET_RESID);
80366b0: 0009883a mov r4,zero
80366b4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
UNLOCK_NET_RESOURCE(NET_RESID);
udpconn = udp6_open(0L, 0, udp_socket(), udp6_soinput, so);
LOCK_NET_RESOURCE(NET_RESID);
}
#endif
if (!udpconn)
80366b8: e0bfff17 ldw r2,-4(fp)
80366bc: 1000021e bne r2,zero,80366c8 <udp_usrreq+0x110>
return(EINVAL);
80366c0: 00800584 movi r2,22
80366c4: 00004506 br 80367dc <udp_usrreq+0x224>
return 0;
80366c8: 0005883a mov r2,zero
80366cc: 00004306 br 80367dc <udp_usrreq+0x224>
case PRU_DETACH:
/* delete the NetPort UDP connection */
udpconn = udp_lookup(so);
80366d0: e13ffd17 ldw r4,-12(fp)
80366d4: 80363bc0 call 80363bc <udp_lookup>
80366d8: e0bfff15 stw r2,-4(fp)
if (!udpconn)
80366dc: e0bfff17 ldw r2,-4(fp)
80366e0: 1000021e bne r2,zero,80366ec <udp_usrreq+0x134>
return(EINVAL);
80366e4: 00800584 movi r2,22
80366e8: 00003c06 br 80367dc <udp_usrreq+0x224>
/* unlock the net resource; UDP will immediatly re-lock it */
UNLOCK_NET_RESOURCE(NET_RESID);
80366ec: 0009883a mov r4,zero
80366f0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
udp_close(udpconn);
80366f4: e13fff17 ldw r4,-4(fp)
80366f8: 80404540 call 8040454 <udp_close>
LOCK_NET_RESOURCE(NET_RESID);
80366fc: 0009883a mov r4,zero
8036700: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
return 0;
8036704: 0005883a mov r2,zero
8036708: 00003406 br 80367dc <udp_usrreq+0x224>
case PRU_CONNECT:
/* Install foreign port for UDP, making a virtual connection */
/* fall to shared bind logic */
case PRU_BIND:
/* do bind parameters lookups and tests */
if (nam == NULL)
803670c: e0bffb17 ldw r2,-20(fp)
8036710: 1000021e bne r2,zero,803671c <udp_usrreq+0x164>
return(EINVAL);
8036714: 00800584 movi r2,22
8036718: 00003006 br 80367dc <udp_usrreq+0x224>
#ifdef IP_V4
if (so->so_domain == AF_INET){
803671c: e0bffd17 ldw r2,-12(fp)
8036720: 10800517 ldw r2,20(r2)
8036724: 10800098 cmpnei r2,r2,2
8036728: 1000051e bne r2,zero,8036740 <udp_usrreq+0x188>
return udp4_sockbind(so, nam, req );
803672c: e1bffe17 ldw r6,-8(fp)
8036730: e17ffb17 ldw r5,-20(fp)
8036734: e13ffd17 ldw r4,-12(fp)
8036738: 80367f00 call 80367f0 <udp4_sockbind>
803673c: 00002706 br 80367dc <udp_usrreq+0x224>
#ifdef IP_V6
if (so->so_domain == AF_INET6){
return udp6_sockbind(so, nam, req);
}
#endif
dtrap(); /* invalid address */
8036740: 8028cd40 call 8028cd4 <dtrap>
return EINVAL;
8036744: 00800584 movi r2,22
8036748: 00002406 br 80367dc <udp_usrreq+0x224>
case PRU_SEND:
/* do parameter lookups and tests */
if (!m) /* no data passed? */
803674c: e0bffc17 ldw r2,-16(fp)
8036750: 1000021e bne r2,zero,803675c <udp_usrreq+0x1a4>
return(EINVAL);
8036754: 00800584 movi r2,22
8036758: 00002006 br 80367dc <udp_usrreq+0x224>
#ifdef IP_V4
if (so->so_domain == AF_INET){
803675c: e0bffd17 ldw r2,-12(fp)
8036760: 10800517 ldw r2,20(r2)
8036764: 10800098 cmpnei r2,r2,2
8036768: 1000051e bne r2,zero,8036780 <udp_usrreq+0x1c8>
return udp4_socksend(so, m, nam );
803676c: e1bffb17 ldw r6,-20(fp)
8036770: e17ffc17 ldw r5,-16(fp)
8036774: e13ffd17 ldw r4,-12(fp)
8036778: 8036ac00 call 8036ac0 <udp4_socksend>
803677c: 00001706 br 80367dc <udp_usrreq+0x224>
#ifdef IP_V6
if (so->so_domain == AF_INET6){
return udp6_socksend(so, m, nam);
}
#endif
dtrap(); /* invalid address */
8036780: 8028cd40 call 8028cd4 <dtrap>
return EINVAL;
8036784: 00800584 movi r2,22
8036788: 00001406 br 80367dc <udp_usrreq+0x224>
case PRU_SOCKADDR:
/* fall through to share PRU_PEERADDR prefix */
case PRU_PEERADDR:
if (nam == NULL)
803678c: e0bffb17 ldw r2,-20(fp)
8036790: 1000021e bne r2,zero,803679c <udp_usrreq+0x1e4>
return(EINVAL);
8036794: 00800584 movi r2,22
8036798: 00001006 br 80367dc <udp_usrreq+0x224>
#ifdef IP_V4
if (so->so_domain == AF_INET){
803679c: e0bffd17 ldw r2,-12(fp)
80367a0: 10800517 ldw r2,20(r2)
80367a4: 10800098 cmpnei r2,r2,2
80367a8: 1000051e bne r2,zero,80367c0 <udp_usrreq+0x208>
return udp4_sockaddr(so, nam, req );
80367ac: e1bffe17 ldw r6,-8(fp)
80367b0: e17ffb17 ldw r5,-20(fp)
80367b4: e13ffd17 ldw r4,-12(fp)
80367b8: 8036e340 call 8036e34 <udp4_sockaddr>
80367bc: 00000706 br 80367dc <udp_usrreq+0x224>
#ifdef IP_V6
if (so->so_domain == AF_INET6){
return udp6_sockaddr(so, nam, req);
}
#endif
dtrap(); /* invalid address */
80367c0: 8028cd40 call 8028cd4 <dtrap>
return EINVAL;
80367c4: 00800584 movi r2,22
80367c8: 00000406 br 80367dc <udp_usrreq+0x224>
case PRU_DISCONNECT:
case PRU_RCVD:
dtrap();
80367cc: 8028cd40 call 8028cd4 <dtrap>
return 0;
80367d0: 0005883a mov r2,zero
80367d4: 00000106 br 80367dc <udp_usrreq+0x224>
case PRU_LISTEN: /* don't support these for UDP */
case PRU_ACCEPT:
default:
return EOPNOTSUPP;
80367d8: 008017c4 movi r2,95
}
}
80367dc: e037883a mov sp,fp
80367e0: dfc00117 ldw ra,4(sp)
80367e4: df000017 ldw fp,0(sp)
80367e8: dec00204 addi sp,sp,8
80367ec: f800283a ret
080367f0 <udp4_sockbind>:
#ifdef IP_V4
int udp4_sockbind(struct socket *so, struct mbuf *nam, int req )
{
80367f0: defff304 addi sp,sp,-52
80367f4: dfc00c15 stw ra,48(sp)
80367f8: df000b15 stw fp,44(sp)
80367fc: df000b04 addi fp,sp,44
8036800: e13ff715 stw r4,-36(fp)
8036804: e17ff615 stw r5,-40(fp)
8036808: e1bff515 stw r6,-44(fp)
u_short lport; /* local port (local byte order) */
ip_addr fhost; /* host to send to/recv from (network byte order) */
ip_addr lhost; /* local IP address to bind to (network byte order) */
NET ifp;
sin = mtod(nam, struct sockaddr_in *);
803680c: e0bff617 ldw r2,-40(fp)
8036810: 10800317 ldw r2,12(r2)
8036814: e0bffa15 stw r2,-24(fp)
if (sin == NULL)
8036818: e0bffa17 ldw r2,-24(fp)
803681c: 1000021e bne r2,zero,8036828 <udp4_sockbind+0x38>
return(EINVAL);
8036820: 00800584 movi r2,22
8036824: 0000a106 br 8036aac <udp4_sockbind+0x2bc>
if (nam->m_len != sizeof (*sin))
8036828: e0bff617 ldw r2,-40(fp)
803682c: 10800217 ldw r2,8(r2)
8036830: 10800420 cmpeqi r2,r2,16
8036834: 1000021e bne r2,zero,8036840 <udp4_sockbind+0x50>
return(EINVAL);
8036838: 00800584 movi r2,22
803683c: 00009b06 br 8036aac <udp4_sockbind+0x2bc>
udpconn = udp_lookup(so);
8036840: e13ff717 ldw r4,-36(fp)
8036844: 80363bc0 call 80363bc <udp_lookup>
8036848: e0bff915 stw r2,-28(fp)
if (!udpconn)
803684c: e0bff917 ldw r2,-28(fp)
8036850: 1000021e bne r2,zero,803685c <udp4_sockbind+0x6c>
return(EINVAL);
8036854: 00800584 movi r2,22
8036858: 00009406 br 8036aac <udp4_sockbind+0x2bc>
if (req == PRU_BIND)
803685c: e0bff517 ldw r2,-44(fp)
8036860: 10800098 cmpnei r2,r2,2
8036864: 1000521e bne r2,zero,80369b0 <udp4_sockbind+0x1c0>
* if the caller-supplied port is 0, try to get
* the port from the UDP endpoint, or pick a new
* unique port; else, use the caller-supplied
* port
*/
if (sin->sin_port == 0)
8036868: e0bffa17 ldw r2,-24(fp)
803686c: 1080008b ldhu r2,2(r2)
8036870: 10bfffcc andi r2,r2,65535
8036874: 10000b1e bne r2,zero,80368a4 <udp4_sockbind+0xb4>
{
if (udpconn->u_lport != 0)
8036878: e0bff917 ldw r2,-28(fp)
803687c: 1080018b ldhu r2,6(r2)
8036880: 10bfffcc andi r2,r2,65535
8036884: 10000426 beq r2,zero,8036898 <udp4_sockbind+0xa8>
lport = udpconn->u_lport;
8036888: e0bff917 ldw r2,-28(fp)
803688c: 1080018b ldhu r2,6(r2)
8036890: e0bffe8d sth r2,-6(fp)
8036894: 00000e06 br 80368d0 <udp4_sockbind+0xe0>
else
lport = udp_socket();
8036898: 803dc280 call 803dc28 <udp_socket>
803689c: e0bffe8d sth r2,-6(fp)
80368a0: 00000b06 br 80368d0 <udp4_sockbind+0xe0>
}
else
{
lport = ntohs(sin->sin_port);
80368a4: e0bffa17 ldw r2,-24(fp)
80368a8: 1080008b ldhu r2,2(r2)
80368ac: 10bfffcc andi r2,r2,65535
80368b0: 1004d23a srli r2,r2,8
80368b4: 1007883a mov r3,r2
80368b8: e0bffa17 ldw r2,-24(fp)
80368bc: 1080008b ldhu r2,2(r2)
80368c0: 10bfffcc andi r2,r2,65535
80368c4: 1004923a slli r2,r2,8
80368c8: 1884b03a or r2,r3,r2
80368cc: e0bffe8d sth r2,-6(fp)
/* if the caller-supplied address is INADDR_ANY,
* don't bind to a specific address; else,
* make sure the caller-supplied address is
* an interface IP address and if so, bind to that
*/
if (sin->sin_addr.s_addr == INADDR_ANY)
80368d0: e0bffa17 ldw r2,-24(fp)
80368d4: 10800117 ldw r2,4(r2)
80368d8: 1000021e bne r2,zero,80368e4 <udp4_sockbind+0xf4>
{
lhost = 0L;
80368dc: e03ffc15 stw zero,-16(fp)
80368e0: 00001606 br 803693c <udp4_sockbind+0x14c>
}
else
{
lhost = sin->sin_addr.s_addr;
80368e4: e0bffa17 ldw r2,-24(fp)
80368e8: 10800117 ldw r2,4(r2)
80368ec: e0bffc15 stw r2,-16(fp)
#ifndef UDP_SKIP_LCL_ADDR_CHECK
/* verify that lhost is a local interface address */
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
80368f0: 008201b4 movhi r2,2054
80368f4: 10b6a617 ldw r2,-9576(r2)
80368f8: e0bffb15 stw r2,-20(fp)
80368fc: 00000706 br 803691c <udp4_sockbind+0x12c>
if (ifp->n_ipaddr == lhost)
8036900: e0bffb17 ldw r2,-20(fp)
8036904: 10800a17 ldw r2,40(r2)
8036908: e0fffc17 ldw r3,-16(fp)
803690c: 18800626 beq r3,r2,8036928 <udp4_sockbind+0x138>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8036910: e0bffb17 ldw r2,-20(fp)
8036914: 10800017 ldw r2,0(r2)
8036918: e0bffb15 stw r2,-20(fp)
803691c: e0bffb17 ldw r2,-20(fp)
8036920: 103ff71e bne r2,zero,8036900 <udp4_sockbind+0x110>
8036924: 00000106 br 803692c <udp4_sockbind+0x13c>
break;
8036928: 0001883a nop
if (ifp == NULL)
803692c: e0bffb17 ldw r2,-20(fp)
8036930: 1000021e bne r2,zero,803693c <udp4_sockbind+0x14c>
return(EADDRNOTAVAIL);
8036934: 00801f44 movi r2,125
8036938: 00005c06 br 8036aac <udp4_sockbind+0x2bc>
}
/* make sure we're not about to collide with an
* existing binding
*/
if (!(so->so_options & SO_REUSEADDR))
803693c: e0bff717 ldw r2,-36(fp)
8036940: 10800417 ldw r2,16(r2)
8036944: 1080010c andi r2,r2,4
8036948: 1000121e bne r2,zero,8036994 <udp4_sockbind+0x1a4>
for (udptmp = firstudp; udptmp; udptmp = udptmp->u_next)
803694c: d0a09e17 ldw r2,-32136(gp)
8036950: e0bfff15 stw r2,-4(fp)
8036954: 00000d06 br 803698c <udp4_sockbind+0x19c>
if ((udptmp->u_lport == lport) && (udptmp != udpconn))
8036958: e0bfff17 ldw r2,-4(fp)
803695c: 1080018b ldhu r2,6(r2)
8036960: e0fffe8b ldhu r3,-6(fp)
8036964: 10bfffcc andi r2,r2,65535
8036968: 1880051e bne r3,r2,8036980 <udp4_sockbind+0x190>
803696c: e0ffff17 ldw r3,-4(fp)
8036970: e0bff917 ldw r2,-28(fp)
8036974: 18800226 beq r3,r2,8036980 <udp4_sockbind+0x190>
return(EADDRINUSE);
8036978: 00801c04 movi r2,112
803697c: 00004b06 br 8036aac <udp4_sockbind+0x2bc>
for (udptmp = firstudp; udptmp; udptmp = udptmp->u_next)
8036980: e0bfff17 ldw r2,-4(fp)
8036984: 10800017 ldw r2,0(r2)
8036988: e0bfff15 stw r2,-4(fp)
803698c: e0bfff17 ldw r2,-4(fp)
8036990: 103ff11e bne r2,zero,8036958 <udp4_sockbind+0x168>
/* bind the UDP endpoint */
udpconn->u_lport = lport;
8036994: e0bff917 ldw r2,-28(fp)
8036998: e0fffe8b ldhu r3,-6(fp)
803699c: 10c0018d sth r3,6(r2)
udpconn->u_lhost = lhost;
80369a0: e0bff917 ldw r2,-28(fp)
80369a4: e0fffc17 ldw r3,-16(fp)
80369a8: 10c00315 stw r3,12(r2)
80369ac: 00003e06 br 8036aa8 <udp4_sockbind+0x2b8>
else /* PRU_CONNECT */
{
/* connect the socket to a remote IP address and
* UDP port.
*/
fport = ntohs(sin->sin_port);
80369b0: e0bffa17 ldw r2,-24(fp)
80369b4: 1080008b ldhu r2,2(r2)
80369b8: 10bfffcc andi r2,r2,65535
80369bc: 1004d23a srli r2,r2,8
80369c0: 1007883a mov r3,r2
80369c4: e0bffa17 ldw r2,-24(fp)
80369c8: 1080008b ldhu r2,2(r2)
80369cc: 10bfffcc andi r2,r2,65535
80369d0: 1004923a slli r2,r2,8
80369d4: 1884b03a or r2,r3,r2
80369d8: e0bff88d sth r2,-30(fp)
/* if the caller-supplied address is INADDR_ANY,
* use the wildcard address; else, use the caller-
* supplied address
*/
if (sin->sin_addr.s_addr == INADDR_ANY)
80369dc: e0bffa17 ldw r2,-24(fp)
80369e0: 10800117 ldw r2,4(r2)
80369e4: 1000021e bne r2,zero,80369f0 <udp4_sockbind+0x200>
fhost = 0L;
80369e8: e03ffd15 stw zero,-12(fp)
80369ec: 00000306 br 80369fc <udp4_sockbind+0x20c>
else
fhost = sin->sin_addr.s_addr;
80369f0: e0bffa17 ldw r2,-24(fp)
80369f4: 10800117 ldw r2,4(r2)
80369f8: e0bffd15 stw r2,-12(fp)
/* prepare to bind the socket to the appropriate
* local interface address for the to-be-connected
* peer
*/
lhost = ip_mymach(fhost);
80369fc: e13ffd17 ldw r4,-12(fp)
8036a00: 803b0280 call 803b028 <ip_mymach>
8036a04: e0bffc15 stw r2,-16(fp)
if (lhost == 0)
8036a08: e0bffc17 ldw r2,-16(fp)
8036a0c: 1000021e bne r2,zero,8036a18 <udp4_sockbind+0x228>
return(ENETUNREACH);
8036a10: 00801c84 movi r2,114
8036a14: 00002506 br 8036aac <udp4_sockbind+0x2bc>
/* if the socket hasn't been bound to a local
* port yet, do so now
*/
lport = udpconn->u_lport;
8036a18: e0bff917 ldw r2,-28(fp)
8036a1c: 1080018b ldhu r2,6(r2)
8036a20: e0bffe8d sth r2,-6(fp)
if (lport == 0)
8036a24: e0bffe8b ldhu r2,-6(fp)
8036a28: 1000021e bne r2,zero,8036a34 <udp4_sockbind+0x244>
lport = udp_socket();
8036a2c: 803dc280 call 803dc28 <udp_socket>
8036a30: e0bffe8d sth r2,-6(fp)
/* bind and connect the UDP endpoint */
udpconn->u_lhost = lhost;
8036a34: e0bff917 ldw r2,-28(fp)
8036a38: e0fffc17 ldw r3,-16(fp)
8036a3c: 10c00315 stw r3,12(r2)
udpconn->u_lport = lport;
8036a40: e0bff917 ldw r2,-28(fp)
8036a44: e0fffe8b ldhu r3,-6(fp)
8036a48: 10c0018d sth r3,6(r2)
udpconn->u_fhost = fhost;
8036a4c: e0bff917 ldw r2,-28(fp)
8036a50: e0fffd17 ldw r3,-12(fp)
8036a54: 10c00415 stw r3,16(r2)
udpconn->u_fport = fport;
8036a58: e0bff917 ldw r2,-28(fp)
8036a5c: e0fff88b ldhu r3,-30(fp)
8036a60: 10c0020d sth r3,8(r2)
/* mark the socket as connected */
so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
8036a64: e0bff717 ldw r2,-36(fp)
8036a68: 10c0088b ldhu r3,34(r2)
8036a6c: 00bffcc4 movi r2,-13
8036a70: 1884703a and r2,r3,r2
8036a74: 1007883a mov r3,r2
8036a78: e0bff717 ldw r2,-36(fp)
8036a7c: 10c0088d sth r3,34(r2)
so->so_state |= SS_ISCONNECTED;
8036a80: e0bff717 ldw r2,-36(fp)
8036a84: 1080088b ldhu r2,34(r2)
8036a88: 10800094 ori r2,r2,2
8036a8c: 1007883a mov r3,r2
8036a90: e0bff717 ldw r2,-36(fp)
8036a94: 10c0088d sth r3,34(r2)
/* since socket was in listen state, packets may be queued */
sbflush(&so->so_rcv); /* dump these now */
8036a98: e0bff717 ldw r2,-36(fp)
8036a9c: 10800a04 addi r2,r2,40
8036aa0: 1009883a mov r4,r2
8036aa4: 803002c0 call 803002c <sbflush>
}
return 0;
8036aa8: 0005883a mov r2,zero
}
8036aac: e037883a mov sp,fp
8036ab0: dfc00117 ldw ra,4(sp)
8036ab4: df000017 ldw fp,0(sp)
8036ab8: dec00204 addi sp,sp,8
8036abc: f800283a ret
08036ac0 <udp4_socksend>:
int udp4_socksend(struct socket *so, struct mbuf *m,
struct mbuf *nam )
{
8036ac0: defff304 addi sp,sp,-52
8036ac4: dfc00c15 stw ra,48(sp)
8036ac8: df000b15 stw fp,44(sp)
8036acc: dc000a15 stw r16,40(sp)
8036ad0: df000b04 addi fp,sp,44
8036ad4: e13ff715 stw r4,-36(fp)
8036ad8: e17ff615 stw r5,-40(fp)
8036adc: e1bff515 stw r6,-44(fp)
PACKET pkt;
#ifdef MULTI_HOMED
NET ifp;
#endif
udpconn = udp_lookup(so);
8036ae0: e13ff717 ldw r4,-36(fp)
8036ae4: 80363bc0 call 80363bc <udp_lookup>
8036ae8: e0bffb15 stw r2,-20(fp)
if (!udpconn)
8036aec: e0bffb17 ldw r2,-20(fp)
8036af0: 1000041e bne r2,zero,8036b04 <udp4_socksend+0x44>
{
m_free(m);
8036af4: e13ff617 ldw r4,-40(fp)
8036af8: 8029bf80 call 8029bf8 <m_free>
/* may be bogus socket, but more likely the connection may
have closed due to ICMP dest unreachable from other side. */
return(ECONNREFUSED);
8036afc: 00801bc4 movi r2,111
8036b00: 0000c606 br 8036e1c <udp4_socksend+0x35c>
}
if (nam == NULL) /* no sendto() info passed, must be send() */
8036b04: e0bff517 ldw r2,-44(fp)
8036b08: 10000e1e bne r2,zero,8036b44 <udp4_socksend+0x84>
{
if (so->so_state & SS_ISCONNECTED)
8036b0c: e0bff717 ldw r2,-36(fp)
8036b10: 1080088b ldhu r2,34(r2)
8036b14: 10bfffcc andi r2,r2,65535
8036b18: 1080008c andi r2,r2,2
8036b1c: 10000726 beq r2,zero,8036b3c <udp4_socksend+0x7c>
{
fport = udpconn->u_fport;
8036b20: e0bffb17 ldw r2,-20(fp)
8036b24: 1080020b ldhu r2,8(r2)
8036b28: e0bffe8d sth r2,-6(fp)
fhost = udpconn->u_fhost;
8036b2c: e0bffb17 ldw r2,-20(fp)
8036b30: 10800417 ldw r2,16(r2)
8036b34: e0bffd15 stw r2,-12(fp)
8036b38: 00002806 br 8036bdc <udp4_socksend+0x11c>
}
else
return (EINVAL);
8036b3c: 00800584 movi r2,22
8036b40: 0000b606 br 8036e1c <udp4_socksend+0x35c>
}
else if(nam->m_len != sizeof (*sin))
8036b44: e0bff517 ldw r2,-44(fp)
8036b48: 10800217 ldw r2,8(r2)
8036b4c: 10800420 cmpeqi r2,r2,16
8036b50: 1000031e bne r2,zero,8036b60 <udp4_socksend+0xa0>
{
dtrap();
8036b54: 8028cd40 call 8028cd4 <dtrap>
return (EINVAL);
8036b58: 00800584 movi r2,22
8036b5c: 0000af06 br 8036e1c <udp4_socksend+0x35c>
}
else
{
sin = mtod(nam, struct sockaddr_in *);
8036b60: e0bff517 ldw r2,-44(fp)
8036b64: 10800317 ldw r2,12(r2)
8036b68: e0bffa15 stw r2,-24(fp)
fhost = sin->sin_addr.s_addr;
8036b6c: e0bffa17 ldw r2,-24(fp)
8036b70: 10800117 ldw r2,4(r2)
8036b74: e0bffd15 stw r2,-12(fp)
/* use caller's fport if specified, ours may be a wildcard */
if (sin->sin_port) /* caller gets to change fport on the fly */
8036b78: e0bffa17 ldw r2,-24(fp)
8036b7c: 1080008b ldhu r2,2(r2)
8036b80: 10bfffcc andi r2,r2,65535
8036b84: 10000c26 beq r2,zero,8036bb8 <udp4_socksend+0xf8>
fport = ntohs(sin->sin_port);
8036b88: e0bffa17 ldw r2,-24(fp)
8036b8c: 1080008b ldhu r2,2(r2)
8036b90: 10bfffcc andi r2,r2,65535
8036b94: 1004d23a srli r2,r2,8
8036b98: 1007883a mov r3,r2
8036b9c: e0bffa17 ldw r2,-24(fp)
8036ba0: 1080008b ldhu r2,2(r2)
8036ba4: 10bfffcc andi r2,r2,65535
8036ba8: 1004923a slli r2,r2,8
8036bac: 1884b03a or r2,r3,r2
8036bb0: e0bffe8d sth r2,-6(fp)
8036bb4: 00000906 br 8036bdc <udp4_socksend+0x11c>
else /* use port already set in UDP connection */
{
if (udpconn->u_fport == 0) /* don't send to port 0 */
8036bb8: e0bffb17 ldw r2,-20(fp)
8036bbc: 1080020b ldhu r2,8(r2)
8036bc0: 10bfffcc andi r2,r2,65535
8036bc4: 1000021e bne r2,zero,8036bd0 <udp4_socksend+0x110>
return (EINVAL);
8036bc8: 00800584 movi r2,22
8036bcc: 00009306 br 8036e1c <udp4_socksend+0x35c>
fport = udpconn->u_fport;
8036bd0: e0bffb17 ldw r2,-20(fp)
8036bd4: 1080020b ldhu r2,8(r2)
8036bd8: e0bffe8d sth r2,-6(fp)
/* since our pkt->nb_buff size is tied to max packet size, we
* assume our UDP datagrams are always in one mbuf and that the
* mbuf
*/
if (m->m_len > (unsigned)udp_maxalloc()) /* but check anyway:*/
8036bdc: e0bff617 ldw r2,-40(fp)
8036be0: 14000217 ldw r16,8(r2)
8036be4: 803dd940 call 803dd94 <udp_maxalloc>
8036be8: 1400032e bgeu r2,r16,8036bf8 <udp4_socksend+0x138>
{
dtrap(); /* should never happen */
8036bec: 8028cd40 call 8028cd4 <dtrap>
return EMSGSIZE; /* try to recover */
8036bf0: 00801e84 movi r2,122
8036bf4: 00008906 br 8036e1c <udp4_socksend+0x35c>
}
pkt = udp_alloc(m->m_len, 0); /* get a NetPort buffer for send */
8036bf8: e0bff617 ldw r2,-40(fp)
8036bfc: 10800217 ldw r2,8(r2)
8036c00: 000b883a mov r5,zero
8036c04: 1009883a mov r4,r2
8036c08: 803dcd80 call 803dcd8 <udp_alloc>
8036c0c: e0bff915 stw r2,-28(fp)
if (!pkt)
8036c10: e0bff917 ldw r2,-28(fp)
8036c14: 1000041e bne r2,zero,8036c28 <udp4_socksend+0x168>
{
m_free(m);
8036c18: e13ff617 ldw r4,-40(fp)
8036c1c: 8029bf80 call 8029bf8 <m_free>
return ENOBUFS; /* report buffer shortages */
8036c20: 00801a44 movi r2,105
8036c24: 00007d06 br 8036e1c <udp4_socksend+0x35c>
}
MEMCPY(pkt->nb_prot, m->m_data, m->m_len);
8036c28: e0bff917 ldw r2,-28(fp)
8036c2c: 10c00317 ldw r3,12(r2)
8036c30: e0bff617 ldw r2,-40(fp)
8036c34: 11000317 ldw r4,12(r2)
8036c38: e0bff617 ldw r2,-40(fp)
8036c3c: 10800217 ldw r2,8(r2)
8036c40: 100d883a mov r6,r2
8036c44: 200b883a mov r5,r4
8036c48: 1809883a mov r4,r3
8036c4c: 80086b80 call 80086b8 <memcpy>
pkt->nb_plen = m->m_len;
8036c50: e0bff617 ldw r2,-40(fp)
8036c54: 10c00217 ldw r3,8(r2)
8036c58: e0bff917 ldw r2,-28(fp)
8036c5c: 10c00415 stw r3,16(r2)
/* finished with mbuf, free it now */
m_free(m);
8036c60: e13ff617 ldw r4,-40(fp)
8036c64: 8029bf80 call 8029bf8 <m_free>
pkt->fhost = fhost;
8036c68: e0bff917 ldw r2,-28(fp)
8036c6c: e0fffd17 ldw r3,-12(fp)
8036c70: 10c00715 stw r3,28(r2)
* is up; if (after all that) we don't have an interface then we
* fail with error EADDRNOTAVAIL; and finally, if we're built
* for a single-homed configuration where there's only one
* interface, we might as well use it, so we do.
*/
if (fhost == 0xffffffff)
8036c74: e0bffd17 ldw r2,-12(fp)
8036c78: 10bfffd8 cmpnei r2,r2,-1
8036c7c: 1000471e bne r2,zero,8036d9c <udp4_socksend+0x2dc>
{
#ifdef MULTI_HOMED
if (udpconn->u_lhost != 0L)
8036c80: e0bffb17 ldw r2,-20(fp)
8036c84: 10800317 ldw r2,12(r2)
8036c88: 10000f26 beq r2,zero,8036cc8 <udp4_socksend+0x208>
{
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8036c8c: 008201b4 movhi r2,2054
8036c90: 10b6a617 ldw r2,-9576(r2)
8036c94: e0bffc15 stw r2,-16(fp)
8036c98: 00000806 br 8036cbc <udp4_socksend+0x1fc>
if (ifp->n_ipaddr == udpconn->u_lhost)
8036c9c: e0bffc17 ldw r2,-16(fp)
8036ca0: 10c00a17 ldw r3,40(r2)
8036ca4: e0bffb17 ldw r2,-20(fp)
8036ca8: 10800317 ldw r2,12(r2)
8036cac: 18801c26 beq r3,r2,8036d20 <udp4_socksend+0x260>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8036cb0: e0bffc17 ldw r2,-16(fp)
8036cb4: 10800017 ldw r2,0(r2)
8036cb8: e0bffc15 stw r2,-16(fp)
8036cbc: e0bffc17 ldw r2,-16(fp)
8036cc0: 103ff61e bne r2,zero,8036c9c <udp4_socksend+0x1dc>
8036cc4: 00001906 br 8036d2c <udp4_socksend+0x26c>
break;
}
else {
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8036cc8: 008201b4 movhi r2,2054
8036ccc: 10b6a617 ldw r2,-9576(r2)
8036cd0: e0bffc15 stw r2,-16(fp)
8036cd4: 00000f06 br 8036d14 <udp4_socksend+0x254>
if ((ifp->n_flags & NF_BCAST) &&
8036cd8: e0bffc17 ldw r2,-16(fp)
8036cdc: 10802a17 ldw r2,168(r2)
8036ce0: 1080004c andi r2,r2,1
8036ce4: 10000826 beq r2,zero,8036d08 <udp4_socksend+0x248>
(ifp->n_mib) && (ifp->n_mib->ifAdminStatus == NI_UP))
8036ce8: e0bffc17 ldw r2,-16(fp)
8036cec: 10802717 ldw r2,156(r2)
if ((ifp->n_flags & NF_BCAST) &&
8036cf0: 10000526 beq r2,zero,8036d08 <udp4_socksend+0x248>
(ifp->n_mib) && (ifp->n_mib->ifAdminStatus == NI_UP))
8036cf4: e0bffc17 ldw r2,-16(fp)
8036cf8: 10802717 ldw r2,156(r2)
8036cfc: 10800617 ldw r2,24(r2)
8036d00: 10800058 cmpnei r2,r2,1
8036d04: 10000826 beq r2,zero,8036d28 <udp4_socksend+0x268>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8036d08: e0bffc17 ldw r2,-16(fp)
8036d0c: 10800017 ldw r2,0(r2)
8036d10: e0bffc15 stw r2,-16(fp)
8036d14: e0bffc17 ldw r2,-16(fp)
8036d18: 103fef1e bne r2,zero,8036cd8 <udp4_socksend+0x218>
8036d1c: 00000306 br 8036d2c <udp4_socksend+0x26c>
break;
8036d20: 0001883a nop
8036d24: 00000106 br 8036d2c <udp4_socksend+0x26c>
break;
8036d28: 0001883a nop
}
if (ifp == NULL)
8036d2c: e0bffc17 ldw r2,-16(fp)
8036d30: 1000171e bne r2,zero,8036d90 <udp4_socksend+0x2d0>
{
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8036d34: 008201b4 movhi r2,2054
8036d38: 10b6a617 ldw r2,-9576(r2)
8036d3c: e0bffc15 stw r2,-16(fp)
8036d40: 00000b06 br 8036d70 <udp4_socksend+0x2b0>
if ((ifp->n_mib) && (ifp->n_mib->ifAdminStatus == NI_UP))
8036d44: e0bffc17 ldw r2,-16(fp)
8036d48: 10802717 ldw r2,156(r2)
8036d4c: 10000526 beq r2,zero,8036d64 <udp4_socksend+0x2a4>
8036d50: e0bffc17 ldw r2,-16(fp)
8036d54: 10802717 ldw r2,156(r2)
8036d58: 10800617 ldw r2,24(r2)
8036d5c: 10800058 cmpnei r2,r2,1
8036d60: 10000626 beq r2,zero,8036d7c <udp4_socksend+0x2bc>
for (ifp = (NET)(netlist.q_head); ifp; ifp = ifp->n_next)
8036d64: e0bffc17 ldw r2,-16(fp)
8036d68: 10800017 ldw r2,0(r2)
8036d6c: e0bffc15 stw r2,-16(fp)
8036d70: e0bffc17 ldw r2,-16(fp)
8036d74: 103ff31e bne r2,zero,8036d44 <udp4_socksend+0x284>
8036d78: 00000106 br 8036d80 <udp4_socksend+0x2c0>
break;
8036d7c: 0001883a nop
if (ifp == NULL)
8036d80: e0bffc17 ldw r2,-16(fp)
8036d84: 1000021e bne r2,zero,8036d90 <udp4_socksend+0x2d0>
return(EADDRNOTAVAIL);
8036d88: 00801f44 movi r2,125
8036d8c: 00002306 br 8036e1c <udp4_socksend+0x35c>
}
pkt->net = ifp;
8036d90: e0bff917 ldw r2,-28(fp)
8036d94: e0fffc17 ldw r3,-16(fp)
8036d98: 10c00615 stw r3,24(r2)
#ifdef IP_MULTICAST
/* If the socket has an IP moptions structure for multicast options,
* place a pointer to this structure in the PACKET structure.
*/
if (so->inp_moptions)
8036d9c: e0bff717 ldw r2,-36(fp)
8036da0: 10800317 ldw r2,12(r2)
8036da4: 10000426 beq r2,zero,8036db8 <udp4_socksend+0x2f8>
pkt->imo = so->inp_moptions;
8036da8: e0bff717 ldw r2,-36(fp)
8036dac: 10c00317 ldw r3,12(r2)
8036db0: e0bff917 ldw r2,-28(fp)
8036db4: 10c00b15 stw r3,44(r2)
#endif /* IP_MULTICAST */
/* have we set options? */
if (so->so_optsPack)
8036db8: e0bff717 ldw r2,-36(fp)
8036dbc: 10801f17 ldw r2,124(r2)
8036dc0: 10000426 beq r2,zero,8036dd4 <udp4_socksend+0x314>
pkt->soxopts = so->so_optsPack; /* yup - copy to pkt */
8036dc4: e0bff717 ldw r2,-36(fp)
8036dc8: 10c01f17 ldw r3,124(r2)
8036dcc: e0bff917 ldw r2,-28(fp)
8036dd0: 10c00c15 stw r3,48(r2)
/* unlock the net resource; UDP will immediately re-lock it */
UNLOCK_NET_RESOURCE(NET_RESID);
8036dd4: 0009883a mov r4,zero
8036dd8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
e = udp_send(fport, udpconn->u_lport, pkt);
8036ddc: e0fffe8b ldhu r3,-6(fp)
8036de0: e0bffb17 ldw r2,-20(fp)
8036de4: 1080018b ldhu r2,6(r2)
8036de8: 10bfffcc andi r2,r2,65535
8036dec: e1bff917 ldw r6,-28(fp)
8036df0: 100b883a mov r5,r2
8036df4: 1809883a mov r4,r3
8036df8: 803d8a00 call 803d8a0 <udp_send>
8036dfc: e0bff815 stw r2,-32(fp)
LOCK_NET_RESOURCE(NET_RESID);
8036e00: 0009883a mov r4,zero
8036e04: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
if (e < 0)
8036e08: e0bff817 ldw r2,-32(fp)
8036e0c: 1000020e bge r2,zero,8036e18 <udp4_socksend+0x358>
return(e);
8036e10: e0bff817 ldw r2,-32(fp)
8036e14: 00000106 br 8036e1c <udp4_socksend+0x35c>
return 0;
8036e18: 0005883a mov r2,zero
}
8036e1c: e6ffff04 addi sp,fp,-4
8036e20: dfc00217 ldw ra,8(sp)
8036e24: df000117 ldw fp,4(sp)
8036e28: dc000017 ldw r16,0(sp)
8036e2c: dec00304 addi sp,sp,12
8036e30: f800283a ret
08036e34 <udp4_sockaddr>:
int udp4_sockaddr(struct socket *so, struct mbuf *nam , int req)
{
8036e34: defff904 addi sp,sp,-28
8036e38: dfc00615 stw ra,24(sp)
8036e3c: df000515 stw fp,20(sp)
8036e40: df000504 addi fp,sp,20
8036e44: e13ffd15 stw r4,-12(fp)
8036e48: e17ffc15 stw r5,-16(fp)
8036e4c: e1bffb15 stw r6,-20(fp)
struct sockaddr_in * sin;
UDPCONN udpconn;
sin = mtod(nam, struct sockaddr_in *);
8036e50: e0bffc17 ldw r2,-16(fp)
8036e54: 10800317 ldw r2,12(r2)
8036e58: e0bfff15 stw r2,-4(fp)
if (sin == NULL)
8036e5c: e0bfff17 ldw r2,-4(fp)
8036e60: 1000021e bne r2,zero,8036e6c <udp4_sockaddr+0x38>
return(EINVAL);
8036e64: 00800584 movi r2,22
8036e68: 00003706 br 8036f48 <udp4_sockaddr+0x114>
udpconn = udp_lookup(so);
8036e6c: e13ffd17 ldw r4,-12(fp)
8036e70: 80363bc0 call 80363bc <udp_lookup>
8036e74: e0bffe15 stw r2,-8(fp)
if (!udpconn)
8036e78: e0bffe17 ldw r2,-8(fp)
8036e7c: 1000021e bne r2,zero,8036e88 <udp4_sockaddr+0x54>
return(EINVAL);
8036e80: 00800584 movi r2,22
8036e84: 00003006 br 8036f48 <udp4_sockaddr+0x114>
nam->m_len = sizeof(*sin);
8036e88: e0bffc17 ldw r2,-16(fp)
8036e8c: 00c00404 movi r3,16
8036e90: 10c00215 stw r3,8(r2)
if (req == PRU_SOCKADDR)
8036e94: e0bffb17 ldw r2,-20(fp)
8036e98: 108003d8 cmpnei r2,r2,15
8036e9c: 1000151e bne r2,zero,8036ef4 <udp4_sockaddr+0xc0>
{
sin->sin_family = AF_INET;
8036ea0: e0bfff17 ldw r2,-4(fp)
8036ea4: 00c00084 movi r3,2
8036ea8: 10c0000d sth r3,0(r2)
sin->sin_port = htons(udpconn->u_lport);
8036eac: e0bffe17 ldw r2,-8(fp)
8036eb0: 1080018b ldhu r2,6(r2)
8036eb4: 10bfffcc andi r2,r2,65535
8036eb8: 1004d23a srli r2,r2,8
8036ebc: 1007883a mov r3,r2
8036ec0: e0bffe17 ldw r2,-8(fp)
8036ec4: 1080018b ldhu r2,6(r2)
8036ec8: 10bfffcc andi r2,r2,65535
8036ecc: 1004923a slli r2,r2,8
8036ed0: 1884b03a or r2,r3,r2
8036ed4: 1007883a mov r3,r2
8036ed8: e0bfff17 ldw r2,-4(fp)
8036edc: 10c0008d sth r3,2(r2)
sin->sin_addr.s_addr = udpconn->u_lhost;
8036ee0: e0bffe17 ldw r2,-8(fp)
8036ee4: 10c00317 ldw r3,12(r2)
8036ee8: e0bfff17 ldw r2,-4(fp)
8036eec: 10c00115 stw r3,4(r2)
8036ef0: 00001406 br 8036f44 <udp4_sockaddr+0x110>
}
else /* PRU_PEERADDR */
{
sin->sin_family = AF_INET;
8036ef4: e0bfff17 ldw r2,-4(fp)
8036ef8: 00c00084 movi r3,2
8036efc: 10c0000d sth r3,0(r2)
sin->sin_port = htons(udpconn->u_fport);
8036f00: e0bffe17 ldw r2,-8(fp)
8036f04: 1080020b ldhu r2,8(r2)
8036f08: 10bfffcc andi r2,r2,65535
8036f0c: 1004d23a srli r2,r2,8
8036f10: 1007883a mov r3,r2
8036f14: e0bffe17 ldw r2,-8(fp)
8036f18: 1080020b ldhu r2,8(r2)
8036f1c: 10bfffcc andi r2,r2,65535
8036f20: 1004923a slli r2,r2,8
8036f24: 1884b03a or r2,r3,r2
8036f28: 1007883a mov r3,r2
8036f2c: e0bfff17 ldw r2,-4(fp)
8036f30: 10c0008d sth r3,2(r2)
sin->sin_addr.s_addr = udpconn->u_fhost;
8036f34: e0bffe17 ldw r2,-8(fp)
8036f38: 10c00417 ldw r3,16(r2)
8036f3c: e0bfff17 ldw r2,-4(fp)
8036f40: 10c00115 stw r3,4(r2)
}
return 0;
8036f44: 0005883a mov r2,zero
}
8036f48: e037883a mov sp,fp
8036f4c: dfc00117 ldw ra,4(sp)
8036f50: df000017 ldw fp,0(sp)
8036f54: dec00204 addi sp,sp,8
8036f58: f800283a ret
08036f5c <alt_busy_sleep>:
#include "alt_types.h"
#include "priv/alt_busy_sleep.h"
unsigned int alt_busy_sleep (unsigned int us)
{
8036f5c: defffa04 addi sp,sp,-24
8036f60: dfc00515 stw ra,20(sp)
8036f64: df000415 stw fp,16(sp)
8036f68: df000404 addi fp,sp,16
8036f6c: e13ffc15 stw r4,-16(fp)
{
cycles_per_loop = 9;
}
else
{
cycles_per_loop = 3;
8036f70: 008000c4 movi r2,3
8036f74: e0bffe15 stw r2,-8(fp)
}
big_loops = us / (INT_MAX/
(ALT_CPU_FREQ/(cycles_per_loop * 1000000)));
8036f78: e0fffe17 ldw r3,-8(fp)
8036f7c: 008003f4 movhi r2,15
8036f80: 10909004 addi r2,r2,16960
8036f84: 1885383a mul r2,r3,r2
8036f88: 100b883a mov r5,r2
8036f8c: 0100bef4 movhi r4,763
8036f90: 213c2004 addi r4,r4,-3968
8036f94: 800cff80 call 800cff8 <__udivsi3>
big_loops = us / (INT_MAX/
8036f98: 100b883a mov r5,r2
8036f9c: 01200034 movhi r4,32768
8036fa0: 213fffc4 addi r4,r4,-1
8036fa4: 800cff80 call 800cff8 <__udivsi3>
8036fa8: 100b883a mov r5,r2
8036fac: e13ffc17 ldw r4,-16(fp)
8036fb0: 800cff80 call 800cff8 <__udivsi3>
8036fb4: e0bffd15 stw r2,-12(fp)
if (big_loops)
8036fb8: e0bffd17 ldw r2,-12(fp)
8036fbc: 10002a26 beq r2,zero,8037068 <alt_busy_sleep+0x10c>
{
for(i=0;i<big_loops;i++)
8036fc0: e03fff15 stw zero,-4(fp)
8036fc4: 00001706 br 8037024 <alt_busy_sleep+0xc8>
/*
* Do NOT Try to single step the asm statement below
* (single step will never return)
* Step out of this function or set a breakpoint after the asm statements
*/
__asm__ volatile (
8036fc8: 00a00034 movhi r2,32768
8036fcc: 10bfffc4 addi r2,r2,-1
8036fd0: 10bfffc4 addi r2,r2,-1
8036fd4: 103ffe1e bne r2,zero,8036fd0 <alt_busy_sleep+0x74>
"\n\t.pushsection .debug_alt_sim_info"
"\n\t.int 4, 0, 0b, 1b"
"\n\t.popsection"
:: "r" (INT_MAX));
us -= (INT_MAX/(ALT_CPU_FREQ/
(cycles_per_loop * 1000000)));
8036fd8: e0fffe17 ldw r3,-8(fp)
8036fdc: 008003f4 movhi r2,15
8036fe0: 10909004 addi r2,r2,16960
8036fe4: 1885383a mul r2,r3,r2
us -= (INT_MAX/(ALT_CPU_FREQ/
8036fe8: 100b883a mov r5,r2
8036fec: 0100bef4 movhi r4,763
8036ff0: 213c2004 addi r4,r4,-3968
8036ff4: 800cff80 call 800cff8 <__udivsi3>
8036ff8: 100b883a mov r5,r2
8036ffc: 01200034 movhi r4,32768
8037000: 213fffc4 addi r4,r4,-1
8037004: 800cff80 call 800cff8 <__udivsi3>
8037008: 1007883a mov r3,r2
803700c: e0bffc17 ldw r2,-16(fp)
8037010: 10c5c83a sub r2,r2,r3
8037014: e0bffc15 stw r2,-16(fp)
for(i=0;i<big_loops;i++)
8037018: e0bfff17 ldw r2,-4(fp)
803701c: 10800044 addi r2,r2,1
8037020: e0bfff15 stw r2,-4(fp)
8037024: e0ffff17 ldw r3,-4(fp)
8037028: e0bffd17 ldw r2,-12(fp)
803702c: 18bfe616 blt r3,r2,8036fc8 <alt_busy_sleep+0x6c>
"\n\tbne %0,zero,0b"
"\n1:"
"\n\t.pushsection .debug_alt_sim_info"
"\n\t.int 4, 0, 0b, 1b"
"\n\t.popsection"
:: "r" (us*(ALT_CPU_FREQ/(cycles_per_loop * 1000000))));
8037030: e0fffe17 ldw r3,-8(fp)
8037034: 008003f4 movhi r2,15
8037038: 10909004 addi r2,r2,16960
803703c: 1885383a mul r2,r3,r2
8037040: 100b883a mov r5,r2
8037044: 0100bef4 movhi r4,763
8037048: 213c2004 addi r4,r4,-3968
803704c: 800cff80 call 800cff8 <__udivsi3>
8037050: 1007883a mov r3,r2
8037054: e0bffc17 ldw r2,-16(fp)
8037058: 1885383a mul r2,r3,r2
__asm__ volatile (
803705c: 10bfffc4 addi r2,r2,-1
8037060: 103ffe1e bne r2,zero,803705c <alt_busy_sleep+0x100>
8037064: 00000d06 br 803709c <alt_busy_sleep+0x140>
"\n\tbgt %0,zero,0b"
"\n1:"
"\n\t.pushsection .debug_alt_sim_info"
"\n\t.int 4, 0, 0b, 1b"
"\n\t.popsection"
:: "r" (us*(ALT_CPU_FREQ/(cycles_per_loop * 1000000))));
8037068: e0fffe17 ldw r3,-8(fp)
803706c: 008003f4 movhi r2,15
8037070: 10909004 addi r2,r2,16960
8037074: 1885383a mul r2,r3,r2
8037078: 100b883a mov r5,r2
803707c: 0100bef4 movhi r4,763
8037080: 213c2004 addi r4,r4,-3968
8037084: 800cff80 call 800cff8 <__udivsi3>
8037088: 1007883a mov r3,r2
803708c: e0bffc17 ldw r2,-16(fp)
8037090: 1885383a mul r2,r3,r2
__asm__ volatile (
8037094: 10bfffc4 addi r2,r2,-1
8037098: 00bffe16 blt zero,r2,8037094 <alt_busy_sleep+0x138>
}
#endif /* #ifndef ALT_SIM_OPTIMIZE */
return 0;
803709c: 0005883a mov r2,zero
}
80370a0: e037883a mov sp,fp
80370a4: dfc00117 ldw ra,4(sp)
80370a8: df000017 ldw fp,0(sp)
80370ac: dec00204 addi sp,sp,8
80370b0: f800283a ret
080370b4 <alt_get_errno>:
{
80370b4: defffe04 addi sp,sp,-8
80370b8: dfc00115 stw ra,4(sp)
80370bc: df000015 stw fp,0(sp)
80370c0: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
80370c4: d0a02717 ldw r2,-32612(gp)
80370c8: 10000326 beq r2,zero,80370d8 <alt_get_errno+0x24>
80370cc: d0a02717 ldw r2,-32612(gp)
80370d0: 103ee83a callr r2
80370d4: 00000106 br 80370dc <alt_get_errno+0x28>
80370d8: d0a04204 addi r2,gp,-32504
}
80370dc: e037883a mov sp,fp
80370e0: dfc00117 ldw ra,4(sp)
80370e4: df000017 ldw fp,0(sp)
80370e8: dec00204 addi sp,sp,8
80370ec: f800283a ret
080370f0 <alt_close>:
*
* ALT_CLOSE is mapped onto the close() system call in alt_syscall.h
*/
int ALT_CLOSE (int fildes)
{
80370f0: defffb04 addi sp,sp,-20
80370f4: dfc00415 stw ra,16(sp)
80370f8: df000315 stw fp,12(sp)
80370fc: df000304 addi fp,sp,12
8037100: e13ffd15 stw r4,-12(fp)
* A common error case is that when the file descriptor was created, the call
* to open() failed resulting in a negative file descriptor. This is trapped
* below so that we don't try and process an invalid file descriptor.
*/
fd = (fildes < 0) ? NULL : &alt_fd_list[fildes];
8037104: e0bffd17 ldw r2,-12(fp)
8037108: 10000616 blt r2,zero,8037124 <alt_close+0x34>
803710c: e0bffd17 ldw r2,-12(fp)
8037110: 10c00324 muli r3,r2,12
8037114: 00820174 movhi r2,2053
8037118: 10b21a04 addi r2,r2,-14232
803711c: 1885883a add r2,r3,r2
8037120: 00000106 br 8037128 <alt_close+0x38>
8037124: 0005883a mov r2,zero
8037128: e0bfff15 stw r2,-4(fp)
if (fd)
803712c: e0bfff17 ldw r2,-4(fp)
8037130: 10001926 beq r2,zero,8037198 <alt_close+0xa8>
/*
* If the associated file system/device has a close function, call it so
* that any necessary cleanup code can run.
*/
rval = (fd->dev->close) ? fd->dev->close(fd) : 0;
8037134: e0bfff17 ldw r2,-4(fp)
8037138: 10800017 ldw r2,0(r2)
803713c: 10800417 ldw r2,16(r2)
8037140: 10000626 beq r2,zero,803715c <alt_close+0x6c>
8037144: e0bfff17 ldw r2,-4(fp)
8037148: 10800017 ldw r2,0(r2)
803714c: 10800417 ldw r2,16(r2)
8037150: e13fff17 ldw r4,-4(fp)
8037154: 103ee83a callr r2
8037158: 00000106 br 8037160 <alt_close+0x70>
803715c: 0005883a mov r2,zero
8037160: e0bffe15 stw r2,-8(fp)
/* Free the file descriptor structure and return. */
alt_release_fd (fildes);
8037164: e13ffd17 ldw r4,-12(fp)
8037168: 8037e300 call 8037e30 <alt_release_fd>
if (rval < 0)
803716c: e0bffe17 ldw r2,-8(fp)
8037170: 1000070e bge r2,zero,8037190 <alt_close+0xa0>
{
ALT_ERRNO = -rval;
8037174: 80370b40 call 80370b4 <alt_get_errno>
8037178: 1007883a mov r3,r2
803717c: e0bffe17 ldw r2,-8(fp)
8037180: 0085c83a sub r2,zero,r2
8037184: 18800015 stw r2,0(r3)
return -1;
8037188: 00bfffc4 movi r2,-1
803718c: 00000706 br 80371ac <alt_close+0xbc>
}
return 0;
8037190: 0005883a mov r2,zero
8037194: 00000506 br 80371ac <alt_close+0xbc>
}
else
{
ALT_ERRNO = EBADFD;
8037198: 80370b40 call 80370b4 <alt_get_errno>
803719c: 1007883a mov r3,r2
80371a0: 00801444 movi r2,81
80371a4: 18800015 stw r2,0(r3)
return -1;
80371a8: 00bfffc4 movi r2,-1
}
}
80371ac: e037883a mov sp,fp
80371b0: dfc00117 ldw ra,4(sp)
80371b4: df000017 ldw fp,0(sp)
80371b8: dec00204 addi sp,sp,8
80371bc: f800283a ret
080371c0 <alt_dcache_flush>:
*
* Any dirty lines in the data cache are written back to memory.
*/
void alt_dcache_flush (void* start, alt_u32 len)
{
80371c0: defffb04 addi sp,sp,-20
80371c4: df000415 stw fp,16(sp)
80371c8: df000404 addi fp,sp,16
80371cc: e13ffd15 stw r4,-12(fp)
80371d0: e17ffc15 stw r5,-16(fp)
#if NIOS2_DCACHE_SIZE > 0
char* i;
char* end = ((char*) start) + len;
80371d4: e0fffd17 ldw r3,-12(fp)
80371d8: e0bffc17 ldw r2,-16(fp)
80371dc: 1885883a add r2,r3,r2
80371e0: e0bffe15 stw r2,-8(fp)
for (i = start; i < end; i+= NIOS2_DCACHE_LINE_SIZE)
80371e4: e0bffd17 ldw r2,-12(fp)
80371e8: e0bfff15 stw r2,-4(fp)
80371ec: 00000506 br 8037204 <alt_dcache_flush+0x44>
{
ALT_FLUSH_DATA(i);
80371f0: e0bfff17 ldw r2,-4(fp)
80371f4: 1000001b flushda 0(r2)
for (i = start; i < end; i+= NIOS2_DCACHE_LINE_SIZE)
80371f8: e0bfff17 ldw r2,-4(fp)
80371fc: 10800804 addi r2,r2,32
8037200: e0bfff15 stw r2,-4(fp)
8037204: e0ffff17 ldw r3,-4(fp)
8037208: e0bffe17 ldw r2,-8(fp)
803720c: 18bff836 bltu r3,r2,80371f0 <alt_dcache_flush+0x30>
* For an unaligned flush request, we've got one more line left.
* Note that this is dependent on NIOS2_DCACHE_LINE_SIZE to be a
* multiple of 2 (which it always is).
*/
if (((alt_u32) start) & (NIOS2_DCACHE_LINE_SIZE - 1))
8037210: e0bffd17 ldw r2,-12(fp)
8037214: 108007cc andi r2,r2,31
8037218: 10000226 beq r2,zero,8037224 <alt_dcache_flush+0x64>
{
ALT_FLUSH_DATA(i);
803721c: e0bfff17 ldw r2,-4(fp)
8037220: 1000001b flushda 0(r2)
}
#endif /* NIOS2_DCACHE_SIZE > 0 */
}
8037224: 0001883a nop
8037228: e037883a mov sp,fp
803722c: df000017 ldw fp,0(sp)
8037230: dec00104 addi sp,sp,4
8037234: f800283a ret
08037238 <alt_dev_null_write>:
* by the alt_dev_null device. It simple discards all data passed to it, and
* indicates that the data has been successfully transmitted.
*/
static int alt_dev_null_write (alt_fd* fd, const char* ptr, int len)
{
8037238: defffc04 addi sp,sp,-16
803723c: df000315 stw fp,12(sp)
8037240: df000304 addi fp,sp,12
8037244: e13fff15 stw r4,-4(fp)
8037248: e17ffe15 stw r5,-8(fp)
803724c: e1bffd15 stw r6,-12(fp)
return len;
8037250: e0bffd17 ldw r2,-12(fp)
}
8037254: e037883a mov sp,fp
8037258: df000017 ldw fp,0(sp)
803725c: dec00104 addi sp,sp,4
8037260: f800283a ret
08037264 <alt_get_errno>:
{
8037264: defffe04 addi sp,sp,-8
8037268: dfc00115 stw ra,4(sp)
803726c: df000015 stw fp,0(sp)
8037270: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
8037274: d0a02717 ldw r2,-32612(gp)
8037278: 10000326 beq r2,zero,8037288 <alt_get_errno+0x24>
803727c: d0a02717 ldw r2,-32612(gp)
8037280: 103ee83a callr r2
8037284: 00000106 br 803728c <alt_get_errno+0x28>
8037288: d0a04204 addi r2,gp,-32504
}
803728c: e037883a mov sp,fp
8037290: dfc00117 ldw ra,4(sp)
8037294: df000017 ldw fp,0(sp)
8037298: dec00204 addi sp,sp,8
803729c: f800283a ret
080372a0 <alt_dev_llist_insert>:
/*
*
*/
int alt_dev_llist_insert (alt_dev_llist* dev, alt_llist* list)
{
80372a0: defffa04 addi sp,sp,-24
80372a4: dfc00515 stw ra,20(sp)
80372a8: df000415 stw fp,16(sp)
80372ac: df000404 addi fp,sp,16
80372b0: e13ffd15 stw r4,-12(fp)
80372b4: e17ffc15 stw r5,-16(fp)
/*
* check that the device exists, and that it has a valid name.
*/
if (!dev || !dev->name)
80372b8: e0bffd17 ldw r2,-12(fp)
80372bc: 10000326 beq r2,zero,80372cc <alt_dev_llist_insert+0x2c>
80372c0: e0bffd17 ldw r2,-12(fp)
80372c4: 10800217 ldw r2,8(r2)
80372c8: 1000061e bne r2,zero,80372e4 <alt_dev_llist_insert+0x44>
{
ALT_ERRNO = EINVAL;
80372cc: 80372640 call 8037264 <alt_get_errno>
80372d0: 1007883a mov r3,r2
80372d4: 00800584 movi r2,22
80372d8: 18800015 stw r2,0(r3)
return -EINVAL;
80372dc: 00bffa84 movi r2,-22
80372e0: 00001306 br 8037330 <alt_dev_llist_insert+0x90>
/*
* register the device.
*/
alt_llist_insert(list, &dev->llist);
80372e4: e0bffd17 ldw r2,-12(fp)
80372e8: e0fffc17 ldw r3,-16(fp)
80372ec: e0ffff15 stw r3,-4(fp)
80372f0: e0bffe15 stw r2,-8(fp)
entry->previous = list;
80372f4: e0bffe17 ldw r2,-8(fp)
80372f8: e0ffff17 ldw r3,-4(fp)
80372fc: 10c00115 stw r3,4(r2)
entry->next = list->next;
8037300: e0bfff17 ldw r2,-4(fp)
8037304: 10c00017 ldw r3,0(r2)
8037308: e0bffe17 ldw r2,-8(fp)
803730c: 10c00015 stw r3,0(r2)
list->next->previous = entry;
8037310: e0bfff17 ldw r2,-4(fp)
8037314: 10800017 ldw r2,0(r2)
8037318: e0fffe17 ldw r3,-8(fp)
803731c: 10c00115 stw r3,4(r2)
list->next = entry;
8037320: e0bfff17 ldw r2,-4(fp)
8037324: e0fffe17 ldw r3,-8(fp)
8037328: 10c00015 stw r3,0(r2)
return 0;
803732c: 0005883a mov r2,zero
}
8037330: e037883a mov sp,fp
8037334: dfc00117 ldw ra,4(sp)
8037338: df000017 ldw fp,0(sp)
803733c: dec00204 addi sp,sp,8
8037340: f800283a ret
08037344 <_do_ctors>:
/*
* Run the C++ static constructors.
*/
void _do_ctors(void)
{
8037344: defffd04 addi sp,sp,-12
8037348: dfc00215 stw ra,8(sp)
803734c: df000115 stw fp,4(sp)
8037350: df000104 addi fp,sp,4
constructor* ctor;
for (ctor = &__CTOR_END__[-1]; ctor >= __CTOR_LIST__; ctor--)
8037354: 00820134 movhi r2,2052
8037358: 109a6904 addi r2,r2,27044
803735c: e0bfff15 stw r2,-4(fp)
8037360: 00000606 br 803737c <_do_ctors+0x38>
(*ctor) ();
8037364: e0bfff17 ldw r2,-4(fp)
8037368: 10800017 ldw r2,0(r2)
803736c: 103ee83a callr r2
for (ctor = &__CTOR_END__[-1]; ctor >= __CTOR_LIST__; ctor--)
8037370: e0bfff17 ldw r2,-4(fp)
8037374: 10bfff04 addi r2,r2,-4
8037378: e0bfff15 stw r2,-4(fp)
803737c: e0ffff17 ldw r3,-4(fp)
8037380: 00820134 movhi r2,2052
8037384: 109a6a04 addi r2,r2,27048
8037388: 18bff62e bgeu r3,r2,8037364 <_do_ctors+0x20>
}
803738c: 0001883a nop
8037390: e037883a mov sp,fp
8037394: dfc00117 ldw ra,4(sp)
8037398: df000017 ldw fp,0(sp)
803739c: dec00204 addi sp,sp,8
80373a0: f800283a ret
080373a4 <_do_dtors>:
/*
* Run the C++ static destructors.
*/
void _do_dtors(void)
{
80373a4: defffd04 addi sp,sp,-12
80373a8: dfc00215 stw ra,8(sp)
80373ac: df000115 stw fp,4(sp)
80373b0: df000104 addi fp,sp,4
destructor* dtor;
for (dtor = &__DTOR_END__[-1]; dtor >= __DTOR_LIST__; dtor--)
80373b4: 00820134 movhi r2,2052
80373b8: 109a6904 addi r2,r2,27044
80373bc: e0bfff15 stw r2,-4(fp)
80373c0: 00000606 br 80373dc <_do_dtors+0x38>
(*dtor) ();
80373c4: e0bfff17 ldw r2,-4(fp)
80373c8: 10800017 ldw r2,0(r2)
80373cc: 103ee83a callr r2
for (dtor = &__DTOR_END__[-1]; dtor >= __DTOR_LIST__; dtor--)
80373d0: e0bfff17 ldw r2,-4(fp)
80373d4: 10bfff04 addi r2,r2,-4
80373d8: e0bfff15 stw r2,-4(fp)
80373dc: e0ffff17 ldw r3,-4(fp)
80373e0: 00820134 movhi r2,2052
80373e4: 109a6a04 addi r2,r2,27048
80373e8: 18bff62e bgeu r3,r2,80373c4 <_do_dtors+0x20>
}
80373ec: 0001883a nop
80373f0: e037883a mov sp,fp
80373f4: dfc00117 ldw ra,4(sp)
80373f8: df000017 ldw fp,0(sp)
80373fc: dec00204 addi sp,sp,8
8037400: f800283a ret
08037404 <alt_find_dev>:
* "name" must be an exact match for the devices registered name for a match to
* be found.
*/
alt_dev* alt_find_dev(const char* name, alt_llist* llist)
{
8037404: defffa04 addi sp,sp,-24
8037408: dfc00515 stw ra,20(sp)
803740c: df000415 stw fp,16(sp)
8037410: df000404 addi fp,sp,16
8037414: e13ffd15 stw r4,-12(fp)
8037418: e17ffc15 stw r5,-16(fp)
alt_dev* next = (alt_dev*) llist->next;
803741c: e0bffc17 ldw r2,-16(fp)
8037420: 10800017 ldw r2,0(r2)
8037424: e0bfff15 stw r2,-4(fp)
alt_32 len;
len = strlen(name) + 1;
8037428: e13ffd17 ldw r4,-12(fp)
803742c: 8002dac0 call 8002dac <strlen>
8037430: 10800044 addi r2,r2,1
8037434: e0bffe15 stw r2,-8(fp)
/*
* Check each list entry in turn, until a match is found, or we reach the
* end of the list (i.e. next winds up pointing back to the list head).
*/
while (next != (alt_dev*) llist)
8037438: 00000d06 br 8037470 <alt_find_dev+0x6c>
/*
* memcmp() is used here rather than strcmp() in order to reduce the size
* of the executable.
*/
if (!memcmp (next->name, name, len))
803743c: e0bfff17 ldw r2,-4(fp)
8037440: 10800217 ldw r2,8(r2)
8037444: e0fffe17 ldw r3,-8(fp)
8037448: 180d883a mov r6,r3
803744c: e17ffd17 ldw r5,-12(fp)
8037450: 1009883a mov r4,r2
8037454: 8042cb80 call 8042cb8 <memcmp>
8037458: 1000021e bne r2,zero,8037464 <alt_find_dev+0x60>
{
/* match found */
return next;
803745c: e0bfff17 ldw r2,-4(fp)
8037460: 00000706 br 8037480 <alt_find_dev+0x7c>
}
next = (alt_dev*) next->llist.next;
8037464: e0bfff17 ldw r2,-4(fp)
8037468: 10800017 ldw r2,0(r2)
803746c: e0bfff15 stw r2,-4(fp)
while (next != (alt_dev*) llist)
8037470: e0ffff17 ldw r3,-4(fp)
8037474: e0bffc17 ldw r2,-16(fp)
8037478: 18bff01e bne r3,r2,803743c <alt_find_dev+0x38>
}
/* No match found */
return NULL;
803747c: 0005883a mov r2,zero
}
8037480: e037883a mov sp,fp
8037484: dfc00117 ldw ra,4(sp)
8037488: df000017 ldw fp,0(sp)
803748c: dec00204 addi sp,sp,8
8037490: f800283a ret
08037494 <alt_ic_isr_register>:
* @param irq IRQ number
* @return 0 if successful, else error (-1)
*/
int alt_ic_isr_register(alt_u32 ic_id, alt_u32 irq, alt_isr_func isr,
void *isr_context, void *flags)
{
8037494: defff904 addi sp,sp,-28
8037498: dfc00615 stw ra,24(sp)
803749c: df000515 stw fp,20(sp)
80374a0: df000504 addi fp,sp,20
80374a4: e13fff15 stw r4,-4(fp)
80374a8: e17ffe15 stw r5,-8(fp)
80374ac: e1bffd15 stw r6,-12(fp)
80374b0: e1fffc15 stw r7,-16(fp)
return alt_iic_isr_register(ic_id, irq, isr, isr_context, flags);
80374b4: e0800217 ldw r2,8(fp)
80374b8: d8800015 stw r2,0(sp)
80374bc: e1fffc17 ldw r7,-16(fp)
80374c0: e1bffd17 ldw r6,-12(fp)
80374c4: e17ffe17 ldw r5,-8(fp)
80374c8: e13fff17 ldw r4,-4(fp)
80374cc: 80376440 call 8037644 <alt_iic_isr_register>
}
80374d0: e037883a mov sp,fp
80374d4: dfc00117 ldw ra,4(sp)
80374d8: df000017 ldw fp,0(sp)
80374dc: dec00204 addi sp,sp,8
80374e0: f800283a ret
080374e4 <alt_ic_irq_enable>:
* @param ic_id Ignored.
* @param irq IRQ number
* @return 0 if successful, else error (-1)
*/
int alt_ic_irq_enable (alt_u32 ic_id, alt_u32 irq)
{
80374e4: defff904 addi sp,sp,-28
80374e8: df000615 stw fp,24(sp)
80374ec: df000604 addi fp,sp,24
80374f0: e13ffb15 stw r4,-20(fp)
80374f4: e17ffa15 stw r5,-24(fp)
80374f8: e0bffa17 ldw r2,-24(fp)
80374fc: e0bfff15 stw r2,-4(fp)
NIOS2_READ_STATUS (context);
8037500: 0005303a rdctl r2,status
8037504: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8037508: e0fffe17 ldw r3,-8(fp)
803750c: 00bfff84 movi r2,-2
8037510: 1884703a and r2,r3,r2
8037514: 1001703a wrctl status,r2
return context;
8037518: e0bffe17 ldw r2,-8(fp)
static ALT_INLINE int ALT_ALWAYS_INLINE alt_irq_enable (alt_u32 id)
{
alt_irq_context status;
extern volatile alt_u32 alt_irq_active;
status = alt_irq_disable_all ();
803751c: e0bffd15 stw r2,-12(fp)
alt_irq_active |= (1 << id);
8037520: 00c00044 movi r3,1
8037524: e0bfff17 ldw r2,-4(fp)
8037528: 1884983a sll r2,r3,r2
803752c: 1007883a mov r3,r2
8037530: d0a08c17 ldw r2,-32208(gp)
8037534: 1884b03a or r2,r3,r2
8037538: d0a08c15 stw r2,-32208(gp)
NIOS2_WRITE_IENABLE (alt_irq_active);
803753c: d0a08c17 ldw r2,-32208(gp)
8037540: 100170fa wrctl ienable,r2
8037544: e0bffd17 ldw r2,-12(fp)
8037548: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
803754c: e0bffc17 ldw r2,-16(fp)
8037550: 1001703a wrctl status,r2
alt_irq_enable_all(status);
return 0;
8037554: 0005883a mov r2,zero
return alt_irq_enable(irq);
8037558: 0001883a nop
}
803755c: e037883a mov sp,fp
8037560: df000017 ldw fp,0(sp)
8037564: dec00104 addi sp,sp,4
8037568: f800283a ret
0803756c <alt_ic_irq_disable>:
* @param ic_id Ignored.
* @param irq IRQ number
* @return 0 if successful, else error (-1)
*/
int alt_ic_irq_disable(alt_u32 ic_id, alt_u32 irq)
{
803756c: defff904 addi sp,sp,-28
8037570: df000615 stw fp,24(sp)
8037574: df000604 addi fp,sp,24
8037578: e13ffb15 stw r4,-20(fp)
803757c: e17ffa15 stw r5,-24(fp)
8037580: e0bffa17 ldw r2,-24(fp)
8037584: e0bfff15 stw r2,-4(fp)
NIOS2_READ_STATUS (context);
8037588: 0005303a rdctl r2,status
803758c: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8037590: e0fffe17 ldw r3,-8(fp)
8037594: 00bfff84 movi r2,-2
8037598: 1884703a and r2,r3,r2
803759c: 1001703a wrctl status,r2
return context;
80375a0: e0bffe17 ldw r2,-8(fp)
status = alt_irq_disable_all ();
80375a4: e0bffd15 stw r2,-12(fp)
alt_irq_active &= ~(1 << id);
80375a8: 00c00044 movi r3,1
80375ac: e0bfff17 ldw r2,-4(fp)
80375b0: 1884983a sll r2,r3,r2
80375b4: 0084303a nor r2,zero,r2
80375b8: 1007883a mov r3,r2
80375bc: d0a08c17 ldw r2,-32208(gp)
80375c0: 1884703a and r2,r3,r2
80375c4: d0a08c15 stw r2,-32208(gp)
NIOS2_WRITE_IENABLE (alt_irq_active);
80375c8: d0a08c17 ldw r2,-32208(gp)
80375cc: 100170fa wrctl ienable,r2
80375d0: e0bffd17 ldw r2,-12(fp)
80375d4: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context);
80375d8: e0bffc17 ldw r2,-16(fp)
80375dc: 1001703a wrctl status,r2
return 0;
80375e0: 0005883a mov r2,zero
return alt_irq_disable(irq);
80375e4: 0001883a nop
}
80375e8: e037883a mov sp,fp
80375ec: df000017 ldw fp,0(sp)
80375f0: dec00104 addi sp,sp,4
80375f4: f800283a ret
080375f8 <alt_ic_irq_enabled>:
* @param irq IRQ number
* @return Zero if corresponding interrupt is disabled and
* non-zero otherwise.
*/
alt_u32 alt_ic_irq_enabled(alt_u32 ic_id, alt_u32 irq)
{
80375f8: defffc04 addi sp,sp,-16
80375fc: df000315 stw fp,12(sp)
8037600: df000304 addi fp,sp,12
8037604: e13ffe15 stw r4,-8(fp)
8037608: e17ffd15 stw r5,-12(fp)
alt_u32 irq_enabled;
NIOS2_READ_IENABLE(irq_enabled);
803760c: 000530fa rdctl r2,ienable
8037610: e0bfff15 stw r2,-4(fp)
return (irq_enabled & (1 << irq)) ? 1: 0;
8037614: 00c00044 movi r3,1
8037618: e0bffd17 ldw r2,-12(fp)
803761c: 1884983a sll r2,r3,r2
8037620: 1007883a mov r3,r2
8037624: e0bfff17 ldw r2,-4(fp)
8037628: 1884703a and r2,r3,r2
803762c: 1004c03a cmpne r2,r2,zero
8037630: 10803fcc andi r2,r2,255
}
8037634: e037883a mov sp,fp
8037638: df000017 ldw fp,0(sp)
803763c: dec00104 addi sp,sp,4
8037640: f800283a ret
08037644 <alt_iic_isr_register>:
* @param flags
* @return 0 if successful, else error (-1)
*/
int alt_iic_isr_register(alt_u32 ic_id, alt_u32 irq, alt_isr_func isr,
void *isr_context, void *flags)
{
8037644: defff504 addi sp,sp,-44
8037648: dfc00a15 stw ra,40(sp)
803764c: df000915 stw fp,36(sp)
8037650: df000904 addi fp,sp,36
8037654: e13ffa15 stw r4,-24(fp)
8037658: e17ff915 stw r5,-28(fp)
803765c: e1bff815 stw r6,-32(fp)
8037660: e1fff715 stw r7,-36(fp)
int rc = -EINVAL;
8037664: 00bffa84 movi r2,-22
8037668: e0bfff15 stw r2,-4(fp)
int id = irq; /* IRQ interpreted as the interrupt ID. */
803766c: e0bff917 ldw r2,-28(fp)
8037670: e0bffe15 stw r2,-8(fp)
alt_irq_context status;
if (id < ALT_NIRQ)
8037674: e0bffe17 ldw r2,-8(fp)
8037678: 10800808 cmpgei r2,r2,32
803767c: 1000241e bne r2,zero,8037710 <alt_iic_isr_register+0xcc>
NIOS2_READ_STATUS (context);
8037680: 0005303a rdctl r2,status
8037684: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8037688: e0fffc17 ldw r3,-16(fp)
803768c: 00bfff84 movi r2,-2
8037690: 1884703a and r2,r3,r2
8037694: 1001703a wrctl status,r2
return context;
8037698: e0bffc17 ldw r2,-16(fp)
* interrupts are disabled while the handler tables are updated to ensure
* that an interrupt doesn't occur while the tables are in an inconsistant
* state.
*/
status = alt_irq_disable_all();
803769c: e0bffd15 stw r2,-12(fp)
alt_irq[id].handler = isr;
80376a0: e0bffe17 ldw r2,-8(fp)
80376a4: 100890fa slli r4,r2,3
80376a8: e0fff817 ldw r3,-32(fp)
80376ac: 008201b4 movhi r2,2054
80376b0: 2085883a add r2,r4,r2
80376b4: 10f8dc15 stw r3,-7312(r2)
alt_irq[id].context = isr_context;
80376b8: e0bffe17 ldw r2,-8(fp)
80376bc: 100890fa slli r4,r2,3
80376c0: e0fff717 ldw r3,-36(fp)
80376c4: 008201b4 movhi r2,2054
80376c8: 2085883a add r2,r4,r2
80376cc: 10f8dd15 stw r3,-7308(r2)
rc = (isr) ? alt_ic_irq_enable(ic_id, id) : alt_ic_irq_disable(ic_id, id);
80376d0: e0bff817 ldw r2,-32(fp)
80376d4: 10000526 beq r2,zero,80376ec <alt_iic_isr_register+0xa8>
80376d8: e0bffe17 ldw r2,-8(fp)
80376dc: 100b883a mov r5,r2
80376e0: e13ffa17 ldw r4,-24(fp)
80376e4: 80374e40 call 80374e4 <alt_ic_irq_enable>
80376e8: 00000406 br 80376fc <alt_iic_isr_register+0xb8>
80376ec: e0bffe17 ldw r2,-8(fp)
80376f0: 100b883a mov r5,r2
80376f4: e13ffa17 ldw r4,-24(fp)
80376f8: 803756c0 call 803756c <alt_ic_irq_disable>
80376fc: e0bfff15 stw r2,-4(fp)
8037700: e0bffd17 ldw r2,-12(fp)
8037704: e0bffb15 stw r2,-20(fp)
NIOS2_WRITE_STATUS (context);
8037708: e0bffb17 ldw r2,-20(fp)
803770c: 1001703a wrctl status,r2
alt_irq_enable_all(status);
}
return rc;
8037710: e0bfff17 ldw r2,-4(fp)
}
8037714: e037883a mov sp,fp
8037718: dfc00117 ldw ra,4(sp)
803771c: df000017 ldw fp,0(sp)
8037720: dec00204 addi sp,sp,8
8037724: f800283a ret
08037728 <alt_open_fd>:
* If the device can not be succesfully opened, then the input file descriptor
* remains unchanged.
*/
static void alt_open_fd(alt_fd* fd, const char* name, int flags, int mode)
{
8037728: defff904 addi sp,sp,-28
803772c: dfc00615 stw ra,24(sp)
8037730: df000515 stw fp,20(sp)
8037734: df000504 addi fp,sp,20
8037738: e13ffe15 stw r4,-8(fp)
803773c: e17ffd15 stw r5,-12(fp)
8037740: e1bffc15 stw r6,-16(fp)
8037744: e1fffb15 stw r7,-20(fp)
int old;
old = open (name, flags, mode);
8037748: e1bffb17 ldw r6,-20(fp)
803774c: e17ffc17 ldw r5,-16(fp)
8037750: e13ffd17 ldw r4,-12(fp)
8037754: 80379480 call 8037948 <open>
8037758: e0bfff15 stw r2,-4(fp)
if (old >= 0)
803775c: e0bfff17 ldw r2,-4(fp)
8037760: 10001716 blt r2,zero,80377c0 <alt_open_fd+0x98>
{
fd->dev = alt_fd_list[old].dev;
8037764: e0bfff17 ldw r2,-4(fp)
8037768: 10c00324 muli r3,r2,12
803776c: 00820174 movhi r2,2053
8037770: 1885883a add r2,r3,r2
8037774: 10f21a17 ldw r3,-14232(r2)
8037778: e0bffe17 ldw r2,-8(fp)
803777c: 10c00015 stw r3,0(r2)
fd->priv = alt_fd_list[old].priv;
8037780: e0bfff17 ldw r2,-4(fp)
8037784: 10c00324 muli r3,r2,12
8037788: 00820174 movhi r2,2053
803778c: 1885883a add r2,r3,r2
8037790: 10f21b17 ldw r3,-14228(r2)
8037794: e0bffe17 ldw r2,-8(fp)
8037798: 10c00115 stw r3,4(r2)
fd->fd_flags = alt_fd_list[old].fd_flags;
803779c: e0bfff17 ldw r2,-4(fp)
80377a0: 10c00324 muli r3,r2,12
80377a4: 00820174 movhi r2,2053
80377a8: 1885883a add r2,r3,r2
80377ac: 10f21c17 ldw r3,-14224(r2)
80377b0: e0bffe17 ldw r2,-8(fp)
80377b4: 10c00215 stw r3,8(r2)
alt_release_fd (old);
80377b8: e13fff17 ldw r4,-4(fp)
80377bc: 8037e300 call 8037e30 <alt_release_fd>
}
}
80377c0: 0001883a nop
80377c4: e037883a mov sp,fp
80377c8: dfc00117 ldw ra,4(sp)
80377cc: df000017 ldw fp,0(sp)
80377d0: dec00204 addi sp,sp,8
80377d4: f800283a ret
080377d8 <alt_io_redirect>:
*/
void alt_io_redirect(const char* stdout_dev,
const char* stdin_dev,
const char* stderr_dev)
{
80377d8: defffb04 addi sp,sp,-20
80377dc: dfc00415 stw ra,16(sp)
80377e0: df000315 stw fp,12(sp)
80377e4: df000304 addi fp,sp,12
80377e8: e13fff15 stw r4,-4(fp)
80377ec: e17ffe15 stw r5,-8(fp)
80377f0: e1bffd15 stw r6,-12(fp)
/* Redirect the channels */
alt_open_fd (&alt_fd_list[STDOUT_FILENO], stdout_dev, O_WRONLY, 0777);
80377f4: 01c07fc4 movi r7,511
80377f8: 01800044 movi r6,1
80377fc: e17fff17 ldw r5,-4(fp)
8037800: 01020174 movhi r4,2053
8037804: 21321d04 addi r4,r4,-14220
8037808: 80377280 call 8037728 <alt_open_fd>
alt_open_fd (&alt_fd_list[STDIN_FILENO], stdin_dev, O_RDONLY, 0777);
803780c: 01c07fc4 movi r7,511
8037810: 000d883a mov r6,zero
8037814: e17ffe17 ldw r5,-8(fp)
8037818: 01020174 movhi r4,2053
803781c: 21321a04 addi r4,r4,-14232
8037820: 80377280 call 8037728 <alt_open_fd>
alt_open_fd (&alt_fd_list[STDERR_FILENO], stderr_dev, O_WRONLY, 0777);
8037824: 01c07fc4 movi r7,511
8037828: 01800044 movi r6,1
803782c: e17ffd17 ldw r5,-12(fp)
8037830: 01020174 movhi r4,2053
8037834: 21322004 addi r4,r4,-14208
8037838: 80377280 call 8037728 <alt_open_fd>
}
803783c: 0001883a nop
8037840: e037883a mov sp,fp
8037844: dfc00117 ldw ra,4(sp)
8037848: df000017 ldw fp,0(sp)
803784c: dec00204 addi sp,sp,8
8037850: f800283a ret
08037854 <alt_get_errno>:
{
8037854: defffe04 addi sp,sp,-8
8037858: dfc00115 stw ra,4(sp)
803785c: df000015 stw fp,0(sp)
8037860: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
8037864: d0a02717 ldw r2,-32612(gp)
8037868: 10000326 beq r2,zero,8037878 <alt_get_errno+0x24>
803786c: d0a02717 ldw r2,-32612(gp)
8037870: 103ee83a callr r2
8037874: 00000106 br 803787c <alt_get_errno+0x28>
8037878: d0a04204 addi r2,gp,-32504
}
803787c: e037883a mov sp,fp
8037880: dfc00117 ldw ra,4(sp)
8037884: df000017 ldw fp,0(sp)
8037888: dec00204 addi sp,sp,8
803788c: f800283a ret
08037890 <alt_file_locked>:
* performed for devices. Filesystems are required to handle the ioctl() call
* themselves, and report the error from the filesystems open() function.
*/
static int alt_file_locked (alt_fd* fd)
{
8037890: defffd04 addi sp,sp,-12
8037894: df000215 stw fp,8(sp)
8037898: df000204 addi fp,sp,8
803789c: e13ffe15 stw r4,-8(fp)
/*
* Mark the file descriptor as belonging to a device.
*/
fd->fd_flags |= ALT_FD_DEV;
80378a0: e0bffe17 ldw r2,-8(fp)
80378a4: 10800217 ldw r2,8(r2)
80378a8: 10d00034 orhi r3,r2,16384
80378ac: e0bffe17 ldw r2,-8(fp)
80378b0: 10c00215 stw r3,8(r2)
/*
* Loop through all current file descriptors searching for one that's locked
* for exclusive access. If a match is found, generate an error.
*/
for (i = 0; i <= alt_max_fd; i++)
80378b4: e03fff15 stw zero,-4(fp)
80378b8: 00001a06 br 8037924 <alt_file_locked+0x94>
{
if ((alt_fd_list[i].dev == fd->dev) &&
80378bc: e0bfff17 ldw r2,-4(fp)
80378c0: 10c00324 muli r3,r2,12
80378c4: 00820174 movhi r2,2053
80378c8: 1885883a add r2,r3,r2
80378cc: 10f21a17 ldw r3,-14232(r2)
80378d0: e0bffe17 ldw r2,-8(fp)
80378d4: 10800017 ldw r2,0(r2)
80378d8: 18800f1e bne r3,r2,8037918 <alt_file_locked+0x88>
(alt_fd_list[i].fd_flags & ALT_FD_EXCL) &&
80378dc: e0bfff17 ldw r2,-4(fp)
80378e0: 10c00324 muli r3,r2,12
80378e4: 00820174 movhi r2,2053
80378e8: 1885883a add r2,r3,r2
80378ec: 10b21c17 ldw r2,-14224(r2)
if ((alt_fd_list[i].dev == fd->dev) &&
80378f0: 1000090e bge r2,zero,8037918 <alt_file_locked+0x88>
(&alt_fd_list[i] != fd))
80378f4: e0bfff17 ldw r2,-4(fp)
80378f8: 10c00324 muli r3,r2,12
80378fc: 00820174 movhi r2,2053
8037900: 10b21a04 addi r2,r2,-14232
8037904: 1885883a add r2,r3,r2
(alt_fd_list[i].fd_flags & ALT_FD_EXCL) &&
8037908: e0fffe17 ldw r3,-8(fp)
803790c: 18800226 beq r3,r2,8037918 <alt_file_locked+0x88>
{
return -EACCES;
8037910: 00bffcc4 movi r2,-13
8037914: 00000806 br 8037938 <alt_file_locked+0xa8>
for (i = 0; i <= alt_max_fd; i++)
8037918: e0bfff17 ldw r2,-4(fp)
803791c: 10800044 addi r2,r2,1
8037920: e0bfff15 stw r2,-4(fp)
8037924: d0a02617 ldw r2,-32616(gp)
8037928: 1007883a mov r3,r2
803792c: e0bfff17 ldw r2,-4(fp)
8037930: 18bfe22e bgeu r3,r2,80378bc <alt_file_locked+0x2c>
}
}
/* The device is not locked */
return 0;
8037934: 0005883a mov r2,zero
}
8037938: e037883a mov sp,fp
803793c: df000017 ldw fp,0(sp)
8037940: dec00104 addi sp,sp,4
8037944: f800283a ret
08037948 <open>:
*
* ALT_OPEN is mapped onto the open() system call in alt_syscall.h
*/
int ALT_OPEN (const char* file, int flags, int mode)
{
8037948: defff604 addi sp,sp,-40
803794c: dfc00915 stw ra,36(sp)
8037950: df000815 stw fp,32(sp)
8037954: df000804 addi fp,sp,32
8037958: e13ffa15 stw r4,-24(fp)
803795c: e17ff915 stw r5,-28(fp)
8037960: e1bff815 stw r6,-32(fp)
alt_dev* dev;
alt_fd* fd;
int index = -1;
8037964: 00bfffc4 movi r2,-1
8037968: e0bffe15 stw r2,-8(fp)
int status = -ENODEV;
803796c: 00bffb44 movi r2,-19
8037970: e0bffd15 stw r2,-12(fp)
int isafs = 0;
8037974: e03ffc15 stw zero,-16(fp)
/*
* Check the device list, to see if a device with a matching name is
* registered.
*/
if (!(dev = alt_find_dev (file, &alt_dev_list)))
8037978: d1602404 addi r5,gp,-32624
803797c: e13ffa17 ldw r4,-24(fp)
8037980: 80374040 call 8037404 <alt_find_dev>
8037984: e0bfff15 stw r2,-4(fp)
8037988: e0bfff17 ldw r2,-4(fp)
803798c: 1000051e bne r2,zero,80379a4 <open+0x5c>
{
/* No matching device, so try the filesystem list */
dev = alt_find_file (file);
8037990: e13ffa17 ldw r4,-24(fp)
8037994: 80428180 call 8042818 <alt_find_file>
8037998: e0bfff15 stw r2,-4(fp)
isafs = 1;
803799c: 00800044 movi r2,1
80379a0: e0bffc15 stw r2,-16(fp)
/*
* If a matching device or filesystem is found, allocate a file descriptor.
*/
if (dev)
80379a4: e0bfff17 ldw r2,-4(fp)
80379a8: 10002926 beq r2,zero,8037a50 <open+0x108>
{
if ((index = alt_get_fd (dev)) < 0)
80379ac: e13fff17 ldw r4,-4(fp)
80379b0: 80429200 call 8042920 <alt_get_fd>
80379b4: e0bffe15 stw r2,-8(fp)
80379b8: e0bffe17 ldw r2,-8(fp)
80379bc: 1000030e bge r2,zero,80379cc <open+0x84>
{
status = index;
80379c0: e0bffe17 ldw r2,-8(fp)
80379c4: e0bffd15 stw r2,-12(fp)
80379c8: 00002306 br 8037a58 <open+0x110>
}
else
{
fd = &alt_fd_list[index];
80379cc: e0bffe17 ldw r2,-8(fp)
80379d0: 10c00324 muli r3,r2,12
80379d4: 00820174 movhi r2,2053
80379d8: 10b21a04 addi r2,r2,-14232
80379dc: 1885883a add r2,r3,r2
80379e0: e0bffb15 stw r2,-20(fp)
fd->fd_flags = (flags & ~ALT_FD_FLAGS_MASK);
80379e4: e0fff917 ldw r3,-28(fp)
80379e8: 00900034 movhi r2,16384
80379ec: 10bfffc4 addi r2,r2,-1
80379f0: 1886703a and r3,r3,r2
80379f4: e0bffb17 ldw r2,-20(fp)
80379f8: 10c00215 stw r3,8(r2)
/* If this is a device, ensure it isn't already locked */
if (isafs || ((status = alt_file_locked (fd)) >= 0))
80379fc: e0bffc17 ldw r2,-16(fp)
8037a00: 1000051e bne r2,zero,8037a18 <open+0xd0>
8037a04: e13ffb17 ldw r4,-20(fp)
8037a08: 80378900 call 8037890 <alt_file_locked>
8037a0c: e0bffd15 stw r2,-12(fp)
8037a10: e0bffd17 ldw r2,-12(fp)
8037a14: 10001016 blt r2,zero,8037a58 <open+0x110>
/*
* If the device or filesystem provides an open() callback function,
* call it now to perform any device/filesystem specific operations.
*/
status = (dev->open) ? dev->open(fd, file, flags, mode): 0;
8037a18: e0bfff17 ldw r2,-4(fp)
8037a1c: 10800317 ldw r2,12(r2)
8037a20: 10000826 beq r2,zero,8037a44 <open+0xfc>
8037a24: e0bfff17 ldw r2,-4(fp)
8037a28: 10800317 ldw r2,12(r2)
8037a2c: e1fff817 ldw r7,-32(fp)
8037a30: e1bff917 ldw r6,-28(fp)
8037a34: e17ffa17 ldw r5,-24(fp)
8037a38: e13ffb17 ldw r4,-20(fp)
8037a3c: 103ee83a callr r2
8037a40: 00000106 br 8037a48 <open+0x100>
8037a44: 0005883a mov r2,zero
8037a48: e0bffd15 stw r2,-12(fp)
8037a4c: 00000206 br 8037a58 <open+0x110>
}
}
}
else
{
status = -ENODEV;
8037a50: 00bffb44 movi r2,-19
8037a54: e0bffd15 stw r2,-12(fp)
}
/* Allocation failed, so clean up and return an error */
if (status < 0)
8037a58: e0bffd17 ldw r2,-12(fp)
8037a5c: 1000090e bge r2,zero,8037a84 <open+0x13c>
{
alt_release_fd (index);
8037a60: e13ffe17 ldw r4,-8(fp)
8037a64: 8037e300 call 8037e30 <alt_release_fd>
ALT_ERRNO = -status;
8037a68: 80378540 call 8037854 <alt_get_errno>
8037a6c: 1007883a mov r3,r2
8037a70: e0bffd17 ldw r2,-12(fp)
8037a74: 0085c83a sub r2,zero,r2
8037a78: 18800015 stw r2,0(r3)
return -1;
8037a7c: 00bfffc4 movi r2,-1
8037a80: 00000106 br 8037a88 <open+0x140>
}
/* return the reference upon success */
return index;
8037a84: e0bffe17 ldw r2,-8(fp)
}
8037a88: e037883a mov sp,fp
8037a8c: dfc00117 ldw ra,4(sp)
8037a90: df000017 ldw fp,0(sp)
8037a94: dec00204 addi sp,sp,8
8037a98: f800283a ret
08037a9c <alt_printf>:
/*
* ALT printf function
*/
void
alt_printf(const char* fmt, ... )
{
8037a9c: defff204 addi sp,sp,-56
8037aa0: dfc00a15 stw ra,40(sp)
8037aa4: df000915 stw fp,36(sp)
8037aa8: df000904 addi fp,sp,36
8037aac: e13ff715 stw r4,-36(fp)
8037ab0: e1400215 stw r5,8(fp)
8037ab4: e1800315 stw r6,12(fp)
8037ab8: e1c00415 stw r7,16(fp)
va_list args;
va_start(args, fmt);
8037abc: e0800204 addi r2,fp,8
8037ac0: e0bff815 stw r2,-32(fp)
const char *w;
char c;
/* Process format string. */
w = fmt;
8037ac4: e0bff717 ldw r2,-36(fp)
8037ac8: e0bfff15 stw r2,-4(fp)
while ((c = *w++) != 0)
8037acc: 00006f06 br 8037c8c <alt_printf+0x1f0>
{
/* If not a format escape character, just print */
/* character. Otherwise, process format string. */
if (c != '%')
8037ad0: e0bffec7 ldb r2,-5(fp)
8037ad4: 10800960 cmpeqi r2,r2,37
8037ad8: 1000041e bne r2,zero,8037aec <alt_printf+0x50>
{
alt_putchar(c);
8037adc: e0bffec7 ldb r2,-5(fp)
8037ae0: 1009883a mov r4,r2
8037ae4: 8037cc80 call 8037cc8 <alt_putchar>
8037ae8: 00006806 br 8037c8c <alt_printf+0x1f0>
}
else
{
/* Get format character. If none */
/* available, processing is complete. */
if ((c = *w++) != 0)
8037aec: e0bfff17 ldw r2,-4(fp)
8037af0: 10c00044 addi r3,r2,1
8037af4: e0ffff15 stw r3,-4(fp)
8037af8: 10800003 ldbu r2,0(r2)
8037afc: e0bffec5 stb r2,-5(fp)
8037b00: e0bffec7 ldb r2,-5(fp)
8037b04: 10006926 beq r2,zero,8037cac <alt_printf+0x210>
{
if (c == '%')
8037b08: e0bffec7 ldb r2,-5(fp)
8037b0c: 10800958 cmpnei r2,r2,37
8037b10: 1000041e bne r2,zero,8037b24 <alt_printf+0x88>
{
/* Process "%" escape sequence. */
alt_putchar(c);
8037b14: e0bffec7 ldb r2,-5(fp)
8037b18: 1009883a mov r4,r2
8037b1c: 8037cc80 call 8037cc8 <alt_putchar>
8037b20: 00005a06 br 8037c8c <alt_printf+0x1f0>
}
else if (c == 'c')
8037b24: e0bffec7 ldb r2,-5(fp)
8037b28: 108018d8 cmpnei r2,r2,99
8037b2c: 1000081e bne r2,zero,8037b50 <alt_printf+0xb4>
{
int v = va_arg(args, int);
8037b30: e0bff817 ldw r2,-32(fp)
8037b34: 10c00104 addi r3,r2,4
8037b38: e0fff815 stw r3,-32(fp)
8037b3c: 10800017 ldw r2,0(r2)
8037b40: e0bffb15 stw r2,-20(fp)
alt_putchar(v);
8037b44: e13ffb17 ldw r4,-20(fp)
8037b48: 8037cc80 call 8037cc8 <alt_putchar>
8037b4c: 00004f06 br 8037c8c <alt_printf+0x1f0>
}
else if (c == 'x')
8037b50: e0bffec7 ldb r2,-5(fp)
8037b54: 10801e18 cmpnei r2,r2,120
8037b58: 1000341e bne r2,zero,8037c2c <alt_printf+0x190>
{
/* Process hexadecimal number format. */
unsigned long v = va_arg(args, unsigned long);
8037b5c: e0bff817 ldw r2,-32(fp)
8037b60: 10c00104 addi r3,r2,4
8037b64: e0fff815 stw r3,-32(fp)
8037b68: 10800017 ldw r2,0(r2)
8037b6c: e0bffa15 stw r2,-24(fp)
unsigned long digit;
int digit_shift;
/* If the number value is zero, just print and continue. */
if (v == 0)
8037b70: e0bffa17 ldw r2,-24(fp)
8037b74: 1000031e bne r2,zero,8037b84 <alt_printf+0xe8>
{
alt_putchar('0');
8037b78: 01000c04 movi r4,48
8037b7c: 8037cc80 call 8037cc8 <alt_putchar>
continue;
8037b80: 00004206 br 8037c8c <alt_printf+0x1f0>
}
/* Find first non-zero digit. */
digit_shift = 28;
8037b84: 00800704 movi r2,28
8037b88: e0bffd15 stw r2,-12(fp)
while (!(v & (0xF << digit_shift)))
8037b8c: 00000306 br 8037b9c <alt_printf+0x100>
digit_shift -= 4;
8037b90: e0bffd17 ldw r2,-12(fp)
8037b94: 10bfff04 addi r2,r2,-4
8037b98: e0bffd15 stw r2,-12(fp)
while (!(v & (0xF << digit_shift)))
8037b9c: 00c003c4 movi r3,15
8037ba0: e0bffd17 ldw r2,-12(fp)
8037ba4: 1884983a sll r2,r3,r2
8037ba8: 1007883a mov r3,r2
8037bac: e0bffa17 ldw r2,-24(fp)
8037bb0: 1884703a and r2,r3,r2
8037bb4: 103ff626 beq r2,zero,8037b90 <alt_printf+0xf4>
/* Print digits. */
for (; digit_shift >= 0; digit_shift -= 4)
8037bb8: 00001906 br 8037c20 <alt_printf+0x184>
{
digit = (v & (0xF << digit_shift)) >> digit_shift;
8037bbc: 00c003c4 movi r3,15
8037bc0: e0bffd17 ldw r2,-12(fp)
8037bc4: 1884983a sll r2,r3,r2
8037bc8: 1007883a mov r3,r2
8037bcc: e0bffa17 ldw r2,-24(fp)
8037bd0: 1886703a and r3,r3,r2
8037bd4: e0bffd17 ldw r2,-12(fp)
8037bd8: 1884d83a srl r2,r3,r2
8037bdc: e0bff915 stw r2,-28(fp)
if (digit <= 9)
8037be0: e0bff917 ldw r2,-28(fp)
8037be4: 108002a8 cmpgeui r2,r2,10
8037be8: 1000041e bne r2,zero,8037bfc <alt_printf+0x160>
c = '0' + digit;
8037bec: e0bff917 ldw r2,-28(fp)
8037bf0: 10800c04 addi r2,r2,48
8037bf4: e0bffec5 stb r2,-5(fp)
8037bf8: 00000306 br 8037c08 <alt_printf+0x16c>
else
c = 'a' + digit - 10;
8037bfc: e0bff917 ldw r2,-28(fp)
8037c00: 108015c4 addi r2,r2,87
8037c04: e0bffec5 stb r2,-5(fp)
alt_putchar(c);
8037c08: e0bffec7 ldb r2,-5(fp)
8037c0c: 1009883a mov r4,r2
8037c10: 8037cc80 call 8037cc8 <alt_putchar>
for (; digit_shift >= 0; digit_shift -= 4)
8037c14: e0bffd17 ldw r2,-12(fp)
8037c18: 10bfff04 addi r2,r2,-4
8037c1c: e0bffd15 stw r2,-12(fp)
8037c20: e0bffd17 ldw r2,-12(fp)
8037c24: 103fe50e bge r2,zero,8037bbc <alt_printf+0x120>
8037c28: 00001806 br 8037c8c <alt_printf+0x1f0>
}
}
else if (c == 's')
8037c2c: e0bffec7 ldb r2,-5(fp)
8037c30: 10801cd8 cmpnei r2,r2,115
8037c34: 1000151e bne r2,zero,8037c8c <alt_printf+0x1f0>
{
/* Process string format. */
char *s = va_arg(args, char *);
8037c38: e0bff817 ldw r2,-32(fp)
8037c3c: 10c00104 addi r3,r2,4
8037c40: e0fff815 stw r3,-32(fp)
8037c44: 10800017 ldw r2,0(r2)
8037c48: e0bffc15 stw r2,-16(fp)
while(*s)
8037c4c: 00000906 br 8037c74 <alt_printf+0x1d8>
alt_putchar(*s++);
8037c50: e0bffc17 ldw r2,-16(fp)
8037c54: 10c00044 addi r3,r2,1
8037c58: e0fffc15 stw r3,-16(fp)
8037c5c: 10800003 ldbu r2,0(r2)
8037c60: 10803fcc andi r2,r2,255
8037c64: 1080201c xori r2,r2,128
8037c68: 10bfe004 addi r2,r2,-128
8037c6c: 1009883a mov r4,r2
8037c70: 8037cc80 call 8037cc8 <alt_putchar>
while(*s)
8037c74: e0bffc17 ldw r2,-16(fp)
8037c78: 10800003 ldbu r2,0(r2)
8037c7c: 10803fcc andi r2,r2,255
8037c80: 1080201c xori r2,r2,128
8037c84: 10bfe004 addi r2,r2,-128
8037c88: 103ff11e bne r2,zero,8037c50 <alt_printf+0x1b4>
while ((c = *w++) != 0)
8037c8c: e0bfff17 ldw r2,-4(fp)
8037c90: 10c00044 addi r3,r2,1
8037c94: e0ffff15 stw r3,-4(fp)
8037c98: 10800003 ldbu r2,0(r2)
8037c9c: e0bffec5 stb r2,-5(fp)
8037ca0: e0bffec7 ldb r2,-5(fp)
8037ca4: 103f8a1e bne r2,zero,8037ad0 <alt_printf+0x34>
}
}
#ifdef ALT_SEMIHOSTING
alt_putbufflush();
#endif
}
8037ca8: 00000106 br 8037cb0 <alt_printf+0x214>
break;
8037cac: 0001883a nop
}
8037cb0: 0001883a nop
8037cb4: e037883a mov sp,fp
8037cb8: dfc00117 ldw ra,4(sp)
8037cbc: df000017 ldw fp,0(sp)
8037cc0: dec00504 addi sp,sp,20
8037cc4: f800283a ret
08037cc8 <alt_putchar>:
* Uses the ALT_DRIVER_WRITE() macro to call directly to driver if available.
* Otherwise, uses newlib provided putchar() routine.
*/
int
alt_putchar(int c)
{
8037cc8: defffd04 addi sp,sp,-12
8037ccc: dfc00215 stw ra,8(sp)
8037cd0: df000115 stw fp,4(sp)
8037cd4: df000104 addi fp,sp,4
8037cd8: e13fff15 stw r4,-4(fp)
if (ALT_DRIVER_WRITE(ALT_STDOUT_DEV, &c1, 1, 0) == -1) {
return -1;
}
return c;
#else
return putchar(c);
8037cdc: e13fff17 ldw r4,-4(fp)
8037ce0: 8002cb80 call 8002cb8 <putchar>
#endif
#endif
}
8037ce4: e037883a mov sp,fp
8037ce8: dfc00117 ldw ra,4(sp)
8037cec: df000017 ldw fp,0(sp)
8037cf0: dec00204 addi sp,sp,8
8037cf4: f800283a ret
08037cf8 <alt_get_errno>:
{
8037cf8: defffe04 addi sp,sp,-8
8037cfc: dfc00115 stw ra,4(sp)
8037d00: df000015 stw fp,0(sp)
8037d04: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
8037d08: d0a02717 ldw r2,-32612(gp)
8037d0c: 10000326 beq r2,zero,8037d1c <alt_get_errno+0x24>
8037d10: d0a02717 ldw r2,-32612(gp)
8037d14: 103ee83a callr r2
8037d18: 00000106 br 8037d20 <alt_get_errno+0x28>
8037d1c: d0a04204 addi r2,gp,-32504
}
8037d20: e037883a mov sp,fp
8037d24: dfc00117 ldw ra,4(sp)
8037d28: df000017 ldw fp,0(sp)
8037d2c: dec00204 addi sp,sp,8
8037d30: f800283a ret
08037d34 <alt_read>:
}
#else /* !ALT_USE_DIRECT_DRIVERS */
int ALT_READ (int file, void *ptr, size_t len)
{
8037d34: defff904 addi sp,sp,-28
8037d38: dfc00615 stw ra,24(sp)
8037d3c: df000515 stw fp,20(sp)
8037d40: df000504 addi fp,sp,20
8037d44: e13ffd15 stw r4,-12(fp)
8037d48: e17ffc15 stw r5,-16(fp)
8037d4c: e1bffb15 stw r6,-20(fp)
* A common error case is that when the file descriptor was created, the call
* to open() failed resulting in a negative file descriptor. This is trapped
* below so that we don't try and process an invalid file descriptor.
*/
fd = (file < 0) ? NULL : &alt_fd_list[file];
8037d50: e0bffd17 ldw r2,-12(fp)
8037d54: 10000616 blt r2,zero,8037d70 <alt_read+0x3c>
8037d58: e0bffd17 ldw r2,-12(fp)
8037d5c: 10c00324 muli r3,r2,12
8037d60: 00820174 movhi r2,2053
8037d64: 10b21a04 addi r2,r2,-14232
8037d68: 1885883a add r2,r3,r2
8037d6c: 00000106 br 8037d74 <alt_read+0x40>
8037d70: 0005883a mov r2,zero
8037d74: e0bfff15 stw r2,-4(fp)
if (fd)
8037d78: e0bfff17 ldw r2,-4(fp)
8037d7c: 10002226 beq r2,zero,8037e08 <alt_read+0xd4>
* If the file has not been opened with read access, or if the driver does
* not provide an implementation of read(), generate an error. Otherwise
* call the drivers read() function to process the request.
*/
if (((fd->fd_flags & O_ACCMODE) != O_WRONLY) &&
8037d80: e0bfff17 ldw r2,-4(fp)
8037d84: 10800217 ldw r2,8(r2)
8037d88: 108000cc andi r2,r2,3
8037d8c: 10800060 cmpeqi r2,r2,1
8037d90: 1000181e bne r2,zero,8037df4 <alt_read+0xc0>
(fd->dev->read))
8037d94: e0bfff17 ldw r2,-4(fp)
8037d98: 10800017 ldw r2,0(r2)
8037d9c: 10800517 ldw r2,20(r2)
if (((fd->fd_flags & O_ACCMODE) != O_WRONLY) &&
8037da0: 10001426 beq r2,zero,8037df4 <alt_read+0xc0>
{
if ((rval = fd->dev->read(fd, ptr, len)) < 0)
8037da4: e0bfff17 ldw r2,-4(fp)
8037da8: 10800017 ldw r2,0(r2)
8037dac: 10800517 ldw r2,20(r2)
8037db0: e0fffb17 ldw r3,-20(fp)
8037db4: 180d883a mov r6,r3
8037db8: e17ffc17 ldw r5,-16(fp)
8037dbc: e13fff17 ldw r4,-4(fp)
8037dc0: 103ee83a callr r2
8037dc4: e0bffe15 stw r2,-8(fp)
8037dc8: e0bffe17 ldw r2,-8(fp)
8037dcc: 1000070e bge r2,zero,8037dec <alt_read+0xb8>
{
ALT_ERRNO = -rval;
8037dd0: 8037cf80 call 8037cf8 <alt_get_errno>
8037dd4: 1007883a mov r3,r2
8037dd8: e0bffe17 ldw r2,-8(fp)
8037ddc: 0085c83a sub r2,zero,r2
8037de0: 18800015 stw r2,0(r3)
return -1;
8037de4: 00bfffc4 movi r2,-1
8037de8: 00000c06 br 8037e1c <alt_read+0xe8>
}
return rval;
8037dec: e0bffe17 ldw r2,-8(fp)
8037df0: 00000a06 br 8037e1c <alt_read+0xe8>
}
else
{
ALT_ERRNO = EACCES;
8037df4: 8037cf80 call 8037cf8 <alt_get_errno>
8037df8: 1007883a mov r3,r2
8037dfc: 00800344 movi r2,13
8037e00: 18800015 stw r2,0(r3)
8037e04: 00000406 br 8037e18 <alt_read+0xe4>
}
}
else
{
ALT_ERRNO = EBADFD;
8037e08: 8037cf80 call 8037cf8 <alt_get_errno>
8037e0c: 1007883a mov r3,r2
8037e10: 00801444 movi r2,81
8037e14: 18800015 stw r2,0(r3)
}
return -1;
8037e18: 00bfffc4 movi r2,-1
}
8037e1c: e037883a mov sp,fp
8037e20: dfc00117 ldw ra,4(sp)
8037e24: df000017 ldw fp,0(sp)
8037e28: dec00204 addi sp,sp,8
8037e2c: f800283a ret
08037e30 <alt_release_fd>:
* File descriptors correcponding to standard in, standard out and standard
* error cannont be released backed to the pool. They are always reserved.
*/
void alt_release_fd (int fd)
{
8037e30: defffe04 addi sp,sp,-8
8037e34: df000115 stw fp,4(sp)
8037e38: df000104 addi fp,sp,4
8037e3c: e13fff15 stw r4,-4(fp)
if (fd > 2)
8037e40: e0bfff17 ldw r2,-4(fp)
8037e44: 108000d0 cmplti r2,r2,3
8037e48: 10000a1e bne r2,zero,8037e74 <alt_release_fd+0x44>
{
alt_fd_list[fd].fd_flags = 0;
8037e4c: e0bfff17 ldw r2,-4(fp)
8037e50: 10c00324 muli r3,r2,12
8037e54: 00820174 movhi r2,2053
8037e58: 1885883a add r2,r3,r2
8037e5c: 10321c15 stw zero,-14224(r2)
alt_fd_list[fd].dev = 0;
8037e60: e0bfff17 ldw r2,-4(fp)
8037e64: 10c00324 muli r3,r2,12
8037e68: 00820174 movhi r2,2053
8037e6c: 1885883a add r2,r3,r2
8037e70: 10321a15 stw zero,-14232(r2)
}
}
8037e74: 0001883a nop
8037e78: e037883a mov sp,fp
8037e7c: df000017 ldw fp,0(sp)
8037e80: dec00104 addi sp,sp,4
8037e84: f800283a ret
08037e88 <alt_remap_cached>:
* Return a pointer that should be used to access the cached memory.
*/
void*
alt_remap_cached(volatile void* ptr, alt_u32 len)
{
8037e88: defffd04 addi sp,sp,-12
8037e8c: df000215 stw fp,8(sp)
8037e90: df000204 addi fp,sp,8
8037e94: e13fff15 stw r4,-4(fp)
8037e98: e17ffe15 stw r5,-8(fp)
#if ALT_CPU_DCACHE_SIZE > 0
#ifdef ALT_CPU_DCACHE_BYPASS_MASK
return (void*) (((alt_u32)ptr) & ~ALT_CPU_DCACHE_BYPASS_MASK);
8037e9c: e0ffff17 ldw r3,-4(fp)
8037ea0: 00a00034 movhi r2,32768
8037ea4: 10bfffc4 addi r2,r2,-1
8037ea8: 1884703a and r2,r3,r2
#endif /* No address mask option enabled. */
#else /* No data cache */
/* Nothing needs to be done to the pointer. */
return (void*) ptr;
#endif /* No data cache */
}
8037eac: e037883a mov sp,fp
8037eb0: df000017 ldw fp,0(sp)
8037eb4: dec00104 addi sp,sp,4
8037eb8: f800283a ret
08037ebc <alt_alarm_stop>:
* alarms. Alternatively an alarm can unregister itself by returning zero when
* the alarm executes.
*/
void alt_alarm_stop (alt_alarm* alarm)
{
8037ebc: defffa04 addi sp,sp,-24
8037ec0: df000515 stw fp,20(sp)
8037ec4: df000504 addi fp,sp,20
8037ec8: e13ffb15 stw r4,-20(fp)
NIOS2_READ_STATUS (context);
8037ecc: 0005303a rdctl r2,status
8037ed0: e0bffc15 stw r2,-16(fp)
NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK);
8037ed4: e0fffc17 ldw r3,-16(fp)
8037ed8: 00bfff84 movi r2,-2
8037edc: 1884703a and r2,r3,r2
8037ee0: 1001703a wrctl status,r2
return context;
8037ee4: e0bffc17 ldw r2,-16(fp)
alt_irq_context irq_context;
irq_context = alt_irq_disable_all();
8037ee8: e0bfff15 stw r2,-4(fp)
alt_llist_remove (&alarm->llist);
8037eec: e0bffb17 ldw r2,-20(fp)
8037ef0: e0bffd15 stw r2,-12(fp)
* input argument is the element to remove.
*/
static ALT_INLINE void ALT_ALWAYS_INLINE alt_llist_remove(alt_llist* entry)
{
entry->next->previous = entry->previous;
8037ef4: e0bffd17 ldw r2,-12(fp)
8037ef8: 10800017 ldw r2,0(r2)
8037efc: e0fffd17 ldw r3,-12(fp)
8037f00: 18c00117 ldw r3,4(r3)
8037f04: 10c00115 stw r3,4(r2)
entry->previous->next = entry->next;
8037f08: e0bffd17 ldw r2,-12(fp)
8037f0c: 10800117 ldw r2,4(r2)
8037f10: e0fffd17 ldw r3,-12(fp)
8037f14: 18c00017 ldw r3,0(r3)
8037f18: 10c00015 stw r3,0(r2)
/*
* Set the entry to point to itself, so that any further calls to
* alt_llist_remove() are harmless.
*/
entry->previous = entry;
8037f1c: e0bffd17 ldw r2,-12(fp)
8037f20: e0fffd17 ldw r3,-12(fp)
8037f24: 10c00115 stw r3,4(r2)
entry->next = entry;
8037f28: e0bffd17 ldw r2,-12(fp)
8037f2c: e0fffd17 ldw r3,-12(fp)
8037f30: 10c00015 stw r3,0(r2)
8037f34: e0bfff17 ldw r2,-4(fp)
8037f38: e0bffe15 stw r2,-8(fp)
NIOS2_WRITE_STATUS (context);
8037f3c: e0bffe17 ldw r2,-8(fp)
8037f40: 1001703a wrctl status,r2
alt_irq_enable_all (irq_context);
}
8037f44: 0001883a nop
8037f48: e037883a mov sp,fp
8037f4c: df000017 ldw fp,0(sp)
8037f50: dec00104 addi sp,sp,4
8037f54: f800283a ret
08037f58 <alt_tick>:
*
* alt_tick() is expected to run at interrupt level.
*/
void alt_tick (void)
{
8037f58: defffb04 addi sp,sp,-20
8037f5c: dfc00415 stw ra,16(sp)
8037f60: df000315 stw fp,12(sp)
8037f64: df000304 addi fp,sp,12
alt_alarm* next;
alt_alarm* alarm = (alt_alarm*) alt_alarm_list.next;
8037f68: d0a02917 ldw r2,-32604(gp)
8037f6c: e0bfff15 stw r2,-4(fp)
alt_u32 next_callback;
/* update the tick counter */
_alt_nticks++;
8037f70: d0a08e17 ldw r2,-32200(gp)
8037f74: 10800044 addi r2,r2,1
8037f78: d0a08e15 stw r2,-32200(gp)
/* process the registered callbacks */
while (alarm != (alt_alarm*) &alt_alarm_list)
8037f7c: 00002e06 br 8038038 <alt_tick+0xe0>
{
next = (alt_alarm*) alarm->llist.next;
8037f80: e0bfff17 ldw r2,-4(fp)
8037f84: 10800017 ldw r2,0(r2)
8037f88: e0bffe15 stw r2,-8(fp)
/*
* Upon the tick-counter rolling over it is safe to clear the
* roll-over flag; once the flag is cleared this (or subsequnt)
* tick events are enabled to generate an alarm event.
*/
if ((alarm->rollover) && (_alt_nticks == 0))
8037f8c: e0bfff17 ldw r2,-4(fp)
8037f90: 10800403 ldbu r2,16(r2)
8037f94: 10803fcc andi r2,r2,255
8037f98: 10000426 beq r2,zero,8037fac <alt_tick+0x54>
8037f9c: d0a08e17 ldw r2,-32200(gp)
8037fa0: 1000021e bne r2,zero,8037fac <alt_tick+0x54>
{
alarm->rollover = 0;
8037fa4: e0bfff17 ldw r2,-4(fp)
8037fa8: 10000405 stb zero,16(r2)
}
/* if the alarm period has expired, make the callback */
if ((alarm->time <= _alt_nticks) && (alarm->rollover == 0))
8037fac: e0bfff17 ldw r2,-4(fp)
8037fb0: 10800217 ldw r2,8(r2)
8037fb4: d0e08e17 ldw r3,-32200(gp)
8037fb8: 18801d36 bltu r3,r2,8038030 <alt_tick+0xd8>
8037fbc: e0bfff17 ldw r2,-4(fp)
8037fc0: 10800403 ldbu r2,16(r2)
8037fc4: 10803fcc andi r2,r2,255
8037fc8: 1000191e bne r2,zero,8038030 <alt_tick+0xd8>
{
next_callback = alarm->callback (alarm->context);
8037fcc: e0bfff17 ldw r2,-4(fp)
8037fd0: 10800317 ldw r2,12(r2)
8037fd4: e0ffff17 ldw r3,-4(fp)
8037fd8: 18c00517 ldw r3,20(r3)
8037fdc: 1809883a mov r4,r3
8037fe0: 103ee83a callr r2
8037fe4: e0bffd15 stw r2,-12(fp)
/* deactivate the alarm if the return value is zero */
if (next_callback == 0)
8037fe8: e0bffd17 ldw r2,-12(fp)
8037fec: 1000031e bne r2,zero,8037ffc <alt_tick+0xa4>
{
alt_alarm_stop (alarm);
8037ff0: e13fff17 ldw r4,-4(fp)
8037ff4: 8037ebc0 call 8037ebc <alt_alarm_stop>
8037ff8: 00000d06 br 8038030 <alt_tick+0xd8>
}
else
{
alarm->time += next_callback;
8037ffc: e0bfff17 ldw r2,-4(fp)
8038000: 10c00217 ldw r3,8(r2)
8038004: e0bffd17 ldw r2,-12(fp)
8038008: 1887883a add r3,r3,r2
803800c: e0bfff17 ldw r2,-4(fp)
8038010: 10c00215 stw r3,8(r2)
/*
* If the desired alarm time causes a roll-over, set the rollover
* flag. This will prevent the subsequent tick event from causing
* an alarm too early.
*/
if(alarm->time < _alt_nticks)
8038014: e0bfff17 ldw r2,-4(fp)
8038018: 10c00217 ldw r3,8(r2)
803801c: d0a08e17 ldw r2,-32200(gp)
8038020: 1880032e bgeu r3,r2,8038030 <alt_tick+0xd8>
{
alarm->rollover = 1;
8038024: e0bfff17 ldw r2,-4(fp)
8038028: 00c00044 movi r3,1
803802c: 10c00405 stb r3,16(r2)
}
}
}
alarm = next;
8038030: e0bffe17 ldw r2,-8(fp)
8038034: e0bfff15 stw r2,-4(fp)
while (alarm != (alt_alarm*) &alt_alarm_list)
8038038: e0ffff17 ldw r3,-4(fp)
803803c: d0a02904 addi r2,gp,-32604
8038040: 18bfcf1e bne r3,r2,8037f80 <alt_tick+0x28>
/*
* Update the operating system specific timer facilities.
*/
ALT_OS_TIME_TICK();
8038044: 8010ad80 call 8010ad8 <OSTimeTick>
}
8038048: 0001883a nop
803804c: e037883a mov sp,fp
8038050: dfc00117 ldw ra,4(sp)
8038054: df000017 ldw fp,0(sp)
8038058: dec00204 addi sp,sp,8
803805c: f800283a ret
08038060 <alt_uncached_free>:
* Free a block of uncached memory.
*/
void
alt_uncached_free(volatile void* ptr)
{
8038060: defffd04 addi sp,sp,-12
8038064: dfc00215 stw ra,8(sp)
8038068: df000115 stw fp,4(sp)
803806c: df000104 addi fp,sp,4
8038070: e13fff15 stw r4,-4(fp)
#if ALT_CPU_DCACHE_SIZE > 0
#ifdef ALT_CPU_DCACHE_BYPASS_MASK
free((void*) (((alt_u32)ptr) & ~ALT_CPU_DCACHE_BYPASS_MASK));
8038074: e0ffff17 ldw r3,-4(fp)
8038078: 00a00034 movhi r2,32768
803807c: 10bfffc4 addi r2,r2,-1
8038080: 1884703a and r2,r3,r2
8038084: 1009883a mov r4,r2
8038088: 8042ca80 call 8042ca8 <free>
#endif /* No address mask option enabled. */
#else /* No data cache */
/* Nothing needs to be done to the pointer. */
free((void*)ptr);
#endif /* No data cache */
}
803808c: 0001883a nop
8038090: e037883a mov sp,fp
8038094: dfc00117 ldw ra,4(sp)
8038098: df000017 ldw fp,0(sp)
803809c: dec00204 addi sp,sp,8
80380a0: f800283a ret
080380a4 <alt_uncached_malloc>:
* Return pointer to the block of memory or NULL if can't allocate it.
*/
volatile void*
alt_uncached_malloc(size_t size)
{
80380a4: defffa04 addi sp,sp,-24
80380a8: dfc00515 stw ra,20(sp)
80380ac: df000415 stw fp,16(sp)
80380b0: df000404 addi fp,sp,16
80380b4: e13ffc15 stw r4,-16(fp)
void* ptr;
/* Round up size to an integer number of data cache lines. Required to guarantee that
* cacheable and non-cacheable data won't be mixed on the same cache line. */
const size_t num_lines = (size + ALT_CPU_DCACHE_LINE_SIZE - 1) / ALT_CPU_DCACHE_LINE_SIZE;
80380b8: e0bffc17 ldw r2,-16(fp)
80380bc: 108007c4 addi r2,r2,31
80380c0: 1004d17a srli r2,r2,5
80380c4: e0bfff15 stw r2,-4(fp)
const size_t aligned_size = num_lines * ALT_CPU_DCACHE_LINE_SIZE;
80380c8: e0bfff17 ldw r2,-4(fp)
80380cc: 1004917a slli r2,r2,5
80380d0: e0bffe15 stw r2,-8(fp)
/* Use memalign() Newlib routine to allocate starting on a data cache aligned address.
* Required to guarantee that cacheable and non-cacheable data won't be mixed on the
* same cache line. */
ptr = memalign(ALT_CPU_DCACHE_LINE_SIZE, aligned_size);
80380d4: e17ffe17 ldw r5,-8(fp)
80380d8: 01000804 movi r4,32
80380dc: 8042af00 call 8042af0 <memalign>
80380e0: e0bffd15 stw r2,-12(fp)
if (ptr == NULL) {
80380e4: e0bffd17 ldw r2,-12(fp)
80380e8: 1000021e bne r2,zero,80380f4 <alt_uncached_malloc+0x50>
return NULL; /* Out of memory */
80380ec: 0005883a mov r2,zero
80380f0: 00000506 br 8038108 <alt_uncached_malloc+0x64>
}
/* Ensure that the memory region isn't in the data cache. */
alt_dcache_flush(ptr, aligned_size);
80380f4: e17ffe17 ldw r5,-8(fp)
80380f8: e13ffd17 ldw r4,-12(fp)
80380fc: 80371c00 call 80371c0 <alt_dcache_flush>
return (volatile void*) (((alt_u32)ptr) | ALT_CPU_DCACHE_BYPASS_MASK);
8038100: e0bffd17 ldw r2,-12(fp)
8038104: 10a00034 orhi r2,r2,32768
#endif /* No address mask option enabled. */
#else /* No data cache */
/* Just use regular malloc. */
return malloc(size);
#endif /* No data cache */
}
8038108: e037883a mov sp,fp
803810c: dfc00117 ldw ra,4(sp)
8038110: df000017 ldw fp,0(sp)
8038114: dec00204 addi sp,sp,8
8038118: f800283a ret
0803811c <usleep>:
#if defined (__GNUC__) && __GNUC__ >= 4
int ALT_USLEEP (useconds_t us)
#else
unsigned int ALT_USLEEP (unsigned int us)
#endif
{
803811c: defffa04 addi sp,sp,-24
8038120: dfc00515 stw ra,20(sp)
8038124: df000415 stw fp,16(sp)
8038128: dc000315 stw r16,12(sp)
803812c: df000404 addi fp,sp,16
8038130: e13ffc15 stw r4,-16(fp)
* If the O/S hasn't started yet, then we delay using a busy loop, rather than
* OSTimeDly (since this would fail). The use of a busy loop is acceptable,
* since the system is still running in a single-threaded mode.
*/
if (OSRunning == OS_FALSE)
8038134: d0a04b43 ldbu r2,-32467(gp)
8038138: 10803fcc andi r2,r2,255
803813c: 1000031e bne r2,zero,803814c <usleep+0x30>
{
return alt_busy_sleep (us);
8038140: e13ffc17 ldw r4,-16(fp)
8038144: 8036f5c0 call 8036f5c <alt_busy_sleep>
8038148: 00003306 br 8038218 <usleep+0xfc>
return _alt_tick_rate;
803814c: d0a08d17 ldw r2,-32204(gp)
/*
* Calculate the number of whole system clock ticks to delay.
*/
tick_rate = alt_ticks_per_second ();
8038150: e0bffd15 stw r2,-12(fp)
ticks = (us/ALT_US)* tick_rate + ((us%ALT_US)*tick_rate)/ALT_US;
8038154: e0bffc17 ldw r2,-16(fp)
8038158: 014003f4 movhi r5,15
803815c: 29509004 addi r5,r5,16960
8038160: 1009883a mov r4,r2
8038164: 800cff80 call 800cff8 <__udivsi3>
8038168: 1007883a mov r3,r2
803816c: e0bffd17 ldw r2,-12(fp)
8038170: 18a1383a mul r16,r3,r2
8038174: e0bffc17 ldw r2,-16(fp)
8038178: 014003f4 movhi r5,15
803817c: 29509004 addi r5,r5,16960
8038180: 1009883a mov r4,r2
8038184: 800d05c0 call 800d05c <__umodsi3>
8038188: 1007883a mov r3,r2
803818c: e0bffd17 ldw r2,-12(fp)
8038190: 1885383a mul r2,r3,r2
8038194: 014003f4 movhi r5,15
8038198: 29509004 addi r5,r5,16960
803819c: 1009883a mov r4,r2
80381a0: 800cff80 call 800cff8 <__udivsi3>
80381a4: 8085883a add r2,r16,r2
80381a8: e0bffe15 stw r2,-8(fp)
* OSTimeDly can only delay for a maximum of 0xffff ticks, so if the requested
* delay is greater than that, we need to break it down into a number of
* seperate delays.
*/
while (ticks > 0xffff)
80381ac: 00000706 br 80381cc <usleep+0xb0>
{
OSTimeDly(0xffff);
80381b0: 013fffd4 movui r4,65535
80381b4: 801730c0 call 801730c <OSTimeDly>
ticks -= 0xffff;
80381b8: e0fffe17 ldw r3,-8(fp)
80381bc: 00bffff4 movhi r2,65535
80381c0: 10800044 addi r2,r2,1
80381c4: 1885883a add r2,r3,r2
80381c8: e0bffe15 stw r2,-8(fp)
while (ticks > 0xffff)
80381cc: e0bffe17 ldw r2,-8(fp)
80381d0: 00ffffd4 movui r3,65535
80381d4: 18bff636 bltu r3,r2,80381b0 <usleep+0x94>
}
OSTimeDly ((INT16U) (ticks));
80381d8: e0bffe17 ldw r2,-8(fp)
80381dc: 10bfffcc andi r2,r2,65535
80381e0: 1009883a mov r4,r2
80381e4: 801730c0 call 801730c <OSTimeDly>
/*
* Now delay by the remainder using a busy loop. This is here in order to
* provide very short delays of less than one clock tick.
*/
alt_busy_sleep (us%(ALT_US/tick_rate));
80381e8: e17ffd17 ldw r5,-12(fp)
80381ec: 010003f4 movhi r4,15
80381f0: 21109004 addi r4,r4,16960
80381f4: 800cff80 call 800cff8 <__udivsi3>
80381f8: 1007883a mov r3,r2
80381fc: e0bffc17 ldw r2,-16(fp)
8038200: 180b883a mov r5,r3
8038204: 1009883a mov r4,r2
8038208: 800d05c0 call 800d05c <__umodsi3>
803820c: 1009883a mov r4,r2
8038210: 8036f5c0 call 8036f5c <alt_busy_sleep>
return 0;
8038214: 0005883a mov r2,zero
}
8038218: e6ffff04 addi sp,fp,-4
803821c: dfc00217 ldw ra,8(sp)
8038220: df000117 ldw fp,4(sp)
8038224: dc000017 ldw r16,0(sp)
8038228: dec00304 addi sp,sp,12
803822c: f800283a ret
08038230 <alt_get_errno>:
{
8038230: defffe04 addi sp,sp,-8
8038234: dfc00115 stw ra,4(sp)
8038238: df000015 stw fp,0(sp)
803823c: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
8038240: d0a02717 ldw r2,-32612(gp)
8038244: 10000326 beq r2,zero,8038254 <alt_get_errno+0x24>
8038248: d0a02717 ldw r2,-32612(gp)
803824c: 103ee83a callr r2
8038250: 00000106 br 8038258 <alt_get_errno+0x28>
8038254: d0a04204 addi r2,gp,-32504
}
8038258: e037883a mov sp,fp
803825c: dfc00117 ldw ra,4(sp)
8038260: df000017 ldw fp,0(sp)
8038264: dec00204 addi sp,sp,8
8038268: f800283a ret
0803826c <alt_write>:
}
#else /* !ALT_USE_DIRECT_DRIVERS */
int ALT_WRITE (int file, const void *ptr, size_t len)
{
803826c: defff904 addi sp,sp,-28
8038270: dfc00615 stw ra,24(sp)
8038274: df000515 stw fp,20(sp)
8038278: df000504 addi fp,sp,20
803827c: e13ffd15 stw r4,-12(fp)
8038280: e17ffc15 stw r5,-16(fp)
8038284: e1bffb15 stw r6,-20(fp)
* A common error case is that when the file descriptor was created, the call
* to open() failed resulting in a negative file descriptor. This is trapped
* below so that we don't try and process an invalid file descriptor.
*/
fd = (file < 0) ? NULL : &alt_fd_list[file];
8038288: e0bffd17 ldw r2,-12(fp)
803828c: 10000616 blt r2,zero,80382a8 <alt_write+0x3c>
8038290: e0bffd17 ldw r2,-12(fp)
8038294: 10c00324 muli r3,r2,12
8038298: 00820174 movhi r2,2053
803829c: 10b21a04 addi r2,r2,-14232
80382a0: 1885883a add r2,r3,r2
80382a4: 00000106 br 80382ac <alt_write+0x40>
80382a8: 0005883a mov r2,zero
80382ac: e0bfff15 stw r2,-4(fp)
if (fd)
80382b0: e0bfff17 ldw r2,-4(fp)
80382b4: 10002126 beq r2,zero,803833c <alt_write+0xd0>
* If the file has not been opened with write access, or if the driver does
* not provide an implementation of write(), generate an error. Otherwise
* call the drivers write() function to process the request.
*/
if (((fd->fd_flags & O_ACCMODE) != O_RDONLY) && fd->dev->write)
80382b8: e0bfff17 ldw r2,-4(fp)
80382bc: 10800217 ldw r2,8(r2)
80382c0: 108000cc andi r2,r2,3
80382c4: 10001826 beq r2,zero,8038328 <alt_write+0xbc>
80382c8: e0bfff17 ldw r2,-4(fp)
80382cc: 10800017 ldw r2,0(r2)
80382d0: 10800617 ldw r2,24(r2)
80382d4: 10001426 beq r2,zero,8038328 <alt_write+0xbc>
{
/* ALT_LOG - see altera_hal/HAL/inc/sys/alt_log_printf.h */
ALT_LOG_WRITE_FUNCTION(ptr,len);
if ((rval = fd->dev->write(fd, ptr, len)) < 0)
80382d8: e0bfff17 ldw r2,-4(fp)
80382dc: 10800017 ldw r2,0(r2)
80382e0: 10800617 ldw r2,24(r2)
80382e4: e0fffb17 ldw r3,-20(fp)
80382e8: 180d883a mov r6,r3
80382ec: e17ffc17 ldw r5,-16(fp)
80382f0: e13fff17 ldw r4,-4(fp)
80382f4: 103ee83a callr r2
80382f8: e0bffe15 stw r2,-8(fp)
80382fc: e0bffe17 ldw r2,-8(fp)
8038300: 1000070e bge r2,zero,8038320 <alt_write+0xb4>
{
ALT_ERRNO = -rval;
8038304: 80382300 call 8038230 <alt_get_errno>
8038308: 1007883a mov r3,r2
803830c: e0bffe17 ldw r2,-8(fp)
8038310: 0085c83a sub r2,zero,r2
8038314: 18800015 stw r2,0(r3)
return -1;
8038318: 00bfffc4 movi r2,-1
803831c: 00000c06 br 8038350 <alt_write+0xe4>
}
return rval;
8038320: e0bffe17 ldw r2,-8(fp)
8038324: 00000a06 br 8038350 <alt_write+0xe4>
}
else
{
ALT_ERRNO = EACCES;
8038328: 80382300 call 8038230 <alt_get_errno>
803832c: 1007883a mov r3,r2
8038330: 00800344 movi r2,13
8038334: 18800015 stw r2,0(r3)
8038338: 00000406 br 803834c <alt_write+0xe0>
}
}
else
{
ALT_ERRNO = EBADFD;
803833c: 80382300 call 8038230 <alt_get_errno>
8038340: 1007883a mov r3,r2
8038344: 00801444 movi r2,81
8038348: 18800015 stw r2,0(r3)
}
return -1;
803834c: 00bfffc4 movi r2,-1
}
8038350: e037883a mov sp,fp
8038354: dfc00117 ldw ra,4(sp)
8038358: df000017 ldw fp,0(sp)
803835c: dec00204 addi sp,sp,8
8038360: f800283a ret
08038364 <altera_nios2_gen2_irq_init>:
/*
* To initialize the internal interrupt controller, just clear the IENABLE
* register so that all possible IRQs are disabled.
*/
void altera_nios2_gen2_irq_init(void)
{
8038364: deffff04 addi sp,sp,-4
8038368: df000015 stw fp,0(sp)
803836c: d839883a mov fp,sp
NIOS2_WRITE_IENABLE(0);
8038370: 000170fa wrctl ienable,zero
}
8038374: 0001883a nop
8038378: e037883a mov sp,fp
803837c: df000017 ldw fp,0(sp)
8038380: dec00104 addi sp,sp,4
8038384: f800283a ret
08038388 <OSCtxSw>:
/*
* Save the remaining registers to the stack.
*/
addi sp, sp, -44
8038388: defff504 addi sp,sp,-44
bltu sp, et, .Lstack_overflow
#endif
#if OS_THREAD_SAFE_NEWLIB
ldw r3, %gprel(_impure_ptr)(gp) /* load the pointer */
803838c: d0e00117 ldw r3,-32764(gp)
#endif /* OS_THREAD_SAFE_NEWLIB */
ldw r4, %gprel(OSTCBCur)(gp)
8038390: d1205817 ldw r4,-32416(gp)
stw ra, 0(sp)
8038394: dfc00015 stw ra,0(sp)
stw fp, 4(sp)
8038398: df000115 stw fp,4(sp)
stw r23, 8(sp)
803839c: ddc00215 stw r23,8(sp)
stw r22, 12(sp)
80383a0: dd800315 stw r22,12(sp)
stw r21, 16(sp)
80383a4: dd400415 stw r21,16(sp)
stw r20, 20(sp)
80383a8: dd000515 stw r20,20(sp)
stw r19, 24(sp)
80383ac: dcc00615 stw r19,24(sp)
stw r18, 28(sp)
80383b0: dc800715 stw r18,28(sp)
stw r17, 32(sp)
80383b4: dc400815 stw r17,32(sp)
stw r16, 36(sp)
80383b8: dc000915 stw r16,36(sp)
* store the current value of _impure_ptr so it can be restored
* later; _impure_ptr is asigned on a per task basis. It is used
* by Newlib to achieve reentrancy.
*/
stw r3, 40(sp) /* save the impure pointer */
80383bc: d8c00a15 stw r3,40(sp)
/*
* Save the current tasks stack pointer into the current tasks OS_TCB.
* i.e. OSTCBCur->OSTCBStkPtr = sp;
*/
stw sp, (r4) /* save the stack pointer (OSTCBStkPtr */
80383c0: 26c00015 stw sp,0(r4)
/*
* Call the user definable OSTaskSWHook()
*/
call OSTaskSwHook
80383c4: 80385ec0 call 80385ec <OSTaskSwHook>
/*
* OSTCBCur = OSTCBHighRdy;
* OSPrioCur = OSPrioHighRdy;
*/
ldw r4, %gprel(OSTCBHighRdy)(gp)
80383c8: d1205317 ldw r4,-32436(gp)
ldb r5, %gprel(OSPrioHighRdy)(gp)
80383cc: d1604d07 ldb r5,-32460(gp)
stw r4, %gprel(OSTCBCur)(gp) /* set the current task to be the new task */
80383d0: d1205815 stw r4,-32416(gp)
stb r5, %gprel(OSPrioCur)(gp) /* store the new task's priority as the current */
80383d4: d1604d45 stb r5,-32459(gp)
/*
* Set the stack pointer to point to the new task's stack
*/
ldw sp, (r4) /* the stack pointer is the first entry in the OS_TCB structure */
80383d8: 26c00017 ldw sp,0(r4)
/*
* restore the value of _impure_ptr ; _impure_ptr is asigned on a
* per task basis. It is used by Newlib to achieve reentrancy.
*/
ldw r3, 40(sp) /* load the new impure pointer */
80383dc: d8c00a17 ldw r3,40(sp)
/*
* Restore the saved registers for the new task.
*/
ldw ra, 0(sp)
80383e0: dfc00017 ldw ra,0(sp)
ldw fp, 4(sp)
80383e4: df000117 ldw fp,4(sp)
ldw r23, 8(sp)
80383e8: ddc00217 ldw r23,8(sp)
ldw r22, 12(sp)
80383ec: dd800317 ldw r22,12(sp)
ldw r21, 16(sp)
80383f0: dd400417 ldw r21,16(sp)
ldw r20, 20(sp)
80383f4: dd000517 ldw r20,20(sp)
ldw r19, 24(sp)
80383f8: dcc00617 ldw r19,24(sp)
ldw r18, 28(sp)
80383fc: dc800717 ldw r18,28(sp)
ldw r17, 32(sp)
8038400: dc400817 ldw r17,32(sp)
ldw r16, 36(sp)
8038404: dc000917 ldw r16,36(sp)
#if OS_THREAD_SAFE_NEWLIB
stw r3, %gprel(_impure_ptr)(gp) /* update _impure_ptr */
8038408: d0e00115 stw r3,-32764(gp)
stw et, %gprel(alt_stack_limit_value)(gp)
#endif
addi sp, sp, 44
803840c: dec00b04 addi sp,sp,44
/*
* resume execution of the new task.
*/
ret
8038410: f800283a ret
08038414 <OSStartHighRdy>:
/*
* disable interrupts so that the scheduler doesn't run while
* we're initialising this task.
*/
rdctl r18, status
8038414: 0025303a rdctl r18,status
subi r17, zero, 2 /* r17 = 0xfffffffe */
8038418: 047fff84 movi r17,-2
and r18, r18, r17
803841c: 9464703a and r18,r18,r17
wrctl status, r18
8038420: 9001703a wrctl status,r18
/*
* Call the user definable OSTaskSWHook()
*/
call OSTaskSwHook
8038424: 80385ec0 call 80385ec <OSTaskSwHook>
/*
* set OSRunning = TRUE.
*/
movi r18, 1 /* set r18 to the value 'TRUE' */
8038428: 04800044 movi r18,1
stb r18, %gprel(OSRunning)(gp) /* save this to OSRunning */
803842c: d4a04b45 stb r18,-32467(gp)
/*
* start execution of the new task.
*/
br 9b
8038430: 003fe506 br 80383c8 <OSCtxSw+0x40>
08038434 <OSStartTsk>:
OSStartTsk:
/* This instruction is never executed. Its here to make the
* backtrace work right
*/
movi sp, 0
8038434: 06c00004 movi sp,0
/* Enable interrupts */
rdctl r2, status
8038438: 0005303a rdctl r2,status
ori r2, r2, 0x1
803843c: 10800054 ori r2,r2,1
wrctl status, r2
8038440: 1001703a wrctl status,r2
ldw r2, 4(sp)
8038444: d8800117 ldw r2,4(sp)
ldw r4, 0(sp)
8038448: d9000017 ldw r4,0(sp)
addi sp, sp, 8
803844c: dec00204 addi sp,sp,8
callr r2
8038450: 103ee83a callr r2
nop
8038454: 0001883a nop
08038458 <OSTaskStkInit>:
* been placed on the stack in the proper order.
*
***********************************************************************************************/
OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdata, OS_STK *pstk, INT16U opt)
{
8038458: defff704 addi sp,sp,-36
803845c: dfc00815 stw ra,32(sp)
8038460: df000715 stw fp,28(sp)
8038464: df000704 addi fp,sp,28
8038468: e13ffc15 stw r4,-16(fp)
803846c: e17ffb15 stw r5,-20(fp)
8038470: e1bffa15 stw r6,-24(fp)
8038474: 3805883a mov r2,r7
8038478: e0bff90d sth r2,-28(fp)
* create and initialise the impure pointer used for Newlib thread local storage.
* This is only done if the C library is being used in a thread safe mode. Otherwise
* a single reent structure is used for all threads, which saves memory.
*/
local_impure_ptr = (struct _reent*)((((INT32U)(pstk)) & ~0x3) - sizeof(struct _reent));
803847c: e0fffa17 ldw r3,-24(fp)
8038480: 00bfff04 movi r2,-4
8038484: 1884703a and r2,r3,r2
8038488: 10bef704 addi r2,r2,-1060
803848c: e0bfff15 stw r2,-4(fp)
_REENT_INIT_PTR (local_impure_ptr);
8038490: 01810904 movi r6,1060
8038494: 000b883a mov r5,zero
8038498: e13fff17 ldw r4,-4(fp)
803849c: 80088e40 call 80088e4 <memset>
80384a0: e0bfff17 ldw r2,-4(fp)
80384a4: 10c0bb04 addi r3,r2,748
80384a8: e0bfff17 ldw r2,-4(fp)
80384ac: 10c00115 stw r3,4(r2)
80384b0: e0bfff17 ldw r2,-4(fp)
80384b4: 10c0d504 addi r3,r2,852
80384b8: e0bfff17 ldw r2,-4(fp)
80384bc: 10c00215 stw r3,8(r2)
80384c0: e0bfff17 ldw r2,-4(fp)
80384c4: 10c0ef04 addi r3,r2,956
80384c8: e0bfff17 ldw r2,-4(fp)
80384cc: 10c00315 stw r3,12(r2)
80384d0: e0bfff17 ldw r2,-4(fp)
80384d4: 00c00044 movi r3,1
80384d8: 10c02915 stw r3,164(r2)
80384dc: 10002a15 stw zero,168(r2)
80384e0: e0bfff17 ldw r2,-4(fp)
80384e4: 00ccc384 movi r3,13070
80384e8: 10c02b0d sth r3,172(r2)
80384ec: e0bfff17 ldw r2,-4(fp)
80384f0: 00eaf344 movi r3,-21555
80384f4: 10c02b8d sth r3,174(r2)
80384f8: e0bfff17 ldw r2,-4(fp)
80384fc: 00c48d04 movi r3,4660
8038500: 10c02c0d sth r3,176(r2)
8038504: e0bfff17 ldw r2,-4(fp)
8038508: 00f99b44 movi r3,-6547
803850c: 10c02c8d sth r3,178(r2)
8038510: e0bfff17 ldw r2,-4(fp)
8038514: 00f7bb04 movi r3,-8468
8038518: 10c02d0d sth r3,180(r2)
803851c: e0bfff17 ldw r2,-4(fp)
8038520: 00c00144 movi r3,5
8038524: 10c02d8d sth r3,182(r2)
8038528: e0bfff17 ldw r2,-4(fp)
803852c: 00c002c4 movi r3,11
8038530: 10c02e0d sth r3,184(r2)
/*
* create a stack frame at the top of the stack (leaving space for the
* reentrant data structure).
*/
frame_pointer = (INT32U*) local_impure_ptr;
8038534: e0bfff17 ldw r2,-4(fp)
8038538: e0bffe15 stw r2,-8(fp)
#else
frame_pointer = (INT32U*) (((INT32U)(pstk)) & ~0x3);
#endif /* OS_THREAD_SAFE_NEWLIB */
stk = frame_pointer - 13;
803853c: e0bffe17 ldw r2,-8(fp)
8038540: 10bff304 addi r2,r2,-52
8038544: e0bffd15 stw r2,-12(fp)
/* Now fill the stack frame. */
stk[12] = (INT32U)task; /* task address (ra) */
8038548: e0bffd17 ldw r2,-12(fp)
803854c: 10800c04 addi r2,r2,48
8038550: e0fffc17 ldw r3,-16(fp)
8038554: 10c00015 stw r3,0(r2)
stk[11] = (INT32U) pdata; /* first register argument (r4) */
8038558: e0bffd17 ldw r2,-12(fp)
803855c: 10800b04 addi r2,r2,44
8038560: e0fffb17 ldw r3,-20(fp)
8038564: 10c00015 stw r3,0(r2)
#if OS_THREAD_SAFE_NEWLIB
stk[10] = (INT32U) local_impure_ptr; /* value of _impure_ptr for this thread */
8038568: e0bffd17 ldw r2,-12(fp)
803856c: 10800a04 addi r2,r2,40
8038570: e0ffff17 ldw r3,-4(fp)
8038574: 10c00015 stw r3,0(r2)
#endif /* OS_THREAD_SAFE_NEWLIB */
stk[0] = ((INT32U)&OSStartTsk) + 4;/* exception return address (ea) */
8038578: 00820134 movhi r2,2052
803857c: 10a10d04 addi r2,r2,-31692
8038580: 10c00104 addi r3,r2,4
8038584: e0bffd17 ldw r2,-12(fp)
8038588: 10c00015 stw r3,0(r2)
*/
__asm__ (".set OSTCBNext_OFFSET,%0" :: "i" (offsetof(OS_TCB, OSTCBNext)));
__asm__ (".set OSTCBPrio_OFFSET,%0" :: "i" (offsetof(OS_TCB, OSTCBPrio)));
__asm__ (".set OSTCBStkPtr_OFFSET,%0" :: "i" (offsetof(OS_TCB, OSTCBStkPtr)));
return((OS_STK *)stk);
803858c: e0bffd17 ldw r2,-12(fp)
}
8038590: e037883a mov sp,fp
8038594: dfc00117 ldw ra,4(sp)
8038598: df000017 ldw fp,0(sp)
803859c: dec00204 addi sp,sp,8
80385a0: f800283a ret
080385a4 <OSTaskCreateHook>:
*
* Note(s) : 1) Interrupts are disabled during this call.
*********************************************************************************************************
*/
void OSTaskCreateHook (OS_TCB *ptcb)
{
80385a4: defffe04 addi sp,sp,-8
80385a8: df000115 stw fp,4(sp)
80385ac: df000104 addi fp,sp,4
80385b0: e13fff15 stw r4,-4(fp)
ptcb = ptcb; /* Prevent compiler warning */
}
80385b4: 0001883a nop
80385b8: e037883a mov sp,fp
80385bc: df000017 ldw fp,0(sp)
80385c0: dec00104 addi sp,sp,4
80385c4: f800283a ret
080385c8 <OSTaskDelHook>:
*
* Note(s) : 1) Interrupts are disabled during this call.
*********************************************************************************************************
*/
void OSTaskDelHook (OS_TCB *ptcb)
{
80385c8: defffe04 addi sp,sp,-8
80385cc: df000115 stw fp,4(sp)
80385d0: df000104 addi fp,sp,4
80385d4: e13fff15 stw r4,-4(fp)
ptcb = ptcb; /* Prevent compiler warning */
}
80385d8: 0001883a nop
80385dc: e037883a mov sp,fp
80385e0: df000017 ldw fp,0(sp)
80385e4: dec00104 addi sp,sp,4
80385e8: f800283a ret
080385ec <OSTaskSwHook>:
* will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
* task being switched out (i.e. the preempted task).
*********************************************************************************************************
*/
void OSTaskSwHook (void)
{
80385ec: deffff04 addi sp,sp,-4
80385f0: df000015 stw fp,0(sp)
80385f4: d839883a mov fp,sp
}
80385f8: 0001883a nop
80385fc: e037883a mov sp,fp
8038600: df000017 ldw fp,0(sp)
8038604: dec00104 addi sp,sp,4
8038608: f800283a ret
0803860c <OSTaskStatHook>:
*
* Arguments : none
*********************************************************************************************************
*/
void OSTaskStatHook (void)
{
803860c: deffff04 addi sp,sp,-4
8038610: df000015 stw fp,0(sp)
8038614: d839883a mov fp,sp
}
8038618: 0001883a nop
803861c: e037883a mov sp,fp
8038620: df000017 ldw fp,0(sp)
8038624: dec00104 addi sp,sp,4
8038628: f800283a ret
0803862c <OSTimeTickHook>:
#ifdef ALT_INICHE
void cticks_hook(void);
#endif
void OSTimeTickHook (void)
{
803862c: defffe04 addi sp,sp,-8
8038630: dfc00115 stw ra,4(sp)
8038634: df000015 stw fp,0(sp)
8038638: d839883a mov fp,sp
}
#endif
#ifdef ALT_INICHE
/* Service the Interniche timer */
cticks_hook();
803863c: 8028e380 call 8028e38 <cticks_hook>
#endif
}
8038640: 0001883a nop
8038644: e037883a mov sp,fp
8038648: dfc00117 ldw ra,4(sp)
803864c: df000017 ldw fp,0(sp)
8038650: dec00204 addi sp,sp,8
8038654: f800283a ret
08038658 <OSInitHookBegin>:
void OSInitHookBegin(void)
{
8038658: deffff04 addi sp,sp,-4
803865c: df000015 stw fp,0(sp)
8038660: d839883a mov fp,sp
#if OS_TMR_EN > 0
OSTmrCtr = 0;
#endif
}
8038664: 0001883a nop
8038668: e037883a mov sp,fp
803866c: df000017 ldw fp,0(sp)
8038670: dec00104 addi sp,sp,4
8038674: f800283a ret
08038678 <OSInitHookEnd>:
void OSInitHookEnd(void)
{
8038678: deffff04 addi sp,sp,-4
803867c: df000015 stw fp,0(sp)
8038680: d839883a mov fp,sp
}
8038684: 0001883a nop
8038688: e037883a mov sp,fp
803868c: df000017 ldw fp,0(sp)
8038690: dec00104 addi sp,sp,4
8038694: f800283a ret
08038698 <OSTaskIdleHook>:
void OSTaskIdleHook(void)
{
8038698: deffff04 addi sp,sp,-4
803869c: df000015 stw fp,0(sp)
80386a0: d839883a mov fp,sp
}
80386a4: 0001883a nop
80386a8: e037883a mov sp,fp
80386ac: df000017 ldw fp,0(sp)
80386b0: dec00104 addi sp,sp,4
80386b4: f800283a ret
080386b8 <OSTCBInitHook>:
void OSTCBInitHook(OS_TCB *ptcb)
{
80386b8: defffe04 addi sp,sp,-8
80386bc: df000115 stw fp,4(sp)
80386c0: df000104 addi fp,sp,4
80386c4: e13fff15 stw r4,-4(fp)
}
80386c8: 0001883a nop
80386cc: e037883a mov sp,fp
80386d0: df000017 ldw fp,0(sp)
80386d4: dec00104 addi sp,sp,4
80386d8: f800283a ret
080386dc <netmain_init>:
* RETURNS:
*/
void
netmain_init(void)
{
80386dc: defffb04 addi sp,sp,-20
80386e0: dfc00415 stw ra,16(sp)
80386e4: df000315 stw fp,12(sp)
80386e8: dc000215 stw r16,8(sp)
80386ec: df000304 addi fp,sp,12
int e = 0;
80386f0: e03ffe15 stw zero,-8(fp)
char * msg;
#ifdef IP_V6
ip6_addr host;
#endif
printf("%s\n", name);
80386f4: d0a02b17 ldw r2,-32596(gp)
80386f8: 1009883a mov r4,r2
80386fc: 8002d9c0 call 8002d9c <puts>
printf("Copyright 1996-2008 by InterNiche Technologies. All rights reserved. \n");
8038700: 01020174 movhi r4,2053
8038704: 212ad404 addi r4,r4,-21680
8038708: 8002d9c0 call 8002d9c <puts>
#ifdef IN_MENUS
install_version("allports3.1");
#endif
#ifndef SUPERLOOP
/* call this to do pre-task setup including intialization of port_prep */
msg = pre_task_setup();
803870c: 802959c0 call 802959c <pre_task_setup>
8038710: e0bffd15 stw r2,-12(fp)
if (msg)
8038714: e0bffd17 ldw r2,-12(fp)
8038718: 10000226 beq r2,zero,8038724 <netmain_init+0x48>
panic(msg);
803871c: e13ffd17 ldw r4,-12(fp)
8038720: 80271780 call 8027178 <panic>
printf("global_log_create() failed\n");
}
glog_with_type(LOG_TYPE_INFO, "INICHE LOG initialized", 1);
#endif
msg = ip_startup();
8038724: 8024f800 call 8024f80 <ip_startup>
8038728: e0bffd15 stw r2,-12(fp)
if (msg)
803872c: e0bffd17 ldw r2,-12(fp)
8038730: 10000726 beq r2,zero,8038750 <netmain_init+0x74>
{
printf("inet startup error: %s\n", msg);
8038734: e17ffd17 ldw r5,-12(fp)
8038738: 01020174 movhi r4,2053
803873c: 212ae604 addi r4,r4,-21608
8038740: 8002c780 call 8002c78 <printf>
panic("IP");
8038744: 01020174 movhi r4,2053
8038748: 212aec04 addi r4,r4,-21584
803874c: 80271780 call 8027178 <panic>
}
#if defined(MEMDEV_SIZE) && defined(VFS_FILES)
init_memdev(); /* init the mem and null test devices */
8038750: 803f5980 call 803f598 <init_memdev>
#endif
#ifdef IP_MULTICAST
#ifdef INCLUDE_TCP
/* call the IP multicast test program */
u_mctest_init();
8038754: 803eef80 call 803eef8 <u_mctest_init>
/* clear debugging flags. Port can optionally turn them
* back on in post_task_setup();
* NDEBUG = UPCTRACE | IPTRACE | TPTRACE ;
*/
NDEBUG = 0;
8038758: d0206615 stw zero,-32360(gp)
/* print IP address of the first interface - for user's benefit */
printf("IP address of %s : %s\n" , ((NET)(netlist.q_head))->name,
803875c: 008201b4 movhi r2,2054
8038760: 10b6a617 ldw r2,-9576(r2)
8038764: 14000104 addi r16,r2,4
print_ipad(((NET)(netlist.q_head))->n_ipaddr));
8038768: 008201b4 movhi r2,2054
803876c: 10b6a617 ldw r2,-9576(r2)
printf("IP address of %s : %s\n" , ((NET)(netlist.q_head))->name,
8038770: 10800a17 ldw r2,40(r2)
8038774: 1009883a mov r4,r2
8038778: 8026fbc0 call 8026fbc <print_ipad>
803877c: 100d883a mov r6,r2
8038780: 800b883a mov r5,r16
8038784: 01020174 movhi r4,2053
8038788: 212aed04 addi r4,r4,-21580
803878c: 8002c780 call 8002c78 <printf>
#ifndef SUPERLOOP
/* call this per-target routine after basic tasks & net are up */
msg = post_task_setup();
8038790: 80295e80 call 80295e8 <post_task_setup>
8038794: e0bffd15 stw r2,-12(fp)
if (msg)
8038798: e0bffd17 ldw r2,-12(fp)
803879c: 10000226 beq r2,zero,80387a8 <netmain_init+0xcc>
panic(msg);
80387a0: e13ffd17 ldw r4,-12(fp)
80387a4: 80271780 call 8027178 <panic>
panic("prep_modules");
}
#endif
USE_ARG(e); /* Avoid compiler warnings */
} /* end of netmain_init() */
80387a8: 0001883a nop
80387ac: e6ffff04 addi sp,fp,-4
80387b0: dfc00217 ldw ra,8(sp)
80387b4: df000117 ldw fp,4(sp)
80387b8: dc000017 ldw r16,0(sp)
80387bc: dec00304 addi sp,sp,12
80387c0: f800283a ret
080387c4 <icmp_port_du>:
* RETURNS:
*/
void
icmp_port_du(PACKET p, struct destun * pdp)
{
80387c4: defffb04 addi sp,sp,-20
80387c8: dfc00415 stw ra,16(sp)
80387cc: df000315 stw fp,12(sp)
80387d0: dc000215 stw r16,8(sp)
80387d4: df000304 addi fp,sp,12
80387d8: e13ffe15 stw r4,-8(fp)
80387dc: e17ffd15 stw r5,-12(fp)
dprintf("got ICMP %s UNREACHABLE from %s\n",
icmpdu_types[(int)(pdp->dtype)], print_ipad(p->fhost) );
80387e0: e0bffd17 ldw r2,-12(fp)
80387e4: 10800003 ldbu r2,0(r2)
80387e8: 10803fcc andi r2,r2,255
80387ec: 1080201c xori r2,r2,128
80387f0: 10bfe004 addi r2,r2,-128
dprintf("got ICMP %s UNREACHABLE from %s\n",
80387f4: 100690ba slli r3,r2,2
80387f8: 00820174 movhi r2,2053
80387fc: 1885883a add r2,r3,r2
8038800: 14324a17 ldw r16,-14040(r2)
8038804: e0bffe17 ldw r2,-8(fp)
8038808: 10800717 ldw r2,28(r2)
803880c: 1009883a mov r4,r2
8038810: 8026fbc0 call 8026fbc <print_ipad>
8038814: 100d883a mov r6,r2
8038818: 800b883a mov r5,r16
803881c: 01020174 movhi r4,2053
8038820: 212afd04 addi r4,r4,-21516
8038824: 8002c780 call 8002c78 <printf>
dprintf(prompt);
8038828: d0a02c17 ldw r2,-32592(gp)
803882c: 1009883a mov r4,r2
8038830: 8002c780 call 8002c78 <printf>
}
8038834: 0001883a nop
8038838: e6ffff04 addi sp,fp,-4
803883c: dfc00217 ldw ra,8(sp)
8038840: df000117 ldw fp,4(sp)
8038844: dc000017 ldw r16,0(sp)
8038848: dec00304 addi sp,sp,12
803884c: f800283a ret
08038850 <station_state>:
* RETURNS:
*/
int
station_state(void * pio)
{
8038850: defff904 addi sp,sp,-28
8038854: dfc00615 stw ra,24(sp)
8038858: df000515 stw fp,20(sp)
803885c: dc000415 stw r16,16(sp)
8038860: df000504 addi fp,sp,20
8038864: e13ffc15 stw r4,-16(fp)
int i;
#ifndef NO_INET_STACK
NET ifp;
for (i = 0, ifp = (NET)netlist.q_head; ifp; ifp = ifp->n_next, i++)
8038868: e03ffe15 stw zero,-8(fp)
803886c: 008201b4 movhi r2,2054
8038870: 10b6a617 ldw r2,-9576(r2)
8038874: e0bffd15 stw r2,-12(fp)
8038878: 00002506 br 8038910 <station_state+0xc0>
{
ns_printf(pio, "iface %d-%s IP addr:%s ",
i, ifp->name, print_ipad(ifp->n_ipaddr) );
803887c: e0bffd17 ldw r2,-12(fp)
8038880: 14000104 addi r16,r2,4
ns_printf(pio, "iface %d-%s IP addr:%s ",
8038884: e0bffd17 ldw r2,-12(fp)
8038888: 10800a17 ldw r2,40(r2)
803888c: 1009883a mov r4,r2
8038890: 8026fbc0 call 8026fbc <print_ipad>
8038894: d8800015 stw r2,0(sp)
8038898: 800f883a mov r7,r16
803889c: e1bffe17 ldw r6,-8(fp)
80388a0: 01420174 movhi r5,2053
80388a4: 296b0604 addi r5,r5,-21480
80388a8: e13ffc17 ldw r4,-16(fp)
80388ac: 80273900 call 8027390 <ns_printf>
ns_printf(pio, "subnet:%s ", print_ipad(ifp->snmask) );
80388b0: e0bffd17 ldw r2,-12(fp)
80388b4: 10800c17 ldw r2,48(r2)
80388b8: 1009883a mov r4,r2
80388bc: 8026fbc0 call 8026fbc <print_ipad>
80388c0: 100d883a mov r6,r2
80388c4: 01420174 movhi r5,2053
80388c8: 296b0d04 addi r5,r5,-21452
80388cc: e13ffc17 ldw r4,-16(fp)
80388d0: 80273900 call 8027390 <ns_printf>
ns_printf(pio, "gateway:%s\n", print_ipad(ifp->n_defgw) );
80388d4: e0bffd17 ldw r2,-12(fp)
80388d8: 10800d17 ldw r2,52(r2)
80388dc: 1009883a mov r4,r2
80388e0: 8026fbc0 call 8026fbc <print_ipad>
80388e4: 100d883a mov r6,r2
80388e8: 01420174 movhi r5,2053
80388ec: 296b1004 addi r5,r5,-21440
80388f0: e13ffc17 ldw r4,-16(fp)
80388f4: 80273900 call 8027390 <ns_printf>
for (i = 0, ifp = (NET)netlist.q_head; ifp; ifp = ifp->n_next, i++)
80388f8: e0bffd17 ldw r2,-12(fp)
80388fc: 10800017 ldw r2,0(r2)
8038900: e0bffd15 stw r2,-12(fp)
8038904: e0bffe17 ldw r2,-8(fp)
8038908: 10800044 addi r2,r2,1
803890c: e0bffe15 stw r2,-8(fp)
8038910: e0bffd17 ldw r2,-12(fp)
8038914: 103fd91e bne r2,zero,803887c <station_state+0x2c>
}
#endif /* NO_INET_STACK */
ns_printf(pio, "current tick count %lu\n", cticks);
8038918: d0a07d17 ldw r2,-32268(gp)
803891c: 100d883a mov r6,r2
8038920: 01420174 movhi r5,2053
8038924: 296b1304 addi r5,r5,-21428
8038928: e13ffc17 ldw r4,-16(fp)
803892c: 80273900 call 8027390 <ns_printf>
ns_printf(pio, "common delay parameter: %lu ticks (%lu ms).\n", pingdelay, (pingdelay * TIMEFOR1TICK));
8038930: d0e02d17 ldw r3,-32588(gp)
8038934: d0a02d17 ldw r2,-32588(gp)
8038938: 108002a4 muli r2,r2,10
803893c: 100f883a mov r7,r2
8038940: 180d883a mov r6,r3
8038944: 01420174 movhi r5,2053
8038948: 296b1904 addi r5,r5,-21404
803894c: e13ffc17 ldw r4,-16(fp)
8038950: 80273900 call 8027390 <ns_printf>
ns_printf(pio, "common host parameter: %s\n", print_ipad(activehost));
8038954: d0a08f17 ldw r2,-32196(gp)
8038958: 1009883a mov r4,r2
803895c: 8026fbc0 call 8026fbc <print_ipad>
8038960: 100d883a mov r6,r2
8038964: 01420174 movhi r5,2053
8038968: 296b2504 addi r5,r5,-21356
803896c: e13ffc17 ldw r4,-16(fp)
8038970: 80273900 call 8027390 <ns_printf>
ns_printf(pio, "common length parameter: %d\n", deflength);
8038974: d0a02e17 ldw r2,-32584(gp)
8038978: 100d883a mov r6,r2
803897c: 01420174 movhi r5,2053
8038980: 296b2c04 addi r5,r5,-21328
8038984: e13ffc17 ldw r4,-16(fp)
8038988: 80273900 call 8027390 <ns_printf>
#ifdef USE_PPP
ns_printf(pio, "current dial-in user name is %s\n", pppcfg.username);
ns_printf(pio, "current dial-in password is %s\n", pppcfg.password);
#endif /* USE_PPP */
task_stats(pio);
803898c: e13ffc17 ldw r4,-16(fp)
8038990: 8038e5c0 call 8038e5c <task_stats>
return 0;
8038994: 0005883a mov r2,zero
}
8038998: e6ffff04 addi sp,fp,-4
803899c: dfc00217 ldw ra,8(sp)
80389a0: df000117 ldw fp,4(sp)
80389a4: dc000017 ldw r16,0(sp)
80389a8: dec00304 addi sp,sp,12
80389ac: f800283a ret
080389b0 <sysuptime>:
* RETURNS:
*/
unsigned long
sysuptime()
{
80389b0: defffe04 addi sp,sp,-8
80389b4: dfc00115 stw ra,4(sp)
80389b8: df000015 stw fp,0(sp)
80389bc: d839883a mov fp,sp
return ((cticks/TPS)*100); /* 100ths of a sec since boot time */
80389c0: d0a07d17 ldw r2,-32268(gp)
80389c4: 01401904 movi r5,100
80389c8: 1009883a mov r4,r2
80389cc: 800cff80 call 800cff8 <__udivsi3>
80389d0: 10801924 muli r2,r2,100
}
80389d4: e037883a mov sp,fp
80389d8: dfc00117 ldw ra,4(sp)
80389dc: df000017 ldw fp,0(sp)
80389e0: dec00204 addi sp,sp,8
80389e4: f800283a ret
080389e8 <packet_check>:
static int inside_pktdemux = 0;
void
packet_check(void)
{
80389e8: defffe04 addi sp,sp,-8
80389ec: dfc00115 stw ra,4(sp)
80389f0: df000015 stw fp,0(sp)
80389f4: d839883a mov fp,sp
if(inside_pktdemux != 0) /* check re-entrancy flag */
80389f8: d0a09017 ldw r2,-32192(gp)
80389fc: 1000081e bne r2,zero,8038a20 <packet_check+0x38>
return; /* do not re-enter pktdemux(), packet will wait... */
inside_pktdemux++; /* set re-entrany flag */
8038a00: d0a09017 ldw r2,-32192(gp)
8038a04: 10800044 addi r2,r2,1
8038a08: d0a09015 stw r2,-32192(gp)
pktdemux(); /* process low level packet input */
8038a0c: 80249c40 call 80249c4 <pktdemux>
inside_pktdemux--; /* clear re-entrany flag */
8038a10: d0a09017 ldw r2,-32192(gp)
8038a14: 10bfffc4 addi r2,r2,-1
8038a18: d0a09015 stw r2,-32192(gp)
8038a1c: 00000106 br 8038a24 <packet_check+0x3c>
return; /* do not re-enter pktdemux(), packet will wait... */
8038a20: 0001883a nop
}
8038a24: e037883a mov sp,fp
8038a28: dfc00117 ldw ra,4(sp)
8038a2c: df000017 ldw fp,0(sp)
8038a30: dec00204 addi sp,sp,8
8038a34: f800283a ret
08038a38 <mcastlist>:
* RETURNS:
*/
int
mcastlist(struct in_multi * multi_ptr)
{
8038a38: defffe04 addi sp,sp,-8
8038a3c: df000115 stw fp,4(sp)
8038a40: df000104 addi fp,sp,4
8038a44: e13fff15 stw r4,-4(fp)
USE_ARG(multi_ptr);
return 0;
8038a48: 0005883a mov r2,zero
}
8038a4c: e037883a mov sp,fp
8038a50: df000017 ldw fp,0(sp)
8038a54: dec00104 addi sp,sp,4
8038a58: f800283a ret
08038a5c <prep_modules>:
#ifdef USE_MODEM
extern int prep_modem(void);
#endif /* USE_MODEM */
int prep_modules(void)
{
8038a5c: defffd04 addi sp,sp,-12
8038a60: dfc00215 stw ra,8(sp)
8038a64: df000115 stw fp,4(sp)
8038a68: df000104 addi fp,sp,4
#ifdef IP_V6
ip6_addr host;
int i;
#endif
int e = 0;
8038a6c: e03fff15 stw zero,-4(fp)
panic("prep_modules");
}
#endif /* SMTP_ALERTS */
#ifdef VFS_FILES
e = prep_vfs();
8038a70: 80426940 call 8042694 <prep_vfs>
8038a74: e0bfff15 stw r2,-4(fp)
if (e != 0)
8038a78: e0bfff17 ldw r2,-4(fp)
8038a7c: 10000626 beq r2,zero,8038a98 <prep_modules+0x3c>
{
dprintf("VFS Module prep failed\n");
8038a80: 01020174 movhi r4,2053
8038a84: 212b3404 addi r4,r4,-21296
8038a88: 8002d9c0 call 8002d9c <puts>
panic("prep_modules");
8038a8c: 01020174 movhi r4,2053
8038a90: 212b3a04 addi r4,r4,-21272
8038a94: 80271780 call 8027178 <panic>
{
dprintf("sslapp_init() failed\n");
panic("prep_modules");
}
#endif
return 0;
8038a98: 0005883a mov r2,zero
}
8038a9c: e037883a mov sp,fp
8038aa0: dfc00117 ldw ra,4(sp)
8038aa4: df000017 ldw fp,0(sp)
8038aa8: dec00204 addi sp,sp,8
8038aac: f800283a ret
08038ab0 <inet_timer>:
* RETURNS:
*/
void
inet_timer(void)
{
8038ab0: defffe04 addi sp,sp,-8
8038ab4: dfc00115 stw ra,4(sp)
8038ab8: df000015 stw fp,0(sp)
8038abc: d839883a mov fp,sp
if (ire_cticks < cticks)
ip_reasm_process_timer_tick ();
#endif
#ifdef INCLUDE_TCP
tcp_tick(); /* run TCP timers */
8038ac0: 802b0500 call 802b050 <tcp_tick>
#endif
#ifdef INICHE_TIMERS /* interval timers? */
check_interval_timers();
8038ac4: 8038b280 call 8038b28 <check_interval_timers>
#endif
#if defined (IP_MULTICAST) && (defined (IGMP_V1) || defined (IGMP_V2))
/* Call igmp timeout routine */
if (igmp_cticks < cticks) /* Call igmp timeout routine 5 times per sec */
8038ac8: d0e06a17 ldw r3,-32344(gp)
8038acc: d0a07d17 ldw r2,-32268(gp)
8038ad0: 1880012e bgeu r3,r2,8038ad8 <inet_timer+0x28>
igmp_fasttimo();
8038ad4: 80254ec0 call 80254ec <igmp_fasttimo>
#endif
/* Some timer routines only need calling once a second: */
if ((nextppp < cticks) || /* next call to PPP is due */
8038ad8: d0e09117 ldw r3,-32188(gp)
8038adc: d0a07d17 ldw r2,-32268(gp)
8038ae0: 18800436 bltu r3,r2,8038af4 <inet_timer+0x44>
(nextppp > (cticks+(10*TPS))) ) /* for when cticks wraps */
8038ae4: d0a07d17 ldw r2,-32268(gp)
8038ae8: 10c0fa04 addi r3,r2,1000
8038aec: d0a09117 ldw r2,-32188(gp)
if ((nextppp < cticks) || /* next call to PPP is due */
8038af0: 1880072e bgeu r3,r2,8038b10 <inet_timer+0x60>
{
nextppp = cticks + TPS;
8038af4: d0a07d17 ldw r2,-32268(gp)
8038af8: 10801904 addi r2,r2,100
8038afc: d0a09115 stw r2,-32188(gp)
if (port_1s_callout != NULL)
8038b00: d0a09217 ldw r2,-32184(gp)
8038b04: 10000226 beq r2,zero,8038b10 <inet_timer+0x60>
(*port_1s_callout)();
8038b08: d0a09217 ldw r2,-32184(gp)
8038b0c: 103ee83a callr r2
#endif
#ifdef IPSEC
IPSecTimer();
#endif
}
}
8038b10: 0001883a nop
8038b14: e037883a mov sp,fp
8038b18: dfc00117 ldw ra,4(sp)
8038b1c: df000017 ldw fp,0(sp)
8038b20: dec00204 addi sp,sp,8
8038b24: f800283a ret
08038b28 <check_interval_timers>:
static int numtimers = 0; /* number of active timers */
static void
check_interval_timers(void)
{
8038b28: defffc04 addi sp,sp,-16
8038b2c: dfc00315 stw ra,12(sp)
8038b30: df000215 stw fp,8(sp)
8038b34: df000204 addi fp,sp,8
int i;
int found = 0; /* number of valid timers found */
8038b38: e03ffe15 stw zero,-8(fp)
/* if no timers, just return */
if (numtimers > 0)
8038b3c: d0a09317 ldw r2,-32180(gp)
8038b40: 0080460e bge zero,r2,8038c5c <check_interval_timers+0x134>
{
/* loop throught the timer list looking for active timers ready to fire */
for (i = 0; i < NUM_INTIMERS; i++)
8038b44: e03fff15 stw zero,-4(fp)
8038b48: 00003f06 br 8038c48 <check_interval_timers+0x120>
{
if (intimers[i].callback) /* is this timer active? */
8038b4c: e0bfff17 ldw r2,-4(fp)
8038b50: 10c00524 muli r3,r2,20
8038b54: 008201b4 movhi r2,2054
8038b58: 1885883a add r2,r3,r2
8038b5c: 10b91c17 ldw r2,-7056(r2)
8038b60: 10003626 beq r2,zero,8038c3c <check_interval_timers+0x114>
{
if ((intimers[i].tmo < cticks) && (!intimers[i].inuse)) /* timer ready fire? */
8038b64: e0bfff17 ldw r2,-4(fp)
8038b68: 10c00524 muli r3,r2,20
8038b6c: 008201b4 movhi r2,2054
8038b70: 1885883a add r2,r3,r2
8038b74: 10f91f17 ldw r3,-7044(r2)
8038b78: d0a07d17 ldw r2,-32268(gp)
8038b7c: 1880292e bgeu r3,r2,8038c24 <check_interval_timers+0xfc>
8038b80: e0bfff17 ldw r2,-4(fp)
8038b84: 10c00524 muli r3,r2,20
8038b88: 008201b4 movhi r2,2054
8038b8c: 1885883a add r2,r3,r2
8038b90: 10b92017 ldw r2,-7040(r2)
8038b94: 1000231e bne r2,zero,8038c24 <check_interval_timers+0xfc>
{
intimers[i].tmo = intimers[i].interval + cticks; /* set next tmo */
8038b98: e0bfff17 ldw r2,-4(fp)
8038b9c: 10c00524 muli r3,r2,20
8038ba0: 008201b4 movhi r2,2054
8038ba4: 1885883a add r2,r3,r2
8038ba8: 10f91e17 ldw r3,-7048(r2)
8038bac: d0a07d17 ldw r2,-32268(gp)
8038bb0: 1887883a add r3,r3,r2
8038bb4: e0bfff17 ldw r2,-4(fp)
8038bb8: 11000524 muli r4,r2,20
8038bbc: 008201b4 movhi r2,2054
8038bc0: 2085883a add r2,r4,r2
8038bc4: 10f91f15 stw r3,-7044(r2)
intimers[i].inuse = TRUE;
8038bc8: e0bfff17 ldw r2,-4(fp)
8038bcc: 11000524 muli r4,r2,20
8038bd0: 00c00044 movi r3,1
8038bd4: 008201b4 movhi r2,2054
8038bd8: 2085883a add r2,r4,r2
8038bdc: 10f92015 stw r3,-7040(r2)
intimers[i].callback(intimers[i].parm); /* call user routine */
8038be0: e0bfff17 ldw r2,-4(fp)
8038be4: 10c00524 muli r3,r2,20
8038be8: 008201b4 movhi r2,2054
8038bec: 1885883a add r2,r3,r2
8038bf0: 10f91c17 ldw r3,-7056(r2)
8038bf4: e0bfff17 ldw r2,-4(fp)
8038bf8: 11000524 muli r4,r2,20
8038bfc: 008201b4 movhi r2,2054
8038c00: 2085883a add r2,r4,r2
8038c04: 10b91d17 ldw r2,-7052(r2)
8038c08: 1009883a mov r4,r2
8038c0c: 183ee83a callr r3
intimers[i].inuse = FALSE;
8038c10: e0bfff17 ldw r2,-4(fp)
8038c14: 10c00524 muli r3,r2,20
8038c18: 008201b4 movhi r2,2054
8038c1c: 1885883a add r2,r3,r2
8038c20: 10392015 stw zero,-7040(r2)
}
/* If we've examined all the active timers, we're done */
if (++found >= numtimers)
8038c24: e0bffe17 ldw r2,-8(fp)
8038c28: 10800044 addi r2,r2,1
8038c2c: e0bffe15 stw r2,-8(fp)
8038c30: d0a09317 ldw r2,-32180(gp)
8038c34: e0fffe17 ldw r3,-8(fp)
8038c38: 1880070e bge r3,r2,8038c58 <check_interval_timers+0x130>
for (i = 0; i < NUM_INTIMERS; i++)
8038c3c: e0bfff17 ldw r2,-4(fp)
8038c40: 10800044 addi r2,r2,1
8038c44: e0bfff15 stw r2,-4(fp)
8038c48: e0bfff17 ldw r2,-4(fp)
8038c4c: 10800150 cmplti r2,r2,5
8038c50: 103fbe1e bne r2,zero,8038b4c <check_interval_timers+0x24>
break;
}
}
}
}
8038c54: 00000106 br 8038c5c <check_interval_timers+0x134>
break;
8038c58: 0001883a nop
}
8038c5c: 0001883a nop
8038c60: e037883a mov sp,fp
8038c64: dfc00117 ldw ra,4(sp)
8038c68: df000017 ldw fp,0(sp)
8038c6c: dec00204 addi sp,sp,8
8038c70: f800283a ret
08038c74 <in_timerset>:
* RETURNS: timer ID if OK, else if table is full.
*/
long
in_timerset(void (*callback)(long), long msecs, long parm)
{
8038c74: defffa04 addi sp,sp,-24
8038c78: dfc00515 stw ra,20(sp)
8038c7c: df000415 stw fp,16(sp)
8038c80: df000404 addi fp,sp,16
8038c84: e13ffe15 stw r4,-8(fp)
8038c88: e17ffd15 stw r5,-12(fp)
8038c8c: e1bffc15 stw r6,-16(fp)
int i;
for(i = 0; i < NUM_INTIMERS; i++)
8038c90: e03fff15 stw zero,-4(fp)
8038c94: 00003906 br 8038d7c <in_timerset+0x108>
{
if(intimers[i].callback == NULL)
8038c98: e0bfff17 ldw r2,-4(fp)
8038c9c: 10c00524 muli r3,r2,20
8038ca0: 008201b4 movhi r2,2054
8038ca4: 1885883a add r2,r3,r2
8038ca8: 10b91c17 ldw r2,-7056(r2)
8038cac: 1000301e bne r2,zero,8038d70 <in_timerset+0xfc>
{
/* found empty table entry, set up new timer */
intimers[i].callback = callback;
8038cb0: e0bfff17 ldw r2,-4(fp)
8038cb4: 11000524 muli r4,r2,20
8038cb8: e0fffe17 ldw r3,-8(fp)
8038cbc: 008201b4 movhi r2,2054
8038cc0: 2085883a add r2,r4,r2
8038cc4: 10f91c15 stw r3,-7056(r2)
intimers[i].parm = parm;
8038cc8: e0bfff17 ldw r2,-4(fp)
8038ccc: 11000524 muli r4,r2,20
8038cd0: e0fffc17 ldw r3,-16(fp)
8038cd4: 008201b4 movhi r2,2054
8038cd8: 2085883a add r2,r4,r2
8038cdc: 10f91d15 stw r3,-7052(r2)
/* set interval, in TPS (cticks) units */
intimers[i].interval = (msecs * TPS)/1000;
8038ce0: e0bffd17 ldw r2,-12(fp)
8038ce4: 01400284 movi r5,10
8038ce8: 1009883a mov r4,r2
8038cec: 800cf000 call 800cf00 <__divsi3>
8038cf0: 1009883a mov r4,r2
8038cf4: e0bfff17 ldw r2,-4(fp)
8038cf8: 10c00524 muli r3,r2,20
8038cfc: 008201b4 movhi r2,2054
8038d00: 1885883a add r2,r3,r2
8038d04: 11391e15 stw r4,-7048(r2)
intimers[i].tmo = intimers[i].interval + cticks; /* first tmo */
8038d08: e0bfff17 ldw r2,-4(fp)
8038d0c: 10c00524 muli r3,r2,20
8038d10: 008201b4 movhi r2,2054
8038d14: 1885883a add r2,r3,r2
8038d18: 10f91e17 ldw r3,-7048(r2)
8038d1c: d0a07d17 ldw r2,-32268(gp)
8038d20: 1887883a add r3,r3,r2
8038d24: e0bfff17 ldw r2,-4(fp)
8038d28: 11000524 muli r4,r2,20
8038d2c: 008201b4 movhi r2,2054
8038d30: 2085883a add r2,r4,r2
8038d34: 10f91f15 stw r3,-7044(r2)
intimers[i].inuse = FALSE;
8038d38: e0bfff17 ldw r2,-4(fp)
8038d3c: 10c00524 muli r3,r2,20
8038d40: 008201b4 movhi r2,2054
8038d44: 1885883a add r2,r3,r2
8038d48: 10392015 stw zero,-7040(r2)
numtimers++;
8038d4c: d0a09317 ldw r2,-32180(gp)
8038d50: 10800044 addi r2,r2,1
8038d54: d0a09315 stw r2,-32180(gp)
return (long)&intimers[i];
8038d58: e0bfff17 ldw r2,-4(fp)
8038d5c: 10c00524 muli r3,r2,20
8038d60: 008201b4 movhi r2,2054
8038d64: 10b91c04 addi r2,r2,-7056
8038d68: 1885883a add r2,r3,r2
8038d6c: 00000706 br 8038d8c <in_timerset+0x118>
for(i = 0; i < NUM_INTIMERS; i++)
8038d70: e0bfff17 ldw r2,-4(fp)
8038d74: 10800044 addi r2,r2,1
8038d78: e0bfff15 stw r2,-4(fp)
8038d7c: e0bfff17 ldw r2,-4(fp)
8038d80: 10800150 cmplti r2,r2,5
8038d84: 103fc41e bne r2,zero,8038c98 <in_timerset+0x24>
}
}
return 0;
8038d88: 0005883a mov r2,zero
}
8038d8c: e037883a mov sp,fp
8038d90: dfc00117 ldw ra,4(sp)
8038d94: df000017 ldw fp,0(sp)
8038d98: dec00204 addi sp,sp,8
8038d9c: f800283a ret
08038da0 <in_timerkill>:
*/
int
in_timerkill(long timer)
{
8038da0: defffc04 addi sp,sp,-16
8038da4: dfc00315 stw ra,12(sp)
8038da8: df000215 stw fp,8(sp)
8038dac: df000204 addi fp,sp,8
8038db0: e13ffe15 stw r4,-8(fp)
int i;
for(i = 0; i < NUM_INTIMERS; i++)
8038db4: e03fff15 stw zero,-4(fp)
8038db8: 00001506 br 8038e10 <in_timerkill+0x70>
{
if(timer == (long)&intimers[i])
8038dbc: e0bfff17 ldw r2,-4(fp)
8038dc0: 10c00524 muli r3,r2,20
8038dc4: 008201b4 movhi r2,2054
8038dc8: 10b91c04 addi r2,r2,-7056
8038dcc: 1885883a add r2,r3,r2
8038dd0: 1007883a mov r3,r2
8038dd4: e0bffe17 ldw r2,-8(fp)
8038dd8: 10c00a1e bne r2,r3,8038e04 <in_timerkill+0x64>
{
intimers[i].callback = NULL;
8038ddc: e0bfff17 ldw r2,-4(fp)
8038de0: 10c00524 muli r3,r2,20
8038de4: 008201b4 movhi r2,2054
8038de8: 1885883a add r2,r3,r2
8038dec: 10391c15 stw zero,-7056(r2)
numtimers--;
8038df0: d0a09317 ldw r2,-32180(gp)
8038df4: 10bfffc4 addi r2,r2,-1
8038df8: d0a09315 stw r2,-32180(gp)
return 0; /* OK return */
8038dfc: 0005883a mov r2,zero
8038e00: 00000806 br 8038e24 <in_timerkill+0x84>
for(i = 0; i < NUM_INTIMERS; i++)
8038e04: e0bfff17 ldw r2,-4(fp)
8038e08: 10800044 addi r2,r2,1
8038e0c: e0bfff15 stw r2,-4(fp)
8038e10: e0bfff17 ldw r2,-4(fp)
8038e14: 10800150 cmplti r2,r2,5
8038e18: 103fe81e bne r2,zero,8038dbc <in_timerkill+0x1c>
}
}
dtrap(); /* timer to kill not found */
8038e1c: 8028cd40 call 8028cd4 <dtrap>
return ENP_PARAM;
8038e20: 00bffd84 movi r2,-10
}
8038e24: e037883a mov sp,fp
8038e28: dfc00117 ldw ra,4(sp)
8038e2c: df000017 ldw fp,0(sp)
8038e30: dec00204 addi sp,sp,8
8038e34: f800283a ret
08038e38 <create_apptasks>:
#endif
/* per-application thread definitions */
int
create_apptasks(void)
{
8038e38: defffe04 addi sp,sp,-8
8038e3c: df000115 stw fp,4(sp)
8038e40: df000104 addi fp,sp,4
int e = 0;
8038e44: e03fff15 stw zero,-4(fp)
#endif
/*
* Altera Niche Stack Nios port modification:
* return error code, if any
*/
return e;
8038e48: e0bfff17 ldw r2,-4(fp)
}
8038e4c: e037883a mov sp,fp
8038e50: df000017 ldw fp,0(sp)
8038e54: dec00104 addi sp,sp,4
8038e58: f800283a ret
08038e5c <task_stats>:
*/
void
task_stats(void * pio)
{
8038e5c: defffd04 addi sp,sp,-12
8038e60: dfc00215 stw ra,8(sp)
8038e64: df000115 stw fp,4(sp)
8038e68: df000104 addi fp,sp,4
8038e6c: e13fff15 stw r4,-4(fp)
ns_printf(pio, "Task wakeups:");
8038e70: 01420174 movhi r5,2053
8038e74: 296b3e04 addi r5,r5,-21256
8038e78: e13fff17 ldw r4,-4(fp)
8038e7c: 80273900 call 8027390 <ns_printf>
#ifndef NO_INET_STACK
ns_printf(pio, "netmain: %lu\n", netmain_wakes);
8038e80: d0a06d17 ldw r2,-32332(gp)
8038e84: 100d883a mov r6,r2
8038e88: 01420174 movhi r5,2053
8038e8c: 296b4204 addi r5,r5,-21240
8038e90: e13fff17 ldw r4,-4(fp)
8038e94: 80273900 call 8027390 <ns_printf>
#endif
#ifndef NO_INET_TICK
ns_printf(pio, "nettick: %lu\n", nettick_wakes);
8038e98: d0a06e17 ldw r2,-32328(gp)
8038e9c: 100d883a mov r6,r2
8038ea0: 01420174 movhi r5,2053
8038ea4: 296b4604 addi r5,r5,-21224
8038ea8: e13fff17 ldw r4,-4(fp)
8038eac: 80273900 call 8027390 <ns_printf>
ns_printf(pio, "browtask: %lu ", browtask_wakes);
#endif
#ifdef INCLUDE_SSLAPP
ns_printf(pio, "INCLUDE_SSLAPP: %lu ", sslapp_wakes);
#endif
ns_printf(pio, "\n");
8038eb0: 01420174 movhi r5,2053
8038eb4: 296b4a04 addi r5,r5,-21208
8038eb8: e13fff17 ldw r4,-4(fp)
8038ebc: 80273900 call 8027390 <ns_printf>
}
8038ec0: 0001883a nop
8038ec4: e037883a mov sp,fp
8038ec8: dfc00117 ldw ra,4(sp)
8038ecc: df000017 ldw fp,0(sp)
8038ed0: dec00204 addi sp,sp,8
8038ed4: f800283a ret
08038ed8 <fcntl>:
* (for files and device drivers) or calls the InterNiche bsd_ioctl for
* sockets.
*/
int fcntl (int file, int cmd, ...)
{
8038ed8: defff804 addi sp,sp,-32
8038edc: dfc00515 stw ra,20(sp)
8038ee0: df000415 stw fp,16(sp)
8038ee4: df000404 addi fp,sp,16
8038ee8: e13ffd15 stw r4,-12(fp)
8038eec: e17ffc15 stw r5,-16(fp)
8038ef0: e1800215 stw r6,8(fp)
8038ef4: e1c00315 stw r7,12(fp)
long flags;
va_list argp;
if (file < ALT_MAX_FD)
8038ef8: e0bffd17 ldw r2,-12(fp)
8038efc: 10800408 cmpgei r2,r2,16
8038f00: 10000c1e bne r2,zero,8038f34 <fcntl+0x5c>
{
va_start(argp, cmd);
8038f04: e0800204 addi r2,fp,8
8038f08: e0bffe15 stw r2,-8(fp)
flags = va_arg(argp, long);
8038f0c: e0bffe17 ldw r2,-8(fp)
8038f10: 10c00104 addi r3,r2,4
8038f14: e0fffe15 stw r3,-8(fp)
8038f18: 10800017 ldw r2,0(r2)
8038f1c: e0bfff15 stw r2,-4(fp)
va_end(argp);
return alt_fcntl(file, cmd, flags);
8038f20: e1bfff17 ldw r6,-4(fp)
8038f24: e17ffc17 ldw r5,-16(fp)
8038f28: e13ffd17 ldw r4,-12(fp)
8038f2c: 80426f40 call 80426f4 <alt_fcntl>
8038f30: 00000c06 br 8038f64 <fcntl+0x8c>
}
else
{
va_start(argp, cmd);
8038f34: e0800204 addi r2,fp,8
8038f38: e0bffe15 stw r2,-8(fp)
flags = va_arg(argp, long);
8038f3c: e0bffe17 ldw r2,-8(fp)
8038f40: 10c00104 addi r3,r2,4
8038f44: e0fffe15 stw r3,-8(fp)
8038f48: 10800017 ldw r2,0(r2)
8038f4c: e0bfff15 stw r2,-4(fp)
va_end(argp);
return bsd_ioctl(file, cmd, flags);
8038f50: e0bffc17 ldw r2,-16(fp)
8038f54: e1bfff17 ldw r6,-4(fp)
8038f58: 100b883a mov r5,r2
8038f5c: e13ffd17 ldw r4,-12(fp)
8038f60: 802680c0 call 802680c <bsd_ioctl>
}
}
8038f64: e037883a mov sp,fp
8038f68: dfc00117 ldw ra,4(sp)
8038f6c: df000017 ldw fp,0(sp)
8038f70: dec00404 addi sp,sp,16
8038f74: f800283a ret
08038f78 <icmprcv>:
};
#endif /* USER_PING_TSTAMP */
int
icmprcv(PACKET p) /* the incoming packet */
{
8038f78: deffef04 addi sp,sp,-68
8038f7c: dfc01015 stw ra,64(sp)
8038f80: df000f15 stw fp,60(sp)
8038f84: dc400e15 stw r17,56(sp)
8038f88: dc000d15 stw r16,52(sp)
8038f8c: df000f04 addi fp,sp,60
8038f90: e13ff315 stw r4,-52(fp)
unsigned short xsum;
#ifdef FULL_ICMP
struct redirect * rd;
struct destun * pdp;
#endif /* FULL_ICMP */
char sav_ch = 0;
8038f94: e03ffdc5 stb zero,-9(fp)
int i;
icmp_mib.icmpInMsgs++; /* received one more icmp */
8038f98: 008201b4 movhi r2,2054
8038f9c: 10b93517 ldw r2,-6956(r2)
8038fa0: 10c00044 addi r3,r2,1
8038fa4: 008201b4 movhi r2,2054
8038fa8: 10f93515 stw r3,-6956(r2)
pip = ip_head(p); /* find IP header */
8038fac: e0bff317 ldw r2,-52(fp)
8038fb0: 10800317 ldw r2,12(r2)
8038fb4: e0bffc15 stw r2,-16(fp)
len = p->nb_plen - (ip_hlen(pip)); /* strip IP header length */
8038fb8: e0bff317 ldw r2,-52(fp)
8038fbc: 10c00417 ldw r3,16(r2)
8038fc0: e0bffc17 ldw r2,-16(fp)
8038fc4: 10800003 ldbu r2,0(r2)
8038fc8: 10803fcc andi r2,r2,255
8038fcc: 100490ba slli r2,r2,2
8038fd0: 10800f0c andi r2,r2,60
8038fd4: 1885c83a sub r2,r3,r2
8038fd8: e0bffb15 stw r2,-20(fp)
host = p->fhost; /* filled in by IP layer */
8038fdc: e0bff317 ldw r2,-52(fp)
8038fe0: 10800717 ldw r2,28(r2)
8038fe4: e0bffa15 stw r2,-24(fp)
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
8038fe8: d0a06617 ldw r2,-32360(gp)
8038fec: 1081000c andi r2,r2,1024
8038ff0: 10001526 beq r2,zero,8039048 <icmprcv+0xd0>
8038ff4: d0a06617 ldw r2,-32360(gp)
8038ff8: 1080800c andi r2,r2,512
8038ffc: 10001226 beq r2,zero,8039048 <icmprcv+0xd0>
dprintf("ICMP: p[%u] from %u.%u.%u.%u\n", len, PUSH_IPADDR(host));
8039000: e0bffa17 ldw r2,-24(fp)
8039004: 11003fcc andi r4,r2,255
8039008: e0bffa17 ldw r2,-24(fp)
803900c: 1004d23a srli r2,r2,8
8039010: 11403fcc andi r5,r2,255
8039014: e0bffa17 ldw r2,-24(fp)
8039018: 1004d43a srli r2,r2,16
803901c: 10803fcc andi r2,r2,255
8039020: e0fffa17 ldw r3,-24(fp)
8039024: 1806d63a srli r3,r3,24
8039028: d8c00115 stw r3,4(sp)
803902c: d8800015 stw r2,0(sp)
8039030: 280f883a mov r7,r5
8039034: 200d883a mov r6,r4
8039038: e17ffb17 ldw r5,-20(fp)
803903c: 01020174 movhi r4,2053
8039040: 212b4b04 addi r4,r4,-21204
8039044: 8002c780 call 8002c78 <printf>
#endif
e = (struct ping *)ip_data(pip); /* finally, extract ICMP header */
8039048: e0bffc17 ldw r2,-16(fp)
803904c: 10800003 ldbu r2,0(r2)
8039050: 10803fcc andi r2,r2,255
8039054: 100490ba slli r2,r2,2
8039058: 10800f0c andi r2,r2,60
803905c: e0fffc17 ldw r3,-16(fp)
8039060: 1885883a add r2,r3,r2
8039064: e0bff915 stw r2,-28(fp)
osum = e->pchksum;
8039068: e0bff917 ldw r2,-28(fp)
803906c: 1080008b ldhu r2,2(r2)
8039070: e0bff88d sth r2,-30(fp)
e->pchksum = 0;
8039074: e0bff917 ldw r2,-28(fp)
8039078: 1000008d sth zero,2(r2)
if (len&1)
803907c: e0bffb17 ldw r2,-20(fp)
8039080: 1080004c andi r2,r2,1
8039084: 10000926 beq r2,zero,80390ac <icmprcv+0x134>
{
sav_ch = *(((char *) e) + len);
8039088: e0fff917 ldw r3,-28(fp)
803908c: e0bffb17 ldw r2,-20(fp)
8039090: 1885883a add r2,r3,r2
8039094: 10800003 ldbu r2,0(r2)
8039098: e0bffdc5 stb r2,-9(fp)
((char *)e)[len] = 0;
803909c: e0fff917 ldw r3,-28(fp)
80390a0: e0bffb17 ldw r2,-20(fp)
80390a4: 1885883a add r2,r3,r2
80390a8: 10000005 stb zero,0(r2)
}
xsum = ~cksum(e, (len+1)>>1);
80390ac: e0bffb17 ldw r2,-20(fp)
80390b0: 10800044 addi r2,r2,1
80390b4: 1004d07a srli r2,r2,1
80390b8: 100b883a mov r5,r2
80390bc: e13ff917 ldw r4,-28(fp)
80390c0: 8026d7c0 call 8026d7c <cksum>
80390c4: 0084303a nor r2,zero,r2
80390c8: e0bff80d sth r2,-32(fp)
if (len&1) *(((char *) e) + len) = sav_ch;
80390cc: e0bffb17 ldw r2,-20(fp)
80390d0: 1080004c andi r2,r2,1
80390d4: 10000526 beq r2,zero,80390ec <icmprcv+0x174>
80390d8: e0fff917 ldw r3,-28(fp)
80390dc: e0bffb17 ldw r2,-20(fp)
80390e0: 1885883a add r2,r3,r2
80390e4: e0fffdc3 ldbu r3,-9(fp)
80390e8: 10c00005 stb r3,0(r2)
if (xsum != osum)
80390ec: e0fff80b ldhu r3,-32(fp)
80390f0: e0bff88b ldhu r2,-30(fp)
80390f4: 18802226 beq r3,r2,8039180 <icmprcv+0x208>
{
e->pchksum = osum;
80390f8: e0bff917 ldw r2,-28(fp)
80390fc: e0fff88b ldhu r3,-30(fp)
8039100: 10c0008d sth r3,2(r2)
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
8039104: d0a06617 ldw r2,-32360(gp)
8039108: 1081000c andi r2,r2,1024
803910c: 10000f26 beq r2,zero,803914c <icmprcv+0x1d4>
8039110: d0a06617 ldw r2,-32360(gp)
8039114: 1080800c andi r2,r2,512
8039118: 10000c26 beq r2,zero,803914c <icmprcv+0x1d4>
{
dprintf("ICMP: Bad xsum %04x should have been %04x\n",
803911c: e0bff88b ldhu r2,-30(fp)
8039120: e0fff80b ldhu r3,-32(fp)
8039124: 180d883a mov r6,r3
8039128: 100b883a mov r5,r2
803912c: 01020174 movhi r4,2053
8039130: 212b5304 addi r4,r4,-21172
8039134: 8002c780 call 8002c78 <printf>
osum, xsum);
if (NDEBUG & DUMP) ip_dump(p);
8039138: d0a06617 ldw r2,-32360(gp)
803913c: 1080008c andi r2,r2,2
8039140: 10000226 beq r2,zero,803914c <icmprcv+0x1d4>
8039144: e13ff317 ldw r4,-52(fp)
8039148: 803b0cc0 call 803b0cc <ip_dump>
}
#endif
icmp_mib.icmpInErrors++;
803914c: 008201b4 movhi r2,2054
8039150: 10b93617 ldw r2,-6952(r2)
8039154: 10c00044 addi r3,r2,1
8039158: 008201b4 movhi r2,2054
803915c: 10f93615 stw r3,-6952(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
8039160: 01000084 movi r4,2
8039164: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
8039168: e13ff317 ldw r4,-52(fp)
803916c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8039170: 01000084 movi r4,2
8039174: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_BAD_HEADER;
8039178: 00bff804 movi r2,-32
803917c: 00022e06 br 8039a38 <icmprcv+0xac0>
}
e->pchksum = osum;
8039180: e0bff917 ldw r2,-28(fp)
8039184: e0fff88b ldhu r3,-30(fp)
8039188: 10c0008d sth r3,2(r2)
switch (e->ptype)
803918c: e0bff917 ldw r2,-28(fp)
8039190: 10800003 ldbu r2,0(r2)
8039194: 10803fcc andi r2,r2,255
8039198: 1080201c xori r2,r2,128
803919c: 10bfe004 addi r2,r2,-128
80391a0: 10c00428 cmpgeui r3,r2,16
80391a4: 18020a1e bne r3,zero,80399d0 <icmprcv+0xa58>
80391a8: 100690ba slli r3,r2,2
80391ac: 00820134 movhi r2,2052
80391b0: 1885883a add r2,r3,r2
80391b4: 10a46f17 ldw r2,-28228(r2)
80391b8: 1000683a jmp r2
80391bc: 08039454 ori zero,at,3665
80391c0: 080399d0 cmplti zero,at,3687
80391c4: 080399d0 cmplti zero,at,3687
80391c8: 08039474 orhi zero,at,3665
80391cc: 08039568 cmpgeui zero,at,3669
80391d0: 080395fc xorhi zero,at,3671
80391d4: 080399d0 cmplti zero,at,3687
80391d8: 080399d0 cmplti zero,at,3687
80391dc: 080391fc xorhi zero,at,3655
80391e0: 080399d0 cmplti zero,at,3687
80391e4: 080399d0 cmplti zero,at,3687
80391e8: 08039728 cmpgeui zero,at,3676
80391ec: 08039828 cmpgeui zero,at,3680
80391f0: 08039884 addi zero,at,3682
80391f4: 080399d0 cmplti zero,at,3687
80391f8: 0803999c xori zero,at,3686
{
case ECHOREQ: /* got ping request, send reply */
icmp_mib.icmpInEchos++;
80391fc: 008201b4 movhi r2,2054
8039200: 10b93c17 ldw r2,-6928(r2)
8039204: 10c00044 addi r3,r2,1
8039208: 008201b4 movhi r2,2054
803920c: 10f93c15 stw r3,-6928(r2)
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
8039210: d0a06617 ldw r2,-32360(gp)
8039214: 1081000c andi r2,r2,1024
8039218: 10001426 beq r2,zero,803926c <icmprcv+0x2f4>
803921c: d0a06617 ldw r2,-32360(gp)
8039220: 1080800c andi r2,r2,512
8039224: 10001126 beq r2,zero,803926c <icmprcv+0x2f4>
dprintf("ICMP: echo reply to %u.%u.%u.%u\n", PUSH_IPADDR(host));
8039228: e0bffa17 ldw r2,-24(fp)
803922c: 10c03fcc andi r3,r2,255
8039230: e0bffa17 ldw r2,-24(fp)
8039234: 1004d23a srli r2,r2,8
8039238: 11003fcc andi r4,r2,255
803923c: e0bffa17 ldw r2,-24(fp)
8039240: 1004d43a srli r2,r2,16
8039244: 11403fcc andi r5,r2,255
8039248: e0bffa17 ldw r2,-24(fp)
803924c: 1004d63a srli r2,r2,24
8039250: d8800015 stw r2,0(sp)
8039254: 280f883a mov r7,r5
8039258: 200d883a mov r6,r4
803925c: 180b883a mov r5,r3
8039260: 01020174 movhi r4,2053
8039264: 212b5e04 addi r4,r4,-21128
8039268: 8002c780 call 8002c78 <printf>
#endif
e->ptype = ECHOREP;
803926c: e0bff917 ldw r2,-28(fp)
8039270: 10000005 stb zero,0(r2)
e->pchksum = 0;
8039274: e0bff917 ldw r2,-28(fp)
8039278: 1000008d sth zero,2(r2)
if (len&1) /* pad odd length packets for checksum routine */
803927c: e0bffb17 ldw r2,-20(fp)
8039280: 1080004c andi r2,r2,1
8039284: 10000926 beq r2,zero,80392ac <icmprcv+0x334>
{
sav_ch = *(((char *) e) + len);
8039288: e0fff917 ldw r3,-28(fp)
803928c: e0bffb17 ldw r2,-20(fp)
8039290: 1885883a add r2,r3,r2
8039294: 10800003 ldbu r2,0(r2)
8039298: e0bffdc5 stb r2,-9(fp)
((char *)e)[len] = 0;
803929c: e0fff917 ldw r3,-28(fp)
80392a0: e0bffb17 ldw r2,-20(fp)
80392a4: 1885883a add r2,r3,r2
80392a8: 10000005 stb zero,0(r2)
}
e->pchksum = ~cksum(e, (len+1)>>1);
80392ac: e0bffb17 ldw r2,-20(fp)
80392b0: 10800044 addi r2,r2,1
80392b4: 1004d07a srli r2,r2,1
80392b8: 100b883a mov r5,r2
80392bc: e13ff917 ldw r4,-28(fp)
80392c0: 8026d7c0 call 8026d7c <cksum>
80392c4: 0084303a nor r2,zero,r2
80392c8: 1007883a mov r3,r2
80392cc: e0bff917 ldw r2,-28(fp)
80392d0: 10c0008d sth r3,2(r2)
if (len&1) *(((char *) e) + len) = sav_ch;
80392d4: e0bffb17 ldw r2,-20(fp)
80392d8: 1080004c andi r2,r2,1
80392dc: 10000526 beq r2,zero,80392f4 <icmprcv+0x37c>
80392e0: e0fff917 ldw r3,-28(fp)
80392e4: e0bffb17 ldw r2,-20(fp)
80392e8: 1885883a add r2,r3,r2
80392ec: e0fffdc3 ldbu r3,-9(fp)
80392f0: 10c00005 stb r3,0(r2)
/* check to see if the destination is the IPv4 broadcast address,
* or if the destination is a multicast group address, or if the
* destination address is the subnet-directed broadcast
*/
if ((pip->ip_dest == 0xffffffff) ||
80392f4: e0bffc17 ldw r2,-16(fp)
80392f8: 10800417 ldw r2,16(r2)
80392fc: 10bfffe0 cmpeqi r2,r2,-1
8039300: 10001f1e bne r2,zero,8039380 <icmprcv+0x408>
#ifdef IP_MULTICAST
(IN_MULTICAST(ntohl(pip->ip_dest))) ||
8039304: e0bffc17 ldw r2,-16(fp)
8039308: 10800417 ldw r2,16(r2)
803930c: 1006d63a srli r3,r2,24
8039310: e0bffc17 ldw r2,-16(fp)
8039314: 10800417 ldw r2,16(r2)
8039318: 1004d23a srli r2,r2,8
803931c: 10bfc00c andi r2,r2,65280
8039320: 1886b03a or r3,r3,r2
8039324: e0bffc17 ldw r2,-16(fp)
8039328: 10800417 ldw r2,16(r2)
803932c: 1004923a slli r2,r2,8
8039330: 10803fec andhi r2,r2,255
8039334: 1886b03a or r3,r3,r2
8039338: e0bffc17 ldw r2,-16(fp)
803933c: 10800417 ldw r2,16(r2)
8039340: 1004963a slli r2,r2,24
8039344: 1884b03a or r2,r3,r2
8039348: 10fc002c andhi r3,r2,61440
if ((pip->ip_dest == 0xffffffff) ||
803934c: 00b80034 movhi r2,57344
8039350: 18800b26 beq r3,r2,8039380 <icmprcv+0x408>
#endif
(pip->ip_dest == (p->net->n_ipaddr | (~(p->net->snmask)))))
8039354: e0bffc17 ldw r2,-16(fp)
8039358: 10c00417 ldw r3,16(r2)
803935c: e0bff317 ldw r2,-52(fp)
8039360: 10800617 ldw r2,24(r2)
8039364: 11000a17 ldw r4,40(r2)
8039368: e0bff317 ldw r2,-52(fp)
803936c: 10800617 ldw r2,24(r2)
8039370: 10800c17 ldw r2,48(r2)
8039374: 0084303a nor r2,zero,r2
8039378: 2084b03a or r2,r4,r2
(IN_MULTICAST(ntohl(pip->ip_dest))) ||
803937c: 1880061e bne r3,r2,8039398 <icmprcv+0x420>
{
pip->ip_src = p->net->n_ipaddr;
8039380: e0bff317 ldw r2,-52(fp)
8039384: 10800617 ldw r2,24(r2)
8039388: 10c00a17 ldw r3,40(r2)
803938c: e0bffc17 ldw r2,-16(fp)
8039390: 10c00315 stw r3,12(r2)
8039394: 00000406 br 80393a8 <icmprcv+0x430>
}
else pip->ip_src = pip->ip_dest;
8039398: e0bffc17 ldw r2,-16(fp)
803939c: 10c00417 ldw r3,16(r2)
80393a0: e0bffc17 ldw r2,-16(fp)
80393a4: 10c00315 stw r3,12(r2)
pip->ip_dest = host;
80393a8: e0bffc17 ldw r2,-16(fp)
80393ac: e0fffa17 ldw r3,-24(fp)
80393b0: 10c00415 stw r3,16(r2)
icmp_mib.icmpOutEchoReps++;
80393b4: 008201b4 movhi r2,2054
80393b8: 10b94a17 ldw r2,-6872(r2)
80393bc: 10c00044 addi r3,r2,1
80393c0: 008201b4 movhi r2,2054
80393c4: 10f94a15 stw r3,-6872(r2)
icmp_mib.icmpOutMsgs++;
80393c8: 008201b4 movhi r2,2054
80393cc: 10b94217 ldw r2,-6904(r2)
80393d0: 10c00044 addi r3,r2,1
80393d4: 008201b4 movhi r2,2054
80393d8: 10f94215 stw r3,-6904(r2)
p->fhost = host;
80393dc: e0bff317 ldw r2,-52(fp)
80393e0: e0fffa17 ldw r3,-24(fp)
80393e4: 10c00715 stw r3,28(r2)
p->nb_prot += ip_hlen(pip); /* move pointer past IP to ICMP */
80393e8: e0bff317 ldw r2,-52(fp)
80393ec: 10c00317 ldw r3,12(r2)
80393f0: e0bffc17 ldw r2,-16(fp)
80393f4: 10800003 ldbu r2,0(r2)
80393f8: 10803fcc andi r2,r2,255
80393fc: 100490ba slli r2,r2,2
8039400: 10800f0c andi r2,r2,60
8039404: 1887883a add r3,r3,r2
8039408: e0bff317 ldw r2,-52(fp)
803940c: 10c00315 stw r3,12(r2)
p->nb_plen = len;
8039410: e0bff317 ldw r2,-52(fp)
8039414: e0fffb17 ldw r3,-20(fp)
8039418: 10c00415 stw r3,16(r2)
i = ip_write(ICMP_PROT, p);
803941c: e17ff317 ldw r5,-52(fp)
8039420: 01000044 movi r4,1
8039424: 803a9e80 call 803a9e8 <ip_write>
8039428: e0bff715 stw r2,-36(fp)
if (i < 0)
803942c: e0bff717 ldw r2,-36(fp)
8039430: 1000060e bge r2,zero,803944c <icmprcv+0x4d4>
{
#ifdef NPDEBUG
if (NDEBUG & (UPCTRACE))
8039434: d0a06617 ldw r2,-32360(gp)
8039438: 1081000c andi r2,r2,1024
803943c: 10000326 beq r2,zero,803944c <icmprcv+0x4d4>
dprintf("icmp: reply failed\n");
8039440: 01020174 movhi r4,2053
8039444: 212b6704 addi r4,r4,-21092
8039448: 8002d9c0 call 8002d9c <puts>
#endif
}
/* reused p will be freed by net->xxx_send() */
return 0;
803944c: 0005883a mov r2,zero
8039450: 00017906 br 8039a38 <icmprcv+0xac0>
case ECHOREP:
icmp_mib.icmpInEchoReps++;
8039454: 008201b4 movhi r2,2054
8039458: 10b93d17 ldw r2,-6924(r2)
803945c: 10c00044 addi r3,r2,1
8039460: 008201b4 movhi r2,2054
8039464: 10f93d15 stw r3,-6924(r2)
/*
* Altera Niche Stack Nios port modification
*/
#if defined(ALT_INICHE) && !defined(PING_APP) && defined(IP_RAW)
return(ip_raw_input(p));
8039468: e13ff317 ldw r4,-52(fp)
803946c: 803c7d00 call 803c7d0 <ip_raw_input>
8039470: 00017106 br 8039a38 <icmprcv+0xac0>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
return(0);
#endif /* PING_APP */
#ifdef FULL_ICMP
case DESTIN:
icmp_mib.icmpInDestUnreachs++;
8039474: 008201b4 movhi r2,2054
8039478: 10b93717 ldw r2,-6948(r2)
803947c: 10c00044 addi r3,r2,1
8039480: 008201b4 movhi r2,2054
8039484: 10f93715 stw r3,-6948(r2)
pdp = (struct destun *)e;
8039488: e0bff917 ldw r2,-28(fp)
803948c: e0bff615 stw r2,-40(fp)
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
8039490: d0a06617 ldw r2,-32360(gp)
8039494: 1081000c andi r2,r2,1024
8039498: 10002f26 beq r2,zero,8039558 <icmprcv+0x5e0>
{
dprintf("ICMP: got dest unreachable type ");
803949c: 01020174 movhi r4,2053
80394a0: 212b6c04 addi r4,r4,-21072
80394a4: 8002c780 call 8002c78 <printf>
dprintf("%u on %u.%u.%u.%u ", pdp->dcode,
80394a8: e0bff617 ldw r2,-40(fp)
80394ac: 10800043 ldbu r2,1(r2)
80394b0: 11003fcc andi r4,r2,255
80394b4: 2100201c xori r4,r4,128
80394b8: 213fe004 addi r4,r4,-128
PUSH_IPADDR(pdp->dip.ip_dest));
80394bc: e0bff617 ldw r2,-40(fp)
80394c0: 10800617 ldw r2,24(r2)
dprintf("%u on %u.%u.%u.%u ", pdp->dcode,
80394c4: 11403fcc andi r5,r2,255
PUSH_IPADDR(pdp->dip.ip_dest));
80394c8: e0bff617 ldw r2,-40(fp)
80394cc: 10800617 ldw r2,24(r2)
80394d0: 1004d23a srli r2,r2,8
dprintf("%u on %u.%u.%u.%u ", pdp->dcode,
80394d4: 11803fcc andi r6,r2,255
PUSH_IPADDR(pdp->dip.ip_dest));
80394d8: e0bff617 ldw r2,-40(fp)
80394dc: 10800617 ldw r2,24(r2)
80394e0: 1004d43a srli r2,r2,16
dprintf("%u on %u.%u.%u.%u ", pdp->dcode,
80394e4: 10803fcc andi r2,r2,255
PUSH_IPADDR(pdp->dip.ip_dest));
80394e8: e0fff617 ldw r3,-40(fp)
80394ec: 18c00617 ldw r3,24(r3)
80394f0: 1806d63a srli r3,r3,24
dprintf("%u on %u.%u.%u.%u ", pdp->dcode,
80394f4: d8c00115 stw r3,4(sp)
80394f8: d8800015 stw r2,0(sp)
80394fc: 300f883a mov r7,r6
8039500: 280d883a mov r6,r5
8039504: 200b883a mov r5,r4
8039508: 01020174 movhi r4,2053
803950c: 212b7504 addi r4,r4,-21036
8039510: 8002c780 call 8002c78 <printf>
dprintf("from %u.%u.%u.%u\n", PUSH_IPADDR(host));
8039514: e0bffa17 ldw r2,-24(fp)
8039518: 10c03fcc andi r3,r2,255
803951c: e0bffa17 ldw r2,-24(fp)
8039520: 1004d23a srli r2,r2,8
8039524: 11003fcc andi r4,r2,255
8039528: e0bffa17 ldw r2,-24(fp)
803952c: 1004d43a srli r2,r2,16
8039530: 11403fcc andi r5,r2,255
8039534: e0bffa17 ldw r2,-24(fp)
8039538: 1004d63a srli r2,r2,24
803953c: d8800015 stw r2,0(sp)
8039540: 280f883a mov r7,r5
8039544: 200d883a mov r6,r4
8039548: 180b883a mov r5,r3
803954c: 01020174 movhi r4,2053
8039550: 212b7a04 addi r4,r4,-21016
8039554: 8002c780 call 8002c78 <printf>
}
#endif /* NPDEBUG */
icmp_du(p, pdp);
8039558: e17ff617 ldw r5,-40(fp)
803955c: e13ff317 ldw r4,-52(fp)
8039560: 803a01c0 call 803a01c <icmp_du>
break;
8039564: 00013306 br 8039a34 <icmprcv+0xabc>
case SOURCEQ:
icmp_mib.icmpInSrcQuenchs++;
8039568: 008201b4 movhi r2,2054
803956c: 10b93a17 ldw r2,-6936(r2)
8039570: 10c00044 addi r3,r2,1
8039574: 008201b4 movhi r2,2054
8039578: 10f93a15 stw r3,-6936(r2)
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
803957c: d0a06617 ldw r2,-32360(gp)
8039580: 1081000c andi r2,r2,1024
8039584: 10001626 beq r2,zero,80395e0 <icmprcv+0x668>
{
dprintf("ICMP: source quench from %u.%u.%u.%u\n", PUSH_IPADDR(host));
8039588: e0bffa17 ldw r2,-24(fp)
803958c: 10c03fcc andi r3,r2,255
8039590: e0bffa17 ldw r2,-24(fp)
8039594: 1004d23a srli r2,r2,8
8039598: 11003fcc andi r4,r2,255
803959c: e0bffa17 ldw r2,-24(fp)
80395a0: 1004d43a srli r2,r2,16
80395a4: 11403fcc andi r5,r2,255
80395a8: e0bffa17 ldw r2,-24(fp)
80395ac: 1004d63a srli r2,r2,24
80395b0: d8800015 stw r2,0(sp)
80395b4: 280f883a mov r7,r5
80395b8: 200d883a mov r6,r4
80395bc: 180b883a mov r5,r3
80395c0: 01020174 movhi r4,2053
80395c4: 212b7f04 addi r4,r4,-20996
80395c8: 8002c780 call 8002c78 <printf>
if (NDEBUG & DUMP) ip_dump(p);
80395cc: d0a06617 ldw r2,-32360(gp)
80395d0: 1080008c andi r2,r2,2
80395d4: 10000226 beq r2,zero,80395e0 <icmprcv+0x668>
80395d8: e13ff317 ldw r4,-52(fp)
80395dc: 803b0cc0 call 803b0cc <ip_dump>
}
#endif /* NPDEBUG */
LOCK_NET_RESOURCE(FREEQ_RESID);
80395e0: 01000084 movi r4,2
80395e4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
80395e8: e13ff317 ldw r4,-52(fp)
80395ec: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
80395f0: 01000084 movi r4,2
80395f4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
break;
80395f8: 00010e06 br 8039a34 <icmprcv+0xabc>
case REDIR: /* got an icmp redirect */
icmp_mib.icmpInRedirects++;
80395fc: 008201b4 movhi r2,2054
8039600: 10b93b17 ldw r2,-6932(r2)
8039604: 10c00044 addi r3,r2,1
8039608: 008201b4 movhi r2,2054
803960c: 10f93b15 stw r3,-6932(r2)
rd = (struct redirect *)e;
8039610: e0bff917 ldw r2,-28(fp)
8039614: e0bff515 stw r2,-44(fp)
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
8039618: d0a06617 ldw r2,-32360(gp)
803961c: 1081000c andi r2,r2,1024
8039620: 10002a26 beq r2,zero,80396cc <icmprcv+0x754>
{
dprintf("ICMP: rcvd redirect for %u.%u.%u.%u ",
PUSH_IPADDR(rd->rdip.ip_dest));
8039624: e0bff517 ldw r2,-44(fp)
8039628: 10800617 ldw r2,24(r2)
dprintf("ICMP: rcvd redirect for %u.%u.%u.%u ",
803962c: 10c03fcc andi r3,r2,255
PUSH_IPADDR(rd->rdip.ip_dest));
8039630: e0bff517 ldw r2,-44(fp)
8039634: 10800617 ldw r2,24(r2)
8039638: 1004d23a srli r2,r2,8
dprintf("ICMP: rcvd redirect for %u.%u.%u.%u ",
803963c: 11003fcc andi r4,r2,255
PUSH_IPADDR(rd->rdip.ip_dest));
8039640: e0bff517 ldw r2,-44(fp)
8039644: 10800617 ldw r2,24(r2)
8039648: 1004d43a srli r2,r2,16
dprintf("ICMP: rcvd redirect for %u.%u.%u.%u ",
803964c: 11403fcc andi r5,r2,255
PUSH_IPADDR(rd->rdip.ip_dest));
8039650: e0bff517 ldw r2,-44(fp)
8039654: 10800617 ldw r2,24(r2)
8039658: 1004d63a srli r2,r2,24
dprintf("ICMP: rcvd redirect for %u.%u.%u.%u ",
803965c: d8800015 stw r2,0(sp)
8039660: 280f883a mov r7,r5
8039664: 200d883a mov r6,r4
8039668: 180b883a mov r5,r3
803966c: 01020174 movhi r4,2053
8039670: 212b8904 addi r4,r4,-20956
8039674: 8002c780 call 8002c78 <printf>
dprintf("to %u.%u.%u.%u\n", PUSH_IPADDR(rd->rdgw));
8039678: e0bff517 ldw r2,-44(fp)
803967c: 10800117 ldw r2,4(r2)
8039680: 10c03fcc andi r3,r2,255
8039684: e0bff517 ldw r2,-44(fp)
8039688: 10800117 ldw r2,4(r2)
803968c: 1004d23a srli r2,r2,8
8039690: 11003fcc andi r4,r2,255
8039694: e0bff517 ldw r2,-44(fp)
8039698: 10800117 ldw r2,4(r2)
803969c: 1004d43a srli r2,r2,16
80396a0: 11403fcc andi r5,r2,255
80396a4: e0bff517 ldw r2,-44(fp)
80396a8: 10800117 ldw r2,4(r2)
80396ac: 1004d63a srli r2,r2,24
80396b0: d8800015 stw r2,0(sp)
80396b4: 280f883a mov r7,r5
80396b8: 200d883a mov r6,r4
80396bc: 180b883a mov r5,r3
80396c0: 01020174 movhi r4,2053
80396c4: 212b9304 addi r4,r4,-20916
80396c8: 8002c780 call 8002c78 <printf>
}
#endif /* NPDEBUG */
#ifdef IP_ROUTING
/* try to add/update route table */
add_route(rd->rdip.ip_dest, 0xFFFFFFFF, rd->rdgw,
80396cc: e0bff517 ldw r2,-44(fp)
80396d0: 14000617 ldw r16,24(r2)
80396d4: e0bff517 ldw r2,-44(fp)
80396d8: 14400117 ldw r17,4(r2)
80396dc: e0bff317 ldw r2,-52(fp)
80396e0: 10800617 ldw r2,24(r2)
80396e4: 1009883a mov r4,r2
80396e8: 80252fc0 call 80252fc <if_netnumber>
80396ec: 1007883a mov r3,r2
80396f0: 00800104 movi r2,4
80396f4: d8800015 stw r2,0(sp)
80396f8: 180f883a mov r7,r3
80396fc: 880d883a mov r6,r17
8039700: 017fffc4 movi r5,-1
8039704: 8009883a mov r4,r16
8039708: 803cc7c0 call 803cc7c <add_route>
net_num(p->net), IPRP_ICMP);
#endif /* IP_ROUTING */
LOCK_NET_RESOURCE(FREEQ_RESID);
803970c: 01000084 movi r4,2
8039710: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
8039714: e13ff317 ldw r4,-52(fp)
8039718: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803971c: 01000084 movi r4,2
8039720: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
break;
8039724: 0000c306 br 8039a34 <icmprcv+0xabc>
case TIMEX:
icmp_mib.icmpInTimeExcds++;
8039728: 008201b4 movhi r2,2054
803972c: 10b93817 ldw r2,-6944(r2)
8039730: 10c00044 addi r3,r2,1
8039734: 008201b4 movhi r2,2054
8039738: 10f93815 stw r3,-6944(r2)
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
803973c: d0a06617 ldw r2,-32360(gp)
8039740: 1081000c andi r2,r2,1024
8039744: 10003126 beq r2,zero,803980c <icmprcv+0x894>
{
struct timex * pt = (struct timex *)e;
8039748: e0bff917 ldw r2,-28(fp)
803974c: e0bff415 stw r2,-48(fp)
dprintf("ICMP: timex msg from %u.%u.%u.%u\n",
PUSH_IPADDR(p->fhost));
8039750: e0bff317 ldw r2,-52(fp)
8039754: 10800717 ldw r2,28(r2)
dprintf("ICMP: timex msg from %u.%u.%u.%u\n",
8039758: 10c03fcc andi r3,r2,255
PUSH_IPADDR(p->fhost));
803975c: e0bff317 ldw r2,-52(fp)
8039760: 10800717 ldw r2,28(r2)
8039764: 1004d23a srli r2,r2,8
dprintf("ICMP: timex msg from %u.%u.%u.%u\n",
8039768: 11003fcc andi r4,r2,255
PUSH_IPADDR(p->fhost));
803976c: e0bff317 ldw r2,-52(fp)
8039770: 10800717 ldw r2,28(r2)
8039774: 1004d43a srli r2,r2,16
dprintf("ICMP: timex msg from %u.%u.%u.%u\n",
8039778: 11403fcc andi r5,r2,255
PUSH_IPADDR(p->fhost));
803977c: e0bff317 ldw r2,-52(fp)
8039780: 10800717 ldw r2,28(r2)
8039784: 1004d63a srli r2,r2,24
dprintf("ICMP: timex msg from %u.%u.%u.%u\n",
8039788: d8800015 stw r2,0(sp)
803978c: 280f883a mov r7,r5
8039790: 200d883a mov r6,r4
8039794: 180b883a mov r5,r3
8039798: 01020174 movhi r4,2053
803979c: 212b9704 addi r4,r4,-20900
80397a0: 8002c780 call 8002c78 <printf>
dprintf(" about %u.%u.%u.%u\n", PUSH_IPADDR(pt->tip.ip_dest));
80397a4: e0bff417 ldw r2,-48(fp)
80397a8: 10800617 ldw r2,24(r2)
80397ac: 10c03fcc andi r3,r2,255
80397b0: e0bff417 ldw r2,-48(fp)
80397b4: 10800617 ldw r2,24(r2)
80397b8: 1004d23a srli r2,r2,8
80397bc: 11003fcc andi r4,r2,255
80397c0: e0bff417 ldw r2,-48(fp)
80397c4: 10800617 ldw r2,24(r2)
80397c8: 1004d43a srli r2,r2,16
80397cc: 11403fcc andi r5,r2,255
80397d0: e0bff417 ldw r2,-48(fp)
80397d4: 10800617 ldw r2,24(r2)
80397d8: 1004d63a srli r2,r2,24
80397dc: d8800015 stw r2,0(sp)
80397e0: 280f883a mov r7,r5
80397e4: 200d883a mov r6,r4
80397e8: 180b883a mov r5,r3
80397ec: 01020174 movhi r4,2053
80397f0: 212ba004 addi r4,r4,-20864
80397f4: 8002c780 call 8002c78 <printf>
if (NDEBUG & DUMP) ip_dump(p);
80397f8: d0a06617 ldw r2,-32360(gp)
80397fc: 1080008c andi r2,r2,2
8039800: 10000226 beq r2,zero,803980c <icmprcv+0x894>
8039804: e13ff317 ldw r4,-52(fp)
8039808: 803b0cc0 call 803b0cc <ip_dump>
}
#endif /* NPDEBUG */
LOCK_NET_RESOURCE(FREEQ_RESID);
803980c: 01000084 movi r4,2
8039810: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
8039814: e13ff317 ldw r4,-52(fp)
8039818: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803981c: 01000084 movi r4,2
8039820: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
break;
8039824: 00008306 br 8039a34 <icmprcv+0xabc>
case PARAM:
icmp_mib.icmpInParmProbs++;
8039828: 008201b4 movhi r2,2054
803982c: 10b93917 ldw r2,-6940(r2)
8039830: 10c00044 addi r3,r2,1
8039834: 008201b4 movhi r2,2054
8039838: 10f93915 stw r3,-6940(r2)
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
803983c: d0a06617 ldw r2,-32360(gp)
8039840: 1081000c andi r2,r2,1024
8039844: 10000326 beq r2,zero,8039854 <icmprcv+0x8dc>
dprintf("ICMP: got param problem message\n");
8039848: 01020174 movhi r4,2053
803984c: 212ba504 addi r4,r4,-20844
8039850: 8002d9c0 call 8002d9c <puts>
if (NDEBUG & DUMP)
8039854: d0a06617 ldw r2,-32360(gp)
8039858: 1080008c andi r2,r2,2
803985c: 10000226 beq r2,zero,8039868 <icmprcv+0x8f0>
{
ip_dump(p);
8039860: e13ff317 ldw r4,-52(fp)
8039864: 803b0cc0 call 803b0cc <ip_dump>
}
#endif /* NPDEBUG */
LOCK_NET_RESOURCE(FREEQ_RESID);
8039868: 01000084 movi r4,2
803986c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
8039870: e13ff317 ldw r4,-52(fp)
8039874: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8039878: 01000084 movi r4,2
803987c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
break;
8039880: 00006c06 br 8039a34 <icmprcv+0xabc>
case TIMEREQ:
icmp_mib.icmpInTimestamps++;
8039884: 008201b4 movhi r2,2054
8039888: 10b93e17 ldw r2,-6920(r2)
803988c: 10c00044 addi r3,r2,1
8039890: 008201b4 movhi r2,2054
8039894: 10f93e15 stw r3,-6920(r2)
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
8039898: d0a06617 ldw r2,-32360(gp)
803989c: 1081000c andi r2,r2,1024
80398a0: 10000326 beq r2,zero,80398b0 <icmprcv+0x938>
dprintf("ICMP: got timestamp request\n");
80398a4: 01020174 movhi r4,2053
80398a8: 212bad04 addi r4,r4,-20812
80398ac: 8002d9c0 call 8002d9c <puts>
#endif /* NPDEBUG */
e->ptype = TIMEREP;
80398b0: e0bff917 ldw r2,-28(fp)
80398b4: 00c00384 movi r3,14
80398b8: 10c00005 stb r3,0(r2)
e->pchksum = 0;
80398bc: e0bff917 ldw r2,-28(fp)
80398c0: 1000008d sth zero,2(r2)
*/
sstmp->dtstamp[1] = sstmp->dtstamp[2] = user_UTCtime();
}
#endif /* USER_PING_TSTAMP */
e->pchksum = ~cksum(e, sizeof(struct tstamp)>>1);
80398c4: 01400284 movi r5,10
80398c8: e13ff917 ldw r4,-28(fp)
80398cc: 8026d7c0 call 8026d7c <cksum>
80398d0: 0084303a nor r2,zero,r2
80398d4: 1007883a mov r3,r2
80398d8: e0bff917 ldw r2,-28(fp)
80398dc: 10c0008d sth r3,2(r2)
pip->ip_src = pip->ip_dest;
80398e0: e0bffc17 ldw r2,-16(fp)
80398e4: 10c00417 ldw r3,16(r2)
80398e8: e0bffc17 ldw r2,-16(fp)
80398ec: 10c00315 stw r3,12(r2)
pip->ip_dest = host;
80398f0: e0bffc17 ldw r2,-16(fp)
80398f4: e0fffa17 ldw r3,-24(fp)
80398f8: 10c00415 stw r3,16(r2)
icmp_mib.icmpOutMsgs++;
80398fc: 008201b4 movhi r2,2054
8039900: 10b94217 ldw r2,-6904(r2)
8039904: 10c00044 addi r3,r2,1
8039908: 008201b4 movhi r2,2054
803990c: 10f94215 stw r3,-6904(r2)
icmp_mib.icmpOutTimestampReps++;
8039910: 008201b4 movhi r2,2054
8039914: 10b94c17 ldw r2,-6864(r2)
8039918: 10c00044 addi r3,r2,1
803991c: 008201b4 movhi r2,2054
8039920: 10f94c15 stw r3,-6864(r2)
p->nb_prot += ip_hlen(pip); /* move pointer past IP to ICMP */
8039924: e0bff317 ldw r2,-52(fp)
8039928: 10c00317 ldw r3,12(r2)
803992c: e0bffc17 ldw r2,-16(fp)
8039930: 10800003 ldbu r2,0(r2)
8039934: 10803fcc andi r2,r2,255
8039938: 100490ba slli r2,r2,2
803993c: 10800f0c andi r2,r2,60
8039940: 1887883a add r3,r3,r2
8039944: e0bff317 ldw r2,-52(fp)
8039948: 10c00315 stw r3,12(r2)
p->nb_plen = sizeof(struct tstamp);
803994c: e0bff317 ldw r2,-52(fp)
8039950: 00c00504 movi r3,20
8039954: 10c00415 stw r3,16(r2)
p->fhost = host;
8039958: e0bff317 ldw r2,-52(fp)
803995c: e0fffa17 ldw r3,-24(fp)
8039960: 10c00715 stw r3,28(r2)
i = ip_write(ICMP_PROT, p);
8039964: e17ff317 ldw r5,-52(fp)
8039968: 01000044 movi r4,1
803996c: 803a9e80 call 803a9e8 <ip_write>
8039970: e0bff715 stw r2,-36(fp)
if (i < 0)
8039974: e0bff717 ldw r2,-36(fp)
8039978: 1000060e bge r2,zero,8039994 <icmprcv+0xa1c>
{
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
803997c: d0a06617 ldw r2,-32360(gp)
8039980: 1081000c andi r2,r2,1024
8039984: 10000326 beq r2,zero,8039994 <icmprcv+0xa1c>
dprintf("icmp: can't send timestamp reply\n");
8039988: 01020174 movhi r4,2053
803998c: 212bb404 addi r4,r4,-20784
8039990: 8002d9c0 call 8002d9c <puts>
#endif /* NPDEBUG */
}
/* re-used packet was pk_free()d by net->send() */
return (0);
8039994: 0005883a mov r2,zero
8039998: 00002706 br 8039a38 <icmprcv+0xac0>
case INFO:
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
803999c: d0a06617 ldw r2,-32360(gp)
80399a0: 1081000c andi r2,r2,1024
80399a4: 10000326 beq r2,zero,80399b4 <icmprcv+0xa3c>
dprintf("icmp: got info request\n");
80399a8: 01020174 movhi r4,2053
80399ac: 212bbd04 addi r4,r4,-20748
80399b0: 8002d9c0 call 8002d9c <puts>
#endif /* NPDEBUG */
LOCK_NET_RESOURCE(FREEQ_RESID);
80399b4: 01000084 movi r4,2
80399b8: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
80399bc: e13ff317 ldw r4,-52(fp)
80399c0: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
80399c4: 01000084 movi r4,2
80399c8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
break;
80399cc: 00001906 br 8039a34 <icmprcv+0xabc>
#endif /* FULL_ICMP */
default:
#ifdef NPDEBUG
if (NDEBUG & UPCTRACE)
80399d0: d0a06617 ldw r2,-32360(gp)
80399d4: 1081000c andi r2,r2,1024
80399d8: 10000e26 beq r2,zero,8039a14 <icmprcv+0xa9c>
{
dprintf("icmp: unhandled type %u\n", e->ptype);
80399dc: e0bff917 ldw r2,-28(fp)
80399e0: 10800003 ldbu r2,0(r2)
80399e4: 10803fcc andi r2,r2,255
80399e8: 1080201c xori r2,r2,128
80399ec: 10bfe004 addi r2,r2,-128
80399f0: 100b883a mov r5,r2
80399f4: 01020174 movhi r4,2053
80399f8: 212bc304 addi r4,r4,-20724
80399fc: 8002c780 call 8002c78 <printf>
if (NDEBUG & DUMP) ip_dump(p);
8039a00: d0a06617 ldw r2,-32360(gp)
8039a04: 1080008c andi r2,r2,2
8039a08: 10000226 beq r2,zero,8039a14 <icmprcv+0xa9c>
8039a0c: e13ff317 ldw r4,-52(fp)
8039a10: 803b0cc0 call 803b0cc <ip_dump>
}
#endif /* NPDEBUG */
LOCK_NET_RESOURCE(FREEQ_RESID);
8039a14: 01000084 movi r4,2
8039a18: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
8039a1c: e13ff317 ldw r4,-52(fp)
8039a20: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8039a24: 01000084 movi r4,2
8039a28: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_NOT_MINE;
8039a2c: 00800084 movi r2,2
8039a30: 00000106 br 8039a38 <icmprcv+0xac0>
}
#ifdef FULL_ICMP
return ENP_NOT_MINE;
8039a34: 00800084 movi r2,2
#endif /* FULL_ICMP */
}
8039a38: e6fffe04 addi sp,fp,-8
8039a3c: dfc00317 ldw ra,12(sp)
8039a40: df000217 ldw fp,8(sp)
8039a44: dc400117 ldw r17,4(sp)
8039a48: dc000017 ldw r16,0(sp)
8039a4c: dec00404 addi sp,sp,16
8039a50: f800283a ret
08039a54 <icmp_destun>:
icmp_destun(ip_addr host, /* host to complain to */
ip_addr src_addr, /* source address for outgoing ICMP/IP packet header */
struct ip * ip, /* IP header of offending packet */
unsigned typecode, /* type & code of DU to send (PROT, PORT, HOST) */
NET net) /* interface that this packet came in on */
{
8039a54: defff404 addi sp,sp,-48
8039a58: dfc00b15 stw ra,44(sp)
8039a5c: df000a15 stw fp,40(sp)
8039a60: df000a04 addi fp,sp,40
8039a64: e13ffb15 stw r4,-20(fp)
8039a68: e17ffa15 stw r5,-24(fp)
8039a6c: e1bff915 stw r6,-28(fp)
8039a70: e1fff815 stw r7,-32(fp)
struct destun * d;
struct ip * pip;
int i;
#ifdef NPDEBUG
if (NDEBUG & PROTERR)
8039a74: d0a06617 ldw r2,-32360(gp)
8039a78: 1080040c andi r2,r2,16
8039a7c: 10001826 beq r2,zero,8039ae0 <icmp_destun+0x8c>
dprintf("icmp: sending %s dest unreachable to %u.%u.%u.%u\n",
dsts[typecode & 0xFF], PUSH_IPADDR(host));
8039a80: e0bff817 ldw r2,-32(fp)
8039a84: 10803fcc andi r2,r2,255
dprintf("icmp: sending %s dest unreachable to %u.%u.%u.%u\n",
8039a88: 100690ba slli r3,r2,2
8039a8c: 00820174 movhi r2,2053
8039a90: 1885883a add r2,r3,r2
8039a94: 11325017 ldw r4,-14016(r2)
8039a98: e0bffb17 ldw r2,-20(fp)
8039a9c: 11403fcc andi r5,r2,255
dsts[typecode & 0xFF], PUSH_IPADDR(host));
8039aa0: e0bffb17 ldw r2,-20(fp)
8039aa4: 1004d23a srli r2,r2,8
dprintf("icmp: sending %s dest unreachable to %u.%u.%u.%u\n",
8039aa8: 11803fcc andi r6,r2,255
dsts[typecode & 0xFF], PUSH_IPADDR(host));
8039aac: e0bffb17 ldw r2,-20(fp)
8039ab0: 1004d43a srli r2,r2,16
dprintf("icmp: sending %s dest unreachable to %u.%u.%u.%u\n",
8039ab4: 10803fcc andi r2,r2,255
dsts[typecode & 0xFF], PUSH_IPADDR(host));
8039ab8: e0fffb17 ldw r3,-20(fp)
8039abc: 1806d63a srli r3,r3,24
dprintf("icmp: sending %s dest unreachable to %u.%u.%u.%u\n",
8039ac0: d8c00115 stw r3,4(sp)
8039ac4: d8800015 stw r2,0(sp)
8039ac8: 300f883a mov r7,r6
8039acc: 280d883a mov r6,r5
8039ad0: 200b883a mov r5,r4
8039ad4: 01020174 movhi r4,2053
8039ad8: 212bdd04 addi r4,r4,-20620
8039adc: 8002c780 call 8002c78 <printf>
#endif /* NPDEBUG */
LOCK_NET_RESOURCE(FREEQ_RESID);
8039ae0: 01000084 movi r4,2
8039ae4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
p = pk_alloc(512 + IPHSIZ); /* get packet to send icmp dest unreachable */
8039ae8: 01008504 movi r4,532
8039aec: 80284340 call 8028434 <pk_alloc>
8039af0: e0bfff15 stw r2,-4(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8039af4: 01000084 movi r4,2
8039af8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (p == NULL)
8039afc: e0bfff17 ldw r2,-4(fp)
8039b00: 10000c1e bne r2,zero,8039b34 <icmp_destun+0xe0>
{
#ifdef NPDEBUG
if (NDEBUG & IPTRACE)
8039b04: d0a06617 ldw r2,-32360(gp)
8039b08: 1080800c andi r2,r2,512
8039b0c: 10000326 beq r2,zero,8039b1c <icmp_destun+0xc8>
dprintf("icmp: can't alloc pkt\n");
8039b10: 01020174 movhi r4,2053
8039b14: 212bea04 addi r4,r4,-20568
8039b18: 8002d9c0 call 8002d9c <puts>
#endif /* NPDEBUG */
icmp_mib.icmpOutErrors++;
8039b1c: 008201b4 movhi r2,2054
8039b20: 10b94317 ldw r2,-6900(r2)
8039b24: 10c00044 addi r3,r2,1
8039b28: 008201b4 movhi r2,2054
8039b2c: 10f94315 stw r3,-6900(r2)
return;
8039b30: 00007906 br 8039d18 <icmp_destun+0x2c4>
}
/* build the addresses in the IP header */
pip = (struct ip *)p->nb_prot;
8039b34: e0bfff17 ldw r2,-4(fp)
8039b38: 10800317 ldw r2,12(r2)
8039b3c: e0bffe15 stw r2,-8(fp)
pip->ip_src = src_addr;
8039b40: e0bffe17 ldw r2,-8(fp)
8039b44: e0fffa17 ldw r3,-24(fp)
8039b48: 10c00315 stw r3,12(r2)
pip->ip_dest = host;
8039b4c: e0bffe17 ldw r2,-8(fp)
8039b50: e0fffb17 ldw r3,-20(fp)
8039b54: 10c00415 stw r3,16(r2)
/* allow space for icmp header */
p->nb_prot += sizeof(struct ip);
8039b58: e0bfff17 ldw r2,-4(fp)
8039b5c: 10800317 ldw r2,12(r2)
8039b60: 10c00504 addi r3,r2,20
8039b64: e0bfff17 ldw r2,-4(fp)
8039b68: 10c00315 stw r3,12(r2)
p->nb_plen -= sizeof(struct ip);
8039b6c: e0bfff17 ldw r2,-4(fp)
8039b70: 10800417 ldw r2,16(r2)
8039b74: 10fffb04 addi r3,r2,-20
8039b78: e0bfff17 ldw r2,-4(fp)
8039b7c: 10c00415 stw r3,16(r2)
p->net = net; /* Put in the interface that this packet came in on */
8039b80: e0bfff17 ldw r2,-4(fp)
8039b84: e0c00217 ldw r3,8(fp)
8039b88: 10c00615 stw r3,24(r2)
d = (struct destun *)p->nb_prot;
8039b8c: e0bfff17 ldw r2,-4(fp)
8039b90: 10800317 ldw r2,12(r2)
8039b94: e0bffd15 stw r2,-12(fp)
if (typecode & 0xFF00) /* if the type was sent */
8039b98: e0bff817 ldw r2,-32(fp)
8039b9c: 10bfc00c andi r2,r2,65280
8039ba0: 10000626 beq r2,zero,8039bbc <icmp_destun+0x168>
d->dtype = (char)(typecode >>8); /* then use it */
8039ba4: e0bff817 ldw r2,-32(fp)
8039ba8: 1004d23a srli r2,r2,8
8039bac: 1007883a mov r3,r2
8039bb0: e0bffd17 ldw r2,-12(fp)
8039bb4: 10c00005 stb r3,0(r2)
8039bb8: 00000306 br 8039bc8 <icmp_destun+0x174>
else /* else use default */
d->dtype = DESTIN;
8039bbc: e0bffd17 ldw r2,-12(fp)
8039bc0: 00c000c4 movi r3,3
8039bc4: 10c00005 stb r3,0(r2)
d->dcode = (char)(typecode & 0xFF);
8039bc8: e0bff817 ldw r2,-32(fp)
8039bcc: 1007883a mov r3,r2
8039bd0: e0bffd17 ldw r2,-12(fp)
8039bd4: 10c00045 stb r3,1(r2)
d->dno1 = d->dno2 = 0;
8039bd8: e0bffd17 ldw r2,-12(fp)
8039bdc: 1000018d sth zero,6(r2)
8039be0: e0bffd17 ldw r2,-12(fp)
8039be4: 10c0018b ldhu r3,6(r2)
8039be8: e0bffd17 ldw r2,-12(fp)
8039bec: 10c0010d sth r3,4(r2)
#ifndef ICMP_SUPPRESS_PMTU
if ((typecode & 0xFF) == DSTFRAG)
8039bf0: e0bff817 ldw r2,-32(fp)
8039bf4: 10803fcc andi r2,r2,255
8039bf8: 10800118 cmpnei r2,r2,4
8039bfc: 1000121e bne r2,zero,8039c48 <icmp_destun+0x1f4>
d->dno2 = htons(net->n_mtu - net->n_lnh);
8039c00: e0800217 ldw r2,8(fp)
8039c04: 10c00917 ldw r3,36(r2)
8039c08: e0800217 ldw r2,8(fp)
8039c0c: 10800817 ldw r2,32(r2)
8039c10: 1885c83a sub r2,r3,r2
8039c14: 1005d23a srai r2,r2,8
8039c18: 10803fcc andi r2,r2,255
8039c1c: 1009883a mov r4,r2
8039c20: e0800217 ldw r2,8(fp)
8039c24: 10c00917 ldw r3,36(r2)
8039c28: e0800217 ldw r2,8(fp)
8039c2c: 10800817 ldw r2,32(r2)
8039c30: 1885c83a sub r2,r3,r2
8039c34: 1004923a slli r2,r2,8
8039c38: 2084b03a or r2,r4,r2
8039c3c: 1007883a mov r3,r2
8039c40: e0bffd17 ldw r2,-12(fp)
8039c44: 10c0018d sth r3,6(r2)
#endif /* ICMP_SUPPRESS_PMTU */
MEMCPY(&d->dip, ip, (sizeof(struct ip) + ICMPDUDATA));
8039c48: e0bffd17 ldw r2,-12(fp)
8039c4c: 10800204 addi r2,r2,8
8039c50: 01800704 movi r6,28
8039c54: e17ff917 ldw r5,-28(fp)
8039c58: 1009883a mov r4,r2
8039c5c: 80086b80 call 80086b8 <memcpy>
d->dchksum = 0;
8039c60: e0bffd17 ldw r2,-12(fp)
8039c64: 1000008d sth zero,2(r2)
d->dchksum = ~cksum(d, sizeof(struct destun)>>1);
8039c68: 01400484 movi r5,18
8039c6c: e13ffd17 ldw r4,-12(fp)
8039c70: 8026d7c0 call 8026d7c <cksum>
8039c74: 0084303a nor r2,zero,r2
8039c78: 1007883a mov r3,r2
8039c7c: e0bffd17 ldw r2,-12(fp)
8039c80: 10c0008d sth r3,2(r2)
p->nb_plen = sizeof(struct destun);
8039c84: e0bfff17 ldw r2,-4(fp)
8039c88: 00c00904 movi r3,36
8039c8c: 10c00415 stw r3,16(r2)
p->fhost = host;
8039c90: e0bfff17 ldw r2,-4(fp)
8039c94: e0fffb17 ldw r3,-20(fp)
8039c98: 10c00715 stw r3,28(r2)
i = ip_write(ICMP_PROT, p);
8039c9c: e17fff17 ldw r5,-4(fp)
8039ca0: 01000044 movi r4,1
8039ca4: 803a9e80 call 803a9e8 <ip_write>
8039ca8: e0bffc15 stw r2,-16(fp)
if (i < 0)
8039cac: e0bffc17 ldw r2,-16(fp)
8039cb0: 10000c0e bge r2,zero,8039ce4 <icmp_destun+0x290>
{
icmp_mib.icmpOutErrors++;
8039cb4: 008201b4 movhi r2,2054
8039cb8: 10b94317 ldw r2,-6900(r2)
8039cbc: 10c00044 addi r3,r2,1
8039cc0: 008201b4 movhi r2,2054
8039cc4: 10f94315 stw r3,-6900(r2)
#ifdef NPDEBUG
if (NDEBUG & (IPTRACE|NETERR|PROTERR))
8039cc8: d0a06617 ldw r2,-32360(gp)
8039ccc: 1080860c andi r2,r2,536
8039cd0: 10001026 beq r2,zero,8039d14 <icmp_destun+0x2c0>
dprintf("ICMP: Can't send dest unreachable\n");
8039cd4: 01020174 movhi r4,2053
8039cd8: 212bf004 addi r4,r4,-20544
8039cdc: 8002d9c0 call 8002d9c <puts>
#endif /* NPDEBUG */
return;
8039ce0: 00000c06 br 8039d14 <icmp_destun+0x2c0>
}
icmp_mib.icmpOutMsgs++;
8039ce4: 008201b4 movhi r2,2054
8039ce8: 10b94217 ldw r2,-6904(r2)
8039cec: 10c00044 addi r3,r2,1
8039cf0: 008201b4 movhi r2,2054
8039cf4: 10f94215 stw r3,-6904(r2)
icmp_mib.icmpOutDestUnreachs++;
8039cf8: 008201b4 movhi r2,2054
8039cfc: 10b94417 ldw r2,-6896(r2)
8039d00: 10c00044 addi r3,r2,1
8039d04: 008201b4 movhi r2,2054
8039d08: 10f94415 stw r3,-6896(r2)
return;
8039d0c: 0001883a nop
8039d10: 00000106 br 8039d18 <icmp_destun+0x2c4>
return;
8039d14: 0001883a nop
}
8039d18: e037883a mov sp,fp
8039d1c: dfc00117 ldw ra,4(sp)
8039d20: df000017 ldw fp,0(sp)
8039d24: dec00204 addi sp,sp,8
8039d28: f800283a ret
08039d2c <icmp_timex>:
*
* RETURNS: void
*/
void icmp_timex (struct ip * ip, char code)
{
8039d2c: defff504 addi sp,sp,-44
8039d30: dfc00a15 stw ra,40(sp)
8039d34: df000915 stw fp,36(sp)
8039d38: df000904 addi fp,sp,36
8039d3c: e13ffa15 stw r4,-24(fp)
8039d40: 2805883a mov r2,r5
8039d44: e0bff905 stb r2,-28(fp)
struct ip * pip;
int i;
u_char icmp_pkt_len;
#ifdef NPDEBUG
if (NDEBUG & PROTERR)
8039d48: d0a06617 ldw r2,-32360(gp)
8039d4c: 1080040c andi r2,r2,16
8039d50: 10003026 beq r2,zero,8039e14 <icmp_timex+0xe8>
dprintf("icmp: sending ICMP Time Exceeded with code %u to %u.%u.%u.%u\n",
8039d54: e17ff907 ldb r5,-28(fp)
code, PUSH_IPADDR((ntohs(ip->ip_src))));
8039d58: e0bffa17 ldw r2,-24(fp)
8039d5c: 10800317 ldw r2,12(r2)
8039d60: 1004d23a srli r2,r2,8
8039d64: 10c03fcc andi r3,r2,255
8039d68: e0bffa17 ldw r2,-24(fp)
8039d6c: 10800317 ldw r2,12(r2)
8039d70: 1004923a slli r2,r2,8
8039d74: 10bfffcc andi r2,r2,65535
8039d78: 1884b03a or r2,r3,r2
dprintf("icmp: sending ICMP Time Exceeded with code %u to %u.%u.%u.%u\n",
8039d7c: 11803fcc andi r6,r2,255
code, PUSH_IPADDR((ntohs(ip->ip_src))));
8039d80: e0bffa17 ldw r2,-24(fp)
8039d84: 10800317 ldw r2,12(r2)
8039d88: 1004d23a srli r2,r2,8
8039d8c: 10c03fcc andi r3,r2,255
8039d90: e0bffa17 ldw r2,-24(fp)
8039d94: 10800317 ldw r2,12(r2)
8039d98: 1004923a slli r2,r2,8
8039d9c: 10bfffcc andi r2,r2,65535
8039da0: 1884b03a or r2,r3,r2
8039da4: 1004d23a srli r2,r2,8
dprintf("icmp: sending ICMP Time Exceeded with code %u to %u.%u.%u.%u\n",
8039da8: 11c03fcc andi r7,r2,255
code, PUSH_IPADDR((ntohs(ip->ip_src))));
8039dac: e0bffa17 ldw r2,-24(fp)
8039db0: 10800317 ldw r2,12(r2)
8039db4: 1004d23a srli r2,r2,8
8039db8: 10c03fcc andi r3,r2,255
8039dbc: e0bffa17 ldw r2,-24(fp)
8039dc0: 10800317 ldw r2,12(r2)
8039dc4: 1004923a slli r2,r2,8
8039dc8: 10bfffcc andi r2,r2,65535
8039dcc: 1884b03a or r2,r3,r2
8039dd0: 1004d43a srli r2,r2,16
dprintf("icmp: sending ICMP Time Exceeded with code %u to %u.%u.%u.%u\n",
8039dd4: 10803fcc andi r2,r2,255
code, PUSH_IPADDR((ntohs(ip->ip_src))));
8039dd8: e0fffa17 ldw r3,-24(fp)
8039ddc: 18c00317 ldw r3,12(r3)
8039de0: 1806d23a srli r3,r3,8
8039de4: 19003fcc andi r4,r3,255
8039de8: e0fffa17 ldw r3,-24(fp)
8039dec: 18c00317 ldw r3,12(r3)
8039df0: 1806923a slli r3,r3,8
8039df4: 18ffffcc andi r3,r3,65535
8039df8: 20c6b03a or r3,r4,r3
8039dfc: 1806d63a srli r3,r3,24
dprintf("icmp: sending ICMP Time Exceeded with code %u to %u.%u.%u.%u\n",
8039e00: d8c00115 stw r3,4(sp)
8039e04: d8800015 stw r2,0(sp)
8039e08: 01020174 movhi r4,2053
8039e0c: 212bf904 addi r4,r4,-20508
8039e10: 8002c780 call 8002c78 <printf>
#endif /* NPDEBUG */
icmp_pkt_len = ICMPTIMEX_HDR_LEN + ip_hlen(ip) + ICMPTIMEX_PAYLOAD_DATA_LEN;
8039e14: e0bffa17 ldw r2,-24(fp)
8039e18: 10800003 ldbu r2,0(r2)
8039e1c: 10803fcc andi r2,r2,255
8039e20: 100490ba slli r2,r2,2
8039e24: 10800f0c andi r2,r2,60
8039e28: 10800404 addi r2,r2,16
8039e2c: e0bfffc5 stb r2,-1(fp)
LOCK_NET_RESOURCE(FREEQ_RESID);
8039e30: 01000084 movi r4,2
8039e34: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
* length of the "outer" IP header, length of the ICMP header (ICMPTIMEX_HDR_LEN,
* 8 bytes), length of the "inner" IP header, and length of "user" data
* (ICMPTIMEX_PAYLOAD_DATA_LEN, 8 bytes) (just past the "inner" IP header). The
* latter two items are from the packet that the ICMP Time Exceeded message is
* being sent in response to. */
p = pk_alloc(MaxLnh + IPHSIZ + icmp_pkt_len);
8039e38: e0bfffc3 ldbu r2,-1(fp)
8039e3c: d0e06417 ldw r3,-32368(gp)
8039e40: 10c5883a add r2,r2,r3
8039e44: 10800504 addi r2,r2,20
8039e48: 1009883a mov r4,r2
8039e4c: 80284340 call 8028434 <pk_alloc>
8039e50: e0bffe15 stw r2,-8(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
8039e54: 01000084 movi r4,2
8039e58: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (p == NULL)
8039e5c: e0bffe17 ldw r2,-8(fp)
8039e60: 10000c1e bne r2,zero,8039e94 <icmp_timex+0x168>
{
#ifdef NPDEBUG
if (NDEBUG & IPTRACE)
8039e64: d0a06617 ldw r2,-32360(gp)
8039e68: 1080800c andi r2,r2,512
8039e6c: 10000326 beq r2,zero,8039e7c <icmp_timex+0x150>
dprintf("icmp: can't alloc pkt\n");
8039e70: 01020174 movhi r4,2053
8039e74: 212bea04 addi r4,r4,-20568
8039e78: 8002d9c0 call 8002d9c <puts>
#endif /* NPDEBUG */
icmp_mib.icmpOutErrors++;
8039e7c: 008201b4 movhi r2,2054
8039e80: 10b94317 ldw r2,-6900(r2)
8039e84: 10c00044 addi r3,r2,1
8039e88: 008201b4 movhi r2,2054
8039e8c: 10f94315 stw r3,-6900(r2)
return;
8039e90: 00005d06 br 803a008 <icmp_timex+0x2dc>
}
/* build the addresses in the IP header */
pip = (struct ip *)p->nb_prot;
8039e94: e0bffe17 ldw r2,-8(fp)
8039e98: 10800317 ldw r2,12(r2)
8039e9c: e0bffd15 stw r2,-12(fp)
/* source IP address of packet is our address (i.e., destination IP address
* in the datagram whose reassembly timed out) */
pip->ip_src = ip->ip_dest;
8039ea0: e0bffa17 ldw r2,-24(fp)
8039ea4: 10c00417 ldw r3,16(r2)
8039ea8: e0bffd17 ldw r2,-12(fp)
8039eac: 10c00315 stw r3,12(r2)
/* the destination address is the same as the source IP address of the
* datagram whose reassembly timed out */
pip->ip_dest = ip->ip_src;
8039eb0: e0bffa17 ldw r2,-24(fp)
8039eb4: 10c00317 ldw r3,12(r2)
8039eb8: e0bffd17 ldw r2,-12(fp)
8039ebc: 10c00415 stw r3,16(r2)
/* move past space for IP header to get to start of ICMP header */
p->nb_prot += sizeof(struct ip);
8039ec0: e0bffe17 ldw r2,-8(fp)
8039ec4: 10800317 ldw r2,12(r2)
8039ec8: 10c00504 addi r3,r2,20
8039ecc: e0bffe17 ldw r2,-8(fp)
8039ed0: 10c00315 stw r3,12(r2)
tx = (struct timex *) p->nb_prot;
8039ed4: e0bffe17 ldw r2,-8(fp)
8039ed8: 10800317 ldw r2,12(r2)
8039edc: e0bffc15 stw r2,-16(fp)
tx->ttype = TIMEX;
8039ee0: e0bffc17 ldw r2,-16(fp)
8039ee4: 00c002c4 movi r3,11
8039ee8: 10c00005 stb r3,0(r2)
tx->tcode = code;
8039eec: e0bffc17 ldw r2,-16(fp)
8039ef0: e0fff903 ldbu r3,-28(fp)
8039ef4: 10c00045 stb r3,1(r2)
tx->tno1 = tx->tno2 = 0;
8039ef8: e0bffc17 ldw r2,-16(fp)
8039efc: 1000018d sth zero,6(r2)
8039f00: e0bffc17 ldw r2,-16(fp)
8039f04: 10c0018b ldhu r3,6(r2)
8039f08: e0bffc17 ldw r2,-16(fp)
8039f0c: 10c0010d sth r3,4(r2)
MEMCPY(&tx->tip, ip, (ip_hlen(ip) + ICMPTIMEX_PAYLOAD_DATA_LEN));
8039f10: e0bffc17 ldw r2,-16(fp)
8039f14: 10c00204 addi r3,r2,8
8039f18: e0bffa17 ldw r2,-24(fp)
8039f1c: 10800003 ldbu r2,0(r2)
8039f20: 10803fcc andi r2,r2,255
8039f24: 100490ba slli r2,r2,2
8039f28: 10800f0c andi r2,r2,60
8039f2c: 10800204 addi r2,r2,8
8039f30: 100d883a mov r6,r2
8039f34: e17ffa17 ldw r5,-24(fp)
8039f38: 1809883a mov r4,r3
8039f3c: 80086b80 call 80086b8 <memcpy>
tx->tchksum = 0;
8039f40: e0bffc17 ldw r2,-16(fp)
8039f44: 1000008d sth zero,2(r2)
tx->tchksum = ~cksum(tx, (icmp_pkt_len>>1));
8039f48: e0bfffc3 ldbu r2,-1(fp)
8039f4c: 1004d07a srli r2,r2,1
8039f50: 10803fcc andi r2,r2,255
8039f54: 100b883a mov r5,r2
8039f58: e13ffc17 ldw r4,-16(fp)
8039f5c: 8026d7c0 call 8026d7c <cksum>
8039f60: 0084303a nor r2,zero,r2
8039f64: 1007883a mov r3,r2
8039f68: e0bffc17 ldw r2,-16(fp)
8039f6c: 10c0008d sth r3,2(r2)
p->nb_plen = icmp_pkt_len;
8039f70: e0ffffc3 ldbu r3,-1(fp)
8039f74: e0bffe17 ldw r2,-8(fp)
8039f78: 10c00415 stw r3,16(r2)
/* p->fhost is expected to be in network byte order */
p->fhost = pip->ip_dest;
8039f7c: e0bffd17 ldw r2,-12(fp)
8039f80: 10c00417 ldw r3,16(r2)
8039f84: e0bffe17 ldw r2,-8(fp)
8039f88: 10c00715 stw r3,28(r2)
i = ip_write(ICMP_PROT, p);
8039f8c: e17ffe17 ldw r5,-8(fp)
8039f90: 01000044 movi r4,1
8039f94: 803a9e80 call 803a9e8 <ip_write>
8039f98: e0bffb15 stw r2,-20(fp)
if (i < 0)
8039f9c: e0bffb17 ldw r2,-20(fp)
8039fa0: 10000c0e bge r2,zero,8039fd4 <icmp_timex+0x2a8>
{
icmp_mib.icmpOutErrors++;
8039fa4: 008201b4 movhi r2,2054
8039fa8: 10b94317 ldw r2,-6900(r2)
8039fac: 10c00044 addi r3,r2,1
8039fb0: 008201b4 movhi r2,2054
8039fb4: 10f94315 stw r3,-6900(r2)
#ifdef NPDEBUG
if (NDEBUG & (IPTRACE|NETERR|PROTERR))
8039fb8: d0a06617 ldw r2,-32360(gp)
8039fbc: 1080860c andi r2,r2,536
8039fc0: 10001026 beq r2,zero,803a004 <icmp_timex+0x2d8>
dprintf("ICMP: Can't send Time Exceeded\n");
8039fc4: 01020174 movhi r4,2053
8039fc8: 212c0904 addi r4,r4,-20444
8039fcc: 8002d9c0 call 8002d9c <puts>
#endif /* NPDEBUG */
return;
8039fd0: 00000c06 br 803a004 <icmp_timex+0x2d8>
}
icmp_mib.icmpOutMsgs++;
8039fd4: 008201b4 movhi r2,2054
8039fd8: 10b94217 ldw r2,-6904(r2)
8039fdc: 10c00044 addi r3,r2,1
8039fe0: 008201b4 movhi r2,2054
8039fe4: 10f94215 stw r3,-6904(r2)
icmp_mib.icmpOutTimeExcds++;
8039fe8: 008201b4 movhi r2,2054
8039fec: 10b94517 ldw r2,-6892(r2)
8039ff0: 10c00044 addi r3,r2,1
8039ff4: 008201b4 movhi r2,2054
8039ff8: 10f94515 stw r3,-6892(r2)
return;
8039ffc: 0001883a nop
803a000: 00000106 br 803a008 <icmp_timex+0x2dc>
return;
803a004: 0001883a nop
}
803a008: e037883a mov sp,fp
803a00c: dfc00117 ldw ra,4(sp)
803a010: df000017 ldw fp,0(sp)
803a014: dec00204 addi sp,sp,8
803a018: f800283a ret
0803a01c <icmp_du>:
* RETURNS: void
*/
void
icmp_du(PACKET p, struct destun * pdp)
{
803a01c: defffc04 addi sp,sp,-16
803a020: dfc00315 stw ra,12(sp)
803a024: df000215 stw fp,8(sp)
803a028: df000204 addi fp,sp,8
803a02c: e13fff15 stw r4,-4(fp)
803a030: e17ffe15 stw r5,-8(fp)
/* see if user app wants notification first */
if (icmpdu_hook)
803a034: d0a09417 ldw r2,-32176(gp)
803a038: 10000426 beq r2,zero,803a04c <icmp_du+0x30>
icmpdu_hook(p, pdp);
803a03c: d0a09417 ldw r2,-32176(gp)
803a040: e17ffe17 ldw r5,-8(fp)
803a044: e13fff17 ldw r4,-4(fp)
803a048: 103ee83a callr r2
#ifdef INCLUDE_TCP
/* Tell the sockets layer so it can correct the problem. */
so_icmpdu(p, pdp); /* this call should free packet p */
803a04c: e17ffe17 ldw r5,-8(fp)
803a050: e13fff17 ldw r4,-4(fp)
803a054: 802ad080 call 802ad08 <so_icmpdu>
done:
LOCK_NET_RESOURCE(FREEQ_RESID);
pk_free(p); /* else just free packet */
UNLOCK_NET_RESOURCE(FREEQ_RESID);
#endif /* INCLUDE_TCP */
}
803a058: 0001883a nop
803a05c: e037883a mov sp,fp
803a060: dfc00117 ldw ra,4(sp)
803a064: df000017 ldw fp,0(sp)
803a068: dec00204 addi sp,sp,8
803a06c: f800283a ret
0803a070 <ip_init>:
* OK, else returns a non-zero error code.
*/
int
ip_init(void)
{
803a070: defffe04 addi sp,sp,-8
803a074: dfc00115 stw ra,4(sp)
803a078: df000015 stw fp,0(sp)
803a07c: d839883a mov fp,sp
/* register IP type with link layer drivers */
if (reg_type(IP_TYPE) != 0)
803a080: 01000204 movi r4,8
803a084: 80241c80 call 80241c8 <reg_type>
803a088: 10000526 beq r2,zero,803a0a0 <ip_init+0x30>
{
#ifdef NPDEBUG
dprintf("IP_INIT: unable to register type with MAC driver\n");
803a08c: 01020174 movhi r4,2053
803a090: 212c1104 addi r4,r4,-20412
803a094: 8002d9c0 call 8002d9c <puts>
#endif
return(1);
803a098: 00800044 movi r2,1
803a09c: 00002506 br 803a134 <ip_init+0xc4>
}
/* initialize the IP mib */
MEMSET(&ip_mib, 0, sizeof(ip_mib));
803a0a0: 01801404 movi r6,80
803a0a4: 000b883a mov r5,zero
803a0a8: 010201b4 movhi r4,2054
803a0ac: 21394f04 addi r4,r4,-6852
803a0b0: 80088e40 call 80088e4 <memset>
ip_mib.ipForwarding = 2; /* default to host, not gateway (router) */
803a0b4: 00c00084 movi r3,2
803a0b8: 008201b4 movhi r2,2054
803a0bc: 10f94f15 stw r3,-6852(r2)
ip_mib.ipDefaultTTL = IP_TTL;
803a0c0: 00c01004 movi r3,64
803a0c4: 008201b4 movhi r2,2054
803a0c8: 10f95015 stw r3,-6848(r2)
#ifdef IP_ROUTING
/* alloc space for the route table */
rt_mib = (struct RtMib*)RT_ALLOC(ipRoutes * sizeof(struct RtMib));
803a0cc: d0a03017 ldw r2,-32576(gp)
803a0d0: 10800f24 muli r2,r2,60
803a0d4: 1009883a mov r4,r2
803a0d8: 802982c0 call 802982c <npalloc>
803a0dc: d0a09515 stw r2,-32172(gp)
if (!rt_mib)
803a0e0: d0a09517 ldw r2,-32172(gp)
803a0e4: 1000051e bne r2,zero,803a0fc <ip_init+0x8c>
{
#ifdef NPDEBUG
dprintf("IP_INIT ERROR: can't alloc route table\n");
803a0e8: 01020174 movhi r4,2053
803a0ec: 212c1e04 addi r4,r4,-20360
803a0f0: 8002d9c0 call 8002d9c <puts>
#endif /* NPDEBUG */
return(ENP_NOMEM);
803a0f4: 00bffb04 movi r2,-20
803a0f8: 00000e06 br 803a134 <ip_init+0xc4>
}
MEMSET(rt_mib,0, ipRoutes * sizeof(struct RtMib)) ;
803a0fc: d0e09517 ldw r3,-32172(gp)
803a100: d0a03017 ldw r2,-32576(gp)
803a104: 10800f24 muli r2,r2,60
803a108: 100d883a mov r6,r2
803a10c: 000b883a mov r5,zero
803a110: 1809883a mov r4,r3
803a114: 80088e40 call 80088e4 <memset>
ip_mib.ipForwarding = 1; /* override default, be gateway (router) */
803a118: 00c00044 movi r3,1
803a11c: 008201b4 movhi r2,2054
803a120: 10f94f15 stw r3,-6852(r2)
#endif /* IP_ROUTING */
/* set IP reassembly timeout */
ip_mib.ipReasmTimeout = IRE_TMO;
803a124: 00c01e04 movi r3,120
803a128: 008201b4 movhi r2,2054
803a12c: 10f95b15 stw r3,-6804(r2)
return(1);
}
#endif /* IPSEC */
/* everything opened OK return 0 */
return(SUCCESS);
803a130: 0005883a mov r2,zero
}
803a134: e037883a mov sp,fp
803a138: dfc00117 ldw ra,4(sp)
803a13c: df000017 ldw fp,0(sp)
803a140: dec00204 addi sp,sp,8
803a144: f800283a ret
0803a148 <ip_bldhead>:
* RETURNS: void
*/
void
ip_bldhead(PACKET p, unsigned pid, u_char prot, unshort fragword)
{
803a148: defff804 addi sp,sp,-32
803a14c: dfc00715 stw ra,28(sp)
803a150: df000615 stw fp,24(sp)
803a154: df000604 addi fp,sp,24
803a158: e13ffd15 stw r4,-12(fp)
803a15c: e17ffc15 stw r5,-16(fp)
803a160: 3005883a mov r2,r6
803a164: 3807883a mov r3,r7
803a168: e0bffb05 stb r2,-20(fp)
803a16c: 1805883a mov r2,r3
803a170: e0bffa0d sth r2,-24(fp)
struct ip * pip;
struct ip_socopts *sopts;
/* prepend IP header to packet data */
p->nb_prot -= sizeof(struct ip); /* this assumes no send options! */
803a174: e0bffd17 ldw r2,-12(fp)
803a178: 10800317 ldw r2,12(r2)
803a17c: 10fffb04 addi r3,r2,-20
803a180: e0bffd17 ldw r2,-12(fp)
803a184: 10c00315 stw r3,12(r2)
p->nb_plen += sizeof(struct ip);
803a188: e0bffd17 ldw r2,-12(fp)
803a18c: 10800417 ldw r2,16(r2)
803a190: 10c00504 addi r3,r2,20
803a194: e0bffd17 ldw r2,-12(fp)
803a198: 10c00415 stw r3,16(r2)
pip = (struct ip*)p->nb_prot;
803a19c: e0bffd17 ldw r2,-12(fp)
803a1a0: 10800317 ldw r2,12(r2)
803a1a4: e0bfff15 stw r2,-4(fp)
pip->ip_ver_ihl = 0x45; /* 2 nibbles; VER:4, IHL:5. */
803a1a8: e0bfff17 ldw r2,-4(fp)
803a1ac: 00c01144 movi r3,69
803a1b0: 10c00005 stb r3,0(r2)
pip->ip_flgs_foff = fragword; /* fragment flags and offset */
803a1b4: e0bfff17 ldw r2,-4(fp)
803a1b8: e0fffa0b ldhu r3,-24(fp)
803a1bc: 10c0018d sth r3,6(r2)
pip->ip_id = htons((unshort)pid); /* IP datagram ID */
803a1c0: e0bffc17 ldw r2,-16(fp)
803a1c4: 10bfffcc andi r2,r2,65535
803a1c8: 1004d23a srli r2,r2,8
803a1cc: 1007883a mov r3,r2
803a1d0: e0bffc17 ldw r2,-16(fp)
803a1d4: 10bfffcc andi r2,r2,65535
803a1d8: 1004923a slli r2,r2,8
803a1dc: 1884b03a or r2,r3,r2
803a1e0: 1007883a mov r3,r2
803a1e4: e0bfff17 ldw r2,-4(fp)
803a1e8: 10c0010d sth r3,4(r2)
pip->ip_len = htons((unshort)p->nb_plen);
803a1ec: e0bffd17 ldw r2,-12(fp)
803a1f0: 10800417 ldw r2,16(r2)
803a1f4: 10bfffcc andi r2,r2,65535
803a1f8: 1004d23a srli r2,r2,8
803a1fc: 1007883a mov r3,r2
803a200: e0bffd17 ldw r2,-12(fp)
803a204: 10800417 ldw r2,16(r2)
803a208: 10bfffcc andi r2,r2,65535
803a20c: 1004923a slli r2,r2,8
803a210: 1884b03a or r2,r3,r2
803a214: 1007883a mov r3,r2
803a218: e0bfff17 ldw r2,-4(fp)
803a21c: 10c0008d sth r3,2(r2)
pip->ip_prot = prot; /* install protocol ID (TCP, UDP, etc) */
803a220: e0bfff17 ldw r2,-4(fp)
803a224: e0fffb03 ldbu r3,-20(fp)
803a228: 10c00245 stb r3,9(r2)
/* have IP_TOS or IP_TTL been set? */
if ((sopts = p->soxopts))
803a22c: e0bffd17 ldw r2,-12(fp)
803a230: 10800c17 ldw r2,48(r2)
803a234: e0bffe15 stw r2,-8(fp)
803a238: e0bffe17 ldw r2,-8(fp)
803a23c: 10001126 beq r2,zero,803a284 <ip_bldhead+0x13c>
{
/* yup */
if (sopts->ip_ttl)
803a240: e0bffe17 ldw r2,-8(fp)
803a244: 10800043 ldbu r2,1(r2)
803a248: 10803fcc andi r2,r2,255
803a24c: 10000526 beq r2,zero,803a264 <ip_bldhead+0x11c>
pip->ip_time = sopts->ip_ttl;
803a250: e0bffe17 ldw r2,-8(fp)
803a254: 10c00043 ldbu r3,1(r2)
803a258: e0bfff17 ldw r2,-4(fp)
803a25c: 10c00205 stb r3,8(r2)
803a260: 00000306 br 803a270 <ip_bldhead+0x128>
else
pip->ip_time = (u_char)IP_TTL; /* default number of hops, really */
803a264: e0bfff17 ldw r2,-4(fp)
803a268: 00c01004 movi r3,64
803a26c: 10c00205 stb r3,8(r2)
pip->ip_tos = sopts->ip_tos;
803a270: e0bffe17 ldw r2,-8(fp)
803a274: 10c00003 ldbu r3,0(r2)
803a278: e0bfff17 ldw r2,-4(fp)
803a27c: 10c00045 stb r3,1(r2)
803a280: 00000506 br 803a298 <ip_bldhead+0x150>
}
else
{
/* nope */
pip->ip_time = (u_char)IP_TTL; /* default number of hops, really */
803a284: e0bfff17 ldw r2,-4(fp)
803a288: 00c01004 movi r3,64
803a28c: 10c00205 stb r3,8(r2)
pip->ip_tos = IP_TOS_DEFVAL;
803a290: e0bfff17 ldw r2,-4(fp)
803a294: 10000045 stb zero,1(r2)
}
pip->ip_chksum = IPXSUM; /* clear checksum field for summing */
803a298: e0bfff17 ldw r2,-4(fp)
803a29c: 1000028d sth zero,10(r2)
pip->ip_chksum = ~cksum(pip, 10);
803a2a0: 01400284 movi r5,10
803a2a4: e13fff17 ldw r4,-4(fp)
803a2a8: 8026d7c0 call 8026d7c <cksum>
803a2ac: 0084303a nor r2,zero,r2
803a2b0: 1007883a mov r3,r2
803a2b4: e0bfff17 ldw r2,-4(fp)
803a2b8: 10c0028d sth r3,10(r2)
}
803a2bc: 0001883a nop
803a2c0: e037883a mov sp,fp
803a2c4: dfc00117 ldw ra,4(sp)
803a2c8: df000017 ldw fp,0(sp)
803a2cc: dec00204 addi sp,sp,8
803a2d0: f800283a ret
0803a2d4 <ip_write_internal>:
* RETURNS: Returns 0 if sent OK, ENP_SEND_PENDING (1) if
* waiting for ARP, else negative error code if error detected.
*/
int
ip_write_internal(PACKET p)
{
803a2d4: defff104 addi sp,sp,-60
803a2d8: dfc00e15 stw ra,56(sp)
803a2dc: df000d15 stw fp,52(sp)
803a2e0: df000d04 addi fp,sp,52
803a2e4: e13ff615 stw r4,-40(fp)
PACKET newpkt;
unsigned maxbuflen;
#ifdef IP_MULTICAST
/* If destination address is multicast, process multicast options */
if (IN_MULTICAST(ntohl(p->fhost)))
803a2e8: e0bff617 ldw r2,-40(fp)
803a2ec: 10800717 ldw r2,28(r2)
803a2f0: 1006d63a srli r3,r2,24
803a2f4: e0bff617 ldw r2,-40(fp)
803a2f8: 10800717 ldw r2,28(r2)
803a2fc: 1004d23a srli r2,r2,8
803a300: 10bfc00c andi r2,r2,65280
803a304: 1886b03a or r3,r3,r2
803a308: e0bff617 ldw r2,-40(fp)
803a30c: 10800717 ldw r2,28(r2)
803a310: 1004923a slli r2,r2,8
803a314: 10803fec andhi r2,r2,255
803a318: 1886b03a or r3,r3,r2
803a31c: e0bff617 ldw r2,-40(fp)
803a320: 10800717 ldw r2,28(r2)
803a324: 1004963a slli r2,r2,24
803a328: 1884b03a or r2,r3,r2
803a32c: 10fc002c andhi r3,r2,61440
803a330: 00b80034 movhi r2,57344
803a334: 1880a21e bne r3,r2,803a5c0 <ip_write_internal+0x2ec>
{
if (p->imo != NULL)
803a338: e0bff617 ldw r2,-40(fp)
803a33c: 10800b17 ldw r2,44(r2)
803a340: 10001426 beq r2,zero,803a394 <ip_write_internal+0xc0>
if (p->imo->imo_multicast_netp)
803a344: e0bff617 ldw r2,-40(fp)
803a348: 10800b17 ldw r2,44(r2)
803a34c: 10800017 ldw r2,0(r2)
803a350: 10000626 beq r2,zero,803a36c <ip_write_internal+0x98>
p->net = p->imo->imo_multicast_netp;
803a354: e0bff617 ldw r2,-40(fp)
803a358: 10800b17 ldw r2,44(r2)
803a35c: 10c00017 ldw r3,0(r2)
803a360: e0bff617 ldw r2,-40(fp)
803a364: 10c00615 stw r3,24(r2)
803a368: 00002106 br 803a3f0 <ip_write_internal+0x11c>
else
p->net = iproute(p->fhost, &firsthop);
803a36c: e0bff617 ldw r2,-40(fp)
803a370: 10800717 ldw r2,28(r2)
803a374: e0fff704 addi r3,fp,-36
803a378: 180b883a mov r5,r3
803a37c: 1009883a mov r4,r2
803a380: 803b3700 call 803b370 <iproute>
803a384: 1007883a mov r3,r2
803a388: e0bff617 ldw r2,-40(fp)
803a38c: 10c00615 stw r3,24(r2)
803a390: 00001706 br 803a3f0 <ip_write_internal+0x11c>
else
{
for (i = 0; i < ifNumber; i++)
803a394: e03fff15 stw zero,-4(fp)
803a398: 00001206 br 803a3e4 <ip_write_internal+0x110>
if (nets[i]->n_mcastlist)
803a39c: e0bfff17 ldw r2,-4(fp)
803a3a0: 100690ba slli r3,r2,2
803a3a4: 008201b4 movhi r2,2054
803a3a8: 1885883a add r2,r3,r2
803a3ac: 10b77017 ldw r2,-8768(r2)
803a3b0: 10802b17 ldw r2,172(r2)
803a3b4: 10000826 beq r2,zero,803a3d8 <ip_write_internal+0x104>
{
p->net = nets[i];
803a3b8: e0bfff17 ldw r2,-4(fp)
803a3bc: 100690ba slli r3,r2,2
803a3c0: 008201b4 movhi r2,2054
803a3c4: 1885883a add r2,r3,r2
803a3c8: 10f77017 ldw r3,-8768(r2)
803a3cc: e0bff617 ldw r2,-40(fp)
803a3d0: 10c00615 stw r3,24(r2)
break;
803a3d4: 00000606 br 803a3f0 <ip_write_internal+0x11c>
for (i = 0; i < ifNumber; i++)
803a3d8: e0bfff17 ldw r2,-4(fp)
803a3dc: 10800044 addi r2,r2,1
803a3e0: e0bfff15 stw r2,-4(fp)
803a3e4: d0a06717 ldw r2,-32356(gp)
803a3e8: e0ffff17 ldw r3,-4(fp)
803a3ec: 18bfeb36 bltu r3,r2,803a39c <ip_write_internal+0xc8>
}
}
/* Confirm that the outgoing interface supports multicast. */
if ((p->net == NULL) || (p->net->n_mcastlist) == NULL)
803a3f0: e0bff617 ldw r2,-40(fp)
803a3f4: 10800617 ldw r2,24(r2)
803a3f8: 10000426 beq r2,zero,803a40c <ip_write_internal+0x138>
803a3fc: e0bff617 ldw r2,-40(fp)
803a400: 10800617 ldw r2,24(r2)
803a404: 10802b17 ldw r2,172(r2)
803a408: 10002a1e bne r2,zero,803a4b4 <ip_write_internal+0x1e0>
{
#ifdef NPDEBUG
if (NDEBUG & (IPTRACE|PROTERR))
803a40c: d0a06617 ldw r2,-32360(gp)
803a410: 1080840c andi r2,r2,528
803a414: 10001a26 beq r2,zero,803a480 <ip_write_internal+0x1ac>
{
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a418: e0bff617 ldw r2,-40(fp)
803a41c: 11400417 ldw r5,16(r2)
p, p->nb_plen, PUSH_IPADDR(p->fhost));
803a420: e0bff617 ldw r2,-40(fp)
803a424: 10800717 ldw r2,28(r2)
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a428: 11803fcc andi r6,r2,255
p, p->nb_plen, PUSH_IPADDR(p->fhost));
803a42c: e0bff617 ldw r2,-40(fp)
803a430: 10800717 ldw r2,28(r2)
803a434: 1004d23a srli r2,r2,8
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a438: 10803fcc andi r2,r2,255
p, p->nb_plen, PUSH_IPADDR(p->fhost));
803a43c: e0fff617 ldw r3,-40(fp)
803a440: 18c00717 ldw r3,28(r3)
803a444: 1806d43a srli r3,r3,16
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a448: 18c03fcc andi r3,r3,255
p, p->nb_plen, PUSH_IPADDR(p->fhost));
803a44c: e13ff617 ldw r4,-40(fp)
803a450: 21000717 ldw r4,28(r4)
803a454: 2008d63a srli r4,r4,24
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a458: d9000215 stw r4,8(sp)
803a45c: d8c00115 stw r3,4(sp)
803a460: d8800015 stw r2,0(sp)
803a464: 300f883a mov r7,r6
803a468: 280d883a mov r6,r5
803a46c: e17ff617 ldw r5,-40(fp)
803a470: 01020174 movhi r4,2053
803a474: 212c2804 addi r4,r4,-20320
803a478: 8002c780 call 8002c78 <printf>
dtrap();
803a47c: 8028cd40 call 8028cd4 <dtrap>
}
#endif
ip_mib.ipOutNoRoutes++;
803a480: 008201b4 movhi r2,2054
803a484: 10b95a17 ldw r2,-6808(r2)
803a488: 10c00044 addi r3,r2,1
803a48c: 008201b4 movhi r2,2054
803a490: 10f95a15 stw r3,-6808(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803a494: 01000084 movi r4,2
803a498: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803a49c: e13ff617 ldw r4,-40(fp)
803a4a0: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803a4a4: 01000084 movi r4,2
803a4a8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return (ENP_NO_ROUTE);
803a4ac: 00bff7c4 movi r2,-33
803a4b0: 00014806 br 803a9d4 <ip_write_internal+0x700>
* If we belong to the destination multicast group
* on the outgoing interface, and the caller did not
* forbid loopback, put a copy of the packet on the
* received queue.
*/
inm = lookup_mcast(p->fhost, p->net);
803a4b4: e0bff617 ldw r2,-40(fp)
803a4b8: 10c00717 ldw r3,28(r2)
803a4bc: e0bff617 ldw r2,-40(fp)
803a4c0: 10800617 ldw r2,24(r2)
803a4c4: 100b883a mov r5,r2
803a4c8: 1809883a mov r4,r3
803a4cc: 803c5040 call 803c504 <lookup_mcast>
803a4d0: e0bffd15 stw r2,-12(fp)
if ((inm != NULL) &&
803a4d4: e0bffd17 ldw r2,-12(fp)
803a4d8: 10001b26 beq r2,zero,803a548 <ip_write_internal+0x274>
((p->imo == NULL) || p->imo->imo_multicast_loop))
803a4dc: e0bff617 ldw r2,-40(fp)
803a4e0: 10800b17 ldw r2,44(r2)
if ((inm != NULL) &&
803a4e4: 10000526 beq r2,zero,803a4fc <ip_write_internal+0x228>
((p->imo == NULL) || p->imo->imo_multicast_loop))
803a4e8: e0bff617 ldw r2,-40(fp)
803a4ec: 10800b17 ldw r2,44(r2)
803a4f0: 10800143 ldbu r2,5(r2)
803a4f4: 10803fcc andi r2,r2,255
803a4f8: 10001326 beq r2,zero,803a548 <ip_write_internal+0x274>
{
p->type = IPTP;
803a4fc: e0bff617 ldw r2,-40(fp)
803a500: 00c00204 movi r3,8
803a504: 10c0080d sth r3,32(r2)
pkt2 = ip_copypkt(p);
803a508: e13ff617 ldw r4,-40(fp)
803a50c: 803b53c0 call 803b53c <ip_copypkt>
803a510: e0bffc15 stw r2,-16(fp)
if (pkt2)
803a514: e0bffc17 ldw r2,-16(fp)
803a518: 10000b26 beq r2,zero,803a548 <ip_write_internal+0x274>
{
LOCK_NET_RESOURCE(RXQ_RESID);
803a51c: 01000044 movi r4,1
803a520: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
putq(&rcvdq, (q_elt)pkt2);
803a524: e17ffc17 ldw r5,-16(fp)
803a528: 010201b4 movhi r4,2054
803a52c: 2136ab04 addi r4,r4,-9556
803a530: 80289900 call 8028990 <putq>
UNLOCK_NET_RESOURCE(RXQ_RESID);
803a534: 01000044 movi r4,1
803a538: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
SignalPktDemux();
803a53c: d0a08017 ldw r2,-32256(gp)
803a540: 1009883a mov r4,r2
803a544: 8015d840 call 8015d84 <OSSemPost>
* Also, multicasts addressed to the loopback interface
* are not sent -- a copy will already have been looped
* back above if this host actually belongs to the
* destination group on the loopback interface.
*/
pip = (struct ip *)(p->nb_prot);
803a548: e0bff617 ldw r2,-40(fp)
803a54c: 10800317 ldw r2,12(r2)
803a550: e0bffb15 stw r2,-20(fp)
if ((pip->ip_time == 0) ||
803a554: e0bffb17 ldw r2,-20(fp)
803a558: 10800203 ldbu r2,8(r2)
803a55c: 10803fcc andi r2,r2,255
803a560: 10000b26 beq r2,zero,803a590 <ip_write_internal+0x2bc>
((p->fhost & htonl(0xFF000000)) == IPLBA) ||
803a564: e0bff617 ldw r2,-40(fp)
803a568: 10800717 ldw r2,28(r2)
803a56c: 10803fcc andi r2,r2,255
if ((pip->ip_time == 0) ||
803a570: 10801fe0 cmpeqi r2,r2,127
803a574: 1000061e bne r2,zero,803a590 <ip_write_internal+0x2bc>
(p->fhost == p->net->n_ipaddr))
803a578: e0bff617 ldw r2,-40(fp)
803a57c: 10c00717 ldw r3,28(r2)
803a580: e0bff617 ldw r2,-40(fp)
803a584: 10800617 ldw r2,24(r2)
803a588: 10800a17 ldw r2,40(r2)
((p->fhost & htonl(0xFF000000)) == IPLBA) ||
803a58c: 1880081e bne r3,r2,803a5b0 <ip_write_internal+0x2dc>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
803a590: 01000084 movi r4,2
803a594: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803a598: e13ff617 ldw r4,-40(fp)
803a59c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803a5a0: 01000084 movi r4,2
803a5a4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return(SUCCESS);
803a5a8: 0005883a mov r2,zero
803a5ac: 00010906 br 803a9d4 <ip_write_internal+0x700>
}
firsthop = p->fhost;
803a5b0: e0bff617 ldw r2,-40(fp)
803a5b4: 10800717 ldw r2,28(r2)
803a5b8: e0bff715 stw r2,-36(fp)
goto sendit;
803a5bc: 00003f06 br 803a6bc <ip_write_internal+0x3e8>
}
#endif /* IP_MULTICAST */
/* if this is a broadcast packet, use the caller-selected network */
if (p->fhost == 0xFFFFFFFF)
803a5c0: e0bff617 ldw r2,-40(fp)
803a5c4: 10800717 ldw r2,28(r2)
803a5c8: 10bfffd8 cmpnei r2,r2,-1
803a5cc: 1000041e bne r2,zero,803a5e0 <ip_write_internal+0x30c>
{
firsthop = p->fhost;
803a5d0: e0bff617 ldw r2,-40(fp)
803a5d4: 10800717 ldw r2,28(r2)
803a5d8: e0bff715 stw r2,-36(fp)
803a5dc: 00003706 br 803a6bc <ip_write_internal+0x3e8>
}
else
{
p->net = iproute(p->fhost, &firsthop);
803a5e0: e0bff617 ldw r2,-40(fp)
803a5e4: 10800717 ldw r2,28(r2)
803a5e8: e0fff704 addi r3,fp,-36
803a5ec: 180b883a mov r5,r3
803a5f0: 1009883a mov r4,r2
803a5f4: 803b3700 call 803b370 <iproute>
803a5f8: 1007883a mov r3,r2
803a5fc: e0bff617 ldw r2,-40(fp)
803a600: 10c00615 stw r3,24(r2)
if (p->net == NULL)
803a604: e0bff617 ldw r2,-40(fp)
803a608: 10800617 ldw r2,24(r2)
803a60c: 10002a1e bne r2,zero,803a6b8 <ip_write_internal+0x3e4>
{
#ifdef NPDEBUG
if (NDEBUG & (IPTRACE|PROTERR))
803a610: d0a06617 ldw r2,-32360(gp)
803a614: 1080840c andi r2,r2,528
803a618: 10001a26 beq r2,zero,803a684 <ip_write_internal+0x3b0>
{
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a61c: e0bff617 ldw r2,-40(fp)
803a620: 11400417 ldw r5,16(r2)
p, p->nb_plen, PUSH_IPADDR(p->fhost));
803a624: e0bff617 ldw r2,-40(fp)
803a628: 10800717 ldw r2,28(r2)
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a62c: 11803fcc andi r6,r2,255
p, p->nb_plen, PUSH_IPADDR(p->fhost));
803a630: e0bff617 ldw r2,-40(fp)
803a634: 10800717 ldw r2,28(r2)
803a638: 1004d23a srli r2,r2,8
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a63c: 10803fcc andi r2,r2,255
p, p->nb_plen, PUSH_IPADDR(p->fhost));
803a640: e0fff617 ldw r3,-40(fp)
803a644: 18c00717 ldw r3,28(r3)
803a648: 1806d43a srli r3,r3,16
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a64c: 18c03fcc andi r3,r3,255
p, p->nb_plen, PUSH_IPADDR(p->fhost));
803a650: e13ff617 ldw r4,-40(fp)
803a654: 21000717 ldw r4,28(r4)
803a658: 2008d63a srli r4,r4,24
dprintf("ip_write_internal: pkt:%p len%u to %u.%u.%u.%u, can't route\n",
803a65c: d9000215 stw r4,8(sp)
803a660: d8c00115 stw r3,4(sp)
803a664: d8800015 stw r2,0(sp)
803a668: 300f883a mov r7,r6
803a66c: 280d883a mov r6,r5
803a670: e17ff617 ldw r5,-40(fp)
803a674: 01020174 movhi r4,2053
803a678: 212c2804 addi r4,r4,-20320
803a67c: 8002c780 call 8002c78 <printf>
dtrap();
803a680: 8028cd40 call 8028cd4 <dtrap>
}
#endif /* NPDEBUG */
ip_mib.ipOutNoRoutes++;
803a684: 008201b4 movhi r2,2054
803a688: 10b95a17 ldw r2,-6808(r2)
803a68c: 10c00044 addi r3,r2,1
803a690: 008201b4 movhi r2,2054
803a694: 10f95a15 stw r3,-6808(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803a698: 01000084 movi r4,2
803a69c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803a6a0: e13ff617 ldw r4,-40(fp)
803a6a4: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803a6a8: 01000084 movi r4,2
803a6ac: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return (ENP_NO_ROUTE);
803a6b0: 00bff7c4 movi r2,-33
803a6b4: 0000c706 br 803a9d4 <ip_write_internal+0x700>
}
}
#ifdef IP_MULTICAST
sendit: /* label used for multicast packets to skip routing logic */
803a6b8: 0001883a nop
#endif /* IP_MULTICAST */
#ifdef NPDEBUG
if (NDEBUG & IPTRACE)
803a6bc: d0a06617 ldw r2,-32360(gp)
803a6c0: 1080800c andi r2,r2,512
803a6c4: 10002926 beq r2,zero,803a76c <ip_write_internal+0x498>
{
dprintf("ip_write: pkt[%u] to %u.%u.%u.%u,",
803a6c8: e0bff617 ldw r2,-40(fp)
803a6cc: 11000417 ldw r4,16(r2)
p->nb_plen, PUSH_IPADDR(p->fhost));
803a6d0: e0bff617 ldw r2,-40(fp)
803a6d4: 10800717 ldw r2,28(r2)
dprintf("ip_write: pkt[%u] to %u.%u.%u.%u,",
803a6d8: 11403fcc andi r5,r2,255
p->nb_plen, PUSH_IPADDR(p->fhost));
803a6dc: e0bff617 ldw r2,-40(fp)
803a6e0: 10800717 ldw r2,28(r2)
803a6e4: 1004d23a srli r2,r2,8
dprintf("ip_write: pkt[%u] to %u.%u.%u.%u,",
803a6e8: 11803fcc andi r6,r2,255
p->nb_plen, PUSH_IPADDR(p->fhost));
803a6ec: e0bff617 ldw r2,-40(fp)
803a6f0: 10800717 ldw r2,28(r2)
803a6f4: 1004d43a srli r2,r2,16
dprintf("ip_write: pkt[%u] to %u.%u.%u.%u,",
803a6f8: 10803fcc andi r2,r2,255
p->nb_plen, PUSH_IPADDR(p->fhost));
803a6fc: e0fff617 ldw r3,-40(fp)
803a700: 18c00717 ldw r3,28(r3)
803a704: 1806d63a srli r3,r3,24
dprintf("ip_write: pkt[%u] to %u.%u.%u.%u,",
803a708: d8c00115 stw r3,4(sp)
803a70c: d8800015 stw r2,0(sp)
803a710: 300f883a mov r7,r6
803a714: 280d883a mov r6,r5
803a718: 200b883a mov r5,r4
803a71c: 01020174 movhi r4,2053
803a720: 212c3804 addi r4,r4,-20256
803a724: 8002c780 call 8002c78 <printf>
dprintf(" route %u.%u.%u.%u\n", PUSH_IPADDR(firsthop));
803a728: e0bff717 ldw r2,-36(fp)
803a72c: 10c03fcc andi r3,r2,255
803a730: e0bff717 ldw r2,-36(fp)
803a734: 1004d23a srli r2,r2,8
803a738: 11003fcc andi r4,r2,255
803a73c: e0bff717 ldw r2,-36(fp)
803a740: 1004d43a srli r2,r2,16
803a744: 11403fcc andi r5,r2,255
803a748: e0bff717 ldw r2,-36(fp)
803a74c: 1004d63a srli r2,r2,24
803a750: d8800015 stw r2,0(sp)
803a754: 280f883a mov r7,r5
803a758: 200d883a mov r6,r4
803a75c: 180b883a mov r5,r3
803a760: 01020174 movhi r4,2053
803a764: 212c4104 addi r4,r4,-20220
803a768: 8002c780 call 8002c78 <printf>
#endif /* IPSEC */
/* If the packet is being sent to the same interface it will be sent
* from, short-cut things and just put it on the received queue.
*/
if ((p->net->n_ipaddr == p->fhost) &&
803a76c: e0bff617 ldw r2,-40(fp)
803a770: 10800617 ldw r2,24(r2)
803a774: 10c00a17 ldw r3,40(r2)
803a778: e0bff617 ldw r2,-40(fp)
803a77c: 10800717 ldw r2,28(r2)
803a780: 1880271e bne r3,r2,803a820 <ip_write_internal+0x54c>
((p->fhost & htonl(0xff000000)) != htonl(0x7f000000)))
803a784: e0bff617 ldw r2,-40(fp)
803a788: 10800717 ldw r2,28(r2)
803a78c: 10803fcc andi r2,r2,255
if ((p->net->n_ipaddr == p->fhost) &&
803a790: 10801fe0 cmpeqi r2,r2,127
803a794: 1000221e bne r2,zero,803a820 <ip_write_internal+0x54c>
{
if (!(p->net->n_flags & NF_NBPROT))
803a798: e0bff617 ldw r2,-40(fp)
803a79c: 10800617 ldw r2,24(r2)
803a7a0: 10802a17 ldw r2,168(r2)
803a7a4: 1080020c andi r2,r2,8
803a7a8: 1000091e bne r2,zero,803a7d0 <ip_write_internal+0x4fc>
* IP or ARP protocol header) and nb_type to the protocol
* type, and set the NF_NBPROT flag in its interfaces'
* n_flags fields.
*/
#ifdef NPDEBUG
dtrap();
803a7ac: 8028cd40 call 8028cd4 <dtrap>
#endif
LOCK_NET_RESOURCE(FREEQ_RESID);
803a7b0: 01000084 movi r4,2
803a7b4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803a7b8: e13ff617 ldw r4,-40(fp)
803a7bc: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803a7c0: 01000084 movi r4,2
803a7c4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return ENP_LOGIC;
803a7c8: 00bffd44 movi r2,-11
803a7cc: 00008106 br 803a9d4 <ip_write_internal+0x700>
}
p->type = IPTP;
803a7d0: e0bff617 ldw r2,-40(fp)
803a7d4: 00c00204 movi r3,8
803a7d8: 10c0080d sth r3,32(r2)
UNLOCK_NET_RESOURCE(NET_RESID);
803a7dc: 0009883a mov r4,zero
803a7e0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
LOCK_NET_RESOURCE(RXQ_RESID);
803a7e4: 01000044 movi r4,1
803a7e8: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
putq(&rcvdq, (q_elt)p);
803a7ec: e17ff617 ldw r5,-40(fp)
803a7f0: 010201b4 movhi r4,2054
803a7f4: 2136ab04 addi r4,r4,-9556
803a7f8: 80289900 call 8028990 <putq>
UNLOCK_NET_RESOURCE(RXQ_RESID);
803a7fc: 01000044 movi r4,1
803a800: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
LOCK_NET_RESOURCE(NET_RESID);
803a804: 0009883a mov r4,zero
803a808: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
SignalPktDemux();
803a80c: d0a08017 ldw r2,-32256(gp)
803a810: 1009883a mov r4,r2
803a814: 8015d840 call 8015d84 <OSSemPost>
return SUCCESS;
803a818: 0005883a mov r2,zero
803a81c: 00006d06 br 803a9d4 <ip_write_internal+0x700>
}
/* determine if the buffer that needs to be transmitted is interrupt-safe */
intrsafe_buf = ((p->flags & PKF_INTRUNSAFE) ? 0 : 1);
803a820: e0bff617 ldw r2,-40(fp)
803a824: 10800a17 ldw r2,40(r2)
803a828: 1080040c andi r2,r2,16
803a82c: 1005003a cmpeq r2,r2,zero
803a830: e0bffac5 stb r2,-21(fp)
/* obtain the length of the largest interrupt-safe buffer that can be
* allocated via pk_alloc () */
maxbuflen = pk_get_max_intrsafe_buf_len ();
803a834: 80287f40 call 80287f4 <pk_get_max_intrsafe_buf_len>
803a838: e0bff915 stw r2,-28(fp)
* the original buffer is interrupt-safe, we just need to consider the
* MTU of the egress interface. If the original buffer is interrupt-
* unsafe, we compute the MIN of the largest interrupt-safe buffer that
* we can use and the MTU of the egress interface (since we must satisfy
* both constraints) */
if (!intrsafe_buf)
803a83c: e0bffac3 ldbu r2,-21(fp)
803a840: 1000091e bne r2,zero,803a868 <ip_write_internal+0x594>
limit = MIN(maxbuflen,p->net->n_mtu);
803a844: e0bff617 ldw r2,-40(fp)
803a848: 10800617 ldw r2,24(r2)
803a84c: 10800917 ldw r2,36(r2)
803a850: 1007883a mov r3,r2
803a854: e0bff917 ldw r2,-28(fp)
803a858: 1880012e bgeu r3,r2,803a860 <ip_write_internal+0x58c>
803a85c: 1805883a mov r2,r3
803a860: e0bffe15 stw r2,-8(fp)
803a864: 00000406 br 803a878 <ip_write_internal+0x5a4>
else
limit = p->net->n_mtu;
803a868: e0bff617 ldw r2,-40(fp)
803a86c: 10800617 ldw r2,24(r2)
803a870: 10800917 ldw r2,36(r2)
803a874: e0bffe15 stw r2,-8(fp)
if ((p->nb_plen + p->net->n_lnh) > limit)
803a878: e0bff617 ldw r2,-40(fp)
803a87c: 10800417 ldw r2,16(r2)
803a880: e0fff617 ldw r3,-40(fp)
803a884: 18c00617 ldw r3,24(r3)
803a888: 18c00817 ldw r3,32(r3)
803a88c: 10c5883a add r2,r2,r3
803a890: e0fffe17 ldw r3,-8(fp)
803a894: 1880092e bgeu r3,r2,803a8bc <ip_write_internal+0x5e8>
int err;
err = ip_fragment(p, firsthop);
IN_PROFILER(PF_IP, PF_EXIT);
return(err);
#else
dtrap(); /* this should be caught by programmers during development */
803a898: 8028cd40 call 8028cd4 <dtrap>
LOCK_NET_RESOURCE(FREEQ_RESID);
803a89c: 01000084 movi r4,2
803a8a0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803a8a4: e13ff617 ldw r4,-40(fp)
803a8a8: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803a8ac: 01000084 movi r4,2
803a8b0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return ENP_LOGIC;
803a8b4: 00bffd44 movi r2,-11
803a8b8: 00004606 br 803a9d4 <ip_write_internal+0x700>
}
else
{
/* fragmentation is not required; check to see if we need to copy out of
* an interrupt-unsafe buffer */
if (!intrsafe_buf)
803a8bc: e0bffac3 ldbu r2,-21(fp)
803a8c0: 1000401e bne r2,zero,803a9c4 <ip_write_internal+0x6f0>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
803a8c4: 01000084 movi r4,2
803a8c8: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
newpkt = pk_alloc(p->nb_plen + p->net->n_lnh);
803a8cc: e0bff617 ldw r2,-40(fp)
803a8d0: 10800417 ldw r2,16(r2)
803a8d4: e0fff617 ldw r3,-40(fp)
803a8d8: 18c00617 ldw r3,24(r3)
803a8dc: 18c00817 ldw r3,32(r3)
803a8e0: 10c5883a add r2,r2,r3
803a8e4: 1009883a mov r4,r2
803a8e8: 80284340 call 8028434 <pk_alloc>
803a8ec: e0bff815 stw r2,-32(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803a8f0: 01000084 movi r4,2
803a8f4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (newpkt == 0)
803a8f8: e0bff817 ldw r2,-32(fp)
803a8fc: 1000081e bne r2,zero,803a920 <ip_write_internal+0x64c>
{
/* can't allocate interrupt-safe buffer, so free the packet that
* we are working with */
LOCK_NET_RESOURCE(FREEQ_RESID);
803a900: 01000084 movi r4,2
803a904: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803a908: e13ff617 ldw r4,-40(fp)
803a90c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803a910: 01000084 movi r4,2
803a914: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return ENP_NOBUFFER;
803a918: 00bffac4 movi r2,-21
803a91c: 00002d06 br 803a9d4 <ip_write_internal+0x700>
}
else
{
/* copy from interrupt-unsafe buffer into interrupt-safe buffer */
newpkt->nb_prot = newpkt->nb_buff + p->net->n_lnh;
803a920: e0bff817 ldw r2,-32(fp)
803a924: 10800117 ldw r2,4(r2)
803a928: e0fff617 ldw r3,-40(fp)
803a92c: 18c00617 ldw r3,24(r3)
803a930: 18c00817 ldw r3,32(r3)
803a934: 10c7883a add r3,r2,r3
803a938: e0bff817 ldw r2,-32(fp)
803a93c: 10c00315 stw r3,12(r2)
MEMCPY(newpkt->nb_prot, p->nb_prot, p->nb_plen);
803a940: e0bff817 ldw r2,-32(fp)
803a944: 10c00317 ldw r3,12(r2)
803a948: e0bff617 ldw r2,-40(fp)
803a94c: 11000317 ldw r4,12(r2)
803a950: e0bff617 ldw r2,-40(fp)
803a954: 10800417 ldw r2,16(r2)
803a958: 100d883a mov r6,r2
803a95c: 200b883a mov r5,r4
803a960: 1809883a mov r4,r3
803a964: 80086b80 call 80086b8 <memcpy>
/* setup various fields in the newly allocated PACKET structure */
newpkt->nb_plen = p->nb_plen;
803a968: e0bff617 ldw r2,-40(fp)
803a96c: 10c00417 ldw r3,16(r2)
803a970: e0bff817 ldw r2,-32(fp)
803a974: 10c00415 stw r3,16(r2)
newpkt->net = p->net;
803a978: e0bff617 ldw r2,-40(fp)
803a97c: 10c00617 ldw r3,24(r2)
803a980: e0bff817 ldw r2,-32(fp)
803a984: 10c00615 stw r3,24(r2)
newpkt->fhost = p->fhost;
803a988: e0bff617 ldw r2,-40(fp)
803a98c: 10c00717 ldw r3,28(r2)
803a990: e0bff817 ldw r2,-32(fp)
803a994: 10c00715 stw r3,28(r2)
/* free the original packet since it is no longer needed */
LOCK_NET_RESOURCE(FREEQ_RESID);
803a998: 01000084 movi r4,2
803a99c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803a9a0: e13ff617 ldw r4,-40(fp)
803a9a4: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803a9a8: 01000084 movi r4,2
803a9ac: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
/* send packet to MAC layer. This will try to resolve MAC layer addressing
* and send packet. ip2mac() can return SUCCESS, PENDING, or error codes.
*/
return(ip2mac(newpkt, firsthop));
803a9b0: e0bff717 ldw r2,-36(fp)
803a9b4: 100b883a mov r5,r2
803a9b8: e13ff817 ldw r4,-32(fp)
803a9bc: 8024df40 call 8024df4 <ip2mac>
803a9c0: 00000406 br 803a9d4 <ip_write_internal+0x700>
else
{
/* since the packet is in an interrupt-safe buffer, it can be passed to
* ip2mac () without any additional work. */
IN_PROFILER(PF_IP, PF_EXIT);
return(ip2mac(p, firsthop));
803a9c4: e0bff717 ldw r2,-36(fp)
803a9c8: 100b883a mov r5,r2
803a9cc: e13ff617 ldw r4,-40(fp)
803a9d0: 8024df40 call 8024df4 <ip2mac>
}
}
}
803a9d4: e037883a mov sp,fp
803a9d8: dfc00117 ldw ra,4(sp)
803a9dc: df000017 ldw fp,0(sp)
803a9e0: dec00204 addi sp,sp,8
803a9e4: f800283a ret
0803a9e8 <ip_write>:
int
ip_write(
u_char prot,
PACKET p)
{
803a9e8: defff904 addi sp,sp,-28
803a9ec: dfc00615 stw ra,24(sp)
803a9f0: df000515 stw fp,20(sp)
803a9f4: df000504 addi fp,sp,20
803a9f8: 2005883a mov r2,r4
803a9fc: e17ffb15 stw r5,-20(fp)
803aa00: e0bffc05 stb r2,-16(fp)
u_char ttl;
struct ip_socopts *sopts;
IN_PROFILER(PF_IP, PF_ENTRY); /* measure time in IP */
ip_mib.ipOutRequests++;
803aa04: 008201b4 movhi r2,2054
803aa08: 10b95817 ldw r2,-6816(r2)
803aa0c: 10c00044 addi r3,r2,1
803aa10: 008201b4 movhi r2,2054
803aa14: 10f95815 stw r3,-6816(r2)
/* make room for IP header, and form a pointer to it (pip) */
p->nb_prot -= sizeof(struct ip);
803aa18: e0bffb17 ldw r2,-20(fp)
803aa1c: 10800317 ldw r2,12(r2)
803aa20: 10fffb04 addi r3,r2,-20
803aa24: e0bffb17 ldw r2,-20(fp)
803aa28: 10c00315 stw r3,12(r2)
p->nb_plen += sizeof(struct ip);
803aa2c: e0bffb17 ldw r2,-20(fp)
803aa30: 10800417 ldw r2,16(r2)
803aa34: 10c00504 addi r3,r2,20
803aa38: e0bffb17 ldw r2,-20(fp)
803aa3c: 10c00415 stw r3,16(r2)
pip = (struct ip*)(p->nb_prot);
803aa40: e0bffb17 ldw r2,-20(fp)
803aa44: 10800317 ldw r2,12(r2)
803aa48: e0bffe15 stw r2,-8(fp)
/* build the initial IP header:
* IP source address (ip_src) and IP destination address (ip_dest)
* should already have been filled in by upper-layer protocol
*/
pip->ip_ver_ihl = 0x45; /* 2 nibbles; VER:4, IHL:5. */
803aa4c: e0bffe17 ldw r2,-8(fp)
803aa50: 00c01144 movi r3,69
803aa54: 10c00005 stb r3,0(r2)
pip->ip_flgs_foff = 0; /* clear fragmentation info field */
803aa58: e0bffe17 ldw r2,-8(fp)
803aa5c: 1000018d sth zero,6(r2)
pip->ip_id = htons((unshort)uid);
803aa60: d0a02f17 ldw r2,-32580(gp)
803aa64: 10bfffcc andi r2,r2,65535
803aa68: 1004d23a srli r2,r2,8
803aa6c: 1007883a mov r3,r2
803aa70: d0a02f17 ldw r2,-32580(gp)
803aa74: 10bfffcc andi r2,r2,65535
803aa78: 1004923a slli r2,r2,8
803aa7c: 1884b03a or r2,r3,r2
803aa80: 1007883a mov r3,r2
803aa84: e0bffe17 ldw r2,-8(fp)
803aa88: 10c0010d sth r3,4(r2)
uid++;
803aa8c: d0a02f17 ldw r2,-32580(gp)
803aa90: 10800044 addi r2,r2,1
803aa94: d0a02f15 stw r2,-32580(gp)
pip->ip_len = htons((unshort)(p->nb_plen));
803aa98: e0bffb17 ldw r2,-20(fp)
803aa9c: 10800417 ldw r2,16(r2)
803aaa0: 10bfffcc andi r2,r2,65535
803aaa4: 1004d23a srli r2,r2,8
803aaa8: 1007883a mov r3,r2
803aaac: e0bffb17 ldw r2,-20(fp)
803aab0: 10800417 ldw r2,16(r2)
803aab4: 10bfffcc andi r2,r2,65535
803aab8: 1004923a slli r2,r2,8
803aabc: 1884b03a or r2,r3,r2
803aac0: 1007883a mov r3,r2
803aac4: e0bffe17 ldw r2,-8(fp)
803aac8: 10c0008d sth r3,2(r2)
pip->ip_prot = prot;
803aacc: e0bffe17 ldw r2,-8(fp)
803aad0: e0fffc03 ldbu r3,-16(fp)
803aad4: 10c00245 stb r3,9(r2)
pip->ip_chksum = IPXSUM; /* clear checksum field */
803aad8: e0bffe17 ldw r2,-8(fp)
803aadc: 1000028d sth zero,10(r2)
ttl = IP_TTL;
803aae0: 00801004 movi r2,64
803aae4: e0bfffc5 stb r2,-1(fp)
#ifdef IP_MULTICAST
if ((IN_MULTICAST(ntohl(p->fhost))) && (p->imo != NULL))
803aae8: e0bffb17 ldw r2,-20(fp)
803aaec: 10800717 ldw r2,28(r2)
803aaf0: 1006d63a srli r3,r2,24
803aaf4: e0bffb17 ldw r2,-20(fp)
803aaf8: 10800717 ldw r2,28(r2)
803aafc: 1004d23a srli r2,r2,8
803ab00: 10bfc00c andi r2,r2,65280
803ab04: 1886b03a or r3,r3,r2
803ab08: e0bffb17 ldw r2,-20(fp)
803ab0c: 10800717 ldw r2,28(r2)
803ab10: 1004923a slli r2,r2,8
803ab14: 10803fec andhi r2,r2,255
803ab18: 1886b03a or r3,r3,r2
803ab1c: e0bffb17 ldw r2,-20(fp)
803ab20: 10800717 ldw r2,28(r2)
803ab24: 1004963a slli r2,r2,24
803ab28: 1884b03a or r2,r3,r2
803ab2c: 10fc002c andhi r3,r2,61440
803ab30: 00b80034 movhi r2,57344
803ab34: 1880071e bne r3,r2,803ab54 <ip_write+0x16c>
803ab38: e0bffb17 ldw r2,-20(fp)
803ab3c: 10800b17 ldw r2,44(r2)
803ab40: 10000426 beq r2,zero,803ab54 <ip_write+0x16c>
ttl = p->imo->imo_multicast_ttl;
803ab44: e0bffb17 ldw r2,-20(fp)
803ab48: 10800b17 ldw r2,44(r2)
803ab4c: 10800103 ldbu r2,4(r2)
803ab50: e0bfffc5 stb r2,-1(fp)
#endif /* IP_MULTICAST */
/* have IP_TOS or IP_TTL been set? */
if ((sopts = p->soxopts))
803ab54: e0bffb17 ldw r2,-20(fp)
803ab58: 10800c17 ldw r2,48(r2)
803ab5c: e0bffd15 stw r2,-12(fp)
803ab60: e0bffd17 ldw r2,-12(fp)
803ab64: 10001126 beq r2,zero,803abac <ip_write+0x1c4>
{
/* yup */
if (sopts->ip_ttl)
803ab68: e0bffd17 ldw r2,-12(fp)
803ab6c: 10800043 ldbu r2,1(r2)
803ab70: 10803fcc andi r2,r2,255
803ab74: 10000526 beq r2,zero,803ab8c <ip_write+0x1a4>
pip->ip_time = sopts->ip_ttl;
803ab78: e0bffd17 ldw r2,-12(fp)
803ab7c: 10c00043 ldbu r3,1(r2)
803ab80: e0bffe17 ldw r2,-8(fp)
803ab84: 10c00205 stb r3,8(r2)
803ab88: 00000306 br 803ab98 <ip_write+0x1b0>
else
pip->ip_time = ttl;
803ab8c: e0bffe17 ldw r2,-8(fp)
803ab90: e0ffffc3 ldbu r3,-1(fp)
803ab94: 10c00205 stb r3,8(r2)
pip->ip_tos = sopts->ip_tos;
803ab98: e0bffd17 ldw r2,-12(fp)
803ab9c: 10c00003 ldbu r3,0(r2)
803aba0: e0bffe17 ldw r2,-8(fp)
803aba4: 10c00045 stb r3,1(r2)
803aba8: 00000506 br 803abc0 <ip_write+0x1d8>
}
else
{
/* nope */
pip->ip_time = ttl;
803abac: e0bffe17 ldw r2,-8(fp)
803abb0: e0ffffc3 ldbu r3,-1(fp)
803abb4: 10c00205 stb r3,8(r2)
pip->ip_tos = IP_TOS_DEFVAL;
803abb8: e0bffe17 ldw r2,-8(fp)
803abbc: 10000045 stb zero,1(r2)
}
/* checksum the IP header */
pip->ip_chksum = ~cksum(pip, 10);
803abc0: 01400284 movi r5,10
803abc4: e13ffe17 ldw r4,-8(fp)
803abc8: 8026d7c0 call 8026d7c <cksum>
803abcc: 0084303a nor r2,zero,r2
803abd0: 1007883a mov r3,r2
803abd4: e0bffe17 ldw r2,-8(fp)
803abd8: 10c0028d sth r3,10(r2)
/* do the actual write */
return (ip_write_internal(p));
803abdc: e13ffb17 ldw r4,-20(fp)
803abe0: 803a2d40 call 803a2d4 <ip_write_internal>
}
803abe4: e037883a mov sp,fp
803abe8: dfc00117 ldw ra,4(sp)
803abec: df000017 ldw fp,0(sp)
803abf0: dec00204 addi sp,sp,8
803abf4: f800283a ret
0803abf8 <ip_write2>:
* OUTPUT: This function returns the return code from
* ip_write_internal ().
*/
int ip_write2 (u_char prot, PACKET p, u_char * optp)
{
803abf8: defff604 addi sp,sp,-40
803abfc: dfc00915 stw ra,36(sp)
803ac00: df000815 stw fp,32(sp)
803ac04: df000804 addi fp,sp,32
803ac08: 2005883a mov r2,r4
803ac0c: e17ff915 stw r5,-28(fp)
803ac10: e1bff815 stw r6,-32(fp)
803ac14: e0bffa05 stb r2,-24(fp)
struct ip * pip;
u_char ttl;
struct ip_socopts * sopts;
u_char iphlen = sizeof (struct ip);
803ac18: 00800504 movi r2,20
803ac1c: e0bfff85 stb r2,-2(fp)
u_char iphlen_pad;
u_char i;
IN_PROFILER(PF_IP, PF_ENTRY); /* measure time in IP */
ip_mib.ipOutRequests++;
803ac20: 008201b4 movhi r2,2054
803ac24: 10b95817 ldw r2,-6816(r2)
803ac28: 10c00044 addi r3,r2,1
803ac2c: 008201b4 movhi r2,2054
803ac30: 10f95815 stw r3,-6816(r2)
/* compute the total length of the options requested */
for (tmpp = optp; (*tmpp) != EOL_OPT; ++tmpp)
803ac34: e0bff817 ldw r2,-32(fp)
803ac38: e0bffe15 stw r2,-8(fp)
803ac3c: 00000d06 br 803ac74 <ip_write2+0x7c>
{
/* account for options, if any (caller has already created
* adequate space for the requested option) */
switch (*tmpp)
803ac40: e0bffe17 ldw r2,-8(fp)
803ac44: 10800003 ldbu r2,0(r2)
803ac48: 10803fcc andi r2,r2,255
803ac4c: 10800518 cmpnei r2,r2,20
803ac50: 1000041e bne r2,zero,803ac64 <ip_write2+0x6c>
{
case IP_RTR_ALERT_OPT:
iphlen += IP_RTR_ALERT_OPT_SIZE;
803ac54: e0bfff83 ldbu r2,-2(fp)
803ac58: 10800104 addi r2,r2,4
803ac5c: e0bfff85 stb r2,-2(fp)
break;
803ac60: 00000106 br 803ac68 <ip_write2+0x70>
default:
break;
803ac64: 0001883a nop
for (tmpp = optp; (*tmpp) != EOL_OPT; ++tmpp)
803ac68: e0bffe17 ldw r2,-8(fp)
803ac6c: 10800044 addi r2,r2,1
803ac70: e0bffe15 stw r2,-8(fp)
803ac74: e0bffe17 ldw r2,-8(fp)
803ac78: 10800003 ldbu r2,0(r2)
803ac7c: 10803fcc andi r2,r2,255
803ac80: 103fef1e bne r2,zero,803ac40 <ip_write2+0x48>
}
/* compute the amount of padding required, if any (to ensure
* that the IP header (including options) ends on a dword
* (four byte) boundary */
if (iphlen & 0x3)
803ac84: e0bfff83 ldbu r2,-2(fp)
803ac88: 108000cc andi r2,r2,3
803ac8c: 10000726 beq r2,zero,803acac <ip_write2+0xb4>
iphlen_pad = 4 - (iphlen & 0x3);
803ac90: e0bfff83 ldbu r2,-2(fp)
803ac94: 108000cc andi r2,r2,3
803ac98: 1007883a mov r3,r2
803ac9c: 00800104 movi r2,4
803aca0: 10c5c83a sub r2,r2,r3
803aca4: e0bffdc5 stb r2,-9(fp)
803aca8: 00000106 br 803acb0 <ip_write2+0xb8>
else iphlen_pad = 0; /* no header padding required */
803acac: e03ffdc5 stb zero,-9(fp)
/* the packet passed to ip_write2 () has its nb_prot set to
* point to start of the protocol's (e.g., IGMP) data, and
* nb_plen set to the length of that data. locate start of
* the IP header (account for IP options), and form a pointer
* to it (pip) */
p->nb_prot -= (iphlen + iphlen_pad);
803acb0: e0bff917 ldw r2,-28(fp)
803acb4: 10c00317 ldw r3,12(r2)
803acb8: e13fff83 ldbu r4,-2(fp)
803acbc: e0bffdc3 ldbu r2,-9(fp)
803acc0: 2085883a add r2,r4,r2
803acc4: 0085c83a sub r2,zero,r2
803acc8: 1887883a add r3,r3,r2
803accc: e0bff917 ldw r2,-28(fp)
803acd0: 10c00315 stw r3,12(r2)
/* add padding length to the total length of the IP datagram */
p->nb_plen += (iphlen + iphlen_pad);
803acd4: e0bff917 ldw r2,-28(fp)
803acd8: 10800417 ldw r2,16(r2)
803acdc: e13fff83 ldbu r4,-2(fp)
803ace0: e0fffdc3 ldbu r3,-9(fp)
803ace4: 20c7883a add r3,r4,r3
803ace8: 10c7883a add r3,r2,r3
803acec: e0bff917 ldw r2,-28(fp)
803acf0: 10c00415 stw r3,16(r2)
pip = (struct ip *) (p->nb_prot);
803acf4: e0bff917 ldw r2,-28(fp)
803acf8: 10800317 ldw r2,12(r2)
803acfc: e0bffc15 stw r2,-16(fp)
/* build the initial IP header:
* IP source address (ip_src) and IP destination address (ip_dest)
* should already have been filled in by upper-layer protocol
*/
pip->ip_ver_ihl = ((IP_VER << 4) | ((iphlen + iphlen_pad) >> 2));
803ad00: e0ffff83 ldbu r3,-2(fp)
803ad04: e0bffdc3 ldbu r2,-9(fp)
803ad08: 1885883a add r2,r3,r2
803ad0c: 1005d0ba srai r2,r2,2
803ad10: 10801014 ori r2,r2,64
803ad14: 1007883a mov r3,r2
803ad18: e0bffc17 ldw r2,-16(fp)
803ad1c: 10c00005 stb r3,0(r2)
pip->ip_flgs_foff = 0; /* clear fragmentation info field */
803ad20: e0bffc17 ldw r2,-16(fp)
803ad24: 1000018d sth zero,6(r2)
pip->ip_id = htons((unshort)uid);
803ad28: d0a02f17 ldw r2,-32580(gp)
803ad2c: 10bfffcc andi r2,r2,65535
803ad30: 1004d23a srli r2,r2,8
803ad34: 1007883a mov r3,r2
803ad38: d0a02f17 ldw r2,-32580(gp)
803ad3c: 10bfffcc andi r2,r2,65535
803ad40: 1004923a slli r2,r2,8
803ad44: 1884b03a or r2,r3,r2
803ad48: 1007883a mov r3,r2
803ad4c: e0bffc17 ldw r2,-16(fp)
803ad50: 10c0010d sth r3,4(r2)
uid++;
803ad54: d0a02f17 ldw r2,-32580(gp)
803ad58: 10800044 addi r2,r2,1
803ad5c: d0a02f15 stw r2,-32580(gp)
pip->ip_len = htons((unshort)(p->nb_plen));
803ad60: e0bff917 ldw r2,-28(fp)
803ad64: 10800417 ldw r2,16(r2)
803ad68: 10bfffcc andi r2,r2,65535
803ad6c: 1004d23a srli r2,r2,8
803ad70: 1007883a mov r3,r2
803ad74: e0bff917 ldw r2,-28(fp)
803ad78: 10800417 ldw r2,16(r2)
803ad7c: 10bfffcc andi r2,r2,65535
803ad80: 1004923a slli r2,r2,8
803ad84: 1884b03a or r2,r3,r2
803ad88: 1007883a mov r3,r2
803ad8c: e0bffc17 ldw r2,-16(fp)
803ad90: 10c0008d sth r3,2(r2)
pip->ip_prot = prot;
803ad94: e0bffc17 ldw r2,-16(fp)
803ad98: e0fffa03 ldbu r3,-24(fp)
803ad9c: 10c00245 stb r3,9(r2)
pip->ip_chksum = IPXSUM; /* clear checksum field */
803ada0: e0bffc17 ldw r2,-16(fp)
803ada4: 1000028d sth zero,10(r2)
ttl = IP_TTL;
803ada8: 00801004 movi r2,64
803adac: e0bfffc5 stb r2,-1(fp)
#ifdef IP_MULTICAST
if ((IN_MULTICAST(ntohl(p->fhost))) && (p->imo != NULL))
803adb0: e0bff917 ldw r2,-28(fp)
803adb4: 10800717 ldw r2,28(r2)
803adb8: 1006d63a srli r3,r2,24
803adbc: e0bff917 ldw r2,-28(fp)
803adc0: 10800717 ldw r2,28(r2)
803adc4: 1004d23a srli r2,r2,8
803adc8: 10bfc00c andi r2,r2,65280
803adcc: 1886b03a or r3,r3,r2
803add0: e0bff917 ldw r2,-28(fp)
803add4: 10800717 ldw r2,28(r2)
803add8: 1004923a slli r2,r2,8
803addc: 10803fec andhi r2,r2,255
803ade0: 1886b03a or r3,r3,r2
803ade4: e0bff917 ldw r2,-28(fp)
803ade8: 10800717 ldw r2,28(r2)
803adec: 1004963a slli r2,r2,24
803adf0: 1884b03a or r2,r3,r2
803adf4: 10fc002c andhi r3,r2,61440
803adf8: 00b80034 movhi r2,57344
803adfc: 1880071e bne r3,r2,803ae1c <ip_write2+0x224>
803ae00: e0bff917 ldw r2,-28(fp)
803ae04: 10800b17 ldw r2,44(r2)
803ae08: 10000426 beq r2,zero,803ae1c <ip_write2+0x224>
ttl = p->imo->imo_multicast_ttl;
803ae0c: e0bff917 ldw r2,-28(fp)
803ae10: 10800b17 ldw r2,44(r2)
803ae14: 10800103 ldbu r2,4(r2)
803ae18: e0bfffc5 stb r2,-1(fp)
#endif /* IP_MULTICAST */
/* have TOS or TTL been set (via socket options)? */
if ((sopts = p->soxopts))
803ae1c: e0bff917 ldw r2,-28(fp)
803ae20: 10800c17 ldw r2,48(r2)
803ae24: e0bffb15 stw r2,-20(fp)
803ae28: e0bffb17 ldw r2,-20(fp)
803ae2c: 10001126 beq r2,zero,803ae74 <ip_write2+0x27c>
{
if (sopts->ip_ttl)
803ae30: e0bffb17 ldw r2,-20(fp)
803ae34: 10800043 ldbu r2,1(r2)
803ae38: 10803fcc andi r2,r2,255
803ae3c: 10000526 beq r2,zero,803ae54 <ip_write2+0x25c>
pip->ip_time = sopts->ip_ttl;
803ae40: e0bffb17 ldw r2,-20(fp)
803ae44: 10c00043 ldbu r3,1(r2)
803ae48: e0bffc17 ldw r2,-16(fp)
803ae4c: 10c00205 stb r3,8(r2)
803ae50: 00000306 br 803ae60 <ip_write2+0x268>
else
pip->ip_time = ttl;
803ae54: e0bffc17 ldw r2,-16(fp)
803ae58: e0ffffc3 ldbu r3,-1(fp)
803ae5c: 10c00205 stb r3,8(r2)
pip->ip_tos = sopts->ip_tos;
803ae60: e0bffb17 ldw r2,-20(fp)
803ae64: 10c00003 ldbu r3,0(r2)
803ae68: e0bffc17 ldw r2,-16(fp)
803ae6c: 10c00045 stb r3,1(r2)
803ae70: 00000506 br 803ae88 <ip_write2+0x290>
}
else
{
pip->ip_time = ttl;
803ae74: e0bffc17 ldw r2,-16(fp)
803ae78: e0ffffc3 ldbu r3,-1(fp)
803ae7c: 10c00205 stb r3,8(r2)
pip->ip_tos = IP_TOS_DEFVAL;
803ae80: e0bffc17 ldw r2,-16(fp)
803ae84: 10000045 stb zero,1(r2)
}
/* point to the start of the IP options, and insert the options */
for (tmpp = (u_char *)(p->nb_prot + sizeof(struct ip)); *optp != EOL_OPT; ++optp)
803ae88: e0bff917 ldw r2,-28(fp)
803ae8c: 10800317 ldw r2,12(r2)
803ae90: 10800504 addi r2,r2,20
803ae94: e0bffe15 stw r2,-8(fp)
803ae98: 00001006 br 803aedc <ip_write2+0x2e4>
{
/* caller has already provided adequate space for the requested options */
switch (*optp)
803ae9c: e0bff817 ldw r2,-32(fp)
803aea0: 10800003 ldbu r2,0(r2)
803aea4: 10803fcc andi r2,r2,255
803aea8: 10800518 cmpnei r2,r2,20
803aeac: 1000071e bne r2,zero,803aecc <ip_write2+0x2d4>
{
case IP_RTR_ALERT_OPT:
*((u_long *) tmpp) = htonl (IP_RTR_ALERT_OPT_DATA);
803aeb0: e0bffe17 ldw r2,-8(fp)
803aeb4: 00c12504 movi r3,1172
803aeb8: 10c00015 stw r3,0(r2)
/* this option is 4 bytes long */
tmpp += IP_RTR_ALERT_OPT_SIZE;
803aebc: e0bffe17 ldw r2,-8(fp)
803aec0: 10800104 addi r2,r2,4
803aec4: e0bffe15 stw r2,-8(fp)
break;
803aec8: 00000106 br 803aed0 <ip_write2+0x2d8>
default:
break;
803aecc: 0001883a nop
for (tmpp = (u_char *)(p->nb_prot + sizeof(struct ip)); *optp != EOL_OPT; ++optp)
803aed0: e0bff817 ldw r2,-32(fp)
803aed4: 10800044 addi r2,r2,1
803aed8: e0bff815 stw r2,-32(fp)
803aedc: e0bff817 ldw r2,-32(fp)
803aee0: 10800003 ldbu r2,0(r2)
803aee4: 10803fcc andi r2,r2,255
803aee8: 103fec1e bne r2,zero,803ae9c <ip_write2+0x2a4>
}
}
/* add one (or more) one-byte long End of Option options (if required) */
for (i = 0; i < iphlen_pad; ++i) *(tmpp + i) = 0;
803aeec: e03ffd85 stb zero,-10(fp)
803aef0: 00000706 br 803af10 <ip_write2+0x318>
803aef4: e0bffd83 ldbu r2,-10(fp)
803aef8: e0fffe17 ldw r3,-8(fp)
803aefc: 1885883a add r2,r3,r2
803af00: 10000005 stb zero,0(r2)
803af04: e0bffd83 ldbu r2,-10(fp)
803af08: 10800044 addi r2,r2,1
803af0c: e0bffd85 stb r2,-10(fp)
803af10: e0fffd83 ldbu r3,-10(fp)
803af14: e0bffdc3 ldbu r2,-9(fp)
803af18: 18bff636 bltu r3,r2,803aef4 <ip_write2+0x2fc>
/* checksum the IP header */
pip->ip_chksum = ~cksum (pip, ((iphlen + iphlen_pad)/2));
803af1c: e0ffff83 ldbu r3,-2(fp)
803af20: e0bffdc3 ldbu r2,-9(fp)
803af24: 1885883a add r2,r3,r2
803af28: 1006d7fa srli r3,r2,31
803af2c: 1885883a add r2,r3,r2
803af30: 1005d07a srai r2,r2,1
803af34: 100b883a mov r5,r2
803af38: e13ffc17 ldw r4,-16(fp)
803af3c: 8026d7c0 call 8026d7c <cksum>
803af40: 0084303a nor r2,zero,r2
803af44: 1007883a mov r3,r2
803af48: e0bffc17 ldw r2,-16(fp)
803af4c: 10c0028d sth r3,10(r2)
/* do the actual write */
return (ip_write_internal (p));
803af50: e13ff917 ldw r4,-28(fp)
803af54: 803a2d40 call 803a2d4 <ip_write_internal>
}
803af58: e037883a mov sp,fp
803af5c: dfc00117 ldw ra,4(sp)
803af60: df000017 ldw fp,0(sp)
803af64: dec00204 addi sp,sp,8
803af68: f800283a ret
0803af6c <ip_raw_write>:
* RETURNS: Returns 0 if sent OK, ENP_SEND_PENDING (1) if
* waiting for ARP, else negative error code if error detected.
*/
int
ip_raw_write(PACKET p)
{
803af6c: defffc04 addi sp,sp,-16
803af70: dfc00315 stw ra,12(sp)
803af74: df000215 stw fp,8(sp)
803af78: df000204 addi fp,sp,8
803af7c: e13ffe15 stw r4,-8(fp)
struct ip * pip;
IN_PROFILER(PF_IP, PF_ENTRY); /* measure time in IP */
ip_mib.ipOutRequests++;
803af80: 008201b4 movhi r2,2054
803af84: 10b95817 ldw r2,-6816(r2)
803af88: 10c00044 addi r3,r2,1
803af8c: 008201b4 movhi r2,2054
803af90: 10f95815 stw r3,-6816(r2)
/* form a pointer to IP header (pip) */
pip = (struct ip*)(p->nb_prot);
803af94: e0bffe17 ldw r2,-8(fp)
803af98: 10800317 ldw r2,12(r2)
803af9c: e0bfff15 stw r2,-4(fp)
/* if there's no IP id, give it one */
if (pip->ip_id == 0)
803afa0: e0bfff17 ldw r2,-4(fp)
803afa4: 1080010b ldhu r2,4(r2)
803afa8: 10bfffcc andi r2,r2,65535
803afac: 10000e1e bne r2,zero,803afe8 <ip_raw_write+0x7c>
{
pip->ip_id = htons((unshort)uid);
803afb0: d0a02f17 ldw r2,-32580(gp)
803afb4: 10bfffcc andi r2,r2,65535
803afb8: 1004d23a srli r2,r2,8
803afbc: 1007883a mov r3,r2
803afc0: d0a02f17 ldw r2,-32580(gp)
803afc4: 10bfffcc andi r2,r2,65535
803afc8: 1004923a slli r2,r2,8
803afcc: 1884b03a or r2,r3,r2
803afd0: 1007883a mov r3,r2
803afd4: e0bfff17 ldw r2,-4(fp)
803afd8: 10c0010d sth r3,4(r2)
uid++;
803afdc: d0a02f17 ldw r2,-32580(gp)
803afe0: 10800044 addi r2,r2,1
803afe4: d0a02f15 stw r2,-32580(gp)
}
/* checksum the IP header */
pip->ip_chksum = IPXSUM; /* clear checksum field */
803afe8: e0bfff17 ldw r2,-4(fp)
803afec: 1000028d sth zero,10(r2)
pip->ip_chksum = ~cksum(pip, 10);
803aff0: 01400284 movi r5,10
803aff4: e13fff17 ldw r4,-4(fp)
803aff8: 8026d7c0 call 8026d7c <cksum>
803affc: 0084303a nor r2,zero,r2
803b000: 1007883a mov r3,r2
803b004: e0bfff17 ldw r2,-4(fp)
803b008: 10c0028d sth r3,10(r2)
/* do the actual write */
return (ip_write_internal(p));
803b00c: e13ffe17 ldw r4,-8(fp)
803b010: 803a2d40 call 803a2d4 <ip_write_internal>
}
803b014: e037883a mov sp,fp
803b018: dfc00117 ldw ra,4(sp)
803b01c: df000017 ldw fp,0(sp)
803b020: dec00204 addi sp,sp,8
803b024: f800283a ret
0803b028 <ip_mymach>:
* certain foreign host.
*/
ip_addr
ip_mymach(ip_addr host)
{
803b028: defffa04 addi sp,sp,-24
803b02c: dfc00515 stw ra,20(sp)
803b030: df000415 stw fp,16(sp)
803b034: df000404 addi fp,sp,16
803b038: e13ffd15 stw r4,-12(fp)
#ifndef MULTI_HOMED /* single static interface */
USE_ARG(host);
return(nets[0]->n_ipaddr); /* always use address from only net */
#else /* MULTI_HOMED */
tnet = iproute(host, &temp);
803b03c: e0bffe04 addi r2,fp,-8
803b040: 100b883a mov r5,r2
803b044: e13ffd17 ldw r4,-12(fp)
803b048: 803b3700 call 803b370 <iproute>
803b04c: e0bfff15 stw r2,-4(fp)
if (tnet == 0)
803b050: e0bfff17 ldw r2,-4(fp)
803b054: 1000161e bne r2,zero,803b0b0 <ip_mymach+0x88>
{
#ifdef NPDEBUG
if (NDEBUG & (PROTERR|INFOMSG))
803b058: d0a06617 ldw r2,-32360(gp)
803b05c: 1080050c andi r2,r2,20
803b060: 10001126 beq r2,zero,803b0a8 <ip_mymach+0x80>
dprintf("IP: Couldn't route to %u.%u.%u.%u\n", PUSH_IPADDR(host));
803b064: e0bffd17 ldw r2,-12(fp)
803b068: 10c03fcc andi r3,r2,255
803b06c: e0bffd17 ldw r2,-12(fp)
803b070: 1004d23a srli r2,r2,8
803b074: 11003fcc andi r4,r2,255
803b078: e0bffd17 ldw r2,-12(fp)
803b07c: 1004d43a srli r2,r2,16
803b080: 11403fcc andi r5,r2,255
803b084: e0bffd17 ldw r2,-12(fp)
803b088: 1004d63a srli r2,r2,24
803b08c: d8800015 stw r2,0(sp)
803b090: 280f883a mov r7,r5
803b094: 200d883a mov r6,r4
803b098: 180b883a mov r5,r3
803b09c: 01020174 movhi r4,2053
803b0a0: 212c4604 addi r4,r4,-20200
803b0a4: 8002c780 call 8002c78 <printf>
#endif /* NPDEBUG */
return 0L;
803b0a8: 0005883a mov r2,zero
803b0ac: 00000206 br 803b0b8 <ip_mymach+0x90>
}
return tnet->n_ipaddr;
803b0b0: e0bfff17 ldw r2,-4(fp)
803b0b4: 10800a17 ldw r2,40(r2)
#endif /* MULTI_HOMED */
}
803b0b8: e037883a mov sp,fp
803b0bc: dfc00117 ldw ra,4(sp)
803b0c0: df000017 ldw fp,0(sp)
803b0c4: dec00204 addi sp,sp,8
803b0c8: f800283a ret
0803b0cc <ip_dump>:
* RETURNS: void
*/
void
ip_dump(PACKET p)
{
803b0cc: defff704 addi sp,sp,-36
803b0d0: dfc00815 stw ra,32(sp)
803b0d4: df000715 stw fp,28(sp)
803b0d8: df000704 addi fp,sp,28
803b0dc: e13ffc15 stw r4,-16(fp)
struct ip * pip;
unsigned char * cp;
unsigned short xsum, osum;
pip = ip_head(p);
803b0e0: e0bffc17 ldw r2,-16(fp)
803b0e4: 10800317 ldw r2,12(r2)
803b0e8: e0bfff15 stw r2,-4(fp)
osum = pip->ip_chksum;
803b0ec: e0bfff17 ldw r2,-4(fp)
803b0f0: 1080028b ldhu r2,10(r2)
803b0f4: e0bffe8d sth r2,-6(fp)
pip->ip_chksum = 0;
803b0f8: e0bfff17 ldw r2,-4(fp)
803b0fc: 1000028d sth zero,10(r2)
xsum = ~cksum(pip, ip_hlen(pip) >> 1);
803b100: e0bfff17 ldw r2,-4(fp)
803b104: 10800003 ldbu r2,0(r2)
803b108: 10803fcc andi r2,r2,255
803b10c: 100490ba slli r2,r2,2
803b110: 1005d07a srai r2,r2,1
803b114: 1080078c andi r2,r2,30
803b118: 100b883a mov r5,r2
803b11c: e13fff17 ldw r4,-4(fp)
803b120: 8026d7c0 call 8026d7c <cksum>
803b124: 0084303a nor r2,zero,r2
803b128: e0bffe0d sth r2,-8(fp)
if (osum != xsum) /* trap here if checksum is wrong */
803b12c: e0fffe8b ldhu r3,-6(fp)
803b130: e0bffe0b ldhu r2,-8(fp)
803b134: 18800126 beq r3,r2,803b13c <ip_dump+0x70>
{
dtrap();
803b138: 8028cd40 call 8028cd4 <dtrap>
/* dtrap() is fatal in the default Windows implementation, so
* we comment it out */
dtrap(); /* use debugger to view variables & packet */
#endif
ns_printf(NULL ,"IP packet header:\n");
803b13c: 01420174 movhi r5,2053
803b140: 296c4f04 addi r5,r5,-20164
803b144: 0009883a mov r4,zero
803b148: 80273900 call 8027390 <ns_printf>
cp = (unsigned char *)pip; /* make char pointer for bitmasks */
803b14c: e0bfff17 ldw r2,-4(fp)
803b150: e0bffd15 stw r2,-12(fp)
ns_printf(NULL ,"ver/hlen: %02x, TOS: %02x, len: %04x, id: %04x\n",
*cp, *(cp+1), htons(pip->ip_len), htons(pip->ip_id));
803b154: e0bffd17 ldw r2,-12(fp)
803b158: 10800003 ldbu r2,0(r2)
ns_printf(NULL ,"ver/hlen: %02x, TOS: %02x, len: %04x, id: %04x\n",
803b15c: 11403fcc andi r5,r2,255
*cp, *(cp+1), htons(pip->ip_len), htons(pip->ip_id));
803b160: e0bffd17 ldw r2,-12(fp)
803b164: 10800044 addi r2,r2,1
803b168: 10800003 ldbu r2,0(r2)
ns_printf(NULL ,"ver/hlen: %02x, TOS: %02x, len: %04x, id: %04x\n",
803b16c: 11803fcc andi r6,r2,255
*cp, *(cp+1), htons(pip->ip_len), htons(pip->ip_id));
803b170: e0bfff17 ldw r2,-4(fp)
803b174: 1080008b ldhu r2,2(r2)
803b178: 10bfffcc andi r2,r2,65535
803b17c: 1004d23a srli r2,r2,8
803b180: 10bfffcc andi r2,r2,65535
803b184: 10c03fcc andi r3,r2,255
803b188: e0bfff17 ldw r2,-4(fp)
803b18c: 1080008b ldhu r2,2(r2)
803b190: 10bfffcc andi r2,r2,65535
803b194: 1004923a slli r2,r2,8
803b198: 10bfffcc andi r2,r2,65535
ns_printf(NULL ,"ver/hlen: %02x, TOS: %02x, len: %04x, id: %04x\n",
803b19c: 1884b03a or r2,r3,r2
*cp, *(cp+1), htons(pip->ip_len), htons(pip->ip_id));
803b1a0: e0ffff17 ldw r3,-4(fp)
803b1a4: 18c0010b ldhu r3,4(r3)
803b1a8: 18ffffcc andi r3,r3,65535
803b1ac: 1806d23a srli r3,r3,8
803b1b0: 18ffffcc andi r3,r3,65535
803b1b4: 19003fcc andi r4,r3,255
803b1b8: e0ffff17 ldw r3,-4(fp)
803b1bc: 18c0010b ldhu r3,4(r3)
803b1c0: 18ffffcc andi r3,r3,65535
803b1c4: 1806923a slli r3,r3,8
803b1c8: 18ffffcc andi r3,r3,65535
ns_printf(NULL ,"ver/hlen: %02x, TOS: %02x, len: %04x, id: %04x\n",
803b1cc: 20c6b03a or r3,r4,r3
803b1d0: d8c00115 stw r3,4(sp)
803b1d4: d8800015 stw r2,0(sp)
803b1d8: 300f883a mov r7,r6
803b1dc: 280d883a mov r6,r5
803b1e0: 01420174 movhi r5,2053
803b1e4: 296c5404 addi r5,r5,-20144
803b1e8: 0009883a mov r4,zero
803b1ec: 80273900 call 8027390 <ns_printf>
ns_printf(NULL ,"flags/offs: %04x, TTL %02x, protocol: %02x, cksum: %04x (%s)\n",
htons(*(unshort*)(cp+6)), pip->ip_time, pip->ip_prot,
803b1f0: e0bffd17 ldw r2,-12(fp)
803b1f4: 10800184 addi r2,r2,6
803b1f8: 1080000b ldhu r2,0(r2)
803b1fc: 10bfffcc andi r2,r2,65535
803b200: 1004d23a srli r2,r2,8
803b204: 10bfffcc andi r2,r2,65535
803b208: 10c03fcc andi r3,r2,255
803b20c: e0bffd17 ldw r2,-12(fp)
803b210: 10800184 addi r2,r2,6
803b214: 1080000b ldhu r2,0(r2)
803b218: 10bfffcc andi r2,r2,65535
803b21c: 1004923a slli r2,r2,8
803b220: 10bfffcc andi r2,r2,65535
ns_printf(NULL ,"flags/offs: %04x, TTL %02x, protocol: %02x, cksum: %04x (%s)\n",
803b224: 188cb03a or r6,r3,r2
htons(*(unshort*)(cp+6)), pip->ip_time, pip->ip_prot,
803b228: e0bfff17 ldw r2,-4(fp)
803b22c: 10800203 ldbu r2,8(r2)
ns_printf(NULL ,"flags/offs: %04x, TTL %02x, protocol: %02x, cksum: %04x (%s)\n",
803b230: 11c03fcc andi r7,r2,255
htons(*(unshort*)(cp+6)), pip->ip_time, pip->ip_prot,
803b234: e0bfff17 ldw r2,-4(fp)
803b238: 10800243 ldbu r2,9(r2)
ns_printf(NULL ,"flags/offs: %04x, TTL %02x, protocol: %02x, cksum: %04x (%s)\n",
803b23c: 10c03fcc andi r3,r2,255
htons(osum), (osum==xsum)?"ok":"bad");
803b240: e0bffe8b ldhu r2,-6(fp)
803b244: 1004d23a srli r2,r2,8
803b248: 10bfffcc andi r2,r2,65535
803b24c: 11003fcc andi r4,r2,255
803b250: e0bffe8b ldhu r2,-6(fp)
803b254: 1004923a slli r2,r2,8
803b258: 10bfffcc andi r2,r2,65535
ns_printf(NULL ,"flags/offs: %04x, TTL %02x, protocol: %02x, cksum: %04x (%s)\n",
803b25c: 2088b03a or r4,r4,r2
803b260: e17ffe8b ldhu r5,-6(fp)
803b264: e0bffe0b ldhu r2,-8(fp)
803b268: 2880031e bne r5,r2,803b278 <ip_dump+0x1ac>
803b26c: 00820174 movhi r2,2053
803b270: 10ac6004 addi r2,r2,-20096
803b274: 00000206 br 803b280 <ip_dump+0x1b4>
803b278: 00820174 movhi r2,2053
803b27c: 10ac6104 addi r2,r2,-20092
803b280: d8800215 stw r2,8(sp)
803b284: d9000115 stw r4,4(sp)
803b288: d8c00015 stw r3,0(sp)
803b28c: 01420174 movhi r5,2053
803b290: 296c6204 addi r5,r5,-20088
803b294: 0009883a mov r4,zero
803b298: 80273900 call 8027390 <ns_printf>
ns_printf(NULL ,"src: %u.%u.%u.%u ", PUSH_IPADDR(pip->ip_src));
803b29c: e0bfff17 ldw r2,-4(fp)
803b2a0: 10800317 ldw r2,12(r2)
803b2a4: 11003fcc andi r4,r2,255
803b2a8: e0bfff17 ldw r2,-4(fp)
803b2ac: 10800317 ldw r2,12(r2)
803b2b0: 1004d23a srli r2,r2,8
803b2b4: 11403fcc andi r5,r2,255
803b2b8: e0bfff17 ldw r2,-4(fp)
803b2bc: 10800317 ldw r2,12(r2)
803b2c0: 1004d43a srli r2,r2,16
803b2c4: 10803fcc andi r2,r2,255
803b2c8: e0ffff17 ldw r3,-4(fp)
803b2cc: 18c00317 ldw r3,12(r3)
803b2d0: 1806d63a srli r3,r3,24
803b2d4: d8c00115 stw r3,4(sp)
803b2d8: d8800015 stw r2,0(sp)
803b2dc: 280f883a mov r7,r5
803b2e0: 200d883a mov r6,r4
803b2e4: 01420174 movhi r5,2053
803b2e8: 296c7204 addi r5,r5,-20024
803b2ec: 0009883a mov r4,zero
803b2f0: 80273900 call 8027390 <ns_printf>
ns_printf(NULL ,"dest: %u.%u.%u.%u\n", PUSH_IPADDR(pip->ip_dest));
803b2f4: e0bfff17 ldw r2,-4(fp)
803b2f8: 10800417 ldw r2,16(r2)
803b2fc: 11003fcc andi r4,r2,255
803b300: e0bfff17 ldw r2,-4(fp)
803b304: 10800417 ldw r2,16(r2)
803b308: 1004d23a srli r2,r2,8
803b30c: 11403fcc andi r5,r2,255
803b310: e0bfff17 ldw r2,-4(fp)
803b314: 10800417 ldw r2,16(r2)
803b318: 1004d43a srli r2,r2,16
803b31c: 10803fcc andi r2,r2,255
803b320: e0ffff17 ldw r3,-4(fp)
803b324: 18c00417 ldw r3,16(r3)
803b328: 1806d63a srli r3,r3,24
803b32c: d8c00115 stw r3,4(sp)
803b330: d8800015 stw r2,0(sp)
803b334: 280f883a mov r7,r5
803b338: 200d883a mov r6,r4
803b33c: 01420174 movhi r5,2053
803b340: 296c7704 addi r5,r5,-20004
803b344: 0009883a mov r4,zero
803b348: 80273900 call 8027390 <ns_printf>
pip->ip_chksum = osum; /* fix what we clobbered */
803b34c: e0bfff17 ldw r2,-4(fp)
803b350: e0fffe8b ldhu r3,-6(fp)
803b354: 10c0028d sth r3,10(r2)
}
803b358: 0001883a nop
803b35c: e037883a mov sp,fp
803b360: dfc00117 ldw ra,4(sp)
803b364: df000017 ldw fp,0(sp)
803b368: dec00204 addi sp,sp,8
803b36c: f800283a ret
0803b370 <iproute>:
* RETURNS: Returns NULL when unable to route, else returns a NET pointer.
*/
NET
iproute(ip_addr host, ip_addr * hop1)
{
803b370: defff804 addi sp,sp,-32
803b374: dfc00715 stw ra,28(sp)
803b378: df000615 stw fp,24(sp)
803b37c: df000604 addi fp,sp,24
803b380: e13ffc15 stw r4,-16(fp)
803b384: e17ffb15 stw r5,-20(fp)
NET ifp;
#ifdef IP_ROUTING
RTMIB rtp;
#endif /* IP_ROUTING */
if (host == 0L) /* Sanity check parameter. */
803b388: e0bffc17 ldw r2,-16(fp)
803b38c: 1000021e bne r2,zero,803b398 <iproute+0x28>
return NULL;
803b390: 0005883a mov r2,zero
803b394: 00006406 br 803b528 <iproute+0x1b8>
* stack has been initialized (tk_yield() gets called out of the
* dialer code as part of PPP initialization), one symptom of
* which is the routing table not being present yet. if this
* happens, quit.
*/
if (rt_mib == NULL)
803b398: d0a09517 ldw r2,-32172(gp)
803b39c: 1000021e bne r2,zero,803b3a8 <iproute+0x38>
return NULL;
803b3a0: 0005883a mov r2,zero
803b3a4: 00006006 br 803b528 <iproute+0x1b8>
#endif /* BTREE_ROUTING */
/* see if the host matches the cached route */
if (cachedRoute) /* don't test this if route is null */
803b3a8: d0a09c17 ldw r2,-32144(gp)
803b3ac: 10000e26 beq r2,zero,803b3e8 <iproute+0x78>
{
if (cachedRoute->ipRouteDest == host) /* exact match */
803b3b0: d0a09c17 ldw r2,-32144(gp)
803b3b4: 10800017 ldw r2,0(r2)
803b3b8: e0fffc17 ldw r3,-16(fp)
803b3bc: 18800a1e bne r3,r2,803b3e8 <iproute+0x78>
{
*hop1 = cachedRoute->ipRouteNextHop; /* fill in nexthop IP addr */
803b3c0: d0a09c17 ldw r2,-32144(gp)
803b3c4: 10c00617 ldw r3,24(r2)
803b3c8: e0bffb17 ldw r2,-20(fp)
803b3cc: 10c00015 stw r3,0(r2)
cachedRoute->ipRouteAge = cticks; /* timestamp route entry */
803b3d0: d0a09c17 ldw r2,-32144(gp)
803b3d4: d0e07d17 ldw r3,-32268(gp)
803b3d8: 10c00915 stw r3,36(r2)
return(cachedRoute->ifp); /* net to send on */
803b3dc: d0a09c17 ldw r2,-32144(gp)
803b3e0: 10800e17 ldw r2,56(r2)
803b3e4: 00005006 br 803b528 <iproute+0x1b8>
}
}
rtp = rt_lookup(host);
803b3e8: e13ffc17 ldw r4,-16(fp)
803b3ec: 803cb280 call 803cb28 <rt_lookup>
803b3f0: e0bffd15 stw r2,-12(fp)
if(rtp)
803b3f4: e0bffd17 ldw r2,-12(fp)
803b3f8: 10000926 beq r2,zero,803b420 <iproute+0xb0>
{
cachedRoute = rtp;
803b3fc: e0bffd17 ldw r2,-12(fp)
803b400: d0a09c15 stw r2,-32144(gp)
*hop1 = rtp->ipRouteNextHop; /* fill in IP dest (next hop) */
803b404: e0bffd17 ldw r2,-12(fp)
803b408: 10c00617 ldw r3,24(r2)
803b40c: e0bffb17 ldw r2,-20(fp)
803b410: 10c00015 stw r3,0(r2)
return(rtp->ifp); /* return pointer to net */
803b414: e0bffd17 ldw r2,-12(fp)
803b418: 10800e17 ldw r2,56(r2)
803b41c: 00004206 br 803b528 <iproute+0x1b8>
* the initial state for the for loop that iterates through the
* list), but only build the iterator for multi-homed systems
* because single-homed systems are often memory-limited systems as
* well.
*/
ifp = (NET)(netlist.q_head);
803b420: 008201b4 movhi r2,2054
803b424: 10b6a617 ldw r2,-9576(r2)
803b428: e0bffe15 stw r2,-8(fp)
i = 0;
803b42c: e03fff15 stw zero,-4(fp)
#ifdef MULTI_HOMED
for(; ifp; ifp = ifp->n_next, i++)
803b430: 00002406 br 803b4c4 <iproute+0x154>
#endif /* MULTI_HOMED */
{
if((ifp->snmask != 0) && /* skip ifaces with no IP or subnet mask set */
803b434: e0bffe17 ldw r2,-8(fp)
803b438: 10800c17 ldw r2,48(r2)
803b43c: 10001b26 beq r2,zero,803b4ac <iproute+0x13c>
(ifp->n_ipaddr != 0) &&
803b440: e0bffe17 ldw r2,-8(fp)
803b444: 10800a17 ldw r2,40(r2)
if((ifp->snmask != 0) && /* skip ifaces with no IP or subnet mask set */
803b448: 10001826 beq r2,zero,803b4ac <iproute+0x13c>
((ifp->n_ipaddr & ifp->snmask) == (host & ifp->snmask)))
803b44c: e0bffe17 ldw r2,-8(fp)
803b450: 10c00a17 ldw r3,40(r2)
803b454: e0bffc17 ldw r2,-16(fp)
803b458: 1886f03a xor r3,r3,r2
803b45c: e0bffe17 ldw r2,-8(fp)
803b460: 10800c17 ldw r2,48(r2)
803b464: 1884703a and r2,r3,r2
(ifp->n_ipaddr != 0) &&
803b468: 1000101e bne r2,zero,803b4ac <iproute+0x13c>
{
#ifdef IP_ROUTING
/* make a cached Route entry for next time */
cachedRoute = add_route(host, 0xFFFFFFFF, host, i, IPRP_OTHER);
803b46c: 00800044 movi r2,1
803b470: d8800015 stw r2,0(sp)
803b474: e1ffff17 ldw r7,-4(fp)
803b478: e1bffc17 ldw r6,-16(fp)
803b47c: 017fffc4 movi r5,-1
803b480: e13ffc17 ldw r4,-16(fp)
803b484: 803cc7c0 call 803cc7c <add_route>
803b488: d0a09c15 stw r2,-32144(gp)
#ifdef NPDEBUG
if (cachedRoute == NULL)
803b48c: d0a09c17 ldw r2,-32144(gp)
803b490: 1000011e bne r2,zero,803b498 <iproute+0x128>
dtrap();
803b494: 8028cd40 call 8028cd4 <dtrap>
#endif /* NPDEBUG */
#endif /* IP_ROUTING */
*hop1 = host;
803b498: e0bffb17 ldw r2,-20(fp)
803b49c: e0fffc17 ldw r3,-16(fp)
803b4a0: 10c00015 stw r3,0(r2)
return ifp;
803b4a4: e0bffe17 ldw r2,-8(fp)
803b4a8: 00001f06 br 803b528 <iproute+0x1b8>
for(; ifp; ifp = ifp->n_next, i++)
803b4ac: e0bffe17 ldw r2,-8(fp)
803b4b0: 10800017 ldw r2,0(r2)
803b4b4: e0bffe15 stw r2,-8(fp)
803b4b8: e0bfff17 ldw r2,-4(fp)
803b4bc: 10800044 addi r2,r2,1
803b4c0: e0bfff15 stw r2,-4(fp)
803b4c4: e0bffe17 ldw r2,-8(fp)
803b4c8: 103fda1e bne r2,zero,803b434 <iproute+0xc4>
#endif /* IP_LOOPBACK */
/* The host isn't on a net I'm on, so send it to the default
* gateway on the first net which has one.
*/
ifp = (NET)(netlist.q_head);
803b4cc: 008201b4 movhi r2,2054
803b4d0: 10b6a617 ldw r2,-9576(r2)
803b4d4: e0bffe15 stw r2,-8(fp)
#ifdef MULTI_HOMED
for(; ifp; ifp = ifp->n_next)
803b4d8: 00000c06 br 803b50c <iproute+0x19c>
#endif /* MULTI_HOMED */
{
/* Check if this net has a gateway */
if(ifp->n_defgw)
803b4dc: e0bffe17 ldw r2,-8(fp)
803b4e0: 10800d17 ldw r2,52(r2)
803b4e4: 10000626 beq r2,zero,803b500 <iproute+0x190>
{
*hop1 = ifp->n_defgw;
803b4e8: e0bffe17 ldw r2,-8(fp)
803b4ec: 10c00d17 ldw r3,52(r2)
803b4f0: e0bffb17 ldw r2,-20(fp)
803b4f4: 10c00015 stw r3,0(r2)
return ifp;
803b4f8: e0bffe17 ldw r2,-8(fp)
803b4fc: 00000a06 br 803b528 <iproute+0x1b8>
for(; ifp; ifp = ifp->n_next)
803b500: e0bffe17 ldw r2,-8(fp)
803b504: 10800017 ldw r2,0(r2)
803b508: e0bffe15 stw r2,-8(fp)
803b50c: e0bffe17 ldw r2,-8(fp)
803b510: 103ff21e bne r2,zero,803b4dc <iproute+0x16c>
/* if no gateway is set, then change the first hop address to the
* host we're trying to route to. this is just a kluge to make
* this work with arp routing. otherwise, we would try to return
* some sort of error indication.
*/
*hop1 = host;
803b514: e0bffb17 ldw r2,-20(fp)
803b518: e0fffc17 ldw r3,-16(fp)
803b51c: 10c00015 stw r3,0(r2)
return((NET)(netlist.q_head));
803b520: 008201b4 movhi r2,2054
803b524: 10b6a617 ldw r2,-9576(r2)
#endif /* STRICT_SUBNETTING */
}
803b528: e037883a mov sp,fp
803b52c: dfc00117 ldw ra,4(sp)
803b530: df000017 ldw fp,0(sp)
803b534: dec00204 addi sp,sp,8
803b538: f800283a ret
0803b53c <ip_copypkt>:
* RETURNS: a pointer to the new copy of the packet,
* or NULL if no packet buffer could be allocated
*/
PACKET
ip_copypkt(PACKET p)
{
803b53c: defffb04 addi sp,sp,-20
803b540: dfc00415 stw ra,16(sp)
803b544: df000315 stw fp,12(sp)
803b548: df000304 addi fp,sp,12
803b54c: e13ffd15 stw r4,-12(fp)
int len;
/* figure out how much we need to copy from the packet,
* and allocate a new buffer to hold it
*/
len = p->nb_plen + (p->nb_prot - p->nb_buff);
803b550: e0bffd17 ldw r2,-12(fp)
803b554: 10800417 ldw r2,16(r2)
803b558: e0fffd17 ldw r3,-12(fp)
803b55c: 19000317 ldw r4,12(r3)
803b560: e0fffd17 ldw r3,-12(fp)
803b564: 18c00117 ldw r3,4(r3)
803b568: 20c7c83a sub r3,r4,r3
803b56c: 10c5883a add r2,r2,r3
803b570: e0bfff15 stw r2,-4(fp)
LOCK_NET_RESOURCE(FREEQ_RESID);
803b574: 01000084 movi r4,2
803b578: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
np = pk_alloc(len);
803b57c: e0bfff17 ldw r2,-4(fp)
803b580: 1009883a mov r4,r2
803b584: 80284340 call 8028434 <pk_alloc>
803b588: e0bffe15 stw r2,-8(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803b58c: 01000084 movi r4,2
803b590: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (np == NULL)
803b594: e0bffe17 ldw r2,-8(fp)
803b598: 1000061e bne r2,zero,803b5b4 <ip_copypkt+0x78>
{
#ifdef NPDEBUG
dprintf("ip_copypkt(): unable to obtain packet (len %d)\n", len);
803b59c: e17fff17 ldw r5,-4(fp)
803b5a0: 01020174 movhi r4,2053
803b5a4: 212c7c04 addi r4,r4,-19984
803b5a8: 8002c780 call 8002c78 <printf>
#endif
return NULL;
803b5ac: 0005883a mov r2,zero
803b5b0: 00002806 br 803b654 <ip_copypkt+0x118>
}
/* copy packet data into new buffer */
MEMCPY(np->nb_buff, p->nb_buff, len);
803b5b4: e0bffe17 ldw r2,-8(fp)
803b5b8: 10c00117 ldw r3,4(r2)
803b5bc: e0bffd17 ldw r2,-12(fp)
803b5c0: 10800117 ldw r2,4(r2)
803b5c4: e13fff17 ldw r4,-4(fp)
803b5c8: 200d883a mov r6,r4
803b5cc: 100b883a mov r5,r2
803b5d0: 1809883a mov r4,r3
803b5d4: 80086b80 call 80086b8 <memcpy>
/* copy relevant packet fields */
np->nb_prot = np->nb_buff + (p->nb_prot - p->nb_buff);
803b5d8: e0bffe17 ldw r2,-8(fp)
803b5dc: 10800117 ldw r2,4(r2)
803b5e0: e0fffd17 ldw r3,-12(fp)
803b5e4: 19000317 ldw r4,12(r3)
803b5e8: e0fffd17 ldw r3,-12(fp)
803b5ec: 18c00117 ldw r3,4(r3)
803b5f0: 20c7c83a sub r3,r4,r3
803b5f4: 10c7883a add r3,r2,r3
803b5f8: e0bffe17 ldw r2,-8(fp)
803b5fc: 10c00315 stw r3,12(r2)
np->nb_plen = p->nb_plen;
803b600: e0bffd17 ldw r2,-12(fp)
803b604: 10c00417 ldw r3,16(r2)
803b608: e0bffe17 ldw r2,-8(fp)
803b60c: 10c00415 stw r3,16(r2)
np->net = p->net;
803b610: e0bffd17 ldw r2,-12(fp)
803b614: 10c00617 ldw r3,24(r2)
803b618: e0bffe17 ldw r2,-8(fp)
803b61c: 10c00615 stw r3,24(r2)
np->fhost = p->fhost;
803b620: e0bffd17 ldw r2,-12(fp)
803b624: 10c00717 ldw r3,28(r2)
803b628: e0bffe17 ldw r2,-8(fp)
803b62c: 10c00715 stw r3,28(r2)
np->type = p->type;
803b630: e0bffd17 ldw r2,-12(fp)
803b634: 10c0080b ldhu r3,32(r2)
803b638: e0bffe17 ldw r2,-8(fp)
803b63c: 10c0080d sth r3,32(r2)
np->nb_tstamp = p->nb_tstamp;
803b640: e0bffd17 ldw r2,-12(fp)
803b644: 10c00517 ldw r3,20(r2)
803b648: e0bffe17 ldw r2,-8(fp)
803b64c: 10c00515 stw r3,20(r2)
/* return pointer to the copy */
return np;
803b650: e0bffe17 ldw r2,-8(fp)
}
803b654: e037883a mov sp,fp
803b658: dfc00117 ldw ra,4(sp)
803b65c: df000017 ldw fp,0(sp)
803b660: dec00204 addi sp,sp,8
803b664: f800283a ret
0803b668 <ip_rcv>:
* RETURNS:
*/
int
ip_rcv(PACKET p)
{
803b668: defff404 addi sp,sp,-48
803b66c: dfc00b15 stw ra,44(sp)
803b670: df000a15 stw fp,40(sp)
803b674: dc000915 stw r16,36(sp)
803b678: df000a04 addi fp,sp,40
803b67c: e13ff615 stw r4,-40(fp)
unsigned hdrlen; /* length of IP header including options */
unsigned len; /* total length including IP header */
unsigned short int num_pkts;
PACKET * pktp;
unsigned char i;
int rcvrc = -1;
803b680: 00bfffc4 movi r2,-1
803b684: e0bffd15 stw r2,-12(fp)
unsigned char rc_ret;
#endif
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
803b688: d0a06617 ldw r2,-32360(gp)
803b68c: 1081000c andi r2,r2,1024
803b690: 10000e26 beq r2,zero,803b6cc <ip_rcv+0x64>
803b694: d0a06617 ldw r2,-32360(gp)
803b698: 1080800c andi r2,r2,512
803b69c: 10000b26 beq r2,zero,803b6cc <ip_rcv+0x64>
dprintf("ip_rcv: got packet, len:%d, if:%d\n",
p->nb_plen, net_num(p->net));
803b6a0: e0bff617 ldw r2,-40(fp)
dprintf("ip_rcv: got packet, len:%d, if:%d\n",
803b6a4: 14000417 ldw r16,16(r2)
p->nb_plen, net_num(p->net));
803b6a8: e0bff617 ldw r2,-40(fp)
dprintf("ip_rcv: got packet, len:%d, if:%d\n",
803b6ac: 10800617 ldw r2,24(r2)
803b6b0: 1009883a mov r4,r2
803b6b4: 80252fc0 call 80252fc <if_netnumber>
803b6b8: 100d883a mov r6,r2
803b6bc: 800b883a mov r5,r16
803b6c0: 01020174 movhi r4,2053
803b6c4: 212c8804 addi r4,r4,-19936
803b6c8: 8002c780 call 8002c78 <printf>
#endif
IN_PROFILER(PF_IP, PF_ENTRY);
ip_mib.ipInReceives++;
803b6cc: 008201b4 movhi r2,2054
803b6d0: 10b95117 ldw r2,-6844(r2)
803b6d4: 10c00044 addi r3,r2,1
803b6d8: 008201b4 movhi r2,2054
803b6dc: 10f95115 stw r3,-6844(r2)
pip = ip_head(p);
803b6e0: e0bff617 ldw r2,-40(fp)
803b6e4: 10800317 ldw r2,12(r2)
803b6e8: e0bffc15 stw r2,-16(fp)
/* test received MAC len against IP header len */
if (p->nb_plen < (unsigned)htons(pip->ip_len))
803b6ec: e0bff617 ldw r2,-40(fp)
803b6f0: 10800417 ldw r2,16(r2)
803b6f4: e0fffc17 ldw r3,-16(fp)
803b6f8: 18c0008b ldhu r3,2(r3)
803b6fc: 18ffffcc andi r3,r3,65535
803b700: 1806d23a srli r3,r3,8
803b704: 18ffffcc andi r3,r3,65535
803b708: 19003fcc andi r4,r3,255
803b70c: e0fffc17 ldw r3,-16(fp)
803b710: 18c0008b ldhu r3,2(r3)
803b714: 18ffffcc andi r3,r3,65535
803b718: 1806923a slli r3,r3,8
803b71c: 18ffffcc andi r3,r3,65535
803b720: 20c6b03a or r3,r4,r3
803b724: 10c01d2e bgeu r2,r3,803b79c <ip_rcv+0x134>
{
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
803b728: d0a06617 ldw r2,-32360(gp)
803b72c: 1081000c andi r2,r2,1024
803b730: 10000c26 beq r2,zero,803b764 <ip_rcv+0xfc>
803b734: d0a06617 ldw r2,-32360(gp)
803b738: 1080800c andi r2,r2,512
803b73c: 10000926 beq r2,zero,803b764 <ip_rcv+0xfc>
{
dprintf("ip_rcv: bad pkt len\n");
803b740: 01020174 movhi r4,2053
803b744: 212c9104 addi r4,r4,-19900
803b748: 8002d9c0 call 8002d9c <puts>
if (NDEBUG & DUMP) ip_dump(p);
803b74c: d0a06617 ldw r2,-32360(gp)
803b750: 1080008c andi r2,r2,2
803b754: 10000326 beq r2,zero,803b764 <ip_rcv+0xfc>
803b758: e0bff617 ldw r2,-40(fp)
803b75c: 1009883a mov r4,r2
803b760: 803b0cc0 call 803b0cc <ip_dump>
}
#endif
ip_mib.ipInHdrErrors++;
803b764: 008201b4 movhi r2,2054
803b768: 10b95217 ldw r2,-6840(r2)
803b76c: 10c00044 addi r3,r2,1
803b770: 008201b4 movhi r2,2054
803b774: 10f95215 stw r3,-6840(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803b778: 01000084 movi r4,2
803b77c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803b780: e0bff617 ldw r2,-40(fp)
803b784: 1009883a mov r4,r2
803b788: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803b78c: 01000084 movi r4,2
803b790: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return(ENP_BAD_HEADER);
803b794: 00bff804 movi r2,-32
803b798: 00008206 br 803b9a4 <ip_rcv+0x33c>
}
/* use length from IP header; MAC value may be padded */
len = htons(pip->ip_len);
803b79c: e0bffc17 ldw r2,-16(fp)
803b7a0: 1080008b ldhu r2,2(r2)
803b7a4: 10bfffcc andi r2,r2,65535
803b7a8: 1004d23a srli r2,r2,8
803b7ac: 10bfffcc andi r2,r2,65535
803b7b0: 10c03fcc andi r3,r2,255
803b7b4: e0bffc17 ldw r2,-16(fp)
803b7b8: 1080008b ldhu r2,2(r2)
803b7bc: 10bfffcc andi r2,r2,65535
803b7c0: 1004923a slli r2,r2,8
803b7c4: 10bfffcc andi r2,r2,65535
803b7c8: 1884b03a or r2,r3,r2
803b7cc: e0bffb15 stw r2,-20(fp)
p->nb_plen = len; /* fix pkt len */
803b7d0: e0bff617 ldw r2,-40(fp)
803b7d4: e0fffb17 ldw r3,-20(fp)
803b7d8: 10c00415 stw r3,16(r2)
if ( ((pip->ip_ver_ihl & 0xf0) >> 4) != IP_VER)
803b7dc: e0bffc17 ldw r2,-16(fp)
803b7e0: 10800003 ldbu r2,0(r2)
803b7e4: 10803fcc andi r2,r2,255
803b7e8: 1004d13a srli r2,r2,4
803b7ec: 10803fcc andi r2,r2,255
803b7f0: 10800120 cmpeqi r2,r2,4
803b7f4: 10001d1e bne r2,zero,803b86c <ip_rcv+0x204>
{
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
803b7f8: d0a06617 ldw r2,-32360(gp)
803b7fc: 1081000c andi r2,r2,1024
803b800: 10000c26 beq r2,zero,803b834 <ip_rcv+0x1cc>
803b804: d0a06617 ldw r2,-32360(gp)
803b808: 1080800c andi r2,r2,512
803b80c: 10000926 beq r2,zero,803b834 <ip_rcv+0x1cc>
{
dprintf("ip_rcv: bad version number\n");
803b810: 01020174 movhi r4,2053
803b814: 212c9604 addi r4,r4,-19880
803b818: 8002d9c0 call 8002d9c <puts>
if (NDEBUG & DUMP) ip_dump(p);
803b81c: d0a06617 ldw r2,-32360(gp)
803b820: 1080008c andi r2,r2,2
803b824: 10000326 beq r2,zero,803b834 <ip_rcv+0x1cc>
803b828: e0bff617 ldw r2,-40(fp)
803b82c: 1009883a mov r4,r2
803b830: 803b0cc0 call 803b0cc <ip_dump>
}
#endif
ip_mib.ipInHdrErrors++;
803b834: 008201b4 movhi r2,2054
803b838: 10b95217 ldw r2,-6840(r2)
803b83c: 10c00044 addi r3,r2,1
803b840: 008201b4 movhi r2,2054
803b844: 10f95215 stw r3,-6840(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803b848: 01000084 movi r4,2
803b84c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803b850: e0bff617 ldw r2,-40(fp)
803b854: 1009883a mov r4,r2
803b858: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803b85c: 01000084 movi r4,2
803b860: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return(ENP_BAD_HEADER);
803b864: 00bff804 movi r2,-32
803b868: 00004e06 br 803b9a4 <ip_rcv+0x33c>
}
csum = pip->ip_chksum;
803b86c: e0bffc17 ldw r2,-16(fp)
803b870: 1080028b ldhu r2,10(r2)
803b874: e0bffa8d sth r2,-22(fp)
pip->ip_chksum = 0;
803b878: e0bffc17 ldw r2,-16(fp)
803b87c: 1000028d sth zero,10(r2)
hdrlen = ip_hlen(pip);
803b880: e0bffc17 ldw r2,-16(fp)
803b884: 10800003 ldbu r2,0(r2)
803b888: 10803fcc andi r2,r2,255
803b88c: 100490ba slli r2,r2,2
803b890: 10800f0c andi r2,r2,60
803b894: e0bff915 stw r2,-28(fp)
tempsum = ~cksum(pip, hdrlen >> 1);
803b898: e0bff917 ldw r2,-28(fp)
803b89c: 1004d07a srli r2,r2,1
803b8a0: 100b883a mov r5,r2
803b8a4: e13ffc17 ldw r4,-16(fp)
803b8a8: 8026d7c0 call 8026d7c <cksum>
803b8ac: 0084303a nor r2,zero,r2
803b8b0: e0bff88d sth r2,-30(fp)
if (csum != tempsum)
803b8b4: e0fffa8b ldhu r3,-22(fp)
803b8b8: e0bff88b ldhu r2,-30(fp)
803b8bc: 18802026 beq r3,r2,803b940 <ip_rcv+0x2d8>
{
pip->ip_chksum = csum;
803b8c0: e0bffc17 ldw r2,-16(fp)
803b8c4: e0fffa8b ldhu r3,-22(fp)
803b8c8: 10c0028d sth r3,10(r2)
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
803b8cc: d0a06617 ldw r2,-32360(gp)
803b8d0: 1081000c andi r2,r2,1024
803b8d4: 10000c26 beq r2,zero,803b908 <ip_rcv+0x2a0>
803b8d8: d0a06617 ldw r2,-32360(gp)
803b8dc: 1080800c andi r2,r2,512
803b8e0: 10000926 beq r2,zero,803b908 <ip_rcv+0x2a0>
{
dprintf("ip_rcv: bad xsum\n");
803b8e4: 01020174 movhi r4,2053
803b8e8: 212c9d04 addi r4,r4,-19852
803b8ec: 8002d9c0 call 8002d9c <puts>
if (NDEBUG & DUMP) ip_dump(p);
803b8f0: d0a06617 ldw r2,-32360(gp)
803b8f4: 1080008c andi r2,r2,2
803b8f8: 10000326 beq r2,zero,803b908 <ip_rcv+0x2a0>
803b8fc: e0bff617 ldw r2,-40(fp)
803b900: 1009883a mov r4,r2
803b904: 803b0cc0 call 803b0cc <ip_dump>
}
#endif
ip_mib.ipInHdrErrors++;
803b908: 008201b4 movhi r2,2054
803b90c: 10b95217 ldw r2,-6840(r2)
803b910: 10c00044 addi r3,r2,1
803b914: 008201b4 movhi r2,2054
803b918: 10f95215 stw r3,-6840(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803b91c: 01000084 movi r4,2
803b920: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803b924: e0bff617 ldw r2,-40(fp)
803b928: 1009883a mov r4,r2
803b92c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803b930: 01000084 movi r4,2
803b934: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return(ENP_BAD_HEADER);
803b938: 00bff804 movi r2,-32
803b93c: 00001906 br 803b9a4 <ip_rcv+0x33c>
}
pip->ip_chksum = csum;
803b940: e0bffc17 ldw r2,-16(fp)
803b944: e0fffa8b ldhu r3,-22(fp)
803b948: 10c0028d sth r3,10(r2)
#endif
/* start off by assuming that we will only process the "current" packet;
* these values may get overwritten by the NAT module if it returns
* more than one packet back to this function (ip_rcv ()) */
num_pkts = 1;
803b94c: 00800044 movi r2,1
803b950: e0bff80d sth r2,-32(fp)
pktp = &p;
803b954: e0bff604 addi r2,fp,-40
803b958: e0bff715 stw r2,-36(fp)
* by other modules */
#endif /* NATRT */
/* we need to process 'num_pkts' packets. Pointers to these packets are stored
* in storage @ 'pktp' */
for (i = 0; i < num_pkts; ++i)
803b95c: e03ffec5 stb zero,-5(fp)
803b960: 00000b06 br 803b990 <ip_rcv+0x328>
{
rcvrc = ip_rcv_phase2 (*(pktp + i));
803b964: e0bffec3 ldbu r2,-5(fp)
803b968: 100490ba slli r2,r2,2
803b96c: e0fff717 ldw r3,-36(fp)
803b970: 1885883a add r2,r3,r2
803b974: 10800017 ldw r2,0(r2)
803b978: 1009883a mov r4,r2
803b97c: 803b9bc0 call 803b9bc <ip_rcv_phase2>
803b980: e0bffd15 stw r2,-12(fp)
for (i = 0; i < num_pkts; ++i)
803b984: e0bffec3 ldbu r2,-5(fp)
803b988: 10800044 addi r2,r2,1
803b98c: e0bffec5 stb r2,-5(fp)
803b990: e0fffec3 ldbu r3,-5(fp)
803b994: e0bff80b ldhu r2,-32(fp)
803b998: 18ffffcc andi r3,r3,65535
803b99c: 18bff136 bltu r3,r2,803b964 <ip_rcv+0x2fc>
if (pktp != &p) nat_free (pktp);
#endif /* NATRT */
/* when multiple packets are processed in the loop above, the return code
* contains the return code for the last packet */
return rcvrc;
803b9a0: e0bffd17 ldw r2,-12(fp)
}
803b9a4: e6ffff04 addi sp,fp,-4
803b9a8: dfc00217 ldw ra,8(sp)
803b9ac: df000117 ldw fp,4(sp)
803b9b0: dc000017 ldw r16,0(sp)
803b9b4: dec00304 addi sp,sp,12
803b9b8: f800283a ret
0803b9bc <ip_rcv_phase2>:
int ip_rcv_phase2 (PACKET p)
{
803b9bc: defff604 addi sp,sp,-40
803b9c0: dfc00915 stw ra,36(sp)
803b9c4: df000815 stw fp,32(sp)
803b9c8: df000804 addi fp,sp,32
803b9cc: e13ff915 stw r4,-28(fp)
struct ip * pip; /* the internet header */
NET nt;
unsigned short tempsum;
pip = ip_head(p);
803b9d0: e0bff917 ldw r2,-28(fp)
803b9d4: 10800317 ldw r2,12(r2)
803b9d8: e0bfff15 stw r2,-4(fp)
nt = p->net; /* which interface it came in on */
803b9dc: e0bff917 ldw r2,-28(fp)
803b9e0: 10800617 ldw r2,24(r2)
803b9e4: e0bffe15 stw r2,-8(fp)
#ifdef IP_MULTICAST
if (IN_MULTICAST(ntohl(pip->ip_dest)))
803b9e8: e0bfff17 ldw r2,-4(fp)
803b9ec: 10800417 ldw r2,16(r2)
803b9f0: 1006d63a srli r3,r2,24
803b9f4: e0bfff17 ldw r2,-4(fp)
803b9f8: 10800417 ldw r2,16(r2)
803b9fc: 1004d23a srli r2,r2,8
803ba00: 10bfc00c andi r2,r2,65280
803ba04: 1886b03a or r3,r3,r2
803ba08: e0bfff17 ldw r2,-4(fp)
803ba0c: 10800417 ldw r2,16(r2)
803ba10: 1004923a slli r2,r2,8
803ba14: 10803fec andhi r2,r2,255
803ba18: 1886b03a or r3,r3,r2
803ba1c: e0bfff17 ldw r2,-4(fp)
803ba20: 10800417 ldw r2,16(r2)
803ba24: 1004963a slli r2,r2,24
803ba28: 1884b03a or r2,r3,r2
803ba2c: 10fc002c andhi r3,r2,61440
803ba30: 00b80034 movhi r2,57344
803ba34: 1880151e bne r3,r2,803ba8c <ip_rcv_phase2+0xd0>
struct in_multi * inm;
/*
* See if we belong to the destination multicast group on the
* arrival interface.
*/
inm = lookup_mcast(pip->ip_dest, nt);
803ba38: e0bfff17 ldw r2,-4(fp)
803ba3c: 10800417 ldw r2,16(r2)
803ba40: e17ffe17 ldw r5,-8(fp)
803ba44: 1009883a mov r4,r2
803ba48: 803c5040 call 803c504 <lookup_mcast>
803ba4c: e0bffd15 stw r2,-12(fp)
if (inm == NULL)
803ba50: e0bffd17 ldw r2,-12(fp)
803ba54: 1000dc1e bne r2,zero,803bdc8 <ip_rcv_phase2+0x40c>
{
ip_mib.ipOutNoRoutes++;
803ba58: 008201b4 movhi r2,2054
803ba5c: 10b95a17 ldw r2,-6808(r2)
803ba60: 10c00044 addi r3,r2,1
803ba64: 008201b4 movhi r2,2054
803ba68: 10f95a15 stw r3,-6808(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803ba6c: 01000084 movi r4,2
803ba70: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803ba74: e13ff917 ldw r4,-28(fp)
803ba78: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803ba7c: 01000084 movi r4,2
803ba80: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return (ENP_NOT_MINE);
803ba84: 00800084 movi r2,2
803ba88: 00011a06 br 803bef4 <ip_rcv_phase2+0x538>
else
goto ours;
}
#endif /* IP_MULTICAST */
if ((pip->ip_dest != nt->n_ipaddr) && /* Quick check on our own addr */
803ba8c: e0bfff17 ldw r2,-4(fp)
803ba90: 10c00417 ldw r3,16(r2)
803ba94: e0bffe17 ldw r2,-8(fp)
803ba98: 10800a17 ldw r2,40(r2)
803ba9c: 1880cc26 beq r3,r2,803bdd0 <ip_rcv_phase2+0x414>
(pip->ip_dest != 0xffffffffL) && /* Physical cable broadcast addr*/
803baa0: e0bfff17 ldw r2,-4(fp)
803baa4: 10800417 ldw r2,16(r2)
if ((pip->ip_dest != nt->n_ipaddr) && /* Quick check on our own addr */
803baa8: 10bfffe0 cmpeqi r2,r2,-1
803baac: 1000c81e bne r2,zero,803bdd0 <ip_rcv_phase2+0x414>
(pip->ip_dest != nt->n_netbr) && /* All subnet broadcast */
803bab0: e0bfff17 ldw r2,-4(fp)
803bab4: 10c00417 ldw r3,16(r2)
803bab8: e0bffe17 ldw r2,-8(fp)
803babc: 10800e17 ldw r2,56(r2)
(pip->ip_dest != 0xffffffffL) && /* Physical cable broadcast addr*/
803bac0: 1880c326 beq r3,r2,803bdd0 <ip_rcv_phase2+0x414>
(pip->ip_dest != nt->n_netbr42) && /* All subnet bcast (4.2bsd) */
803bac4: e0bfff17 ldw r2,-4(fp)
803bac8: 10c00417 ldw r3,16(r2)
803bacc: e0bffe17 ldw r2,-8(fp)
803bad0: 10800f17 ldw r2,60(r2)
(pip->ip_dest != nt->n_netbr) && /* All subnet broadcast */
803bad4: 1880be26 beq r3,r2,803bdd0 <ip_rcv_phase2+0x414>
(pip->ip_dest != nt->n_subnetbr) &&/* Our subnet broadcast */
803bad8: e0bfff17 ldw r2,-4(fp)
803badc: 10c00417 ldw r3,16(r2)
803bae0: e0bffe17 ldw r2,-8(fp)
803bae4: 10801017 ldw r2,64(r2)
(pip->ip_dest != nt->n_netbr42) && /* All subnet bcast (4.2bsd) */
803bae8: 1880b926 beq r3,r2,803bdd0 <ip_rcv_phase2+0x414>
(nt->n_ipaddr & ~nt->snmask)) /* Know our own host address? */
803baec: e0bffe17 ldw r2,-8(fp)
803baf0: 10c00a17 ldw r3,40(r2)
803baf4: e0bffe17 ldw r2,-8(fp)
803baf8: 10800c17 ldw r2,48(r2)
803bafc: 0084303a nor r2,zero,r2
803bb00: 1884703a and r2,r3,r2
(pip->ip_dest != nt->n_subnetbr) &&/* Our subnet broadcast */
803bb04: 1000b226 beq r2,zero,803bdd0 <ip_rcv_phase2+0x414>
{
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
803bb08: d0a06617 ldw r2,-32360(gp)
803bb0c: 1081000c andi r2,r2,1024
803bb10: 10001826 beq r2,zero,803bb74 <ip_rcv_phase2+0x1b8>
803bb14: d0a06617 ldw r2,-32360(gp)
803bb18: 1080800c andi r2,r2,512
803bb1c: 10001526 beq r2,zero,803bb74 <ip_rcv_phase2+0x1b8>
dprintf("ip_rcv: got pkt not for me; for %u.%u.%u.%u\n",
PUSH_IPADDR(pip->ip_dest));
803bb20: e0bfff17 ldw r2,-4(fp)
803bb24: 10800417 ldw r2,16(r2)
dprintf("ip_rcv: got pkt not for me; for %u.%u.%u.%u\n",
803bb28: 10c03fcc andi r3,r2,255
PUSH_IPADDR(pip->ip_dest));
803bb2c: e0bfff17 ldw r2,-4(fp)
803bb30: 10800417 ldw r2,16(r2)
803bb34: 1004d23a srli r2,r2,8
dprintf("ip_rcv: got pkt not for me; for %u.%u.%u.%u\n",
803bb38: 11003fcc andi r4,r2,255
PUSH_IPADDR(pip->ip_dest));
803bb3c: e0bfff17 ldw r2,-4(fp)
803bb40: 10800417 ldw r2,16(r2)
803bb44: 1004d43a srli r2,r2,16
dprintf("ip_rcv: got pkt not for me; for %u.%u.%u.%u\n",
803bb48: 11403fcc andi r5,r2,255
PUSH_IPADDR(pip->ip_dest));
803bb4c: e0bfff17 ldw r2,-4(fp)
803bb50: 10800417 ldw r2,16(r2)
803bb54: 1004d63a srli r2,r2,24
dprintf("ip_rcv: got pkt not for me; for %u.%u.%u.%u\n",
803bb58: d8800015 stw r2,0(sp)
803bb5c: 280f883a mov r7,r5
803bb60: 200d883a mov r6,r4
803bb64: 180b883a mov r5,r3
803bb68: 01020174 movhi r4,2053
803bb6c: 212ca204 addi r4,r4,-19832
803bb70: 8002c780 call 8002c78 <printf>
#ifdef IP_ROUTING /* if multi-homed router, try to route */
/* Do routing only if ipForwarding is enabled in the IP MIB. This
* is the switch for routing whether SNMP is used or not.
*/
if (ip_mib.ipForwarding == 2)
803bb74: 008201b4 movhi r2,2054
803bb78: 10b94f17 ldw r2,-6852(r2)
803bb7c: 10800098 cmpnei r2,r2,2
803bb80: 10000d1e bne r2,zero,803bbb8 <ip_rcv_phase2+0x1fc>
{
ip_mib.ipOutDiscards++; /* Is this the right counter for these? */
803bb84: 008201b4 movhi r2,2054
803bb88: 10b95917 ldw r2,-6812(r2)
803bb8c: 10c00044 addi r3,r2,1
803bb90: 008201b4 movhi r2,2054
803bb94: 10f95915 stw r3,-6812(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803bb98: 01000084 movi r4,2
803bb9c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803bba0: e13ff917 ldw r4,-28(fp)
803bba4: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803bba8: 01000084 movi r4,2
803bbac: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return ENP_NO_ROUTE;
803bbb0: 00bff7c4 movi r2,-33
803bbb4: 0000cf06 br 803bef4 <ip_rcv_phase2+0x538>
NET outnet;
#ifdef IP_FRAGMENTS
int err;
#endif
ip_mib.ipForwDatagrams++; /* Count MIB-2 route attempts here */
803bbb8: 008201b4 movhi r2,2054
803bbbc: 10b95417 ldw r2,-6832(r2)
803bbc0: 10c00044 addi r3,r2,1
803bbc4: 008201b4 movhi r2,2054
803bbc8: 10f95415 stw r3,-6832(r2)
if (pip->ip_time <= 1) /* Time to Live (hopcount) expired? */
803bbcc: e0bfff17 ldw r2,-4(fp)
803bbd0: 10800203 ldbu r2,8(r2)
803bbd4: 10803fcc andi r2,r2,255
803bbd8: 108000a8 cmpgeui r2,r2,2
803bbdc: 10001a1e bne r2,zero,803bc48 <ip_rcv_phase2+0x28c>
{
ip_mib.ipOutDiscards++; /* Is this the right counter for these? */
803bbe0: 008201b4 movhi r2,2054
803bbe4: 10b95917 ldw r2,-6812(r2)
803bbe8: 10c00044 addi r3,r2,1
803bbec: 008201b4 movhi r2,2054
803bbf0: 10f95915 stw r3,-6812(r2)
#ifdef FULL_ICMP
icmp_destun(pip->ip_src, p->net->n_ipaddr, pip, (TIMEX <<8), p->net);
803bbf4: e0bfff17 ldw r2,-4(fp)
803bbf8: 10c00317 ldw r3,12(r2)
803bbfc: e0bff917 ldw r2,-28(fp)
803bc00: 10800617 ldw r2,24(r2)
803bc04: 11000a17 ldw r4,40(r2)
803bc08: e0bff917 ldw r2,-28(fp)
803bc0c: 10800617 ldw r2,24(r2)
803bc10: d8800015 stw r2,0(sp)
803bc14: 01c2c004 movi r7,2816
803bc18: e1bfff17 ldw r6,-4(fp)
803bc1c: 200b883a mov r5,r4
803bc20: 1809883a mov r4,r3
803bc24: 8039a540 call 8039a54 <icmp_destun>
#endif /* FULL_ICMP */
LOCK_NET_RESOURCE(FREEQ_RESID);
803bc28: 01000084 movi r4,2
803bc2c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803bc30: e13ff917 ldw r4,-28(fp)
803bc34: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803bc38: 01000084 movi r4,2
803bc3c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return ENP_NO_ROUTE;
803bc40: 00bff7c4 movi r2,-33
803bc44: 0000ab06 br 803bef4 <ip_rcv_phase2+0x538>
}
p->fhost = pip->ip_dest; /* set packet's target IP in net endian */
803bc48: e0bfff17 ldw r2,-4(fp)
803bc4c: 10c00417 ldw r3,16(r2)
803bc50: e0bff917 ldw r2,-28(fp)
803bc54: 10c00715 stw r3,28(r2)
if ((outnet = iproute(p->fhost, &firsthop)) == NULL) /* find route */
803bc58: e0bff917 ldw r2,-28(fp)
803bc5c: 10800717 ldw r2,28(r2)
803bc60: e0fffa04 addi r3,fp,-24
803bc64: 180b883a mov r5,r3
803bc68: 1009883a mov r4,r2
803bc6c: 803b3700 call 803b370 <iproute>
803bc70: e0bffc15 stw r2,-16(fp)
803bc74: e0bffc17 ldw r2,-16(fp)
803bc78: 10000d1e bne r2,zero,803bcb0 <ip_rcv_phase2+0x2f4>
{
ip_mib.ipOutNoRoutes++; /* count unroutable pkts */
803bc7c: 008201b4 movhi r2,2054
803bc80: 10b95a17 ldw r2,-6808(r2)
803bc84: 10c00044 addi r3,r2,1
803bc88: 008201b4 movhi r2,2054
803bc8c: 10f95a15 stw r3,-6808(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803bc90: 01000084 movi r4,2
803bc94: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803bc98: e13ff917 ldw r4,-28(fp)
803bc9c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803bca0: 01000084 movi r4,2
803bca4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return ENP_NO_ROUTE;
803bca8: 00bff7c4 movi r2,-33
803bcac: 00009106 br 803bef4 <ip_rcv_phase2+0x538>
/* Check to see if the packet was is addressed to one of our IP
* addresses other than the interface it was received on. If so,
* routing should have returned that interface and we can trap this
* situation by checking the interfaces IP address.
*/
if(pip->ip_dest == outnet->n_ipaddr)
803bcb0: e0bfff17 ldw r2,-4(fp)
803bcb4: 10c00417 ldw r3,16(r2)
803bcb8: e0bffc17 ldw r2,-16(fp)
803bcbc: 10800a17 ldw r2,40(r2)
803bcc0: 18804526 beq r3,r2,803bdd8 <ip_rcv_phase2+0x41c>
goto ours;
/* Make sure the packet is not a subnet broadcast for either the
* source or destination network.
*/
if((pip->ip_dest == outnet->n_netbr) ||
803bcc4: e0bfff17 ldw r2,-4(fp)
803bcc8: 10c00417 ldw r3,16(r2)
803bccc: e0bffc17 ldw r2,-16(fp)
803bcd0: 10800e17 ldw r2,56(r2)
803bcd4: 18804226 beq r3,r2,803bde0 <ip_rcv_phase2+0x424>
(pip->ip_dest == p->net->n_netbr))
803bcd8: e0bfff17 ldw r2,-4(fp)
803bcdc: 10c00417 ldw r3,16(r2)
803bce0: e0bff917 ldw r2,-28(fp)
803bce4: 10800617 ldw r2,24(r2)
803bce8: 10800e17 ldw r2,56(r2)
if((pip->ip_dest == outnet->n_netbr) ||
803bcec: 18803c26 beq r3,r2,803bde0 <ip_rcv_phase2+0x424>
{
goto ours;
}
/* Routed OK, prepare to send */
p->net = outnet; /* set iface to send on */
803bcf0: e0bff917 ldw r2,-28(fp)
803bcf4: e0fffc17 ldw r3,-16(fp)
803bcf8: 10c00615 stw r3,24(r2)
}
}
#endif /* IPSEC */
/* see if packet is too big for media of dest net */
if ((p->nb_plen + p->net->n_lnh) > (unsigned)outnet->n_mtu)
803bcfc: e0bff917 ldw r2,-28(fp)
803bd00: 10800417 ldw r2,16(r2)
803bd04: e0fff917 ldw r3,-28(fp)
803bd08: 18c00617 ldw r3,24(r3)
803bd0c: 18c00817 ldw r3,32(r3)
803bd10: 10c5883a add r2,r2,r3
803bd14: e0fffc17 ldw r3,-16(fp)
803bd18: 18c00917 ldw r3,36(r3)
803bd1c: 1880162e bgeu r3,r2,803bd78 <ip_rcv_phase2+0x3bc>
pip->ip_time--; /* datagram's hop count */
err = ip_fragment(p, firsthop);
IN_PROFILER(PF_IP, PF_EXIT);
return(err);
#else /* IP fragments not supported? Bad news....*/
dtrap(); /* this should be caught by programmers during development */
803bd20: 8028cd40 call 8028cd4 <dtrap>
#ifdef FULL_ICMP
icmp_destun(pip->ip_src, p->net->n_ipaddr, pip, DSTFRAG, p->net);
803bd24: e0bfff17 ldw r2,-4(fp)
803bd28: 10c00317 ldw r3,12(r2)
803bd2c: e0bff917 ldw r2,-28(fp)
803bd30: 10800617 ldw r2,24(r2)
803bd34: 11000a17 ldw r4,40(r2)
803bd38: e0bff917 ldw r2,-28(fp)
803bd3c: 10800617 ldw r2,24(r2)
803bd40: d8800015 stw r2,0(sp)
803bd44: 01c00104 movi r7,4
803bd48: e1bfff17 ldw r6,-4(fp)
803bd4c: 200b883a mov r5,r4
803bd50: 1809883a mov r4,r3
803bd54: 8039a540 call 8039a54 <icmp_destun>
#endif /* FULL_ICMP */
LOCK_NET_RESOURCE(FREEQ_RESID);
803bd58: 01000084 movi r4,2
803bd5c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803bd60: e13ff917 ldw r4,-28(fp)
803bd64: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803bd68: 01000084 movi r4,2
803bd6c: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_LOGIC;
803bd70: 00bffd44 movi r2,-11
803bd74: 00005f06 br 803bef4 <ip_rcv_phase2+0x538>
#endif /* IP_FRAGMENTS */
}
pip->ip_time--; /* datagram's hop count */
803bd78: e0bfff17 ldw r2,-4(fp)
803bd7c: 10800203 ldbu r2,8(r2)
803bd80: 10bfffc4 addi r2,r2,-1
803bd84: 1007883a mov r3,r2
803bd88: e0bfff17 ldw r2,-4(fp)
803bd8c: 10c00205 stb r3,8(r2)
pip->ip_chksum = IPXSUM; /* clear checksum field for summing */
803bd90: e0bfff17 ldw r2,-4(fp)
803bd94: 1000028d sth zero,10(r2)
pip->ip_chksum = ~cksum(pip, 10); /* new xsum */
803bd98: 01400284 movi r5,10
803bd9c: e13fff17 ldw r4,-4(fp)
803bda0: 8026d7c0 call 8026d7c <cksum>
803bda4: 0084303a nor r2,zero,r2
803bda8: 1007883a mov r3,r2
803bdac: e0bfff17 ldw r2,-4(fp)
803bdb0: 10c0028d sth r3,10(r2)
IN_PROFILER(PF_IP, PF_EXIT);
#ifdef RF_SIMULATION
if(rfsim_routing)
return(rfsim_send(p, firsthop));
#endif /* RF_SIMULATION */
return(ip2mac(p, firsthop));
803bdb4: e0bffa17 ldw r2,-24(fp)
803bdb8: 100b883a mov r5,r2
803bdbc: e13ff917 ldw r4,-28(fp)
803bdc0: 8024df40 call 8024df4 <ip2mac>
803bdc4: 00004b06 br 803bef4 <ip_rcv_phase2+0x538>
goto ours;
803bdc8: 0001883a nop
803bdcc: 00000506 br 803bde4 <ip_rcv_phase2+0x428>
return(ENP_NOT_MINE);
#endif
}
#if defined (IP_MULTICAST) || defined (IP_ROUTING)
ours:
803bdd0: 0001883a nop
803bdd4: 00000306 br 803bde4 <ip_rcv_phase2+0x428>
goto ours;
803bdd8: 0001883a nop
803bddc: 00000106 br 803bde4 <ip_rcv_phase2+0x428>
goto ours;
803bde0: 0001883a nop
#endif
/* Test for fragment: */
tempsum = htons(pip->ip_flgs_foff); /* borrow cksum variable */
803bde4: e0bfff17 ldw r2,-4(fp)
803bde8: 1080018b ldhu r2,6(r2)
803bdec: 10bfffcc andi r2,r2,65535
803bdf0: 1004d23a srli r2,r2,8
803bdf4: 1007883a mov r3,r2
803bdf8: e0bfff17 ldw r2,-4(fp)
803bdfc: 1080018b ldhu r2,6(r2)
803be00: 10bfffcc andi r2,r2,65535
803be04: 1004923a slli r2,r2,8
803be08: 1884b03a or r2,r3,r2
803be0c: e0bffb8d sth r2,-18(fp)
if ((tempsum & IP_FLG_MF) || /* IP flag for "More Fragments" set? */
803be10: e0bffb8b ldhu r2,-18(fp)
803be14: 1088000c andi r2,r2,8192
803be18: 1000051e bne r2,zero,803be30 <ip_rcv_phase2+0x474>
(tempsum & ~IP_FLG_MASK)) /* or offset to last frag? */
803be1c: e0fffb8b ldhu r3,-18(fp)
803be20: 00bffff4 movhi r2,65535
803be24: 1087ffc4 addi r2,r2,8191
803be28: 1884703a and r2,r3,r2
if ((tempsum & IP_FLG_MF) || /* IP flag for "More Fragments" set? */
803be2c: 10002f26 beq r2,zero,803beec <ip_rcv_phase2+0x530>
{
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
803be30: d0a06617 ldw r2,-32360(gp)
803be34: 1081000c andi r2,r2,1024
803be38: 10001a26 beq r2,zero,803bea4 <ip_rcv_phase2+0x4e8>
803be3c: d0a06617 ldw r2,-32360(gp)
803be40: 1080800c andi r2,r2,512
803be44: 10001726 beq r2,zero,803bea4 <ip_rcv_phase2+0x4e8>
{
dprintf("ip_rcv: fragment from %u.%u.%u.%u\n",
PUSH_IPADDR(pip->ip_src));
803be48: e0bfff17 ldw r2,-4(fp)
803be4c: 10800317 ldw r2,12(r2)
dprintf("ip_rcv: fragment from %u.%u.%u.%u\n",
803be50: 10c03fcc andi r3,r2,255
PUSH_IPADDR(pip->ip_src));
803be54: e0bfff17 ldw r2,-4(fp)
803be58: 10800317 ldw r2,12(r2)
803be5c: 1004d23a srli r2,r2,8
dprintf("ip_rcv: fragment from %u.%u.%u.%u\n",
803be60: 11003fcc andi r4,r2,255
PUSH_IPADDR(pip->ip_src));
803be64: e0bfff17 ldw r2,-4(fp)
803be68: 10800317 ldw r2,12(r2)
803be6c: 1004d43a srli r2,r2,16
dprintf("ip_rcv: fragment from %u.%u.%u.%u\n",
803be70: 11403fcc andi r5,r2,255
PUSH_IPADDR(pip->ip_src));
803be74: e0bfff17 ldw r2,-4(fp)
803be78: 10800317 ldw r2,12(r2)
803be7c: 1004d63a srli r2,r2,24
dprintf("ip_rcv: fragment from %u.%u.%u.%u\n",
803be80: d8800015 stw r2,0(sp)
803be84: 280f883a mov r7,r5
803be88: 200d883a mov r6,r4
803be8c: 180b883a mov r5,r3
803be90: 01020174 movhi r4,2053
803be94: 212cae04 addi r4,r4,-19784
803be98: 8002c780 call 8002c78 <printf>
ip_dump(p);
803be9c: e13ff917 ldw r4,-28(fp)
803bea0: 803b0cc0 call 803b0cc <ip_dump>
}
#endif
ip_mib.ipReasmReqds++; /* got a reassemble request; ie a frag */
803bea4: 008201b4 movhi r2,2054
803bea8: 10b95c17 ldw r2,-6800(r2)
803beac: 10c00044 addi r3,r2,1
803beb0: 008201b4 movhi r2,2054
803beb4: 10f95c15 stw r3,-6800(r2)
#ifdef IP_FRAGMENTS
return(ip_reassm(p));
#else
ip_mib.ipReasmFails++; /* we don't do these */
803beb8: 008201b4 movhi r2,2054
803bebc: 10b95e17 ldw r2,-6792(r2)
803bec0: 10c00044 addi r3,r2,1
803bec4: 008201b4 movhi r2,2054
803bec8: 10f95e15 stw r3,-6792(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803becc: 01000084 movi r4,2
803bed0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803bed4: e13ff917 ldw r4,-28(fp)
803bed8: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803bedc: 01000084 movi r4,2
803bee0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
IN_PROFILER(PF_IP, PF_EXIT);
return ENP_NOT_MINE; /* perhaps should be ENP_BAD_HEADER? */
803bee4: 00800084 movi r2,2
803bee8: 00000206 br 803bef4 <ip_rcv_phase2+0x538>
{
return ENP_LOGIC;
}
#endif /* IPSEC */
return(ip_demux(p)); /* demux to correct to upper layer */
803beec: e13ff917 ldw r4,-28(fp)
803bef0: 803bf080 call 803bf08 <ip_demux>
}
803bef4: e037883a mov sp,fp
803bef8: dfc00117 ldw ra,4(sp)
803befc: df000017 ldw fp,0(sp)
803bf00: dec00204 addi sp,sp,8
803bf04: f800283a ret
0803bf08 <ip_demux>:
* RETURNS: Same return values as ip_rcv().
*/
int
ip_demux(PACKET p)
{
803bf08: defff904 addi sp,sp,-28
803bf0c: dfc00615 stw ra,24(sp)
803bf10: df000515 stw fp,20(sp)
803bf14: df000504 addi fp,sp,20
803bf18: e13ffd15 stw r4,-12(fp)
int err;
/* The packet is verified; the header is correct. Now we have
* to demultiplex it among our internet connections.
*/
pip = (struct ip *)(p->nb_prot);
803bf1c: e0bffd17 ldw r2,-12(fp)
803bf20: 10800317 ldw r2,12(r2)
803bf24: e0bffe15 stw r2,-8(fp)
#ifdef NPDEBUG
/* make sure the caller set p->nb_prot */
if(pip->ip_ver_ihl != 0x45)
803bf28: e0bffe17 ldw r2,-8(fp)
803bf2c: 10800003 ldbu r2,0(r2)
803bf30: 10803fcc andi r2,r2,255
803bf34: 10801160 cmpeqi r2,r2,69
803bf38: 1000131e bne r2,zero,803bf88 <ip_demux+0x80>
{
if((pip->ip_ver_ihl < 0x45) ||
803bf3c: e0bffe17 ldw r2,-8(fp)
803bf40: 10800003 ldbu r2,0(r2)
803bf44: 10803fcc andi r2,r2,255
803bf48: 10801170 cmpltui r2,r2,69
803bf4c: 1000051e bne r2,zero,803bf64 <ip_demux+0x5c>
(pip->ip_ver_ihl > 0x47))
803bf50: e0bffe17 ldw r2,-8(fp)
803bf54: 10800003 ldbu r2,0(r2)
if((pip->ip_ver_ihl < 0x45) ||
803bf58: 10803fcc andi r2,r2,255
803bf5c: 10801230 cmpltui r2,r2,72
803bf60: 1000091e bne r2,zero,803bf88 <ip_demux+0x80>
{
dprintf("ip_demux: bad IP type 0x%x\n", pip->ip_ver_ihl);
803bf64: e0bffe17 ldw r2,-8(fp)
803bf68: 10800003 ldbu r2,0(r2)
803bf6c: 10803fcc andi r2,r2,255
803bf70: 100b883a mov r5,r2
803bf74: 01020174 movhi r4,2053
803bf78: 212cb704 addi r4,r4,-19748
803bf7c: 8002c780 call 8002c78 <printf>
return ENP_LOGIC;
803bf80: 00bffd44 movi r2,-11
803bf84: 0000c406 br 803c298 <ip_demux+0x390>
/* for profiling purposes count the upper layers (UDP, ICMP) in the IP
* profile bucket. TCP will insert it's own nested profile calls
*/
IN_PROFILER(PF_IP, PF_ENTRY);
p->fhost = pip->ip_src;
803bf88: e0bffe17 ldw r2,-8(fp)
803bf8c: 10c00317 ldw r3,12(r2)
803bf90: e0bffd17 ldw r2,-12(fp)
803bf94: 10c00715 stw r3,28(r2)
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
803bf98: d0a06617 ldw r2,-32360(gp)
803bf9c: 1081000c andi r2,r2,1024
803bfa0: 10002126 beq r2,zero,803c028 <ip_demux+0x120>
803bfa4: d0a06617 ldw r2,-32360(gp)
803bfa8: 1080800c andi r2,r2,512
803bfac: 10001e26 beq r2,zero,803c028 <ip_demux+0x120>
{
dprintf("ip_demux: pkt prot %u from %u.%u.%u.%u\n",
pip->ip_prot, PUSH_IPADDR(pip->ip_src));
803bfb0: e0bffe17 ldw r2,-8(fp)
803bfb4: 10800243 ldbu r2,9(r2)
dprintf("ip_demux: pkt prot %u from %u.%u.%u.%u\n",
803bfb8: 11003fcc andi r4,r2,255
pip->ip_prot, PUSH_IPADDR(pip->ip_src));
803bfbc: e0bffe17 ldw r2,-8(fp)
803bfc0: 10800317 ldw r2,12(r2)
dprintf("ip_demux: pkt prot %u from %u.%u.%u.%u\n",
803bfc4: 11403fcc andi r5,r2,255
pip->ip_prot, PUSH_IPADDR(pip->ip_src));
803bfc8: e0bffe17 ldw r2,-8(fp)
803bfcc: 10800317 ldw r2,12(r2)
803bfd0: 1004d23a srli r2,r2,8
dprintf("ip_demux: pkt prot %u from %u.%u.%u.%u\n",
803bfd4: 11803fcc andi r6,r2,255
pip->ip_prot, PUSH_IPADDR(pip->ip_src));
803bfd8: e0bffe17 ldw r2,-8(fp)
803bfdc: 10800317 ldw r2,12(r2)
803bfe0: 1004d43a srli r2,r2,16
dprintf("ip_demux: pkt prot %u from %u.%u.%u.%u\n",
803bfe4: 10803fcc andi r2,r2,255
pip->ip_prot, PUSH_IPADDR(pip->ip_src));
803bfe8: e0fffe17 ldw r3,-8(fp)
803bfec: 18c00317 ldw r3,12(r3)
803bff0: 1806d63a srli r3,r3,24
dprintf("ip_demux: pkt prot %u from %u.%u.%u.%u\n",
803bff4: d8c00115 stw r3,4(sp)
803bff8: d8800015 stw r2,0(sp)
803bffc: 300f883a mov r7,r6
803c000: 280d883a mov r6,r5
803c004: 200b883a mov r5,r4
803c008: 01020174 movhi r4,2053
803c00c: 212cbe04 addi r4,r4,-19720
803c010: 8002c780 call 8002c78 <printf>
if (NDEBUG & DUMP) ip_dump(p);
803c014: d0a06617 ldw r2,-32360(gp)
803c018: 1080008c andi r2,r2,2
803c01c: 10000226 beq r2,zero,803c028 <ip_demux+0x120>
803c020: e13ffd17 ldw r4,-12(fp)
803c024: 803b0cc0 call 803b0cc <ip_dump>
}
#endif
switch (pip->ip_prot)
803c028: e0bffe17 ldw r2,-8(fp)
803c02c: 10800243 ldbu r2,9(r2)
803c030: 10803fcc andi r2,r2,255
803c034: 10c000a0 cmpeqi r3,r2,2
803c038: 18001b1e bne r3,zero,803c0a8 <ip_demux+0x1a0>
803c03c: 10c000c8 cmpgei r3,r2,3
803c040: 1800031e bne r3,zero,803c050 <ip_demux+0x148>
803c044: 10800060 cmpeqi r2,r2,1
803c048: 10000e1e bne r2,zero,803c084 <ip_demux+0x17c>
803c04c: 00002806 br 803c0f0 <ip_demux+0x1e8>
803c050: 10c001a0 cmpeqi r3,r2,6
803c054: 18001d1e bne r3,zero,803c0cc <ip_demux+0x1c4>
803c058: 10800458 cmpnei r2,r2,17
803c05c: 1000241e bne r2,zero,803c0f0 <ip_demux+0x1e8>
{
case UDP_PROT:
ip_mib.ipInDelivers++;
803c060: 008201b4 movhi r2,2054
803c064: 10b95717 ldw r2,-6820(r2)
803c068: 10c00044 addi r3,r2,1
803c06c: 008201b4 movhi r2,2054
803c070: 10f95715 stw r3,-6820(r2)
err = udpdemux(p);
803c074: e13ffd17 ldw r4,-12(fp)
803c078: 803d1340 call 803d134 <udpdemux>
803c07c: e0bfff15 stw r2,-4(fp)
break;
803c080: 00002406 br 803c114 <ip_demux+0x20c>
case ICMP_PROT:
ip_mib.ipInDelivers++;
803c084: 008201b4 movhi r2,2054
803c088: 10b95717 ldw r2,-6820(r2)
803c08c: 10c00044 addi r3,r2,1
803c090: 008201b4 movhi r2,2054
803c094: 10f95715 stw r3,-6820(r2)
err = icmprcv(p);
803c098: e13ffd17 ldw r4,-12(fp)
803c09c: 8038f780 call 8038f78 <icmprcv>
803c0a0: e0bfff15 stw r2,-4(fp)
break;
803c0a4: 00001b06 br 803c114 <ip_demux+0x20c>
#if defined (IP_MULTICAST) && (defined (IGMP_V1) || defined (IGMP_V2))
case IGMP_PROT:
ip_mib.ipInDelivers++;
803c0a8: 008201b4 movhi r2,2054
803c0ac: 10b95717 ldw r2,-6820(r2)
803c0b0: 10c00044 addi r3,r2,1
803c0b4: 008201b4 movhi r2,2054
803c0b8: 10f95715 stw r3,-6820(r2)
err = igmp_input(p);
803c0bc: e13ffd17 ldw r4,-12(fp)
803c0c0: 802541c0 call 802541c <igmp_input>
803c0c4: e0bfff15 stw r2,-4(fp)
break;
803c0c8: 00001206 br 803c114 <ip_demux+0x20c>
#endif /* IP_MULTICAST and (IGMPv1 or IGMPv2) */
#ifdef INCLUDE_TCP
case TCP_PROT:
ip_mib.ipInDelivers++;
803c0cc: 008201b4 movhi r2,2054
803c0d0: 10b95717 ldw r2,-6820(r2)
803c0d4: 10c00044 addi r3,r2,1
803c0d8: 008201b4 movhi r2,2054
803c0dc: 10f95715 stw r3,-6820(r2)
err = tcp_rcv(p);
803c0e0: e13ffd17 ldw r4,-12(fp)
803c0e4: 802a4a40 call 802a4a4 <tcp_rcv>
803c0e8: e0bfff15 stw r2,-4(fp)
break;
803c0ec: 00000906 br 803c114 <ip_demux+0x20c>
err = v6t_rcv(p);
break;
#endif /* IPV6_TUNNEL */
default: /* unknown upper protocol */
#ifdef IP_RAW
ip_mib.ipInDelivers++;
803c0f0: 008201b4 movhi r2,2054
803c0f4: 10b95717 ldw r2,-6820(r2)
803c0f8: 10c00044 addi r3,r2,1
803c0fc: 008201b4 movhi r2,2054
803c100: 10f95715 stw r3,-6820(r2)
err = ip_raw_input(p);
803c104: e13ffd17 ldw r4,-12(fp)
803c108: 803c7d00 call 803c7d0 <ip_raw_input>
803c10c: e0bfff15 stw r2,-4(fp)
break;
803c110: 0001883a nop
#endif /* IP_RAW */
}
IN_PROFILER(PF_IP, PF_EXIT);
if(err != ENP_PARAM)
803c114: e0bfff17 ldw r2,-4(fp)
803c118: 10bffda0 cmpeqi r2,r2,-10
803c11c: 1000021e bne r2,zero,803c128 <ip_demux+0x220>
{
return err;
803c120: e0bfff17 ldw r2,-4(fp)
803c124: 00005c06 br 803c298 <ip_demux+0x390>
#ifdef FULL_ICMP
/* nobody's listening for this packet. Unless it was broadcast or
* multicast, send a destination unreachable.
*/
if ((pip->ip_dest != 0xffffffffL) && /* Physical cable broadcast addr*/
803c128: e0bffe17 ldw r2,-8(fp)
803c12c: 10800417 ldw r2,16(r2)
803c130: 10bfffe0 cmpeqi r2,r2,-1
803c134: 10004c1e bne r2,zero,803c268 <ip_demux+0x360>
#ifdef IP_MULTICAST
(!(IN_MULTICAST(ntohl(pip->ip_dest)))) && /* multicast address */
803c138: e0bffe17 ldw r2,-8(fp)
803c13c: 10800417 ldw r2,16(r2)
803c140: 1006d63a srli r3,r2,24
803c144: e0bffe17 ldw r2,-8(fp)
803c148: 10800417 ldw r2,16(r2)
803c14c: 1004d23a srli r2,r2,8
803c150: 10bfc00c andi r2,r2,65280
803c154: 1886b03a or r3,r3,r2
803c158: e0bffe17 ldw r2,-8(fp)
803c15c: 10800417 ldw r2,16(r2)
803c160: 1004923a slli r2,r2,8
803c164: 10803fec andhi r2,r2,255
803c168: 1886b03a or r3,r3,r2
803c16c: e0bffe17 ldw r2,-8(fp)
803c170: 10800417 ldw r2,16(r2)
803c174: 1004963a slli r2,r2,24
803c178: 1884b03a or r2,r3,r2
803c17c: 10fc002c andhi r3,r2,61440
if ((pip->ip_dest != 0xffffffffL) && /* Physical cable broadcast addr*/
803c180: 00b80034 movhi r2,57344
803c184: 18803826 beq r3,r2,803c268 <ip_demux+0x360>
#endif /* IP_MULTICAST */
(pip->ip_dest != p->net->n_netbr) && /* All subnet broadcast */
803c188: e0bffe17 ldw r2,-8(fp)
803c18c: 10c00417 ldw r3,16(r2)
803c190: e0bffd17 ldw r2,-12(fp)
803c194: 10800617 ldw r2,24(r2)
803c198: 10800e17 ldw r2,56(r2)
(!(IN_MULTICAST(ntohl(pip->ip_dest)))) && /* multicast address */
803c19c: 18803226 beq r3,r2,803c268 <ip_demux+0x360>
(pip->ip_dest != p->net->n_netbr42) && /* All subnet bcast (4.2bsd) */
803c1a0: e0bffe17 ldw r2,-8(fp)
803c1a4: 10c00417 ldw r3,16(r2)
803c1a8: e0bffd17 ldw r2,-12(fp)
803c1ac: 10800617 ldw r2,24(r2)
803c1b0: 10800f17 ldw r2,60(r2)
(pip->ip_dest != p->net->n_netbr) && /* All subnet broadcast */
803c1b4: 18802c26 beq r3,r2,803c268 <ip_demux+0x360>
(pip->ip_dest != p->net->n_subnetbr) && /* Our subnet broadcast */
803c1b8: e0bffe17 ldw r2,-8(fp)
803c1bc: 10c00417 ldw r3,16(r2)
803c1c0: e0bffd17 ldw r2,-12(fp)
803c1c4: 10800617 ldw r2,24(r2)
803c1c8: 10801017 ldw r2,64(r2)
(pip->ip_dest != p->net->n_netbr42) && /* All subnet bcast (4.2bsd) */
803c1cc: 18802626 beq r3,r2,803c268 <ip_demux+0x360>
(p->net->n_ipaddr ^ p->net->n_subnetbr)) /* Know our own host address? */
803c1d0: e0bffd17 ldw r2,-12(fp)
803c1d4: 10800617 ldw r2,24(r2)
803c1d8: 10c00a17 ldw r3,40(r2)
803c1dc: e0bffd17 ldw r2,-12(fp)
803c1e0: 10800617 ldw r2,24(r2)
803c1e4: 10801017 ldw r2,64(r2)
(pip->ip_dest != p->net->n_subnetbr) && /* Our subnet broadcast */
803c1e8: 18801f26 beq r3,r2,803c268 <ip_demux+0x360>
{
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & IPTRACE))
803c1ec: d0a06617 ldw r2,-32360(gp)
803c1f0: 1081000c andi r2,r2,1024
803c1f4: 10000f26 beq r2,zero,803c234 <ip_demux+0x32c>
803c1f8: d0a06617 ldw r2,-32360(gp)
803c1fc: 1080800c andi r2,r2,512
803c200: 10000c26 beq r2,zero,803c234 <ip_demux+0x32c>
{
dprintf("ip_demux: unhandled prot %u\n", pip->ip_prot);
803c204: e0bffe17 ldw r2,-8(fp)
803c208: 10800243 ldbu r2,9(r2)
803c20c: 10803fcc andi r2,r2,255
803c210: 100b883a mov r5,r2
803c214: 01020174 movhi r4,2053
803c218: 212cc804 addi r4,r4,-19680
803c21c: 8002c780 call 8002c78 <printf>
if (NDEBUG & DUMP) ip_dump(p);
803c220: d0a06617 ldw r2,-32360(gp)
803c224: 1080008c andi r2,r2,2
803c228: 10000226 beq r2,zero,803c234 <ip_demux+0x32c>
803c22c: e13ffd17 ldw r4,-12(fp)
803c230: 803b0cc0 call 803b0cc <ip_dump>
}
#endif /* NPDEBUG */
icmp_destun(pip->ip_src, p->net->n_ipaddr, pip, DSTPROT, p->net);
803c234: e0bffe17 ldw r2,-8(fp)
803c238: 10c00317 ldw r3,12(r2)
803c23c: e0bffd17 ldw r2,-12(fp)
803c240: 10800617 ldw r2,24(r2)
803c244: 11000a17 ldw r4,40(r2)
803c248: e0bffd17 ldw r2,-12(fp)
803c24c: 10800617 ldw r2,24(r2)
803c250: d8800015 stw r2,0(sp)
803c254: 01c00084 movi r7,2
803c258: e1bffe17 ldw r6,-8(fp)
803c25c: 200b883a mov r5,r4
803c260: 1809883a mov r4,r3
803c264: 8039a540 call 8039a54 <icmp_destun>
}
#endif /* FULL_ICMP */
ip_mib.ipUnknownProtos++;
803c268: 008201b4 movhi r2,2054
803c26c: 10b95517 ldw r2,-6828(r2)
803c270: 10c00044 addi r3,r2,1
803c274: 008201b4 movhi r2,2054
803c278: 10f95515 stw r3,-6828(r2)
LOCK_NET_RESOURCE(FREEQ_RESID);
803c27c: 01000084 movi r4,2
803c280: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803c284: e13ffd17 ldw r4,-12(fp)
803c288: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803c28c: 01000084 movi r4,2
803c290: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_NOT_MINE;
803c294: 00800084 movi r2,2
}
803c298: e037883a mov sp,fp
803c29c: dfc00117 ldw ra,4(sp)
803c2a0: df000017 ldw fp,0(sp)
803c2a4: dec00204 addi sp,sp,8
803c2a8: f800283a ret
0803c2ac <in_addmulti>:
* RETURNS:
*/
struct in_multi *
in_addmulti(ip_addr *ap, struct net *netp, int addrtype)
{
803c2ac: defff904 addi sp,sp,-28
803c2b0: dfc00615 stw ra,24(sp)
803c2b4: df000515 stw fp,20(sp)
803c2b8: df000504 addi fp,sp,20
803c2bc: e13ffd15 stw r4,-12(fp)
803c2c0: e17ffc15 stw r5,-16(fp)
803c2c4: e1bffb15 stw r6,-20(fp)
struct in_multi *inm = (struct in_multi *)NULL;
803c2c8: e03fff15 stw zero,-4(fp)
int error;
/* check for good addr. */
if ((ap == (ip_addr *)NULL) || (*ap == 0))
803c2cc: e0bffd17 ldw r2,-12(fp)
803c2d0: 10000326 beq r2,zero,803c2e0 <in_addmulti+0x34>
803c2d4: e0bffd17 ldw r2,-12(fp)
803c2d8: 10800017 ldw r2,0(r2)
803c2dc: 1000021e bne r2,zero,803c2e8 <in_addmulti+0x3c>
return ((struct in_multi *)NULL);
803c2e0: 0005883a mov r2,zero
803c2e4: 00003f06 br 803c3e4 <in_addmulti+0x138>
ENTER_CRIT_SECTION(netp);
803c2e8: 8028e940 call 8028e94 <irq_Mask>
#ifdef IP_V6
if(addrtype == 6)
inm = v6_lookup_mcast((ip6_addr*)ap, netp);
#endif
#ifdef IP_V4
if(addrtype != 6)
803c2ec: e0bffb17 ldw r2,-20(fp)
803c2f0: 108001a0 cmpeqi r2,r2,6
803c2f4: 1000061e bne r2,zero,803c310 <in_addmulti+0x64>
inm = lookup_mcast(*ap, netp);
803c2f8: e0bffd17 ldw r2,-12(fp)
803c2fc: 10800017 ldw r2,0(r2)
803c300: e17ffc17 ldw r5,-16(fp)
803c304: 1009883a mov r4,r2
803c308: 803c5040 call 803c504 <lookup_mcast>
803c30c: e0bfff15 stw r2,-4(fp)
#endif
if (inm != (struct in_multi *)NULL)
803c310: e0bfff17 ldw r2,-4(fp)
803c314: 10000626 beq r2,zero,803c330 <in_addmulti+0x84>
{
/* Found it; just increment the reference count. */
++inm->inm_refcount;
803c318: e0bfff17 ldw r2,-4(fp)
803c31c: 10800217 ldw r2,8(r2)
803c320: 10c00044 addi r3,r2,1
803c324: e0bfff17 ldw r2,-4(fp)
803c328: 10c00215 stw r3,8(r2)
803c32c: 00002b06 br 803c3dc <in_addmulti+0x130>
{
/*
* New address; allocate a new multicast record
* and link it into the interface's multicast list.
*/
inm = (struct in_multi *)INM_ALLOC(sizeof(*inm));
803c330: 01000604 movi r4,24
803c334: 802982c0 call 802982c <npalloc>
803c338: e0bfff15 stw r2,-4(fp)
if (inm == (struct in_multi *)NULL)
803c33c: e0bfff17 ldw r2,-4(fp)
803c340: 1000031e bne r2,zero,803c350 <in_addmulti+0xa4>
{
EXIT_CRIT_SECTION(netp);
803c344: 8028ef40 call 8028ef4 <irq_Unmask>
return ((struct in_multi *)NULL);
803c348: 0005883a mov r2,zero
803c34c: 00002506 br 803c3e4 <in_addmulti+0x138>
#ifdef IP_V6
if(addrtype == 6)
IP6CPY(&inm->ip6addr, (struct in6_addr *)ap);
#endif
#ifdef IP_V4
if(addrtype != 6)
803c350: e0bffb17 ldw r2,-20(fp)
803c354: 108001a0 cmpeqi r2,r2,6
803c358: 1000041e bne r2,zero,803c36c <in_addmulti+0xc0>
inm->inm_addr = *ap;
803c35c: e0bffd17 ldw r2,-12(fp)
803c360: 10c00017 ldw r3,0(r2)
803c364: e0bfff17 ldw r2,-4(fp)
803c368: 10c00015 stw r3,0(r2)
#endif
inm->inm_netp = netp;
803c36c: e0bfff17 ldw r2,-4(fp)
803c370: e0fffc17 ldw r3,-16(fp)
803c374: 10c00115 stw r3,4(r2)
inm->inm_refcount = 1;
803c378: e0bfff17 ldw r2,-4(fp)
803c37c: 00c00044 movi r3,1
803c380: 10c00215 stw r3,8(r2)
inm->inm_next = netp->mc_list;
803c384: e0bffc17 ldw r2,-16(fp)
803c388: 10c02c17 ldw r3,176(r2)
803c38c: e0bfff17 ldw r2,-4(fp)
803c390: 10c00515 stw r3,20(r2)
netp->mc_list = inm;
803c394: e0bffc17 ldw r2,-16(fp)
803c398: e0ffff17 ldw r3,-4(fp)
803c39c: 10c02c15 stw r3,176(r2)
/*
* If net has a multicast address registration routine then ask
* the network driver to update its multicast reception
* filter appropriately for the new address.
*/
if(netp->n_mcastlist)
803c3a0: e0bffc17 ldw r2,-16(fp)
803c3a4: 10802b17 ldw r2,172(r2)
803c3a8: 10000626 beq r2,zero,803c3c4 <in_addmulti+0x118>
error = netp->n_mcastlist(inm);
803c3ac: e0bffc17 ldw r2,-16(fp)
803c3b0: 10802b17 ldw r2,172(r2)
803c3b4: e13fff17 ldw r4,-4(fp)
803c3b8: 103ee83a callr r2
803c3bc: e0bffe15 stw r2,-8(fp)
803c3c0: 00000106 br 803c3c8 <in_addmulti+0x11c>
else
error = 0;
803c3c4: e03ffe15 stw zero,-8(fp)
#if defined (IGMP_V1) || defined (IGMP_V2)
/*
* Let IGMP know that we have joined a new IP multicast group.
*/
if (inm->inm_addr) igmp_joingroup(inm);
803c3c8: e0bfff17 ldw r2,-4(fp)
803c3cc: 10800017 ldw r2,0(r2)
803c3d0: 10000226 beq r2,zero,803c3dc <in_addmulti+0x130>
803c3d4: e13fff17 ldw r4,-4(fp)
803c3d8: 80258d80 call 80258d8 <igmp_joingroup>
#endif
}
EXIT_CRIT_SECTION(netp);
803c3dc: 8028ef40 call 8028ef4 <irq_Unmask>
USE_ARG(error);
return (inm);
803c3e0: e0bfff17 ldw r2,-4(fp)
}
803c3e4: e037883a mov sp,fp
803c3e8: dfc00117 ldw ra,4(sp)
803c3ec: df000017 ldw fp,0(sp)
803c3f0: dec00204 addi sp,sp,8
803c3f4: f800283a ret
0803c3f8 <in_delmulti>:
* RETURNS:
*/
void
in_delmulti(struct in_multi * inm)
{
803c3f8: defffa04 addi sp,sp,-24
803c3fc: dfc00515 stw ra,20(sp)
803c400: df000415 stw fp,16(sp)
803c404: df000404 addi fp,sp,16
803c408: e13ffc15 stw r4,-16(fp)
struct in_multi * p;
NET netp = inm->inm_netp;
803c40c: e0bffc17 ldw r2,-16(fp)
803c410: 10800117 ldw r2,4(r2)
803c414: e0bffd15 stw r2,-12(fp)
int error;
ENTER_CRIT_SECTION(inm);
803c418: 8028e940 call 8028e94 <irq_Mask>
if (--inm->inm_refcount == 0)
803c41c: e0bffc17 ldw r2,-16(fp)
803c420: 10800217 ldw r2,8(r2)
803c424: 10ffffc4 addi r3,r2,-1
803c428: e0bffc17 ldw r2,-16(fp)
803c42c: 10c00215 stw r3,8(r2)
803c430: e0bffc17 ldw r2,-16(fp)
803c434: 10800217 ldw r2,8(r2)
803c438: 10002b1e bne r2,zero,803c4e8 <in_delmulti+0xf0>
{
/* Unlink from list. */
for (p = netp->mc_list; p; p = p->inm_next)
803c43c: e0bffd17 ldw r2,-12(fp)
803c440: 10802c17 ldw r2,176(r2)
803c444: e0bfff15 stw r2,-4(fp)
803c448: 00001406 br 803c49c <in_delmulti+0xa4>
{
if(p == inm) /* inm is first in mc_list */
803c44c: e0ffff17 ldw r3,-4(fp)
803c450: e0bffc17 ldw r2,-16(fp)
803c454: 1880051e bne r3,r2,803c46c <in_delmulti+0x74>
{
netp->mc_list = p->inm_next; /* unlink */
803c458: e0bfff17 ldw r2,-4(fp)
803c45c: 10c00517 ldw r3,20(r2)
803c460: e0bffd17 ldw r2,-12(fp)
803c464: 10c02c15 stw r3,176(r2)
break;
803c468: 00000e06 br 803c4a4 <in_delmulti+0xac>
}
else if(p->inm_next == inm) /* inm is next */
803c46c: e0bfff17 ldw r2,-4(fp)
803c470: 10800517 ldw r2,20(r2)
803c474: e0fffc17 ldw r3,-16(fp)
803c478: 1880051e bne r3,r2,803c490 <in_delmulti+0x98>
{
p->inm_next = inm->inm_next; /* unlink */
803c47c: e0bffc17 ldw r2,-16(fp)
803c480: 10c00517 ldw r3,20(r2)
803c484: e0bfff17 ldw r2,-4(fp)
803c488: 10c00515 stw r3,20(r2)
break;
803c48c: 00000506 br 803c4a4 <in_delmulti+0xac>
for (p = netp->mc_list; p; p = p->inm_next)
803c490: e0bfff17 ldw r2,-4(fp)
803c494: 10800517 ldw r2,20(r2)
803c498: e0bfff15 stw r2,-4(fp)
803c49c: e0bfff17 ldw r2,-4(fp)
803c4a0: 103fea1e bne r2,zero,803c44c <in_delmulti+0x54>
/*
* If net has a multicast address registration routine then ask
* the network driver to update its multicast reception
* filter appropriately for the deleted address.
*/
if(netp->n_mcastlist)
803c4a4: e0bffd17 ldw r2,-12(fp)
803c4a8: 10802b17 ldw r2,172(r2)
803c4ac: 10000626 beq r2,zero,803c4c8 <in_delmulti+0xd0>
error = netp->n_mcastlist(inm);
803c4b0: e0bffd17 ldw r2,-12(fp)
803c4b4: 10802b17 ldw r2,172(r2)
803c4b8: e13ffc17 ldw r4,-16(fp)
803c4bc: 103ee83a callr r2
803c4c0: e0bffe15 stw r2,-8(fp)
803c4c4: 00000106 br 803c4cc <in_delmulti+0xd4>
else
error = 0;
803c4c8: e03ffe15 stw zero,-8(fp)
#if defined (IGMP_V2)
/*
* No remaining claims to this record; let IGMP know that
* we are leaving the multicast group.
*/
if (inm->inm_addr) igmp_leavegroup(inm);
803c4cc: e0bffc17 ldw r2,-16(fp)
803c4d0: 10800017 ldw r2,0(r2)
803c4d4: 10000226 beq r2,zero,803c4e0 <in_delmulti+0xe8>
803c4d8: e13ffc17 ldw r4,-16(fp)
803c4dc: 8025b040 call 8025b04 <igmp_leavegroup>
#endif
IM_FREE(inm);
803c4e0: e13ffc17 ldw r4,-16(fp)
803c4e4: 80298600 call 8029860 <npfree>
}
EXIT_CRIT_SECTION(inm);
803c4e8: 8028ef40 call 8028ef4 <irq_Unmask>
USE_ARG(error);
}
803c4ec: 0001883a nop
803c4f0: e037883a mov sp,fp
803c4f4: dfc00117 ldw ra,4(sp)
803c4f8: df000017 ldw fp,0(sp)
803c4fc: dec00204 addi sp,sp,8
803c500: f800283a ret
0803c504 <lookup_mcast>:
* RETURNS: pointer to mcast addr structure, or NULL if not found.
*/
struct in_multi *
lookup_mcast(ip_addr addr, NET netp)
{
803c504: defffc04 addi sp,sp,-16
803c508: df000315 stw fp,12(sp)
803c50c: df000304 addi fp,sp,12
803c510: e13ffe15 stw r4,-8(fp)
803c514: e17ffd15 stw r5,-12(fp)
struct in_multi * imp;
for (imp = netp->mc_list; imp; imp = imp->inm_next)
803c518: e0bffd17 ldw r2,-12(fp)
803c51c: 10802c17 ldw r2,176(r2)
803c520: e0bfff15 stw r2,-4(fp)
803c524: 00000906 br 803c54c <lookup_mcast+0x48>
{
if(imp->inm_addr == addr)
803c528: e0bfff17 ldw r2,-4(fp)
803c52c: 10800017 ldw r2,0(r2)
803c530: e0fffe17 ldw r3,-8(fp)
803c534: 1880021e bne r3,r2,803c540 <lookup_mcast+0x3c>
return imp;
803c538: e0bfff17 ldw r2,-4(fp)
803c53c: 00000606 br 803c558 <lookup_mcast+0x54>
for (imp = netp->mc_list; imp; imp = imp->inm_next)
803c540: e0bfff17 ldw r2,-4(fp)
803c544: 10800517 ldw r2,20(r2)
803c548: e0bfff15 stw r2,-4(fp)
803c54c: e0bfff17 ldw r2,-4(fp)
803c550: 103ff51e bne r2,zero,803c528 <lookup_mcast+0x24>
}
return NULL; /* addr not found in mcast list */
803c554: 0005883a mov r2,zero
}
803c558: e037883a mov sp,fp
803c55c: df000017 ldw fp,0(sp)
803c560: dec00104 addi sp,sp,4
803c564: f800283a ret
0803c568 <prep_ifaces>:
* passed value.
*/
int
prep_ifaces(int ifaces_found)
{
803c568: defffd04 addi sp,sp,-12
803c56c: dfc00215 stw ra,8(sp)
803c570: df000115 stw fp,4(sp)
803c574: df000104 addi fp,sp,4
803c578: e13fff15 stw r4,-4(fp)
if (port_prep)
803c57c: d0a09617 ldw r2,-32168(gp)
803c580: 10000426 beq r2,zero,803c594 <prep_ifaces+0x2c>
ifaces_found = port_prep(ifaces_found);
803c584: d0a09617 ldw r2,-32168(gp)
803c588: e13fff17 ldw r4,-4(fp)
803c58c: 103ee83a callr r2
803c590: e0bfff15 stw r2,-4(fp)
#ifdef MAC_LOOPBACK
ifaces_found = prep_lb(ifaces_found);
#endif /* MAC_LOOPBACK */
ifNumber = ifaces_found; /* set global interface counter */
803c594: e0bfff17 ldw r2,-4(fp)
803c598: d0a06715 stw r2,-32356(gp)
initmsg("prepped %u interface%s, initializing...\n",
803c59c: e0bfff17 ldw r2,-4(fp)
803c5a0: 10800058 cmpnei r2,r2,1
803c5a4: 1000031e bne r2,zero,803c5b4 <prep_ifaces+0x4c>
803c5a8: 00820174 movhi r2,2053
803c5ac: 10acd004 addi r2,r2,-19648
803c5b0: 00000206 br 803c5bc <prep_ifaces+0x54>
803c5b4: 00820174 movhi r2,2053
803c5b8: 10acd104 addi r2,r2,-19644
803c5bc: 100d883a mov r6,r2
803c5c0: e17fff17 ldw r5,-4(fp)
803c5c4: 01020174 movhi r4,2053
803c5c8: 212cd204 addi r4,r4,-19640
803c5cc: 8002c780 call 8002c78 <printf>
ifaces_found, ifaces_found==1?"":"s");
return ifaces_found;
803c5d0: e0bfff17 ldw r2,-4(fp)
}
803c5d4: e037883a mov sp,fp
803c5d8: dfc00117 ldw ra,4(sp)
803c5dc: df000017 ldw fp,0(sp)
803c5e0: dec00204 addi sp,sp,8
803c5e4: f800283a ret
0803c5e8 <netexit>:
* RETURNS: SHould not return
*/
void
netexit(int err) /* exit error level */
{
803c5e8: defffd04 addi sp,sp,-12
803c5ec: dfc00215 stw ra,8(sp)
803c5f0: df000115 stw fp,4(sp)
803c5f4: df000104 addi fp,sp,4
803c5f8: e13fff15 stw r4,-4(fp)
net_system_exit = TRUE; /* set flag for shutting down */
803c5fc: 00800044 movi r2,1
803c600: d0a09715 stw r2,-32164(gp)
ip_exit(); /* do the exit_hook()ed stuff */
803c604: 802524c0 call 802524c <ip_exit>
PORT_EXIT_FUNC(err); /* should not return! */
803c608: e13fff17 ldw r4,-4(fp)
803c60c: 8042abc0 call 8042abc <exit>
0803c610 <evtmap_setup>:
* INPUT: None.
* OUTPUT: None
*/
void evtmap_setup (void)
{
803c610: deffff04 addi sp,sp,-4
803c614: df000015 stw fp,0(sp)
803c618: d839883a mov fp,sp
#ifdef SOCK_MAP_EVENTS
so_evtmap = TRUE;
so_evtmap_create = evtmap_create;
so_evtmap_delete = evtmap_delete;
#else
so_evtmap = FALSE;
803c61c: d0209a05 stb zero,-32152(gp)
so_evtmap_create = 0;
803c620: d0209815 stw zero,-32160(gp)
so_evtmap_delete = 0;
803c624: d0209915 stw zero,-32156(gp)
#endif /* SOCK_MAP_EVENTS */
}
803c628: 0001883a nop
803c62c: e037883a mov sp,fp
803c630: df000017 ldw fp,0(sp)
803c634: dec00104 addi sp,sp,4
803c638: f800283a ret
0803c63c <ip_raw_open>:
ip_raw_open(u_char prot,
ip_addr laddr,
ip_addr faddr,
int (*handler)(PACKET, void *),
void * data)
{
803c63c: defff904 addi sp,sp,-28
803c640: dfc00615 stw ra,24(sp)
803c644: df000515 stw fp,20(sp)
803c648: df000504 addi fp,sp,20
803c64c: 2005883a mov r2,r4
803c650: e17ffd15 stw r5,-12(fp)
803c654: e1bffc15 stw r6,-16(fp)
803c658: e1fffb15 stw r7,-20(fp)
803c65c: e0bffe05 stb r2,-8(fp)
struct ipraw_ep * ep;
LOCK_NET_RESOURCE(NET_RESID);
803c660: 0009883a mov r4,zero
803c664: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/* allocate a structure for the endpoint */
ep = (struct ipraw_ep *)IEP_ALLOC(sizeof(struct ipraw_ep));
803c668: 01000604 movi r4,24
803c66c: 802982c0 call 802982c <npalloc>
803c670: e0bfff15 stw r2,-4(fp)
if (ep == NULL)
803c674: e0bfff17 ldw r2,-4(fp)
803c678: 10000a1e bne r2,zero,803c6a4 <ip_raw_open+0x68>
{
#ifdef NPDEBUG
if (NDEBUG & INFOMSG)
803c67c: d0a06617 ldw r2,-32360(gp)
803c680: 1080010c andi r2,r2,4
803c684: 10000326 beq r2,zero,803c694 <ip_raw_open+0x58>
dprintf("IP: Couldn't allocate ep storage.\n");
803c688: 01020174 movhi r4,2053
803c68c: 212cdd04 addi r4,r4,-19596
803c690: 8002d9c0 call 8002d9c <puts>
#endif
UNLOCK_NET_RESOURCE(NET_RESID);
803c694: 0009883a mov r4,zero
803c698: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ep;
803c69c: e0bfff17 ldw r2,-4(fp)
803c6a0: 00001706 br 803c700 <ip_raw_open+0xc4>
}
/* fill it in with the caller's requested binding */
ep->ipr_laddr = laddr;
803c6a4: e0bfff17 ldw r2,-4(fp)
803c6a8: e0fffd17 ldw r3,-12(fp)
803c6ac: 10c00115 stw r3,4(r2)
ep->ipr_faddr = faddr;
803c6b0: e0bfff17 ldw r2,-4(fp)
803c6b4: e0fffc17 ldw r3,-16(fp)
803c6b8: 10c00215 stw r3,8(r2)
ep->ipr_prot = prot;
803c6bc: e0bfff17 ldw r2,-4(fp)
803c6c0: e0fffe03 ldbu r3,-8(fp)
803c6c4: 10c00505 stb r3,20(r2)
ep->ipr_rcv = handler;
803c6c8: e0bfff17 ldw r2,-4(fp)
803c6cc: e0fffb17 ldw r3,-20(fp)
803c6d0: 10c00315 stw r3,12(r2)
ep->ipr_data = data;
803c6d4: e0bfff17 ldw r2,-4(fp)
803c6d8: e0c00217 ldw r3,8(fp)
803c6dc: 10c00415 stw r3,16(r2)
/* link it into the list
* (at the head, because that's simple and fast)
*/
ep->ipr_next = ipraw_eps;
803c6e0: d0e09b17 ldw r3,-32148(gp)
803c6e4: e0bfff17 ldw r2,-4(fp)
803c6e8: 10c00015 stw r3,0(r2)
ipraw_eps = ep;
803c6ec: e0bfff17 ldw r2,-4(fp)
803c6f0: d0a09b15 stw r2,-32148(gp)
/* and return the pointer to the endpoint */
UNLOCK_NET_RESOURCE(NET_RESID);
803c6f4: 0009883a mov r4,zero
803c6f8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ep;
803c6fc: e0bfff17 ldw r2,-4(fp)
}
803c700: e037883a mov sp,fp
803c704: dfc00117 ldw ra,4(sp)
803c708: df000017 ldw fp,0(sp)
803c70c: dec00204 addi sp,sp,8
803c710: f800283a ret
0803c714 <ip_raw_close>:
* that is to be closed
* RETURNS: void
*/
void
ip_raw_close(struct ipraw_ep * ep)
{
803c714: defffb04 addi sp,sp,-20
803c718: dfc00415 stw ra,16(sp)
803c71c: df000315 stw fp,12(sp)
803c720: df000304 addi fp,sp,12
803c724: e13ffd15 stw r4,-12(fp)
struct ipraw_ep * prev_ep;
struct ipraw_ep * curr_ep;
LOCK_NET_RESOURCE(NET_RESID);
803c728: 0009883a mov r4,zero
803c72c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/* search the list of endpoints for the one we're supposed to close */
for (prev_ep = NULL, curr_ep = ipraw_eps;
803c730: e03fff15 stw zero,-4(fp)
803c734: d0a09b17 ldw r2,-32148(gp)
803c738: e0bffe15 stw r2,-8(fp)
803c73c: 00000806 br 803c760 <ip_raw_close+0x4c>
curr_ep != NULL;
curr_ep = curr_ep->ipr_next)
{
if (curr_ep == ep)
803c740: e0fffe17 ldw r3,-8(fp)
803c744: e0bffd17 ldw r2,-12(fp)
803c748: 18800826 beq r3,r2,803c76c <ip_raw_close+0x58>
break;
prev_ep = curr_ep;
803c74c: e0bffe17 ldw r2,-8(fp)
803c750: e0bfff15 stw r2,-4(fp)
curr_ep = curr_ep->ipr_next)
803c754: e0bffe17 ldw r2,-8(fp)
803c758: 10800017 ldw r2,0(r2)
803c75c: e0bffe15 stw r2,-8(fp)
for (prev_ep = NULL, curr_ep = ipraw_eps;
803c760: e0bffe17 ldw r2,-8(fp)
803c764: 103ff61e bne r2,zero,803c740 <ip_raw_close+0x2c>
803c768: 00000106 br 803c770 <ip_raw_close+0x5c>
break;
803c76c: 0001883a nop
}
/* if we didn't find it, we can't close it, so just return */
if (curr_ep == NULL)
803c770: e0bffe17 ldw r2,-8(fp)
803c774: 1000041e bne r2,zero,803c788 <ip_raw_close+0x74>
{
#ifdef NPDEBUG
/* caller passed pointer to endpoint not in list
* -- not fatal, but may be programming error
*/
dtrap();
803c778: 8028cd40 call 8028cd4 <dtrap>
#endif /* NPDEBUG */
UNLOCK_NET_RESOURCE(NET_RESID);
803c77c: 0009883a mov r4,zero
803c780: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return;
803c784: 00000d06 br 803c7bc <ip_raw_close+0xa8>
}
/* unlink it from the list */
if (prev_ep)
803c788: e0bfff17 ldw r2,-4(fp)
803c78c: 10000426 beq r2,zero,803c7a0 <ip_raw_close+0x8c>
prev_ep = curr_ep->ipr_next;
803c790: e0bffe17 ldw r2,-8(fp)
803c794: 10800017 ldw r2,0(r2)
803c798: e0bfff15 stw r2,-4(fp)
803c79c: 00000306 br 803c7ac <ip_raw_close+0x98>
else
ipraw_eps = curr_ep->ipr_next;
803c7a0: e0bffe17 ldw r2,-8(fp)
803c7a4: 10800017 ldw r2,0(r2)
803c7a8: d0a09b15 stw r2,-32148(gp)
/* free its storage */
IEP_FREE(curr_ep);
803c7ac: e13ffe17 ldw r4,-8(fp)
803c7b0: 80298600 call 8029860 <npfree>
/* and return */
UNLOCK_NET_RESOURCE(NET_RESID);
803c7b4: 0009883a mov r4,zero
803c7b8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
803c7bc: e037883a mov sp,fp
803c7c0: dfc00117 ldw ra,4(sp)
803c7c4: df000017 ldw fp,0(sp)
803c7c8: dec00204 addi sp,sp,8
803c7cc: f800283a ret
0803c7d0 <ip_raw_input>:
* freed); else an error code indicating that the
* received packet was not accepted/processed
*/
int
ip_raw_input(PACKET p)
{
803c7d0: defff604 addi sp,sp,-40
803c7d4: dfc00915 stw ra,36(sp)
803c7d8: df000815 stw fp,32(sp)
803c7dc: df000804 addi fp,sp,32
803c7e0: e13ff815 stw r4,-32(fp)
struct ip * pip; /* the internet header */
struct ipraw_ep * ep;
struct ipraw_ep * next_ep;
struct ipraw_ep * matched_ep = NULL;
803c7e4: e03ffe15 stw zero,-8(fp)
int err;
int delivered;
/* start out expecting to not deliver the packet */
delivered = 0;
803c7e8: e03ffc15 stw zero,-16(fp)
/* get a pointer to the received packet's IP header */
pip = (struct ip *)(p->nb_prot);
803c7ec: e0bff817 ldw r2,-32(fp)
803c7f0: 10800317 ldw r2,12(r2)
803c7f4: e0bffb15 stw r2,-20(fp)
/* search the list of raw-IP endpoints for matches */
for (ep = ipraw_eps; ep != NULL; ep = next_ep)
803c7f8: d0a09b17 ldw r2,-32148(gp)
803c7fc: e0bfff15 stw r2,-4(fp)
803c800: 00004c06 br 803c934 <ip_raw_input+0x164>
{
/* keep track of next endpoint -- defense against upcall
* function closing its own endpoint
*/
next_ep = ep->ipr_next;
803c804: e0bfff17 ldw r2,-4(fp)
803c808: 10800017 ldw r2,0(r2)
803c80c: e0bffa15 stw r2,-24(fp)
/* if this packet doesn't match the endpoint's filters (IP
* protocol ID, locally-bound address, connected-peer address)
* then skip ahead to next endpoint
*/
if (ep->ipr_prot && ep->ipr_prot != pip->ip_prot)
803c810: e0bfff17 ldw r2,-4(fp)
803c814: 10800503 ldbu r2,20(r2)
803c818: 10803fcc andi r2,r2,255
803c81c: 10000726 beq r2,zero,803c83c <ip_raw_input+0x6c>
803c820: e0bfff17 ldw r2,-4(fp)
803c824: 10c00503 ldbu r3,20(r2)
803c828: e0bffb17 ldw r2,-20(fp)
803c82c: 10800243 ldbu r2,9(r2)
803c830: 18c03fcc andi r3,r3,255
803c834: 10803fcc andi r2,r2,255
803c838: 1880371e bne r3,r2,803c918 <ip_raw_input+0x148>
continue;
if (ep->ipr_laddr && ep->ipr_laddr != pip->ip_dest)
803c83c: e0bfff17 ldw r2,-4(fp)
803c840: 10800117 ldw r2,4(r2)
803c844: 10000526 beq r2,zero,803c85c <ip_raw_input+0x8c>
803c848: e0bfff17 ldw r2,-4(fp)
803c84c: 10c00117 ldw r3,4(r2)
803c850: e0bffb17 ldw r2,-20(fp)
803c854: 10800417 ldw r2,16(r2)
803c858: 1880311e bne r3,r2,803c920 <ip_raw_input+0x150>
continue;
if (ep->ipr_faddr && ep->ipr_faddr != pip->ip_src)
803c85c: e0bfff17 ldw r2,-4(fp)
803c860: 10800217 ldw r2,8(r2)
803c864: 10000526 beq r2,zero,803c87c <ip_raw_input+0xac>
803c868: e0bfff17 ldw r2,-4(fp)
803c86c: 10c00217 ldw r3,8(r2)
803c870: e0bffb17 ldw r2,-20(fp)
803c874: 10800317 ldw r2,12(r2)
803c878: 18802b1e bne r3,r2,803c928 <ip_raw_input+0x158>
continue;
/* if the endpoint has a receive upcall function,
* keep track of the endpoint
*/
if (ep->ipr_rcv != NULL)
803c87c: e0bfff17 ldw r2,-4(fp)
803c880: 10800317 ldw r2,12(r2)
803c884: 10002926 beq r2,zero,803c92c <ip_raw_input+0x15c>
* copy the packet into a new buffer,
* and pass the new copy to the previously matched
* endpoint's upcall function
* before we forget the previous endpoint
*/
if ((matched_ep != NULL) && (matched_ep->ipr_rcv != NULL))
803c888: e0bffe17 ldw r2,-8(fp)
803c88c: 10001f26 beq r2,zero,803c90c <ip_raw_input+0x13c>
803c890: e0bffe17 ldw r2,-8(fp)
803c894: 10800317 ldw r2,12(r2)
803c898: 10001c26 beq r2,zero,803c90c <ip_raw_input+0x13c>
{
PACKET p2;
p2 = ip_copypkt(p);
803c89c: e13ff817 ldw r4,-32(fp)
803c8a0: 803b53c0 call 803b53c <ip_copypkt>
803c8a4: e0bff915 stw r2,-28(fp)
if (p2)
803c8a8: e0bff917 ldw r2,-28(fp)
803c8ac: 10001726 beq r2,zero,803c90c <ip_raw_input+0x13c>
{
UNLOCK_NET_RESOURCE(NET_RESID);
803c8b0: 0009883a mov r4,zero
803c8b4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
err = ((*matched_ep->ipr_rcv)(p2, matched_ep->ipr_data));
803c8b8: e0bffe17 ldw r2,-8(fp)
803c8bc: 10800317 ldw r2,12(r2)
803c8c0: e0fffe17 ldw r3,-8(fp)
803c8c4: 18c00417 ldw r3,16(r3)
803c8c8: 180b883a mov r5,r3
803c8cc: e13ff917 ldw r4,-28(fp)
803c8d0: 103ee83a callr r2
803c8d4: e0bffd15 stw r2,-12(fp)
LOCK_NET_RESOURCE(NET_RESID);
803c8d8: 0009883a mov r4,zero
803c8dc: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
if (err)
803c8e0: e0bffd17 ldw r2,-12(fp)
803c8e4: 10000726 beq r2,zero,803c904 <ip_raw_input+0x134>
{
LOCK_NET_RESOURCE(FREEQ_RESID);
803c8e8: 01000084 movi r4,2
803c8ec: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p2);
803c8f0: e13ff917 ldw r4,-28(fp)
803c8f4: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803c8f8: 01000084 movi r4,2
803c8fc: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
803c900: 00000206 br 803c90c <ip_raw_input+0x13c>
}
else
delivered = 1;
803c904: 00800044 movi r2,1
803c908: e0bffc15 stw r2,-16(fp)
}
}
matched_ep = ep;
803c90c: e0bfff17 ldw r2,-4(fp)
803c910: e0bffe15 stw r2,-8(fp)
803c914: 00000506 br 803c92c <ip_raw_input+0x15c>
continue;
803c918: 0001883a nop
803c91c: 00000306 br 803c92c <ip_raw_input+0x15c>
continue;
803c920: 0001883a nop
803c924: 00000106 br 803c92c <ip_raw_input+0x15c>
continue;
803c928: 0001883a nop
for (ep = ipraw_eps; ep != NULL; ep = next_ep)
803c92c: e0bffa17 ldw r2,-24(fp)
803c930: e0bfff15 stw r2,-4(fp)
803c934: e0bfff17 ldw r2,-4(fp)
803c938: 103fb21e bne r2,zero,803c804 <ip_raw_input+0x34>
/* if we matched an endpoint,
* pass the packet to its upcall function
* otherwise, return ENP_PARAM to indicate that the
* packet was not processed and freed
*/
if ((matched_ep != NULL) && (matched_ep->ipr_rcv != NULL))
803c93c: e0bffe17 ldw r2,-8(fp)
803c940: 10001426 beq r2,zero,803c994 <ip_raw_input+0x1c4>
803c944: e0bffe17 ldw r2,-8(fp)
803c948: 10800317 ldw r2,12(r2)
803c94c: 10001126 beq r2,zero,803c994 <ip_raw_input+0x1c4>
{
UNLOCK_NET_RESOURCE(NET_RESID);
803c950: 0009883a mov r4,zero
803c954: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
err = ((*matched_ep->ipr_rcv)(p, matched_ep->ipr_data));
803c958: e0bffe17 ldw r2,-8(fp)
803c95c: 10800317 ldw r2,12(r2)
803c960: e0fffe17 ldw r3,-8(fp)
803c964: 18c00417 ldw r3,16(r3)
803c968: 180b883a mov r5,r3
803c96c: e13ff817 ldw r4,-32(fp)
803c970: 103ee83a callr r2
803c974: e0bffd15 stw r2,-12(fp)
LOCK_NET_RESOURCE(NET_RESID);
803c978: 0009883a mov r4,zero
803c97c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
if (err == 0)
803c980: e0bffd17 ldw r2,-12(fp)
803c984: 10000a1e bne r2,zero,803c9b0 <ip_raw_input+0x1e0>
delivered = 1;
803c988: 00800044 movi r2,1
803c98c: e0bffc15 stw r2,-16(fp)
if (err == 0)
803c990: 00000706 br 803c9b0 <ip_raw_input+0x1e0>
}
else
{
err = ENP_PARAM;
803c994: 00bffd84 movi r2,-10
803c998: e0bffd15 stw r2,-12(fp)
ip_mib.ipUnknownProtos++;
803c99c: 008201b4 movhi r2,2054
803c9a0: 10b95517 ldw r2,-6828(r2)
803c9a4: 10c00044 addi r3,r2,1
803c9a8: 008201b4 movhi r2,2054
803c9ac: 10f95515 stw r3,-6828(r2)
}
if (!delivered)
803c9b0: e0bffc17 ldw r2,-16(fp)
803c9b4: 1000051e bne r2,zero,803c9cc <ip_raw_input+0x1fc>
ip_mib.ipInDelivers--;
803c9b8: 008201b4 movhi r2,2054
803c9bc: 10b95717 ldw r2,-6820(r2)
803c9c0: 10ffffc4 addi r3,r2,-1
803c9c4: 008201b4 movhi r2,2054
803c9c8: 10f95715 stw r3,-6820(r2)
return err;
803c9cc: e0bffd17 ldw r2,-12(fp)
}
803c9d0: e037883a mov sp,fp
803c9d4: dfc00117 ldw ra,4(sp)
803c9d8: df000017 ldw fp,0(sp)
803c9dc: dec00204 addi sp,sp,8
803c9e0: f800283a ret
0803c9e4 <ip_raw_alloc>:
* inclhdr is zero.
*/
PACKET
ip_raw_alloc(int reqlen, int hdrincl)
{
803c9e4: defffa04 addi sp,sp,-24
803c9e8: dfc00515 stw ra,20(sp)
803c9ec: df000415 stw fp,16(sp)
803c9f0: df000404 addi fp,sp,16
803c9f4: e13ffd15 stw r4,-12(fp)
803c9f8: e17ffc15 stw r5,-16(fp)
int len;
PACKET p;
len = (reqlen + 1) & ~1;
803c9fc: e0bffd17 ldw r2,-12(fp)
803ca00: 10c00044 addi r3,r2,1
803ca04: 00bfff84 movi r2,-2
803ca08: 1884703a and r2,r3,r2
803ca0c: e0bfff15 stw r2,-4(fp)
if (!hdrincl)
803ca10: e0bffc17 ldw r2,-16(fp)
803ca14: 1000031e bne r2,zero,803ca24 <ip_raw_alloc+0x40>
len += IPHSIZ;
803ca18: e0bfff17 ldw r2,-4(fp)
803ca1c: 10800504 addi r2,r2,20
803ca20: e0bfff15 stw r2,-4(fp)
LOCK_NET_RESOURCE(FREEQ_RESID);
803ca24: 01000084 movi r4,2
803ca28: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
p = pk_alloc(len + MaxLnh);
803ca2c: d0e06417 ldw r3,-32368(gp)
803ca30: e0bfff17 ldw r2,-4(fp)
803ca34: 1885883a add r2,r3,r2
803ca38: 1009883a mov r4,r2
803ca3c: 80284340 call 8028434 <pk_alloc>
803ca40: e0bffe15 stw r2,-8(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803ca44: 01000084 movi r4,2
803ca48: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (p)
803ca4c: e0bffe17 ldw r2,-8(fp)
803ca50: 10000c26 beq r2,zero,803ca84 <ip_raw_alloc+0xa0>
{
if (!hdrincl)
803ca54: e0bffc17 ldw r2,-16(fp)
803ca58: 10000a1e bne r2,zero,803ca84 <ip_raw_alloc+0xa0>
{
p->nb_prot += IPHSIZ;
803ca5c: e0bffe17 ldw r2,-8(fp)
803ca60: 10800317 ldw r2,12(r2)
803ca64: 10c00504 addi r3,r2,20
803ca68: e0bffe17 ldw r2,-8(fp)
803ca6c: 10c00315 stw r3,12(r2)
p->nb_plen -= IPHSIZ;
803ca70: e0bffe17 ldw r2,-8(fp)
803ca74: 10800417 ldw r2,16(r2)
803ca78: 10fffb04 addi r3,r2,-20
803ca7c: e0bffe17 ldw r2,-8(fp)
803ca80: 10c00415 stw r3,16(r2)
}
}
return p;
803ca84: e0bffe17 ldw r2,-8(fp)
}
803ca88: e037883a mov sp,fp
803ca8c: dfc00117 ldw ra,4(sp)
803ca90: df000017 ldw fp,0(sp)
803ca94: dec00204 addi sp,sp,8
803ca98: f800283a ret
0803ca9c <ip_raw_free>:
* RETURNS: void
*/
void
ip_raw_free(PACKET p)
{
803ca9c: defffd04 addi sp,sp,-12
803caa0: dfc00215 stw ra,8(sp)
803caa4: df000115 stw fp,4(sp)
803caa8: df000104 addi fp,sp,4
803caac: e13fff15 stw r4,-4(fp)
LOCK_NET_RESOURCE(FREEQ_RESID);
803cab0: 01000084 movi r4,2
803cab4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803cab8: e13fff17 ldw r4,-4(fp)
803cabc: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803cac0: 01000084 movi r4,2
803cac4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
803cac8: 0001883a nop
803cacc: e037883a mov sp,fp
803cad0: dfc00117 ldw ra,4(sp)
803cad4: df000017 ldw fp,0(sp)
803cad8: dec00204 addi sp,sp,8
803cadc: f800283a ret
0803cae0 <ip_raw_maxalloc>:
* for
*/
int
ip_raw_maxalloc(int hdrincl)
{
803cae0: defffd04 addi sp,sp,-12
803cae4: df000215 stw fp,8(sp)
803cae8: df000204 addi fp,sp,8
803caec: e13ffe15 stw r4,-8(fp)
int len;
len = bigbufsiz - MaxLnh;
803caf0: d0a01917 ldw r2,-32668(gp)
803caf4: d0e06417 ldw r3,-32368(gp)
803caf8: 10c5c83a sub r2,r2,r3
803cafc: e0bfff15 stw r2,-4(fp)
if (!hdrincl)
803cb00: e0bffe17 ldw r2,-8(fp)
803cb04: 1000031e bne r2,zero,803cb14 <ip_raw_maxalloc+0x34>
len -= IPHSIZ;
803cb08: e0bfff17 ldw r2,-4(fp)
803cb0c: 10bffb04 addi r2,r2,-20
803cb10: e0bfff15 stw r2,-4(fp)
return len;
803cb14: e0bfff17 ldw r2,-4(fp)
}
803cb18: e037883a mov sp,fp
803cb1c: df000017 ldw fp,0(sp)
803cb20: dec00104 addi sp,sp,4
803cb24: f800283a ret
0803cb28 <rt_lookup>:
* entry was found.
*/
RTMIB
rt_lookup(ip_addr host)
{
803cb28: defff804 addi sp,sp,-32
803cb2c: df000715 stw fp,28(sp)
803cb30: df000704 addi fp,sp,28
803cb34: e13ff915 stw r4,-28(fp)
RTMIB rtp;
RTMIB netmatch;
unsigned char max_bits_matched = 0;
803cb38: e03ffdc5 stb zero,-9(fp)
unsigned char curr_bits_matched;
ip_addr entry_mask;
unsigned long int bitcount_mask;
unsigned long int extracted_bit;
netmatch = NULL;
803cb3c: e03ffe15 stw zero,-8(fp)
/* see if it's in the route table. */
for (rtp = rt_mib; rtp < rt_mib + ipRoutes; rtp++)
803cb40: d0a09517 ldw r2,-32172(gp)
803cb44: e0bfff15 stw r2,-4(fp)
803cb48: 00003a06 br 803cc34 <rt_lookup+0x10c>
{
if (rtp->ipRouteNextHop == 0L) /* skip over empty entries */
803cb4c: e0bfff17 ldw r2,-4(fp)
803cb50: 10800617 ldw r2,24(r2)
803cb54: 10003326 beq r2,zero,803cc24 <rt_lookup+0xfc>
#ifdef RIP_SUPPORT
/* skip RIP private entries */
if (rtp->ipRouteFlags & RIP_PRIVATE)
continue;
#endif
entry_mask = rtp->ipRouteMask;
803cb58: e0bfff17 ldw r2,-4(fp)
803cb5c: 10800a17 ldw r2,40(r2)
803cb60: e0bffb15 stw r2,-20(fp)
/* check to see if we have a match in the route table */
if ((rtp->ipRouteDest & entry_mask) == (host & entry_mask))
803cb64: e0bfff17 ldw r2,-4(fp)
803cb68: 10c00017 ldw r3,0(r2)
803cb6c: e0bff917 ldw r2,-28(fp)
803cb70: 1886f03a xor r3,r3,r2
803cb74: e0bffb17 ldw r2,-20(fp)
803cb78: 1884703a and r2,r3,r2
803cb7c: 10002a1e bne r2,zero,803cc28 <rt_lookup+0x100>
{
/* check to see if current match is better than the previous best
* by computing the number of bits that matched */
for (curr_bits_matched = 0, bitcount_mask = 0x80000000; bitcount_mask > 0; bitcount_mask >>= 1)
803cb80: e03ffd85 stb zero,-10(fp)
803cb84: 00a00034 movhi r2,32768
803cb88: e0bffc15 stw r2,-16(fp)
803cb8c: 00001806 br 803cbf0 <rt_lookup+0xc8>
{
extracted_bit = (ntohl(entry_mask)) & bitcount_mask;
803cb90: e0bffb17 ldw r2,-20(fp)
803cb94: 1006d63a srli r3,r2,24
803cb98: e0bffb17 ldw r2,-20(fp)
803cb9c: 1004d23a srli r2,r2,8
803cba0: 10bfc00c andi r2,r2,65280
803cba4: 1886b03a or r3,r3,r2
803cba8: e0bffb17 ldw r2,-20(fp)
803cbac: 1004923a slli r2,r2,8
803cbb0: 10803fec andhi r2,r2,255
803cbb4: 1886b03a or r3,r3,r2
803cbb8: e0bffb17 ldw r2,-20(fp)
803cbbc: 1004963a slli r2,r2,24
803cbc0: 1884b03a or r2,r3,r2
803cbc4: e0fffc17 ldw r3,-16(fp)
803cbc8: 1884703a and r2,r3,r2
803cbcc: e0bffa15 stw r2,-24(fp)
if (extracted_bit) ++curr_bits_matched;
803cbd0: e0bffa17 ldw r2,-24(fp)
803cbd4: 10000326 beq r2,zero,803cbe4 <rt_lookup+0xbc>
803cbd8: e0bffd83 ldbu r2,-10(fp)
803cbdc: 10800044 addi r2,r2,1
803cbe0: e0bffd85 stb r2,-10(fp)
for (curr_bits_matched = 0, bitcount_mask = 0x80000000; bitcount_mask > 0; bitcount_mask >>= 1)
803cbe4: e0bffc17 ldw r2,-16(fp)
803cbe8: 1004d07a srli r2,r2,1
803cbec: e0bffc15 stw r2,-16(fp)
803cbf0: e0bffc17 ldw r2,-16(fp)
803cbf4: 103fe61e bne r2,zero,803cb90 <rt_lookup+0x68>
}
if (curr_bits_matched > max_bits_matched)
803cbf8: e0bffd83 ldbu r2,-10(fp)
803cbfc: e0fffdc3 ldbu r3,-9(fp)
803cc00: 1880092e bgeu r3,r2,803cc28 <rt_lookup+0x100>
{
/* save a pointer to the best match */
max_bits_matched = curr_bits_matched;
803cc04: e0bffd83 ldbu r2,-10(fp)
803cc08: e0bffdc5 stb r2,-9(fp)
netmatch = rtp;
803cc0c: e0bfff17 ldw r2,-4(fp)
803cc10: e0bffe15 stw r2,-8(fp)
/* if all 32 bits match, stop searching the route table */
if (max_bits_matched == 32)
803cc14: e0bffdc3 ldbu r2,-9(fp)
803cc18: 10800818 cmpnei r2,r2,32
803cc1c: 10000c26 beq r2,zero,803cc50 <rt_lookup+0x128>
803cc20: 00000106 br 803cc28 <rt_lookup+0x100>
continue;
803cc24: 0001883a nop
for (rtp = rt_mib; rtp < rt_mib + ipRoutes; rtp++)
803cc28: e0bfff17 ldw r2,-4(fp)
803cc2c: 10800f04 addi r2,r2,60
803cc30: e0bfff15 stw r2,-4(fp)
803cc34: d0e09517 ldw r3,-32172(gp)
803cc38: d0a03017 ldw r2,-32576(gp)
803cc3c: 10800f24 muli r2,r2,60
803cc40: 1885883a add r2,r3,r2
803cc44: e0ffff17 ldw r3,-4(fp)
803cc48: 18bfc036 bltu r3,r2,803cb4c <rt_lookup+0x24>
803cc4c: 00000106 br 803cc54 <rt_lookup+0x12c>
break;
803cc50: 0001883a nop
}
}
}
if (netmatch)
803cc54: e0bffe17 ldw r2,-8(fp)
803cc58: 10000326 beq r2,zero,803cc68 <rt_lookup+0x140>
netmatch->ipRouteAge = cticks; /* timestamp entry we used */
803cc5c: d0e07d17 ldw r3,-32268(gp)
803cc60: e0bffe17 ldw r2,-8(fp)
803cc64: 10c00915 stw r3,36(r2)
return netmatch;
803cc68: e0bffe17 ldw r2,-8(fp)
}
803cc6c: e037883a mov sp,fp
803cc70: df000017 ldw fp,0(sp)
803cc74: dec00104 addi sp,sp,4
803cc78: f800283a ret
0803cc7c <add_route>:
ip_addr dest, /* ultimate destination */
ip_addr mask, /* net mask, 0xFFFFFFFF if dest is host address */
ip_addr nexthop, /* where to forward to */
int iface, /* interface (net) for nexthop */
int prot) /* how we know it: icmp, table, etc */
{
803cc7c: defff704 addi sp,sp,-36
803cc80: dfc00815 stw ra,32(sp)
803cc84: df000715 stw fp,28(sp)
803cc88: df000704 addi fp,sp,28
803cc8c: e13ffc15 stw r4,-16(fp)
803cc90: e17ffb15 stw r5,-20(fp)
803cc94: e1bffa15 stw r6,-24(fp)
803cc98: e1fff915 stw r7,-28(fp)
RTMIB rtp; /* scratch route table entrry pointer */
RTMIB newrt; /* best entry for new route */
struct net * ifp; /* interface (net) for nexthop */
newrt = NULL; /* may be replaced with empty or more expendable entry */
803cc9c: e03ffe15 stw zero,-8(fp)
/* set the route interface pointer according to the index passed. This allows
* the passed index to be used to access dynamic interfaces, which do not appear
* in the nets[] array.
*/
ifp = if_getbynum(iface);
803cca0: e13ff917 ldw r4,-28(fp)
803cca4: 80240880 call 8024088 <if_getbynum>
803cca8: e0bffd15 stw r2,-12(fp)
if(!ifp)
803ccac: e0bffd17 ldw r2,-12(fp)
803ccb0: 1000021e bne r2,zero,803ccbc <add_route+0x40>
return NULL;
803ccb4: 0005883a mov r2,zero
803ccb8: 0000d406 br 803d00c <add_route+0x390>
if (rt_mib == NULL)
803ccbc: d0a09517 ldw r2,-32172(gp)
803ccc0: 1000021e bne r2,zero,803cccc <add_route+0x50>
return NULL;
803ccc4: 0005883a mov r2,zero
803ccc8: 0000d006 br 803d00c <add_route+0x390>
/* Don't add null masks or IP addresses - they give false positives on
* net matches and don't belong here anyway.
*/
if((dest == 0) || (mask == 0))
803cccc: e0bffc17 ldw r2,-16(fp)
803ccd0: 10000226 beq r2,zero,803ccdc <add_route+0x60>
803ccd4: e0bffb17 ldw r2,-20(fp)
803ccd8: 1000221e bne r2,zero,803cd64 <add_route+0xe8>
{
dtrap(); /* bad configuration? */
803ccdc: 8028cd40 call 8028cd4 <dtrap>
dprintf("add_route: rejected null parm; dest: %lx, mask: %lx\n",
htonl(dest), htonl(mask) );
803cce0: e0bffc17 ldw r2,-16(fp)
803cce4: 1006d63a srli r3,r2,24
803cce8: e0bffc17 ldw r2,-16(fp)
803ccec: 1004d23a srli r2,r2,8
803ccf0: 10bfc00c andi r2,r2,65280
803ccf4: 1886b03a or r3,r3,r2
803ccf8: e0bffc17 ldw r2,-16(fp)
803ccfc: 1004923a slli r2,r2,8
803cd00: 10803fec andhi r2,r2,255
803cd04: 1886b03a or r3,r3,r2
803cd08: e0bffc17 ldw r2,-16(fp)
803cd0c: 1004963a slli r2,r2,24
dprintf("add_route: rejected null parm; dest: %lx, mask: %lx\n",
803cd10: 1888b03a or r4,r3,r2
htonl(dest), htonl(mask) );
803cd14: e0bffb17 ldw r2,-20(fp)
803cd18: 1006d63a srli r3,r2,24
803cd1c: e0bffb17 ldw r2,-20(fp)
803cd20: 1004d23a srli r2,r2,8
803cd24: 10bfc00c andi r2,r2,65280
803cd28: 1886b03a or r3,r3,r2
803cd2c: e0bffb17 ldw r2,-20(fp)
803cd30: 1004923a slli r2,r2,8
803cd34: 10803fec andhi r2,r2,255
803cd38: 1886b03a or r3,r3,r2
803cd3c: e0bffb17 ldw r2,-20(fp)
803cd40: 1004963a slli r2,r2,24
dprintf("add_route: rejected null parm; dest: %lx, mask: %lx\n",
803cd44: 1884b03a or r2,r3,r2
803cd48: 100d883a mov r6,r2
803cd4c: 200b883a mov r5,r4
803cd50: 01020174 movhi r4,2053
803cd54: 212ce604 addi r4,r4,-19560
803cd58: 8002c780 call 8002c78 <printf>
return NULL;
803cd5c: 0005883a mov r2,zero
803cd60: 0000aa06 br 803d00c <add_route+0x390>
}
/* if it's already in the route table, just update it. */
for (rtp = rt_mib; rtp < rt_mib + ipRoutes; rtp++)
803cd64: d0a09517 ldw r2,-32172(gp)
803cd68: e0bfff15 stw r2,-4(fp)
803cd6c: 00006406 br 803cf00 <add_route+0x284>
{
if (rtp->ipRouteDest == dest) /* found existing entry for target */
803cd70: e0bfff17 ldw r2,-4(fp)
803cd74: 10800017 ldw r2,0(r2)
803cd78: e0fffc17 ldw r3,-16(fp)
803cd7c: 1880151e bne r3,r2,803cdd4 <add_route+0x158>
{
rtp->ipRouteNextHop = nexthop; /* fix entry */
803cd80: e0bfff17 ldw r2,-4(fp)
803cd84: e0fffa17 ldw r3,-24(fp)
803cd88: 10c00615 stw r3,24(r2)
rtp->ipRouteAge = cticks; /* timestamp it */
803cd8c: d0e07d17 ldw r3,-32268(gp)
803cd90: e0bfff17 ldw r2,-4(fp)
803cd94: 10c00915 stw r3,36(r2)
/* set the rfc1213 1-based SNMP-ish interface index */
rtp->ipRouteIfIndex = (long)(iface) + 1;
803cd98: e0bff917 ldw r2,-28(fp)
803cd9c: 10c00044 addi r3,r2,1
803cda0: e0bfff17 ldw r2,-4(fp)
803cda4: 10c00115 stw r3,4(r2)
rtp->ipRouteProto = prot; /* icmp, or whatever */
803cda8: e0bfff17 ldw r2,-4(fp)
803cdac: e0c00217 ldw r3,8(fp)
803cdb0: 10c00815 stw r3,32(r2)
rtp->ipRouteMask = mask;
803cdb4: e0bfff17 ldw r2,-4(fp)
803cdb8: e0fffb17 ldw r3,-20(fp)
803cdbc: 10c00a15 stw r3,40(r2)
rtp->ifp = ifp;
803cdc0: e0bfff17 ldw r2,-4(fp)
803cdc4: e0fffd17 ldw r3,-12(fp)
803cdc8: 10c00e15 stw r3,56(r2)
return(rtp); /* just update and exit */
803cdcc: e0bfff17 ldw r2,-4(fp)
803cdd0: 00008e06 br 803d00c <add_route+0x390>
}
/* if we didn't find empty slot yet, look for good slot to recycle */
if (!newrt || (newrt->ipRouteProto != 0))
803cdd4: e0bffe17 ldw r2,-8(fp)
803cdd8: 10000326 beq r2,zero,803cde8 <add_route+0x16c>
803cddc: e0bffe17 ldw r2,-8(fp)
803cde0: 10800817 ldw r2,32(r2)
803cde4: 10004326 beq r2,zero,803cef4 <add_route+0x278>
{
if (!rtp->ipRouteNextHop) /* found empty slot for use */
803cde8: e0bfff17 ldw r2,-4(fp)
803cdec: 10800617 ldw r2,24(r2)
803cdf0: 1000051e bne r2,zero,803ce08 <add_route+0x18c>
{
newrt = rtp; /* record empty route for use */
803cdf4: e0bfff17 ldw r2,-4(fp)
803cdf8: e0bffe15 stw r2,-8(fp)
newrt->ipRouteProto = 0;
803cdfc: e0bffe17 ldw r2,-8(fp)
803ce00: 10000815 stw zero,32(r2)
continue;
803ce04: 00003b06 br 803cef4 <add_route+0x278>
}
/* else see if the new route has higher priority than this slot: */
if (rtp_priority[prot] >= rtp_priority[rtp->ipRouteProto])
803ce08: e0c00217 ldw r3,8(fp)
803ce0c: 00820174 movhi r2,2053
803ce10: 1885883a add r2,r3,r2
803ce14: 11325603 ldbu r4,-13992(r2)
803ce18: e0bfff17 ldw r2,-4(fp)
803ce1c: 10c00817 ldw r3,32(r2)
803ce20: 00820174 movhi r2,2053
803ce24: 1885883a add r2,r3,r2
803ce28: 10b25603 ldbu r2,-13992(r2)
803ce2c: 20c03fcc andi r3,r4,255
803ce30: 10803fcc andi r2,r2,255
803ce34: 18802f36 bltu r3,r2,803cef4 <add_route+0x278>
{
if (!newrt)
803ce38: e0bffe17 ldw r2,-8(fp)
803ce3c: 1000031e bne r2,zero,803ce4c <add_route+0x1d0>
{
newrt = rtp;
803ce40: e0bfff17 ldw r2,-4(fp)
803ce44: e0bffe15 stw r2,-8(fp)
continue;
803ce48: 00002a06 br 803cef4 <add_route+0x278>
}
/* see if rtp is less important then newrtp */
if (rtp_priority[rtp->ipRouteProto] <
803ce4c: e0bfff17 ldw r2,-4(fp)
803ce50: 10c00817 ldw r3,32(r2)
803ce54: 00820174 movhi r2,2053
803ce58: 1885883a add r2,r3,r2
803ce5c: 11325603 ldbu r4,-13992(r2)
rtp_priority[newrt->ipRouteProto])
803ce60: e0bffe17 ldw r2,-8(fp)
803ce64: 10c00817 ldw r3,32(r2)
803ce68: 00820174 movhi r2,2053
803ce6c: 1885883a add r2,r3,r2
803ce70: 10b25603 ldbu r2,-13992(r2)
if (rtp_priority[rtp->ipRouteProto] <
803ce74: 20c03fcc andi r3,r4,255
803ce78: 10803fcc andi r2,r2,255
803ce7c: 1880032e bgeu r3,r2,803ce8c <add_route+0x210>
{
newrt = rtp; /* save lower priority entry for recycle */
803ce80: e0bfff17 ldw r2,-4(fp)
803ce84: e0bffe15 stw r2,-8(fp)
803ce88: 00001a06 br 803cef4 <add_route+0x278>
}
else if(rtp_priority[rtp->ipRouteProto] ==
803ce8c: e0bfff17 ldw r2,-4(fp)
803ce90: 10c00817 ldw r3,32(r2)
803ce94: 00820174 movhi r2,2053
803ce98: 1885883a add r2,r3,r2
803ce9c: 11325603 ldbu r4,-13992(r2)
rtp_priority[newrt->ipRouteProto])
803cea0: e0bffe17 ldw r2,-8(fp)
803cea4: 10c00817 ldw r3,32(r2)
803cea8: 00820174 movhi r2,2053
803ceac: 1885883a add r2,r3,r2
803ceb0: 10b25603 ldbu r2,-13992(r2)
else if(rtp_priority[rtp->ipRouteProto] ==
803ceb4: 20c03fcc andi r3,r4,255
803ceb8: 10803fcc andi r2,r2,255
803cebc: 18800d1e bne r3,r2,803cef4 <add_route+0x278>
{
/* if equal priority, keep the older entry for deletion */
if (c_older(rtp->ipRouteAge, newrt->ipRouteAge) == rtp->ipRouteAge)
803cec0: e0bfff17 ldw r2,-4(fp)
803cec4: 10c00917 ldw r3,36(r2)
803cec8: e0bffe17 ldw r2,-8(fp)
803cecc: 10800917 ldw r2,36(r2)
803ced0: 100b883a mov r5,r2
803ced4: 1809883a mov r4,r3
803ced8: 8024d640 call 8024d64 <c_older>
803cedc: 1007883a mov r3,r2
803cee0: e0bfff17 ldw r2,-4(fp)
803cee4: 10800917 ldw r2,36(r2)
803cee8: 1880021e bne r3,r2,803cef4 <add_route+0x278>
newrt = rtp; /* got an older one */
803ceec: e0bfff17 ldw r2,-4(fp)
803cef0: e0bffe15 stw r2,-8(fp)
for (rtp = rt_mib; rtp < rt_mib + ipRoutes; rtp++)
803cef4: e0bfff17 ldw r2,-4(fp)
803cef8: 10800f04 addi r2,r2,60
803cefc: e0bfff15 stw r2,-4(fp)
803cf00: d0e09517 ldw r3,-32172(gp)
803cf04: d0a03017 ldw r2,-32576(gp)
803cf08: 10800f24 muli r2,r2,60
803cf0c: 1885883a add r2,r3,r2
803cf10: e0ffff17 ldw r3,-4(fp)
803cf14: 18bf9636 bltu r3,r2,803cd70 <add_route+0xf4>
}
}
}
/* fall to here if not in table: create a new route */
if (newrt) /* did we find an empty or lower priority route entry? */
803cf18: e0bffe17 ldw r2,-8(fp)
803cf1c: 10002826 beq r2,zero,803cfc0 <add_route+0x344>
rtp = newrt; /* create new entry in lowest priority slot */
803cf20: e0bffe17 ldw r2,-8(fp)
803cf24: e0bfff15 stw r2,-4(fp)
else /* all slots have higher priority, new entry looses */
return NULL;
/* set default value in new route entry, caller can modiy further. */
rtp->ifp = ifp;
803cf28: e0bfff17 ldw r2,-4(fp)
803cf2c: e0fffd17 ldw r3,-12(fp)
803cf30: 10c00e15 stw r3,56(r2)
rtp->ipRouteDest = dest;
803cf34: e0bfff17 ldw r2,-4(fp)
803cf38: e0fffc17 ldw r3,-16(fp)
803cf3c: 10c00015 stw r3,0(r2)
rtp->ipRouteIfIndex = (long)(if_netnumber(ifp)) + 1; /* set interface number */
803cf40: e13ffd17 ldw r4,-12(fp)
803cf44: 80252fc0 call 80252fc <if_netnumber>
803cf48: 10c00044 addi r3,r2,1
803cf4c: e0bfff17 ldw r2,-4(fp)
803cf50: 10c00115 stw r3,4(r2)
rtp->ipRouteMetric1 = ip_mib.ipDefaultTTL;
803cf54: 008201b4 movhi r2,2054
803cf58: 10b95017 ldw r2,-6848(r2)
803cf5c: 1007883a mov r3,r2
803cf60: e0bfff17 ldw r2,-4(fp)
803cf64: 10c00215 stw r3,8(r2)
rtp->ipRouteMetric2 = -1;
803cf68: e0bfff17 ldw r2,-4(fp)
803cf6c: 00ffffc4 movi r3,-1
803cf70: 10c00315 stw r3,12(r2)
rtp->ipRouteMetric3 = -1;
803cf74: e0bfff17 ldw r2,-4(fp)
803cf78: 00ffffc4 movi r3,-1
803cf7c: 10c00415 stw r3,16(r2)
rtp->ipRouteMetric4 = -1;
803cf80: e0bfff17 ldw r2,-4(fp)
803cf84: 00ffffc4 movi r3,-1
803cf88: 10c00515 stw r3,20(r2)
rtp->ipRouteNextHop = nexthop;
803cf8c: e0bfff17 ldw r2,-4(fp)
803cf90: e0fffa17 ldw r3,-24(fp)
803cf94: 10c00615 stw r3,24(r2)
rtp->ipRouteProto = prot; /* icmp, or whatever */
803cf98: e0bfff17 ldw r2,-4(fp)
803cf9c: e0c00217 ldw r3,8(fp)
803cfa0: 10c00815 stw r3,32(r2)
if ((dest & mask) == (nexthop & mask))
803cfa4: e0fffc17 ldw r3,-16(fp)
803cfa8: e0bffa17 ldw r2,-24(fp)
803cfac: 1886f03a xor r3,r3,r2
803cfb0: e0bffb17 ldw r2,-20(fp)
803cfb4: 1884703a and r2,r3,r2
803cfb8: 1000071e bne r2,zero,803cfd8 <add_route+0x35c>
803cfbc: 00000206 br 803cfc8 <add_route+0x34c>
return NULL;
803cfc0: 0005883a mov r2,zero
803cfc4: 00001106 br 803d00c <add_route+0x390>
rtp->ipRouteType = IPRT_DIRECT;
803cfc8: e0bfff17 ldw r2,-4(fp)
803cfcc: 00c000c4 movi r3,3
803cfd0: 10c00715 stw r3,28(r2)
803cfd4: 00000306 br 803cfe4 <add_route+0x368>
else
rtp->ipRouteType = IPRT_INDIRECT;
803cfd8: e0bfff17 ldw r2,-4(fp)
803cfdc: 00c00104 movi r3,4
803cfe0: 10c00715 stw r3,28(r2)
rtp->ipRouteAge = cticks; /* timestamp it */
803cfe4: d0e07d17 ldw r3,-32268(gp)
803cfe8: e0bfff17 ldw r2,-4(fp)
803cfec: 10c00915 stw r3,36(r2)
rtp->ipRouteMask = mask;
803cff0: e0bfff17 ldw r2,-4(fp)
803cff4: e0fffb17 ldw r3,-20(fp)
803cff8: 10c00a15 stw r3,40(r2)
rtp->ipRouteMetric5 = -1;
803cffc: e0bfff17 ldw r2,-4(fp)
803d000: 00ffffc4 movi r3,-1
803d004: 10c00b15 stw r3,44(r2)
return(rtp);
803d008: e0bfff17 ldw r2,-4(fp)
}
803d00c: e037883a mov sp,fp
803d010: dfc00117 ldw ra,4(sp)
803d014: df000017 ldw fp,0(sp)
803d018: dec00204 addi sp,sp,8
803d01c: f800283a ret
0803d020 <del_route>:
* RETURNS: Returns number of route table entries deleted.
*/
int
del_route(ip_addr dest, ip_addr mask, int iface)
{
803d020: defff804 addi sp,sp,-32
803d024: dfc00715 stw ra,28(sp)
803d028: df000615 stw fp,24(sp)
803d02c: df000604 addi fp,sp,24
803d030: e13ffc15 stw r4,-16(fp)
803d034: e17ffb15 stw r5,-20(fp)
803d038: e1bffa15 stw r6,-24(fp)
RTMIB rtp;
int retval = 0;
803d03c: e03ffe15 stw zero,-8(fp)
/* set the route interface pointer according to the index passed. This allows
* the passed index to be used to access dynamic interfaces, which do not appear
* in the nets[] array.
*/
if(iface == -1)
803d040: e0bffa17 ldw r2,-24(fp)
803d044: 10bfffd8 cmpnei r2,r2,-1
803d048: 1000021e bne r2,zero,803d054 <del_route+0x34>
ifp = NULL; /* wildcard */
803d04c: e03ffd15 stw zero,-12(fp)
803d050: 00000306 br 803d060 <del_route+0x40>
else
ifp = if_getbynum(iface);
803d054: e13ffa17 ldw r4,-24(fp)
803d058: 80240880 call 8024088 <if_getbynum>
803d05c: e0bffd15 stw r2,-12(fp)
if (rt_mib == NULL) /* Make sure we're up */
803d060: d0a09517 ldw r2,-32172(gp)
803d064: 1000021e bne r2,zero,803d070 <del_route+0x50>
return 0;
803d068: 0005883a mov r2,zero
803d06c: 00002c06 br 803d120 <del_route+0x100>
for (rtp = rt_mib; rtp < rt_mib + ipRoutes; rtp++)
803d070: d0a09517 ldw r2,-32172(gp)
803d074: e0bfff15 stw r2,-4(fp)
803d078: 00002206 br 803d104 <del_route+0xe4>
{
if (!rtp->ipRouteNextHop) /* empty slot */
803d07c: e0bfff17 ldw r2,-4(fp)
803d080: 10800617 ldw r2,24(r2)
803d084: 10001926 beq r2,zero,803d0ec <del_route+0xcc>
continue;
if(ifp != NULL && ifp != rtp->ifp)
803d088: e0bffd17 ldw r2,-12(fp)
803d08c: 10000426 beq r2,zero,803d0a0 <del_route+0x80>
803d090: e0bfff17 ldw r2,-4(fp)
803d094: 10800e17 ldw r2,56(r2)
803d098: e0fffd17 ldw r3,-12(fp)
803d09c: 1880151e bne r3,r2,803d0f4 <del_route+0xd4>
continue; /* interface didn't match */
if ((rtp->ipRouteDest & mask) == (dest & mask))
803d0a0: e0bfff17 ldw r2,-4(fp)
803d0a4: 10c00017 ldw r3,0(r2)
803d0a8: e0bffc17 ldw r2,-16(fp)
803d0ac: 1886f03a xor r3,r3,r2
803d0b0: e0bffb17 ldw r2,-20(fp)
803d0b4: 1884703a and r2,r3,r2
803d0b8: 1000071e bne r2,zero,803d0d8 <del_route+0xb8>
{
MEMSET(rtp, 0, sizeof(*rtp)); /* clear entry */
803d0bc: 01800f04 movi r6,60
803d0c0: 000b883a mov r5,zero
803d0c4: e13fff17 ldw r4,-4(fp)
803d0c8: 80088e40 call 80088e4 <memset>
retval++;
803d0cc: e0bffe17 ldw r2,-8(fp)
803d0d0: 10800044 addi r2,r2,1
803d0d4: e0bffe15 stw r2,-8(fp)
}
if (cachedRoute == rtp) /* clear cache if it's being deleted */
803d0d8: d0a09c17 ldw r2,-32144(gp)
803d0dc: e0ffff17 ldw r3,-4(fp)
803d0e0: 1880051e bne r3,r2,803d0f8 <del_route+0xd8>
cachedRoute = NULL;
803d0e4: d0209c15 stw zero,-32144(gp)
803d0e8: 00000306 br 803d0f8 <del_route+0xd8>
continue;
803d0ec: 0001883a nop
803d0f0: 00000106 br 803d0f8 <del_route+0xd8>
continue; /* interface didn't match */
803d0f4: 0001883a nop
for (rtp = rt_mib; rtp < rt_mib + ipRoutes; rtp++)
803d0f8: e0bfff17 ldw r2,-4(fp)
803d0fc: 10800f04 addi r2,r2,60
803d100: e0bfff15 stw r2,-4(fp)
803d104: d0e09517 ldw r3,-32172(gp)
803d108: d0a03017 ldw r2,-32576(gp)
803d10c: 10800f24 muli r2,r2,60
803d110: 1885883a add r2,r3,r2
803d114: e0ffff17 ldw r3,-4(fp)
803d118: 18bfd836 bltu r3,r2,803d07c <del_route+0x5c>
}
return retval;
803d11c: e0bffe17 ldw r2,-8(fp)
}
803d120: e037883a mov sp,fp
803d124: dfc00117 ldw ra,4(sp)
803d128: df000017 ldw fp,0(sp)
803d12c: dec00204 addi sp,sp,8
803d130: f800283a ret
0803d134 <udpdemux>:
* RETURNS: 0 if OK or ENP error code
*/
int
udpdemux(PACKET p)
{
803d134: deffec04 addi sp,sp,-80
803d138: dfc01315 stw ra,76(sp)
803d13c: df001215 stw fp,72(sp)
803d140: df001204 addi fp,sp,72
803d144: e13ff215 stw r4,-56(fp)
unsigned short osum, xsum; /* scratch checksum holders */
unsigned plen; /* packet length */
int e; /* general error holder */
/* First let's verify that it's a valid UDP packet. */
pip = ip_head(p); /* we'll need IP header info */
803d148: e0bff217 ldw r2,-56(fp)
803d14c: 10800317 ldw r2,12(r2)
803d150: e0bffb15 stw r2,-20(fp)
pup = (struct udp*)ip_data(pip); /* also need UDP header */
803d154: e0bffb17 ldw r2,-20(fp)
803d158: 10800003 ldbu r2,0(r2)
803d15c: 10803fcc andi r2,r2,255
803d160: 100490ba slli r2,r2,2
803d164: 10800f0c andi r2,r2,60
803d168: e0fffb17 ldw r3,-20(fp)
803d16c: 1885883a add r2,r3,r2
803d170: e0bffa15 stw r2,-24(fp)
plen = htons(pup->ud_len);
803d174: e0bffa17 ldw r2,-24(fp)
803d178: 1080010b ldhu r2,4(r2)
803d17c: 10bfffcc andi r2,r2,65535
803d180: 1004d23a srli r2,r2,8
803d184: 10bfffcc andi r2,r2,65535
803d188: 10c03fcc andi r3,r2,255
803d18c: e0bffa17 ldw r2,-24(fp)
803d190: 1080010b ldhu r2,4(r2)
803d194: 10bfffcc andi r2,r2,65535
803d198: 1004923a slli r2,r2,8
803d19c: 10bfffcc andi r2,r2,65535
803d1a0: 1884b03a or r2,r3,r2
803d1a4: e0bff915 stw r2,-28(fp)
if (plen > p->nb_plen)
803d1a8: e0bff217 ldw r2,-56(fp)
803d1ac: 10c00417 ldw r3,16(r2)
803d1b0: e0bff917 ldw r2,-28(fp)
803d1b4: 1880232e bgeu r3,r2,803d244 <udpdemux+0x110>
#ifdef NPDEBUG
/*
* Altera Niche Stack Nios port modification:
* cast arg to unsigned long to remove build warning
*/
if ((NDEBUG & UPCTRACE) && (NDEBUG & TPTRACE))
803d1b8: d0a06617 ldw r2,-32360(gp)
803d1bc: 1081000c andi r2,r2,1024
803d1c0: 10001726 beq r2,zero,803d220 <udpdemux+0xec>
803d1c4: d0a06617 ldw r2,-32360(gp)
803d1c8: 1080400c andi r2,r2,256
803d1cc: 10001426 beq r2,zero,803d220 <udpdemux+0xec>
dprintf("UDP: bad len pkt: rcvd: %u, hdr: %u.\n",
803d1d0: e0bff217 ldw r2,-56(fp)
803d1d4: 11000417 ldw r4,16(r2)
p->nb_plen, (unsigned int)(htons(pup->ud_len) + UDPLEN));
803d1d8: e0bffa17 ldw r2,-24(fp)
803d1dc: 1080010b ldhu r2,4(r2)
803d1e0: 10bfffcc andi r2,r2,65535
803d1e4: 1004d23a srli r2,r2,8
803d1e8: 10bfffcc andi r2,r2,65535
803d1ec: 10c03fcc andi r3,r2,255
803d1f0: e0bffa17 ldw r2,-24(fp)
803d1f4: 1080010b ldhu r2,4(r2)
803d1f8: 10bfffcc andi r2,r2,65535
803d1fc: 1004923a slli r2,r2,8
803d200: 10bfffcc andi r2,r2,65535
803d204: 1884b03a or r2,r3,r2
dprintf("UDP: bad len pkt: rcvd: %u, hdr: %u.\n",
803d208: 10800204 addi r2,r2,8
803d20c: 100d883a mov r6,r2
803d210: 200b883a mov r5,r4
803d214: 01020174 movhi r4,2053
803d218: 212cf404 addi r4,r4,-19504
803d21c: 8002c780 call 8002c78 <printf>
#endif
udp_mib.udpInErrors++;
803d220: 008201b4 movhi r2,2054
803d224: 10b96517 ldw r2,-6764(r2)
803d228: 10c00044 addi r3,r2,1
803d22c: 008201b4 movhi r2,2054
803d230: 10f96515 stw r3,-6764(r2)
udp_free(p);
803d234: e13ff217 ldw r4,-56(fp)
803d238: 803ddb80 call 803ddb8 <udp_free>
return ENP_BAD_HEADER;
803d23c: 00bff804 movi r2,-32
803d240: 00019206 br 803d88c <udpdemux+0x758>
}
osum = pup->ud_cksum;
803d244: e0bffa17 ldw r2,-24(fp)
803d248: 1080018b ldhu r2,6(r2)
803d24c: e0bff88d sth r2,-30(fp)
/* did other guy use checksumming? */
if (osum)
803d250: e0bff88b ldhu r2,-30(fp)
803d254: 10005626 beq r2,zero,803d3b0 <udpdemux+0x27c>
{
if (plen & 1) ((char *)pup)[plen] = 0;
803d258: e0bff917 ldw r2,-28(fp)
803d25c: 1080004c andi r2,r2,1
803d260: 10000426 beq r2,zero,803d274 <udpdemux+0x140>
803d264: e0fffa17 ldw r3,-24(fp)
803d268: e0bff917 ldw r2,-28(fp)
803d26c: 1885883a add r2,r3,r2
803d270: 10000005 stb zero,0(r2)
php.ph_src = p->fhost;
803d274: e0bff217 ldw r2,-56(fp)
803d278: 10800717 ldw r2,28(r2)
803d27c: e0bff315 stw r2,-52(fp)
php.ph_dest = pip->ip_dest;
803d280: e0bffb17 ldw r2,-20(fp)
803d284: 10800417 ldw r2,16(r2)
803d288: e0bff415 stw r2,-48(fp)
php.ph_zero = 0;
803d28c: e03ff505 stb zero,-44(fp)
php.ph_prot = UDP_PROT;
803d290: 00800444 movi r2,17
803d294: e0bff545 stb r2,-43(fp)
php.ph_len = pup->ud_len;
803d298: e0bffa17 ldw r2,-24(fp)
803d29c: 1080010b ldhu r2,4(r2)
803d2a0: e0bff58d sth r2,-42(fp)
pup->ud_cksum = cksum(&php, sizeof(struct ph)>>1);
803d2a4: e0bff304 addi r2,fp,-52
803d2a8: 01400184 movi r5,6
803d2ac: 1009883a mov r4,r2
803d2b0: 8026d7c0 call 8026d7c <cksum>
803d2b4: 1007883a mov r3,r2
803d2b8: e0bffa17 ldw r2,-24(fp)
803d2bc: 10c0018d sth r3,6(r2)
xsum = ~cksum(pup, (plen+1)>>1);
803d2c0: e0bff917 ldw r2,-28(fp)
803d2c4: 10800044 addi r2,r2,1
803d2c8: 1004d07a srli r2,r2,1
803d2cc: 100b883a mov r5,r2
803d2d0: e13ffa17 ldw r4,-24(fp)
803d2d4: 8026d7c0 call 8026d7c <cksum>
803d2d8: 0084303a nor r2,zero,r2
803d2dc: e0bffe8d sth r2,-6(fp)
if (!xsum)
803d2e0: e0bffe8b ldhu r2,-6(fp)
803d2e4: 1000021e bne r2,zero,803d2f0 <udpdemux+0x1bc>
xsum = 0xffff;
803d2e8: 00bfffc4 movi r2,-1
803d2ec: e0bffe8d sth r2,-6(fp)
pup->ud_cksum = osum;
803d2f0: e0bffa17 ldw r2,-24(fp)
803d2f4: e0fff88b ldhu r3,-30(fp)
803d2f8: 10c0018d sth r3,6(r2)
if (xsum != osum)
803d2fc: e0fffe8b ldhu r3,-6(fp)
803d300: e0bff88b ldhu r2,-30(fp)
803d304: 18802a26 beq r3,r2,803d3b0 <udpdemux+0x27c>
{
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & TPTRACE))
803d308: d0a06617 ldw r2,-32360(gp)
803d30c: 1081000c andi r2,r2,1024
803d310: 10001e26 beq r2,zero,803d38c <udpdemux+0x258>
803d314: d0a06617 ldw r2,-32360(gp)
803d318: 1080400c andi r2,r2,256
803d31c: 10001b26 beq r2,zero,803d38c <udpdemux+0x258>
{
dprintf("UDPDEMUX: bad xsum %04x right %04x from %u.%u.%u.%u\n",
803d320: e17ff88b ldhu r5,-30(fp)
803d324: e1bffe8b ldhu r6,-6(fp)
osum, xsum, PUSH_IPADDR(p->fhost));
803d328: e0bff217 ldw r2,-56(fp)
803d32c: 10800717 ldw r2,28(r2)
dprintf("UDPDEMUX: bad xsum %04x right %04x from %u.%u.%u.%u\n",
803d330: 11c03fcc andi r7,r2,255
osum, xsum, PUSH_IPADDR(p->fhost));
803d334: e0bff217 ldw r2,-56(fp)
803d338: 10800717 ldw r2,28(r2)
803d33c: 1004d23a srli r2,r2,8
dprintf("UDPDEMUX: bad xsum %04x right %04x from %u.%u.%u.%u\n",
803d340: 10803fcc andi r2,r2,255
osum, xsum, PUSH_IPADDR(p->fhost));
803d344: e0fff217 ldw r3,-56(fp)
803d348: 18c00717 ldw r3,28(r3)
803d34c: 1806d43a srli r3,r3,16
dprintf("UDPDEMUX: bad xsum %04x right %04x from %u.%u.%u.%u\n",
803d350: 18c03fcc andi r3,r3,255
osum, xsum, PUSH_IPADDR(p->fhost));
803d354: e13ff217 ldw r4,-56(fp)
803d358: 21000717 ldw r4,28(r4)
803d35c: 2008d63a srli r4,r4,24
dprintf("UDPDEMUX: bad xsum %04x right %04x from %u.%u.%u.%u\n",
803d360: d9000215 stw r4,8(sp)
803d364: d8c00115 stw r3,4(sp)
803d368: d8800015 stw r2,0(sp)
803d36c: 01020174 movhi r4,2053
803d370: 212cfe04 addi r4,r4,-19464
803d374: 8002c780 call 8002c78 <printf>
if (NDEBUG & DUMP)
803d378: d0a06617 ldw r2,-32360(gp)
803d37c: 1080008c andi r2,r2,2
803d380: 10000226 beq r2,zero,803d38c <udpdemux+0x258>
ip_dump(p);
803d384: e13ff217 ldw r4,-56(fp)
803d388: 803b0cc0 call 803b0cc <ip_dump>
}
#endif
udp_mib.udpInErrors++;
803d38c: 008201b4 movhi r2,2054
803d390: 10b96517 ldw r2,-6764(r2)
803d394: 10c00044 addi r3,r2,1
803d398: 008201b4 movhi r2,2054
803d39c: 10f96515 stw r3,-6764(r2)
udp_free(p);
803d3a0: e13ff217 ldw r4,-56(fp)
803d3a4: 803ddb80 call 803ddb8 <udp_free>
return ENP_BAD_HEADER;
803d3a8: 00bff804 movi r2,-32
803d3ac: 00013706 br 803d88c <udpdemux+0x758>
}
}
#if (BYTE_ORDER == LITTLE_ENDIAN)
udpswap(pup);
803d3b0: e13ffa17 ldw r4,-24(fp)
803d3b4: 803db340 call 803db34 <udpswap>
#endif
/* Prior to upcall, adjust nb_prot for size of IP and UDP headers */
e = (sizeof(struct udp) + ip_hlen(pip));
803d3b8: e0bffb17 ldw r2,-20(fp)
803d3bc: 10800003 ldbu r2,0(r2)
803d3c0: 10803fcc andi r2,r2,255
803d3c4: 100490ba slli r2,r2,2
803d3c8: 10800f0c andi r2,r2,60
803d3cc: 10800204 addi r2,r2,8
803d3d0: e0bffd15 stw r2,-12(fp)
p->nb_plen -= e;
803d3d4: e0bff217 ldw r2,-56(fp)
803d3d8: 10c00417 ldw r3,16(r2)
803d3dc: e0bffd17 ldw r2,-12(fp)
803d3e0: 1887c83a sub r3,r3,r2
803d3e4: e0bff217 ldw r2,-56(fp)
803d3e8: 10c00415 stw r3,16(r2)
p->nb_prot += e;
803d3ec: e0bff217 ldw r2,-56(fp)
803d3f0: 10c00317 ldw r3,12(r2)
803d3f4: e0bffd17 ldw r2,-12(fp)
803d3f8: 1887883a add r3,r3,r2
803d3fc: e0bff217 ldw r2,-56(fp)
803d400: 10c00315 stw r3,12(r2)
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & TPTRACE))
803d404: d0a06617 ldw r2,-32360(gp)
803d408: 1081000c andi r2,r2,1024
803d40c: 10001f26 beq r2,zero,803d48c <udpdemux+0x358>
803d410: d0a06617 ldw r2,-32360(gp)
803d414: 1080400c andi r2,r2,256
803d418: 10001c26 beq r2,zero,803d48c <udpdemux+0x358>
{
dprintf("UDP: pkt[%u] from %u.%u.%u.%u:%d to %d\n",
plen, PUSH_IPADDR(p->fhost), pup->ud_srcp, pup->ud_dstp);
803d41c: e0bff217 ldw r2,-56(fp)
803d420: 10800717 ldw r2,28(r2)
dprintf("UDP: pkt[%u] from %u.%u.%u.%u:%d to %d\n",
803d424: 11803fcc andi r6,r2,255
plen, PUSH_IPADDR(p->fhost), pup->ud_srcp, pup->ud_dstp);
803d428: e0bff217 ldw r2,-56(fp)
803d42c: 10800717 ldw r2,28(r2)
803d430: 1004d23a srli r2,r2,8
dprintf("UDP: pkt[%u] from %u.%u.%u.%u:%d to %d\n",
803d434: 11c03fcc andi r7,r2,255
plen, PUSH_IPADDR(p->fhost), pup->ud_srcp, pup->ud_dstp);
803d438: e0bff217 ldw r2,-56(fp)
803d43c: 10800717 ldw r2,28(r2)
803d440: 1004d43a srli r2,r2,16
dprintf("UDP: pkt[%u] from %u.%u.%u.%u:%d to %d\n",
803d444: 10803fcc andi r2,r2,255
plen, PUSH_IPADDR(p->fhost), pup->ud_srcp, pup->ud_dstp);
803d448: e0fff217 ldw r3,-56(fp)
803d44c: 18c00717 ldw r3,28(r3)
803d450: 1806d63a srli r3,r3,24
803d454: e13ffa17 ldw r4,-24(fp)
803d458: 2100000b ldhu r4,0(r4)
dprintf("UDP: pkt[%u] from %u.%u.%u.%u:%d to %d\n",
803d45c: 213fffcc andi r4,r4,65535
plen, PUSH_IPADDR(p->fhost), pup->ud_srcp, pup->ud_dstp);
803d460: e17ffa17 ldw r5,-24(fp)
803d464: 2940008b ldhu r5,2(r5)
dprintf("UDP: pkt[%u] from %u.%u.%u.%u:%d to %d\n",
803d468: 297fffcc andi r5,r5,65535
803d46c: d9400315 stw r5,12(sp)
803d470: d9000215 stw r4,8(sp)
803d474: d8c00115 stw r3,4(sp)
803d478: d8800015 stw r2,0(sp)
803d47c: e17ff917 ldw r5,-28(fp)
803d480: 01020174 movhi r4,2053
803d484: 212d0c04 addi r4,r4,-19408
803d488: 8002c780 call 8002c78 <printf>
#endif /* INCLUDE_SNMPV3 */
#endif /* PREBIND_AGENT */
/* run through the demux table and try to upcall it */
for (con = firstudp; con; con = con->u_next)
803d48c: d0a09e17 ldw r2,-32136(gp)
803d490: e0bfff15 stw r2,-4(fp)
803d494: 0000aa06 br 803d740 <udpdemux+0x60c>
continue;
#endif
/* enforce all three aspects of tuple matching. Old code
assumed lport was unique, which is not always so. */
if (con->u_lport && (con->u_lport != pup->ud_dstp))
803d498: e0bfff17 ldw r2,-4(fp)
803d49c: 1080018b ldhu r2,6(r2)
803d4a0: 10bfffcc andi r2,r2,65535
803d4a4: 10000726 beq r2,zero,803d4c4 <udpdemux+0x390>
803d4a8: e0bfff17 ldw r2,-4(fp)
803d4ac: 10c0018b ldhu r3,6(r2)
803d4b0: e0bffa17 ldw r2,-24(fp)
803d4b4: 1080008b ldhu r2,2(r2)
803d4b8: 18ffffcc andi r3,r3,65535
803d4bc: 10bfffcc andi r2,r2,65535
803d4c0: 1880951e bne r3,r2,803d718 <udpdemux+0x5e4>
continue;
if (con->u_fport && (con->u_fport != pup->ud_srcp))
803d4c4: e0bfff17 ldw r2,-4(fp)
803d4c8: 1080020b ldhu r2,8(r2)
803d4cc: 10bfffcc andi r2,r2,65535
803d4d0: 10000726 beq r2,zero,803d4f0 <udpdemux+0x3bc>
803d4d4: e0bfff17 ldw r2,-4(fp)
803d4d8: 10c0020b ldhu r3,8(r2)
803d4dc: e0bffa17 ldw r2,-24(fp)
803d4e0: 1080000b ldhu r2,0(r2)
803d4e4: 18ffffcc andi r3,r3,65535
803d4e8: 10bfffcc andi r2,r2,65535
803d4ec: 18808c1e bne r3,r2,803d720 <udpdemux+0x5ec>
continue;
if (con->u_fhost && (con->u_fhost != p->fhost))
803d4f0: e0bfff17 ldw r2,-4(fp)
803d4f4: 10800417 ldw r2,16(r2)
803d4f8: 10000526 beq r2,zero,803d510 <udpdemux+0x3dc>
803d4fc: e0bfff17 ldw r2,-4(fp)
803d500: 10c00417 ldw r3,16(r2)
803d504: e0bff217 ldw r2,-56(fp)
803d508: 10800717 ldw r2,28(r2)
803d50c: 1880861e bne r3,r2,803d728 <udpdemux+0x5f4>
#ifdef IP_MULTICAST
/* In the case of multicast, check if there is multicast membership
* attached to this socket and if so, is the incoming packet
* addressed to the multicast address
*/
if (IN_MULTICAST(ntohl(pip->ip_dest)))
803d510: e0bffb17 ldw r2,-20(fp)
803d514: 10800417 ldw r2,16(r2)
803d518: 1006d63a srli r3,r2,24
803d51c: e0bffb17 ldw r2,-20(fp)
803d520: 10800417 ldw r2,16(r2)
803d524: 1004d23a srli r2,r2,8
803d528: 10bfc00c andi r2,r2,65280
803d52c: 1886b03a or r3,r3,r2
803d530: e0bffb17 ldw r2,-20(fp)
803d534: 10800417 ldw r2,16(r2)
803d538: 1004923a slli r2,r2,8
803d53c: 10803fec andhi r2,r2,255
803d540: 1886b03a or r3,r3,r2
803d544: e0bffb17 ldw r2,-20(fp)
803d548: 10800417 ldw r2,16(r2)
803d54c: 1004963a slli r2,r2,24
803d550: 1884b03a or r2,r3,r2
803d554: 10fc002c andhi r3,r2,61440
803d558: 00b80034 movhi r2,57344
803d55c: 18802d1e bne r3,r2,803d614 <udpdemux+0x4e0>
{
struct socket *soptr = (struct socket *)con->u_data;
803d560: e0bfff17 ldw r2,-4(fp)
803d564: 10800617 ldw r2,24(r2)
803d568: e0bff715 stw r2,-36(fp)
if ((con->u_rcv == udp_soinput) && (soptr->inp_moptions != NULL))
803d56c: e0bfff17 ldw r2,-4(fp)
803d570: 10c00517 ldw r3,20(r2)
803d574: 008200f4 movhi r2,2051
803d578: 10990604 addi r2,r2,25624
803d57c: 1880251e bne r3,r2,803d614 <udpdemux+0x4e0>
803d580: e0bff717 ldw r2,-36(fp)
803d584: 10800317 ldw r2,12(r2)
803d588: 10002226 beq r2,zero,803d614 <udpdemux+0x4e0>
{
u_short i;
struct ip_moptions *imo = soptr->inp_moptions;
803d58c: e0bff717 ldw r2,-36(fp)
803d590: 10800317 ldw r2,12(r2)
803d594: e0bff615 stw r2,-40(fp)
for (i = 0; i < imo->imo_num_memberships; ++i)
803d598: e03ffc8d sth zero,-14(fp)
803d59c: 00001706 br 803d5fc <udpdemux+0x4c8>
{
if ((imo->imo_membership[i]->inm_netp == p->net) &&
803d5a0: e0bffc8b ldhu r2,-14(fp)
803d5a4: e0fff617 ldw r3,-40(fp)
803d5a8: 10800084 addi r2,r2,2
803d5ac: 100490ba slli r2,r2,2
803d5b0: 1885883a add r2,r3,r2
803d5b4: 10800017 ldw r2,0(r2)
803d5b8: 10c00117 ldw r3,4(r2)
803d5bc: e0bff217 ldw r2,-56(fp)
803d5c0: 10800617 ldw r2,24(r2)
803d5c4: 18800a1e bne r3,r2,803d5f0 <udpdemux+0x4bc>
(imo->imo_membership[i]->inm_addr == pip->ip_dest))
803d5c8: e0bffc8b ldhu r2,-14(fp)
803d5cc: e0fff617 ldw r3,-40(fp)
803d5d0: 10800084 addi r2,r2,2
803d5d4: 100490ba slli r2,r2,2
803d5d8: 1885883a add r2,r3,r2
803d5dc: 10800017 ldw r2,0(r2)
803d5e0: 10c00017 ldw r3,0(r2)
803d5e4: e0bffb17 ldw r2,-20(fp)
803d5e8: 10800417 ldw r2,16(r2)
if ((imo->imo_membership[i]->inm_netp == p->net) &&
803d5ec: 18800b26 beq r3,r2,803d61c <udpdemux+0x4e8>
for (i = 0; i < imo->imo_num_memberships; ++i)
803d5f0: e0bffc8b ldhu r2,-14(fp)
803d5f4: 10800044 addi r2,r2,1
803d5f8: e0bffc8d sth r2,-14(fp)
803d5fc: e0bff617 ldw r2,-40(fp)
803d600: 1080018b ldhu r2,6(r2)
803d604: e0fffc8b ldhu r3,-14(fp)
803d608: 10bfffcc andi r2,r2,65535
803d60c: 18bfe436 bltu r3,r2,803d5a0 <udpdemux+0x46c>
{
goto found;
}
}
continue;
803d610: 00004806 br 803d734 <udpdemux+0x600>
}
}
found:
803d614: 0001883a nop
803d618: 00000106 br 803d620 <udpdemux+0x4ec>
goto found;
803d61c: 0001883a nop
#endif /* INCLUDE_TCP */
/* if this endpoint has been bound to a local interface address,
* make sure the packet was received on that interface address
*/
if (!IN_MULTICAST(ntohl(pip->ip_dest)))
803d620: e0bffb17 ldw r2,-20(fp)
803d624: 10800417 ldw r2,16(r2)
803d628: 1006d63a srli r3,r2,24
803d62c: e0bffb17 ldw r2,-20(fp)
803d630: 10800417 ldw r2,16(r2)
803d634: 1004d23a srli r2,r2,8
803d638: 10bfc00c andi r2,r2,65280
803d63c: 1886b03a or r3,r3,r2
803d640: e0bffb17 ldw r2,-20(fp)
803d644: 10800417 ldw r2,16(r2)
803d648: 1004923a slli r2,r2,8
803d64c: 10803fec andhi r2,r2,255
803d650: 1886b03a or r3,r3,r2
803d654: e0bffb17 ldw r2,-20(fp)
803d658: 10800417 ldw r2,16(r2)
803d65c: 1004963a slli r2,r2,24
803d660: 1884b03a or r2,r3,r2
803d664: 10fc002c andhi r3,r2,61440
803d668: 00b80034 movhi r2,57344
803d66c: 18800826 beq r3,r2,803d690 <udpdemux+0x55c>
{
if ((con->u_lhost != 0) && (con->u_lhost != pip->ip_dest))
803d670: e0bfff17 ldw r2,-4(fp)
803d674: 10800317 ldw r2,12(r2)
803d678: 10000526 beq r2,zero,803d690 <udpdemux+0x55c>
803d67c: e0bfff17 ldw r2,-4(fp)
803d680: 10c00317 ldw r3,12(r2)
803d684: e0bffb17 ldw r2,-20(fp)
803d688: 10800417 ldw r2,16(r2)
803d68c: 1880281e bne r3,r2,803d730 <udpdemux+0x5fc>
continue;
}
/* fall to here if we found it */
udp_mib.udpInDatagrams++;
803d690: 008201b4 movhi r2,2054
803d694: 10b96317 ldw r2,-6772(r2)
803d698: 10c00044 addi r3,r2,1
803d69c: 008201b4 movhi r2,2054
803d6a0: 10f96315 stw r3,-6772(r2)
if (con->u_rcv) /* if upcall address is set... */
803d6a4: e0bfff17 ldw r2,-4(fp)
803d6a8: 10800517 ldw r2,20(r2)
803d6ac: 10000d26 beq r2,zero,803d6e4 <udpdemux+0x5b0>
{
UNLOCK_NET_RESOURCE(NET_RESID);
803d6b0: 0009883a mov r4,zero
803d6b4: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
e = ((*con->u_rcv)(p, con->u_data)); /* upcall it */
803d6b8: e0bfff17 ldw r2,-4(fp)
803d6bc: 10800517 ldw r2,20(r2)
803d6c0: e0ffff17 ldw r3,-4(fp)
803d6c4: 18c00617 ldw r3,24(r3)
803d6c8: 180b883a mov r5,r3
803d6cc: e13ff217 ldw r4,-56(fp)
803d6d0: 103ee83a callr r2
803d6d4: e0bffd15 stw r2,-12(fp)
LOCK_NET_RESOURCE(NET_RESID);
803d6d8: 0009883a mov r4,zero
803d6dc: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
803d6e0: 00000206 br 803d6ec <udpdemux+0x5b8>
}
else
e = ENP_LOGIC;
803d6e4: 00bffd44 movi r2,-11
803d6e8: e0bffd15 stw r2,-12(fp)
/* if error occurred in upcall or there was no upcall hander
its up to this routine to free the packet buffer */
if (e)
803d6ec: e0bffd17 ldw r2,-12(fp)
803d6f0: 10000726 beq r2,zero,803d710 <udpdemux+0x5dc>
{
udp_mib.udpInErrors++;
803d6f4: 008201b4 movhi r2,2054
803d6f8: 10b96517 ldw r2,-6764(r2)
803d6fc: 10c00044 addi r3,r2,1
803d700: 008201b4 movhi r2,2054
803d704: 10f96515 stw r3,-6764(r2)
udp_free(p);
803d708: e13ff217 ldw r4,-56(fp)
803d70c: 803ddb80 call 803ddb8 <udp_free>
}
return(e);
803d710: e0bffd17 ldw r2,-12(fp)
803d714: 00005d06 br 803d88c <udpdemux+0x758>
continue;
803d718: 0001883a nop
803d71c: 00000506 br 803d734 <udpdemux+0x600>
continue;
803d720: 0001883a nop
803d724: 00000306 br 803d734 <udpdemux+0x600>
continue;
803d728: 0001883a nop
803d72c: 00000106 br 803d734 <udpdemux+0x600>
continue;
803d730: 0001883a nop
for (con = firstudp; con; con = con->u_next)
803d734: e0bfff17 ldw r2,-4(fp)
803d738: 10800017 ldw r2,0(r2)
803d73c: e0bfff15 stw r2,-4(fp)
803d740: e0bfff17 ldw r2,-4(fp)
803d744: 103f541e bne r2,zero,803d498 <udpdemux+0x364>
/* Fall to here if packet is not for us. Check if the packet was
* sent to an ip broadcast address. If it was, don't send a
* destination unreachable.
*/
if ((pip->ip_dest == 0xffffffffL) || /* Physical cable broadcast addr*/
803d748: e0bffb17 ldw r2,-20(fp)
803d74c: 10800417 ldw r2,16(r2)
803d750: 10bfffe0 cmpeqi r2,r2,-1
803d754: 1000121e bne r2,zero,803d7a0 <udpdemux+0x66c>
(pip->ip_dest == p->net->n_netbr) || /* All subnet broadcast */
803d758: e0bffb17 ldw r2,-20(fp)
803d75c: 10c00417 ldw r3,16(r2)
803d760: e0bff217 ldw r2,-56(fp)
803d764: 10800617 ldw r2,24(r2)
803d768: 10800e17 ldw r2,56(r2)
if ((pip->ip_dest == 0xffffffffL) || /* Physical cable broadcast addr*/
803d76c: 18800c26 beq r3,r2,803d7a0 <udpdemux+0x66c>
(pip->ip_dest == p->net->n_netbr42) || /* All subnet bcast (4.2bsd) */
803d770: e0bffb17 ldw r2,-20(fp)
803d774: 10c00417 ldw r3,16(r2)
803d778: e0bff217 ldw r2,-56(fp)
803d77c: 10800617 ldw r2,24(r2)
803d780: 10800f17 ldw r2,60(r2)
(pip->ip_dest == p->net->n_netbr) || /* All subnet broadcast */
803d784: 18800626 beq r3,r2,803d7a0 <udpdemux+0x66c>
(pip->ip_dest == p->net->n_subnetbr)) /* Our subnet broadcast */
803d788: e0bffb17 ldw r2,-20(fp)
803d78c: 10c00417 ldw r3,16(r2)
803d790: e0bff217 ldw r2,-56(fp)
803d794: 10800617 ldw r2,24(r2)
803d798: 10801017 ldw r2,64(r2)
(pip->ip_dest == p->net->n_netbr42) || /* All subnet bcast (4.2bsd) */
803d79c: 1880121e bne r3,r2,803d7e8 <udpdemux+0x6b4>
{
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & TPTRACE))
803d7a0: d0a06617 ldw r2,-32360(gp)
803d7a4: 1081000c andi r2,r2,1024
803d7a8: 10000626 beq r2,zero,803d7c4 <udpdemux+0x690>
803d7ac: d0a06617 ldw r2,-32360(gp)
803d7b0: 1080400c andi r2,r2,256
803d7b4: 10000326 beq r2,zero,803d7c4 <udpdemux+0x690>
dprintf("UDP: ignoring ip broadcast\n");
803d7b8: 01020174 movhi r4,2053
803d7bc: 212d1604 addi r4,r4,-19368
803d7c0: 8002d9c0 call 8002d9c <puts>
#endif
udp_mib.udpInErrors++;
803d7c4: 008201b4 movhi r2,2054
803d7c8: 10b96517 ldw r2,-6764(r2)
803d7cc: 10c00044 addi r3,r2,1
803d7d0: 008201b4 movhi r2,2054
803d7d4: 10f96515 stw r3,-6764(r2)
udp_free(p);
803d7d8: e13ff217 ldw r4,-56(fp)
803d7dc: 803ddb80 call 803ddb8 <udp_free>
return ENP_NOT_MINE;
803d7e0: 00800084 movi r2,2
803d7e4: 00002906 br 803d88c <udpdemux+0x758>
}
#ifdef NPDEBUG
if ((NDEBUG & UPCTRACE) && (NDEBUG & TPTRACE))
803d7e8: d0a06617 ldw r2,-32360(gp)
803d7ec: 1081000c andi r2,r2,1024
803d7f0: 10000f26 beq r2,zero,803d830 <udpdemux+0x6fc>
803d7f4: d0a06617 ldw r2,-32360(gp)
803d7f8: 1080400c andi r2,r2,256
803d7fc: 10000c26 beq r2,zero,803d830 <udpdemux+0x6fc>
{
dprintf("UDP: unexpected port %04x\n", pup->ud_dstp);
803d800: e0bffa17 ldw r2,-24(fp)
803d804: 1080008b ldhu r2,2(r2)
803d808: 10bfffcc andi r2,r2,65535
803d80c: 100b883a mov r5,r2
803d810: 01020174 movhi r4,2053
803d814: 212d1d04 addi r4,r4,-19340
803d818: 8002c780 call 8002c78 <printf>
if (NDEBUG & DUMP)
803d81c: d0a06617 ldw r2,-32360(gp)
803d820: 1080008c andi r2,r2,2
803d824: 10000226 beq r2,zero,803d830 <udpdemux+0x6fc>
ip_dump(p);
803d828: e13ff217 ldw r4,-56(fp)
803d82c: 803b0cc0 call 803b0cc <ip_dump>
#ifdef FULL_ICMP
/* send destination unreachable. Swap back all the swapped information */
/* so that the destun packet format is correct */
#if (BYTE_ORDER == LITTLE_ENDIAN)
udpswap(pup);
803d830: e13ffa17 ldw r4,-24(fp)
803d834: 803db340 call 803db34 <udpswap>
#endif /* BYTE_ORDER */
icmp_destun(p->fhost, p->net->n_ipaddr, pip, DSTPORT, p->net);
803d838: e0bff217 ldw r2,-56(fp)
803d83c: 10c00717 ldw r3,28(r2)
803d840: e0bff217 ldw r2,-56(fp)
803d844: 10800617 ldw r2,24(r2)
803d848: 11000a17 ldw r4,40(r2)
803d84c: e0bff217 ldw r2,-56(fp)
803d850: 10800617 ldw r2,24(r2)
803d854: d8800015 stw r2,0(sp)
803d858: 01c000c4 movi r7,3
803d85c: e1bffb17 ldw r6,-20(fp)
803d860: 200b883a mov r5,r4
803d864: 1809883a mov r4,r3
803d868: 8039a540 call 8039a54 <icmp_destun>
#endif /* FULL_ICMP */
udp_mib.udpNoPorts++;
803d86c: 008201b4 movhi r2,2054
803d870: 10b96417 ldw r2,-6768(r2)
803d874: 10c00044 addi r3,r2,1
803d878: 008201b4 movhi r2,2054
803d87c: 10f96415 stw r3,-6768(r2)
udp_free(p);
803d880: e13ff217 ldw r4,-56(fp)
803d884: 803ddb80 call 803ddb8 <udp_free>
return ENP_NOT_MINE;
803d888: 00800084 movi r2,2
}
803d88c: e037883a mov sp,fp
803d890: dfc00117 ldw ra,4(sp)
803d894: df000017 ldw fp,0(sp)
803d898: dec00204 addi sp,sp,8
803d89c: f800283a ret
0803d8a0 <udp_send>:
* detected.
*/
int
udp_send(unshort fport, unshort lport, PACKET p)
{
803d8a0: deffef04 addi sp,sp,-68
803d8a4: dfc01015 stw ra,64(sp)
803d8a8: df000f15 stw fp,60(sp)
803d8ac: df000f04 addi fp,sp,60
803d8b0: 2005883a mov r2,r4
803d8b4: 2807883a mov r3,r5
803d8b8: e1bff515 stw r6,-44(fp)
803d8bc: e0bff70d sth r2,-36(fp)
803d8c0: 1805883a mov r2,r3
803d8c4: e0bff60d sth r2,-40(fp)
int udplen;
int e;
ip_addr src_ip; /* source IP, for checksumming purposes */
#ifdef NPDEBUG
if (NDEBUG & (INFOMSG|TPTRACE))
803d8c8: d0a06617 ldw r2,-32360(gp)
803d8cc: 1080410c andi r2,r2,260
803d8d0: 10001a26 beq r2,zero,803d93c <udp_send+0x9c>
dprintf("UDP: pkt [%u] %04x -> %u.%u.%u.%u:%04x\n", p->nb_plen, lport,
803d8d4: e0bff517 ldw r2,-44(fp)
803d8d8: 12000417 ldw r8,16(r2)
803d8dc: e1bff60b ldhu r6,-40(fp)
PUSH_IPADDR(p->fhost), fport);
803d8e0: e0bff517 ldw r2,-44(fp)
803d8e4: 10800717 ldw r2,28(r2)
dprintf("UDP: pkt [%u] %04x -> %u.%u.%u.%u:%04x\n", p->nb_plen, lport,
803d8e8: 11c03fcc andi r7,r2,255
PUSH_IPADDR(p->fhost), fport);
803d8ec: e0bff517 ldw r2,-44(fp)
803d8f0: 10800717 ldw r2,28(r2)
803d8f4: 1004d23a srli r2,r2,8
dprintf("UDP: pkt [%u] %04x -> %u.%u.%u.%u:%04x\n", p->nb_plen, lport,
803d8f8: 10803fcc andi r2,r2,255
PUSH_IPADDR(p->fhost), fport);
803d8fc: e0fff517 ldw r3,-44(fp)
803d900: 18c00717 ldw r3,28(r3)
803d904: 1806d43a srli r3,r3,16
dprintf("UDP: pkt [%u] %04x -> %u.%u.%u.%u:%04x\n", p->nb_plen, lport,
803d908: 18c03fcc andi r3,r3,255
PUSH_IPADDR(p->fhost), fport);
803d90c: e13ff517 ldw r4,-44(fp)
803d910: 21000717 ldw r4,28(r4)
803d914: 2008d63a srli r4,r4,24
dprintf("UDP: pkt [%u] %04x -> %u.%u.%u.%u:%04x\n", p->nb_plen, lport,
803d918: e17ff70b ldhu r5,-36(fp)
803d91c: d9400315 stw r5,12(sp)
803d920: d9000215 stw r4,8(sp)
803d924: d8c00115 stw r3,4(sp)
803d928: d8800015 stw r2,0(sp)
803d92c: 400b883a mov r5,r8
803d930: 01020174 movhi r4,2053
803d934: 212d2404 addi r4,r4,-19312
803d938: 8002c780 call 8002c78 <printf>
#endif
LOCK_NET_RESOURCE(NET_RESID);
803d93c: 0009883a mov r4,zero
803d940: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/* prepend UDP header to upper layer's data */
p->nb_prot -= sizeof(struct udp);
803d944: e0bff517 ldw r2,-44(fp)
803d948: 10800317 ldw r2,12(r2)
803d94c: 10fffe04 addi r3,r2,-8
803d950: e0bff517 ldw r2,-44(fp)
803d954: 10c00315 stw r3,12(r2)
pup = (struct udp*)p->nb_prot;
803d958: e0bff517 ldw r2,-44(fp)
803d95c: 10800317 ldw r2,12(r2)
803d960: e0bffe15 stw r2,-8(fp)
udplen = p->nb_plen + sizeof(struct udp);
803d964: e0bff517 ldw r2,-44(fp)
803d968: 10800417 ldw r2,16(r2)
803d96c: 10800204 addi r2,r2,8
803d970: e0bffd15 stw r2,-12(fp)
p->nb_plen = udplen;
803d974: e0fffd17 ldw r3,-12(fp)
803d978: e0bff517 ldw r2,-44(fp)
803d97c: 10c00415 stw r3,16(r2)
if (udplen & 1) ((char *)pup)[udplen] = 0;
803d980: e0bffd17 ldw r2,-12(fp)
803d984: 1080004c andi r2,r2,1
803d988: 10000426 beq r2,zero,803d99c <udp_send+0xfc>
803d98c: e0bffd17 ldw r2,-12(fp)
803d990: e0fffe17 ldw r3,-8(fp)
803d994: 1885883a add r2,r3,r2
803d998: 10000005 stb zero,0(r2)
pup->ud_len = (unshort)udplen; /* fill in the UDP header */
803d99c: e0bffd17 ldw r2,-12(fp)
803d9a0: 1007883a mov r3,r2
803d9a4: e0bffe17 ldw r2,-8(fp)
803d9a8: 10c0010d sth r3,4(r2)
pup->ud_srcp = lport;
803d9ac: e0bffe17 ldw r2,-8(fp)
803d9b0: e0fff60b ldhu r3,-40(fp)
803d9b4: 10c0000d sth r3,0(r2)
pup->ud_dstp = fport;
803d9b8: e0bffe17 ldw r2,-8(fp)
803d9bc: e0fff70b ldhu r3,-36(fp)
803d9c0: 10c0008d sth r3,2(r2)
#if (BYTE_ORDER == LITTLE_ENDIAN)
udpswap(pup);
803d9c4: e13ffe17 ldw r4,-8(fp)
803d9c8: 803db340 call 803db34 <udpswap>
#endif /* BYTE_ORDER */
#ifdef MULTI_HOMED
/* getting the source IP address for a broadcast is a bit tricky: */
if (p->fhost == 0xffffffff)
803d9cc: e0bff517 ldw r2,-44(fp)
803d9d0: 10800717 ldw r2,28(r2)
803d9d4: 10bfffd8 cmpnei r2,r2,-1
803d9d8: 10000f1e bne r2,zero,803da18 <udp_send+0x178>
{
if (!p->net)
803d9dc: e0bff517 ldw r2,-44(fp)
803d9e0: 10800617 ldw r2,24(r2)
803d9e4: 1000071e bne r2,zero,803da04 <udp_send+0x164>
{
dtrap(); /* programmer forgot to select iface */
803d9e8: 8028cd40 call 8028cd4 <dtrap>
/* it would appear that the callers of udp_send() expect it
to do cleanup on failure, so free the packet buffer here */
udp_free(p);
803d9ec: e13ff517 ldw r4,-44(fp)
803d9f0: 803ddb80 call 803ddb8 <udp_free>
UNLOCK_NET_RESOURCE(NET_RESID);
803d9f4: 0009883a mov r4,zero
803d9f8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return ENP_NO_IFACE;
803d9fc: 00bff784 movi r2,-34
803da00: 00004706 br 803db20 <udp_send+0x280>
}
src_ip = p->net->n_ipaddr;
803da04: e0bff517 ldw r2,-44(fp)
803da08: 10800617 ldw r2,24(r2)
803da0c: 10800a17 ldw r2,40(r2)
803da10: e0bfff15 stw r2,-4(fp)
803da14: 00000506 br 803da2c <udp_send+0x18c>
/* set the IP addresses in the IP header. The pseudo header used for
* checksumming overlays the addresses on the IP header area in the
* buffer, so setting them there (which we need to do for cksum
* anyway) sets up for IP too.
*/
src_ip = ip_mymach(p->fhost);
803da18: e0bff517 ldw r2,-44(fp)
803da1c: 10800717 ldw r2,28(r2)
803da20: 1009883a mov r4,r2
803da24: 803b0280 call 803b028 <ip_mymach>
803da28: e0bfff15 stw r2,-4(fp)
php.ph_src = src_ip;
803da2c: e0bfff17 ldw r2,-4(fp)
803da30: e0bff815 stw r2,-32(fp)
php.ph_dest = p->fhost;
803da34: e0bff517 ldw r2,-44(fp)
803da38: 10800717 ldw r2,28(r2)
803da3c: e0bff915 stw r2,-28(fp)
#ifdef NO_UDP_CKSUM
/* If no UDP checksum support, just zero the checksum field */
pup->ud_cksum = 0;
#else
/* finish filling in the pseudo header required for checksumming */
php.ph_zero = 0;
803da40: e03ffa05 stb zero,-24(fp)
php.ph_prot = UDP_PROT;
803da44: 00800444 movi r2,17
803da48: e0bffa45 stb r2,-23(fp)
php.ph_len = pup->ud_len;
803da4c: e0bffe17 ldw r2,-8(fp)
803da50: 1080010b ldhu r2,4(r2)
803da54: e0bffa8d sth r2,-22(fp)
pup->ud_cksum = cksum(&php, sizeof(struct ph)>>1);
803da58: e0bff804 addi r2,fp,-32
803da5c: 01400184 movi r5,6
803da60: 1009883a mov r4,r2
803da64: 8026d7c0 call 8026d7c <cksum>
803da68: 1007883a mov r3,r2
803da6c: e0bffe17 ldw r2,-8(fp)
803da70: 10c0018d sth r3,6(r2)
pup->ud_cksum = ~cksum(pup, (udplen+1)>>1);
803da74: e0bffd17 ldw r2,-12(fp)
803da78: 10800044 addi r2,r2,1
803da7c: 1005d07a srai r2,r2,1
803da80: 100b883a mov r5,r2
803da84: e13ffe17 ldw r4,-8(fp)
803da88: 8026d7c0 call 8026d7c <cksum>
803da8c: 0084303a nor r2,zero,r2
803da90: 1007883a mov r3,r2
803da94: e0bffe17 ldw r2,-8(fp)
803da98: 10c0018d sth r3,6(r2)
if (pup->ud_cksum == 0)
803da9c: e0bffe17 ldw r2,-8(fp)
803daa0: 1080018b ldhu r2,6(r2)
803daa4: 10bfffcc andi r2,r2,65535
803daa8: 1000031e bne r2,zero,803dab8 <udp_send+0x218>
pup->ud_cksum = 0xffff;
803daac: e0bffe17 ldw r2,-8(fp)
803dab0: 00ffffc4 movi r3,-1
803dab4: 10c0018d sth r3,6(r2)
#endif
/* need to fill in IP addresses at this layer too */
pip = (struct ip *)(p->nb_prot - sizeof(struct ip));
803dab8: e0bff517 ldw r2,-44(fp)
803dabc: 10800317 ldw r2,12(r2)
803dac0: 10bffb04 addi r2,r2,-20
803dac4: e0bffc15 stw r2,-16(fp)
pip->ip_src = src_ip;
803dac8: e0bffc17 ldw r2,-16(fp)
803dacc: e0ffff17 ldw r3,-4(fp)
803dad0: 10c00315 stw r3,12(r2)
pip->ip_dest = p->fhost;
803dad4: e0bff517 ldw r2,-44(fp)
803dad8: 10c00717 ldw r3,28(r2)
803dadc: e0bffc17 ldw r2,-16(fp)
803dae0: 10c00415 stw r3,16(r2)
udp_mib.udpOutDatagrams++;
803dae4: 008201b4 movhi r2,2054
803dae8: 10b96617 ldw r2,-6760(r2)
803daec: 10c00044 addi r3,r2,1
803daf0: 008201b4 movhi r2,2054
803daf4: 10f96615 stw r3,-6760(r2)
p->nb_plen = udplen; /* nb_prot was adjusted above */
803daf8: e0fffd17 ldw r3,-12(fp)
803dafc: e0bff517 ldw r2,-44(fp)
803db00: 10c00415 stw r3,16(r2)
e = ip_write(UDP_PROT, p);
803db04: e17ff517 ldw r5,-44(fp)
803db08: 01000444 movi r4,17
803db0c: 803a9e80 call 803a9e8 <ip_write>
803db10: e0bffb15 stw r2,-20(fp)
UNLOCK_NET_RESOURCE(NET_RESID);
803db14: 0009883a mov r4,zero
803db18: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return e;
803db1c: e0bffb17 ldw r2,-20(fp)
}
803db20: e037883a mov sp,fp
803db24: dfc00117 ldw ra,4(sp)
803db28: df000017 ldw fp,0(sp)
803db2c: dec00204 addi sp,sp,8
803db30: f800283a ret
0803db34 <udpswap>:
*/
#if (BYTE_ORDER == LITTLE_ENDIAN)
void
udpswap(struct udp *pup)
{
803db34: defffe04 addi sp,sp,-8
803db38: df000115 stw fp,4(sp)
803db3c: df000104 addi fp,sp,4
803db40: e13fff15 stw r4,-4(fp)
pup->ud_srcp = htons(pup->ud_srcp);
803db44: e0bfff17 ldw r2,-4(fp)
803db48: 1080000b ldhu r2,0(r2)
803db4c: 10bfffcc andi r2,r2,65535
803db50: 1004d23a srli r2,r2,8
803db54: 1007883a mov r3,r2
803db58: e0bfff17 ldw r2,-4(fp)
803db5c: 1080000b ldhu r2,0(r2)
803db60: 10bfffcc andi r2,r2,65535
803db64: 1004923a slli r2,r2,8
803db68: 1884b03a or r2,r3,r2
803db6c: 1007883a mov r3,r2
803db70: e0bfff17 ldw r2,-4(fp)
803db74: 10c0000d sth r3,0(r2)
pup->ud_dstp = htons(pup->ud_dstp);
803db78: e0bfff17 ldw r2,-4(fp)
803db7c: 1080008b ldhu r2,2(r2)
803db80: 10bfffcc andi r2,r2,65535
803db84: 1004d23a srli r2,r2,8
803db88: 1007883a mov r3,r2
803db8c: e0bfff17 ldw r2,-4(fp)
803db90: 1080008b ldhu r2,2(r2)
803db94: 10bfffcc andi r2,r2,65535
803db98: 1004923a slli r2,r2,8
803db9c: 1884b03a or r2,r3,r2
803dba0: 1007883a mov r3,r2
803dba4: e0bfff17 ldw r2,-4(fp)
803dba8: 10c0008d sth r3,2(r2)
pup->ud_len = htons(pup->ud_len);
803dbac: e0bfff17 ldw r2,-4(fp)
803dbb0: 1080010b ldhu r2,4(r2)
803dbb4: 10bfffcc andi r2,r2,65535
803dbb8: 1004d23a srli r2,r2,8
803dbbc: 1007883a mov r3,r2
803dbc0: e0bfff17 ldw r2,-4(fp)
803dbc4: 1080010b ldhu r2,4(r2)
803dbc8: 10bfffcc andi r2,r2,65535
803dbcc: 1004923a slli r2,r2,8
803dbd0: 1884b03a or r2,r3,r2
803dbd4: 1007883a mov r3,r2
803dbd8: e0bfff17 ldw r2,-4(fp)
803dbdc: 10c0010d sth r3,4(r2)
pup->ud_cksum = htons(pup->ud_cksum);
803dbe0: e0bfff17 ldw r2,-4(fp)
803dbe4: 1080018b ldhu r2,6(r2)
803dbe8: 10bfffcc andi r2,r2,65535
803dbec: 1004d23a srli r2,r2,8
803dbf0: 1007883a mov r3,r2
803dbf4: e0bfff17 ldw r2,-4(fp)
803dbf8: 1080018b ldhu r2,6(r2)
803dbfc: 10bfffcc andi r2,r2,65535
803dc00: 1004923a slli r2,r2,8
803dc04: 1884b03a or r2,r3,r2
803dc08: 1007883a mov r3,r2
803dc0c: e0bfff17 ldw r2,-4(fp)
803dc10: 10c0018d sth r3,6(r2)
}
803dc14: 0001883a nop
803dc18: e037883a mov sp,fp
803dc1c: df000017 ldw fp,0(sp)
803dc20: dec00104 addi sp,sp,4
803dc24: f800283a ret
0803dc28 <udp_socket>:
#define MINSOCKET 1200
static unshort usocket = 0; /* next socket to grab */
unshort
udp_socket(void)
{
803dc28: defffe04 addi sp,sp,-8
803dc2c: df000115 stw fp,4(sp)
803dc30: df000104 addi fp,sp,4
UDPCONN tmp;
if (usocket < MINSOCKET)
803dc34: d0a09d0b ldhu r2,-32140(gp)
803dc38: 10bfffcc andi r2,r2,65535
803dc3c: 10812c28 cmpgeui r2,r2,1200
803dc40: 10000a1e bne r2,zero,803dc6c <udp_socket+0x44>
{
/* logic for for init and after wraps */
usocket = (unshort)(cticks & 0x7fff);
803dc44: d0a07d17 ldw r2,-32268(gp)
803dc48: 109fffcc andi r2,r2,32767
803dc4c: d0a09d0d sth r2,-32140(gp)
if (usocket < MINSOCKET)
803dc50: d0a09d0b ldhu r2,-32140(gp)
803dc54: 10bfffcc andi r2,r2,65535
803dc58: 10812c28 cmpgeui r2,r2,1200
803dc5c: 1000031e bne r2,zero,803dc6c <udp_socket+0x44>
usocket += MINSOCKET;
803dc60: d0a09d0b ldhu r2,-32140(gp)
803dc64: 10812c04 addi r2,r2,1200
803dc68: d0a09d0d sth r2,-32140(gp)
}
/* scan existing connections, making sure socket isn't in use */
for (tmp = firstudp; tmp; tmp = tmp->u_next)
803dc6c: d0a09e17 ldw r2,-32136(gp)
803dc70: e0bfff15 stw r2,-4(fp)
803dc74: 00000f06 br 803dcb4 <udp_socket+0x8c>
{
if (tmp->u_lport == usocket)
803dc78: e0bfff17 ldw r2,-4(fp)
803dc7c: 10c0018b ldhu r3,6(r2)
803dc80: d0a09d0b ldhu r2,-32140(gp)
803dc84: 18ffffcc andi r3,r3,65535
803dc88: 10bfffcc andi r2,r2,65535
803dc8c: 1880061e bne r3,r2,803dca8 <udp_socket+0x80>
{
usocket++; /* bump socket number */
803dc90: d0a09d0b ldhu r2,-32140(gp)
803dc94: 10800044 addi r2,r2,1
803dc98: d0a09d0d sth r2,-32140(gp)
tmp = firstudp; /* restart scan */
803dc9c: d0a09e17 ldw r2,-32136(gp)
803dca0: e0bfff15 stw r2,-4(fp)
continue;
803dca4: 0001883a nop
for (tmp = firstudp; tmp; tmp = tmp->u_next)
803dca8: e0bfff17 ldw r2,-4(fp)
803dcac: 10800017 ldw r2,0(r2)
803dcb0: e0bfff15 stw r2,-4(fp)
803dcb4: e0bfff17 ldw r2,-4(fp)
803dcb8: 103fef1e bne r2,zero,803dc78 <udp_socket+0x50>
}
}
return usocket++;
803dcbc: d0a09d0b ldhu r2,-32140(gp)
803dcc0: 10c00044 addi r3,r2,1
803dcc4: d0e09d0d sth r3,-32140(gp)
}
803dcc8: e037883a mov sp,fp
803dccc: df000017 ldw fp,0(sp)
803dcd0: dec00104 addi sp,sp,4
803dcd4: f800283a ret
0803dcd8 <udp_alloc>:
* RETURNS: Returns buffer, or NULL in no buffer was available.
*/
PACKET
udp_alloc(int datalen, int optlen)
{
803dcd8: defffa04 addi sp,sp,-24
803dcdc: dfc00515 stw ra,20(sp)
803dce0: df000415 stw fp,16(sp)
803dce4: df000404 addi fp,sp,16
803dce8: e13ffd15 stw r4,-12(fp)
803dcec: e17ffc15 stw r5,-16(fp)
int len;
PACKET p;
len = (datalen + sizeof(struct udp) + 1) & ~1;
803dcf0: e0bffd17 ldw r2,-12(fp)
803dcf4: 10800244 addi r2,r2,9
803dcf8: 1007883a mov r3,r2
803dcfc: 00bfff84 movi r2,-2
803dd00: 1884703a and r2,r3,r2
803dd04: e0bfff15 stw r2,-4(fp)
LOCK_NET_RESOURCE(FREEQ_RESID);
803dd08: 01000084 movi r4,2
803dd0c: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
p = pk_alloc(len + UDPHDRSLEN + optlen);
803dd10: e0bfff17 ldw r2,-4(fp)
803dd14: 10c00904 addi r3,r2,36
803dd18: e0bffc17 ldw r2,-16(fp)
803dd1c: 1885883a add r2,r3,r2
803dd20: 1009883a mov r4,r2
803dd24: 80284340 call 8028434 <pk_alloc>
803dd28: e0bffe15 stw r2,-8(fp)
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803dd2c: 01000084 movi r4,2
803dd30: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
if (p != (PACKET)NULL)
803dd34: e0bffe17 ldw r2,-8(fp)
803dd38: 10001026 beq r2,zero,803dd7c <udp_alloc+0xa4>
{
/* set prot pointers past end of UDP header */
len = sizeof(struct ip) + (optlen >> 2) + sizeof(struct udp);
803dd3c: e0bffc17 ldw r2,-16(fp)
803dd40: 1005d0ba srai r2,r2,2
803dd44: 10800704 addi r2,r2,28
803dd48: e0bfff15 stw r2,-4(fp)
p->nb_prot += len;
803dd4c: e0bffe17 ldw r2,-8(fp)
803dd50: 10c00317 ldw r3,12(r2)
803dd54: e0bfff17 ldw r2,-4(fp)
803dd58: 1887883a add r3,r3,r2
803dd5c: e0bffe17 ldw r2,-8(fp)
803dd60: 10c00315 stw r3,12(r2)
p->nb_plen -= len;
803dd64: e0bffe17 ldw r2,-8(fp)
803dd68: 10c00417 ldw r3,16(r2)
803dd6c: e0bfff17 ldw r2,-4(fp)
803dd70: 1887c83a sub r3,r3,r2
803dd74: e0bffe17 ldw r2,-8(fp)
803dd78: 10c00415 stw r3,16(r2)
}
return (p);
803dd7c: e0bffe17 ldw r2,-8(fp)
}
803dd80: e037883a mov sp,fp
803dd84: dfc00117 ldw ra,4(sp)
803dd88: df000017 ldw fp,0(sp)
803dd8c: dec00204 addi sp,sp,8
803dd90: f800283a ret
0803dd94 <udp_maxalloc>:
* returned value, the allocation will fail
*/
int
udp_maxalloc(void)
{
803dd94: deffff04 addi sp,sp,-4
803dd98: df000015 stw fp,0(sp)
803dd9c: d839883a mov fp,sp
* created is ((2^16 - 1) - (size of IP and UDP headers)) */
return (0xFFFF - (sizeof (struct ip) + sizeof (struct udp)));
#else
/* if heap buffers are not available, the largest size of a UDP datagram
* is constrained by what will fit inside a big buffer */
return (bigbufsiz - UDPHDRSLEN);
803dda0: d0a01917 ldw r2,-32668(gp)
803dda4: 10bff704 addi r2,r2,-36
#endif
}
803dda8: e037883a mov sp,fp
803ddac: df000017 ldw fp,0(sp)
803ddb0: dec00104 addi sp,sp,4
803ddb4: f800283a ret
0803ddb8 <udp_free>:
* RETURNS: void
*/
void
udp_free(PACKET p)
{
803ddb8: defffd04 addi sp,sp,-12
803ddbc: dfc00215 stw ra,8(sp)
803ddc0: df000115 stw fp,4(sp)
803ddc4: df000104 addi fp,sp,4
803ddc8: e13fff15 stw r4,-4(fp)
LOCK_NET_RESOURCE(FREEQ_RESID);
803ddcc: 01000084 movi r4,2
803ddd0: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803ddd4: e13fff17 ldw r4,-4(fp)
803ddd8: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803dddc: 01000084 movi r4,2
803dde0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
803dde4: 0001883a nop
803dde8: e037883a mov sp,fp
803ddec: dfc00117 ldw ra,4(sp)
803ddf0: df000017 ldw fp,0(sp)
803ddf4: dec00204 addi sp,sp,8
803ddf8: f800283a ret
0803ddfc <igmpv1_input>:
* OUTPUT: This function returns IGMP_ERR if it is passed an "unknown"
* packet type. Otherwise, it returns IGMP_OK.
*/
int igmpv1_input(PACKET p)
{
803ddfc: defff804 addi sp,sp,-32
803de00: dfc00715 stw ra,28(sp)
803de04: df000615 stw fp,24(sp)
803de08: df000604 addi fp,sp,24
803de0c: e13ffa15 stw r4,-24(fp)
struct igmp * igmp;
struct ip * pip;
struct in_multi * inm;
NET netp = p->net;
803de10: e0bffa17 ldw r2,-24(fp)
803de14: 10800617 ldw r2,24(r2)
803de18: e0bffd15 stw r2,-12(fp)
int rc;
pip = ip_head (p);
803de1c: e0bffa17 ldw r2,-24(fp)
803de20: 10800317 ldw r2,12(r2)
803de24: e0bffc15 stw r2,-16(fp)
igmp = (struct igmp *) (ip_data (pip));
803de28: e0bffc17 ldw r2,-16(fp)
803de2c: 10800003 ldbu r2,0(r2)
803de30: 10803fcc andi r2,r2,255
803de34: 100490ba slli r2,r2,2
803de38: 10800f0c andi r2,r2,60
803de3c: e0fffc17 ldw r3,-16(fp)
803de40: 1885883a add r2,r3,r2
803de44: e0bffb15 stw r2,-20(fp)
switch (igmp->igmp_type)
803de48: e0bffb17 ldw r2,-20(fp)
803de4c: 10800003 ldbu r2,0(r2)
803de50: 10803fcc andi r2,r2,255
803de54: 10c00460 cmpeqi r3,r2,17
803de58: 1800031e bne r3,zero,803de68 <igmpv1_input+0x6c>
803de5c: 108004a0 cmpeqi r2,r2,18
803de60: 1000501e bne r2,zero,803dfa4 <igmpv1_input+0x1a8>
803de64: 00006b06 br 803e014 <igmpv1_input+0x218>
{
case IGMP_HOST_MEMBERSHIP_QUERY:
++igmpstats.igmpv1mode_v1_queries_rcvd;
803de68: 008201b4 movhi r2,2054
803de6c: 10b77517 ldw r2,-8748(r2)
803de70: 10c00044 addi r3,r2,1
803de74: 008201b4 movhi r2,2054
803de78: 10f77515 stw r3,-8748(r2)
* Start the timers in all of our membership records for
* the interface on which the query arrived, except those
* that are already running and those that belong to the
* "all-hosts" group.
*/
for (inm = netp->mc_list; inm; inm = inm->inm_next)
803de7c: e0bffd17 ldw r2,-12(fp)
803de80: 10802c17 ldw r2,176(r2)
803de84: e0bfff15 stw r2,-4(fp)
803de88: 00004206 br 803df94 <igmpv1_input+0x198>
{
/* skip all IPv6 entries - they are indicated by
* an IPv4 address field of 0 */
if (inm->inm_addr == 0)
803de8c: e0bfff17 ldw r2,-4(fp)
803de90: 10800017 ldw r2,0(r2)
803de94: 10003b26 beq r2,zero,803df84 <igmpv1_input+0x188>
continue;
/* skip IPv4 multicast address of 224.0.0.1 (note that
* the IPv4 address stored in inm_addr is in network
* byte order */
if (inm->inm_addr != igmp_all_hosts_group)
803de98: e0bfff17 ldw r2,-4(fp)
803de9c: 10c00017 ldw r3,0(r2)
803dea0: d0a06b17 ldw r2,-32340(gp)
803dea4: 18803826 beq r3,r2,803df88 <igmpv1_input+0x18c>
{
if (inm->inm_timer == 0)
803dea8: e0bfff17 ldw r2,-4(fp)
803deac: 10800317 ldw r2,12(r2)
803deb0: 1000351e bne r2,zero,803df88 <igmpv1_input+0x18c>
{
inm->inm_timer = (unsigned) IGMP_RANDOM_DELAY(inm->inm_addr);
803deb4: 008201b4 movhi r2,2054
803deb8: 10f95117 ldw r3,-6844(r2)
803debc: 008201b4 movhi r2,2054
803dec0: 10b77017 ldw r2,-8768(r2)
803dec4: 10800a17 ldw r2,40(r2)
803dec8: 1008d63a srli r4,r2,24
803decc: 008201b4 movhi r2,2054
803ded0: 10b77017 ldw r2,-8768(r2)
803ded4: 10800a17 ldw r2,40(r2)
803ded8: 1004d23a srli r2,r2,8
803dedc: 10bfc00c andi r2,r2,65280
803dee0: 2088b03a or r4,r4,r2
803dee4: 008201b4 movhi r2,2054
803dee8: 10b77017 ldw r2,-8768(r2)
803deec: 10800a17 ldw r2,40(r2)
803def0: 1004923a slli r2,r2,8
803def4: 10803fec andhi r2,r2,255
803def8: 2088b03a or r4,r4,r2
803defc: 008201b4 movhi r2,2054
803df00: 10b77017 ldw r2,-8768(r2)
803df04: 10800a17 ldw r2,40(r2)
803df08: 1004963a slli r2,r2,24
803df0c: 2084b03a or r2,r4,r2
803df10: 1887883a add r3,r3,r2
803df14: e0bfff17 ldw r2,-4(fp)
803df18: 10800017 ldw r2,0(r2)
803df1c: 1008d63a srli r4,r2,24
803df20: e0bfff17 ldw r2,-4(fp)
803df24: 10800017 ldw r2,0(r2)
803df28: 1004d23a srli r2,r2,8
803df2c: 10bfc00c andi r2,r2,65280
803df30: 2088b03a or r4,r4,r2
803df34: e0bfff17 ldw r2,-4(fp)
803df38: 10800017 ldw r2,0(r2)
803df3c: 1004923a slli r2,r2,8
803df40: 10803fec andhi r2,r2,255
803df44: 2088b03a or r4,r4,r2
803df48: e0bfff17 ldw r2,-4(fp)
803df4c: 10800017 ldw r2,0(r2)
803df50: 1004963a slli r2,r2,24
803df54: 2084b03a or r2,r4,r2
803df58: 1885883a add r2,r3,r2
803df5c: 01400c84 movi r5,50
803df60: 1009883a mov r4,r2
803df64: 800d05c0 call 800d05c <__umodsi3>
803df68: 10c00044 addi r3,r2,1
803df6c: e0bfff17 ldw r2,-4(fp)
803df70: 10c00315 stw r3,12(r2)
/* increment the count of running timers */
++igmp_timers_are_running;
803df74: d0a06917 ldw r2,-32348(gp)
803df78: 10800044 addi r2,r2,1
803df7c: d0a06915 stw r2,-32348(gp)
803df80: 00000106 br 803df88 <igmpv1_input+0x18c>
continue;
803df84: 0001883a nop
for (inm = netp->mc_list; inm; inm = inm->inm_next)
803df88: e0bfff17 ldw r2,-4(fp)
803df8c: 10800517 ldw r2,20(r2)
803df90: e0bfff15 stw r2,-4(fp)
803df94: e0bfff17 ldw r2,-4(fp)
803df98: 103fbc1e bne r2,zero,803de8c <igmpv1_input+0x90>
}
}
}
rc = IGMP_OK;
803df9c: e03ffe15 stw zero,-8(fp)
break;
803dfa0: 00002406 br 803e034 <igmpv1_input+0x238>
case IGMP_HOST_MEMBERSHIP_REPORT:
++igmpstats.igmpv1mode_v1_reports_rcvd;
803dfa4: 008201b4 movhi r2,2054
803dfa8: 10b77617 ldw r2,-8744(r2)
803dfac: 10c00044 addi r3,r2,1
803dfb0: 008201b4 movhi r2,2054
803dfb4: 10f77615 stw r3,-8744(r2)
/*
* If we belong to the group being reported and have a
* running timer for that group, stop our timer for that
* group.
*/
inm = lookup_mcast(igmp->igmp_group, netp);
803dfb8: e0bffb17 ldw r2,-20(fp)
803dfbc: 10800117 ldw r2,4(r2)
803dfc0: e17ffd17 ldw r5,-12(fp)
803dfc4: 1009883a mov r4,r2
803dfc8: 803c5040 call 803c504 <lookup_mcast>
803dfcc: e0bfff15 stw r2,-4(fp)
if (inm != NULL)
803dfd0: e0bfff17 ldw r2,-4(fp)
803dfd4: 10000d26 beq r2,zero,803e00c <igmpv1_input+0x210>
{
if (inm->inm_timer > 0)
803dfd8: e0bfff17 ldw r2,-4(fp)
803dfdc: 10800317 ldw r2,12(r2)
803dfe0: 10000a26 beq r2,zero,803e00c <igmpv1_input+0x210>
{
inm->inm_timer = 0;
803dfe4: e0bfff17 ldw r2,-4(fp)
803dfe8: 10000315 stw zero,12(r2)
/* decrement the count of running timers */
--igmp_timers_are_running;
803dfec: d0a06917 ldw r2,-32348(gp)
803dff0: 10bfffc4 addi r2,r2,-1
803dff4: d0a06915 stw r2,-32348(gp)
++igmpstats.igmpv1mode_v1_reports_rcvd_canceled_timer;
803dff8: 008201b4 movhi r2,2054
803dffc: 10b77717 ldw r2,-8740(r2)
803e000: 10c00044 addi r3,r2,1
803e004: 008201b4 movhi r2,2054
803e008: 10f77715 stw r3,-8740(r2)
}
}
rc = IGMP_OK;
803e00c: e03ffe15 stw zero,-8(fp)
break;
803e010: 00000806 br 803e034 <igmpv1_input+0x238>
default:
++igmpstats.igmpv1mode_unknown_pkttype;
803e014: 008201b4 movhi r2,2054
803e018: 10b78417 ldw r2,-8688(r2)
803e01c: 10c00044 addi r3,r2,1
803e020: 008201b4 movhi r2,2054
803e024: 10f78415 stw r3,-8688(r2)
rc = IGMP_ERR;
803e028: 00bfffc4 movi r2,-1
803e02c: e0bffe15 stw r2,-8(fp)
break;
803e030: 0001883a nop
}
/* we're done with the received packet; return packet buffer back
* to free pool */
LOCK_NET_RESOURCE(FREEQ_RESID);
803e034: 01000084 movi r4,2
803e038: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803e03c: e13ffa17 ldw r4,-24(fp)
803e040: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803e044: 01000084 movi r4,2
803e048: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return rc;
803e04c: e0bffe17 ldw r2,-8(fp)
}
803e050: e037883a mov sp,fp
803e054: dfc00117 ldw ra,4(sp)
803e058: df000017 ldw fp,0(sp)
803e05c: dec00204 addi sp,sp,8
803e060: f800283a ret
0803e064 <igmpv2_input>:
* from igmpv2_process_report (), IGMP_OK (for a received Leave Group
* message only), or IGMP_ERR (for a message of an "unknown" type).
*/
int igmpv2_input (PACKET p)
{
803e064: defff904 addi sp,sp,-28
803e068: dfc00615 stw ra,24(sp)
803e06c: df000515 stw fp,20(sp)
803e070: df000504 addi fp,sp,20
803e074: e13ffb15 stw r4,-20(fp)
struct igmp * igmp;
struct ip * pip;
u_char type;
int rc;
pip = ip_head (p);
803e078: e0bffb17 ldw r2,-20(fp)
803e07c: 10800317 ldw r2,12(r2)
803e080: e0bffe15 stw r2,-8(fp)
igmp = (struct igmp *) (ip_data (pip));
803e084: e0bffe17 ldw r2,-8(fp)
803e088: 10800003 ldbu r2,0(r2)
803e08c: 10803fcc andi r2,r2,255
803e090: 100490ba slli r2,r2,2
803e094: 10800f0c andi r2,r2,60
803e098: e0fffe17 ldw r3,-8(fp)
803e09c: 1885883a add r2,r3,r2
803e0a0: e0bffd15 stw r2,-12(fp)
/* extract the IGMP packet type from received packet */
type = igmp->igmp_type;
803e0a4: e0bffd17 ldw r2,-12(fp)
803e0a8: 10800003 ldbu r2,0(r2)
803e0ac: e0bffcc5 stb r2,-13(fp)
switch (type)
803e0b0: e0bffcc3 ldbu r2,-13(fp)
803e0b4: 10c004a0 cmpeqi r3,r2,18
803e0b8: 18000e1e bne r3,zero,803e0f4 <igmpv2_input+0x90>
803e0bc: 10c004c8 cmpgei r3,r2,19
803e0c0: 1800031e bne r3,zero,803e0d0 <igmpv2_input+0x6c>
803e0c4: 10800460 cmpeqi r2,r2,17
803e0c8: 1000061e bne r2,zero,803e0e4 <igmpv2_input+0x80>
803e0cc: 00001406 br 803e120 <igmpv2_input+0xbc>
803e0d0: 10c005a0 cmpeqi r3,r2,22
803e0d4: 1800071e bne r3,zero,803e0f4 <igmpv2_input+0x90>
803e0d8: 108005e0 cmpeqi r2,r2,23
803e0dc: 1000091e bne r2,zero,803e104 <igmpv2_input+0xa0>
803e0e0: 00000f06 br 803e120 <igmpv2_input+0xbc>
{
case IGMP_HOST_MEMBERSHIP_QUERY:
rc = igmpv2_process_query (p);
803e0e4: e13ffb17 ldw r4,-20(fp)
803e0e8: 803e2840 call 803e284 <igmpv2_process_query>
803e0ec: e0bfff15 stw r2,-4(fp)
break;
803e0f0: 00001306 br 803e140 <igmpv2_input+0xdc>
case IGMP_HOST_MEMBERSHIP_REPORT:
case IGMPv2_MEMBERSHIP_REPORT:
rc = igmpv2_process_report (p);
803e0f4: e13ffb17 ldw r4,-20(fp)
803e0f8: 803e1700 call 803e170 <igmpv2_process_report>
803e0fc: e0bfff15 stw r2,-4(fp)
break;
803e100: 00000f06 br 803e140 <igmpv2_input+0xdc>
* expect to receive such messages. However, according to
* RFC 2236, some implementations of an older version of the
* IGMPv2 specification send leave messages to the group
* being left. If we do receive such a message, we will
* drop it. */
++igmpstats.igmpv2mode_v2_leave_msgs_rcvd;
803e104: 008201b4 movhi r2,2054
803e108: 10b77d17 ldw r2,-8716(r2)
803e10c: 10c00044 addi r3,r2,1
803e110: 008201b4 movhi r2,2054
803e114: 10f77d15 stw r3,-8716(r2)
rc = IGMP_OK;
803e118: e03fff15 stw zero,-4(fp)
break;
803e11c: 00000806 br 803e140 <igmpv2_input+0xdc>
default:
++igmpstats.igmpv2mode_unknown_pkttype;
803e120: 008201b4 movhi r2,2054
803e124: 10b78917 ldw r2,-8668(r2)
803e128: 10c00044 addi r3,r2,1
803e12c: 008201b4 movhi r2,2054
803e130: 10f78915 stw r3,-8668(r2)
rc = IGMP_ERR;
803e134: 00bfffc4 movi r2,-1
803e138: e0bfff15 stw r2,-4(fp)
break;
803e13c: 0001883a nop
} /* end SWITCH */
/* we're done processing the received packet; return packet buffer
* back to free pool */
LOCK_NET_RESOURCE(FREEQ_RESID);
803e140: 01000084 movi r4,2
803e144: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
pk_free(p);
803e148: e13ffb17 ldw r4,-20(fp)
803e14c: 80287480 call 8028748 <pk_free>
UNLOCK_NET_RESOURCE(FREEQ_RESID);
803e150: 01000084 movi r4,2
803e154: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return rc;
803e158: e0bfff17 ldw r2,-4(fp)
}
803e15c: e037883a mov sp,fp
803e160: dfc00117 ldw ra,4(sp)
803e164: df000017 ldw fp,0(sp)
803e168: dec00204 addi sp,sp,8
803e16c: f800283a ret
0803e170 <igmpv2_process_report>:
*
* OUTPUT: This function always returns IGMP_OK.
*/
int igmpv2_process_report (PACKET p)
{
803e170: defff904 addi sp,sp,-28
803e174: dfc00615 stw ra,24(sp)
803e178: df000515 stw fp,20(sp)
803e17c: df000504 addi fp,sp,20
803e180: e13ffb15 stw r4,-20(fp)
struct igmp * igmp;
struct ip * pip;
NET netp;
struct in_multi * inm;
netp = p->net;
803e184: e0bffb17 ldw r2,-20(fp)
803e188: 10800617 ldw r2,24(r2)
803e18c: e0bfff15 stw r2,-4(fp)
pip = ip_head (p);
803e190: e0bffb17 ldw r2,-20(fp)
803e194: 10800317 ldw r2,12(r2)
803e198: e0bffe15 stw r2,-8(fp)
igmp = (struct igmp *) (ip_data (pip));
803e19c: e0bffe17 ldw r2,-8(fp)
803e1a0: 10800003 ldbu r2,0(r2)
803e1a4: 10803fcc andi r2,r2,255
803e1a8: 100490ba slli r2,r2,2
803e1ac: 10800f0c andi r2,r2,60
803e1b0: e0fffe17 ldw r3,-8(fp)
803e1b4: 1885883a add r2,r3,r2
803e1b8: e0bffd15 stw r2,-12(fp)
* processing IGMPv2 packets (it has "downgraded" itself because
* there are IGMPv1 routers on that network); however, we do not
* know that, and hence we don't cancel our timer (for the
* subsequent transmission of a IGMPv1 report).
*/
inm = lookup_mcast(igmp->igmp_group, netp);
803e1bc: e0bffd17 ldw r2,-12(fp)
803e1c0: 10800117 ldw r2,4(r2)
803e1c4: e17fff17 ldw r5,-4(fp)
803e1c8: 1009883a mov r4,r2
803e1cc: 803c5040 call 803c504 <lookup_mcast>
803e1d0: e0bffc15 stw r2,-16(fp)
if (inm != NULL)
803e1d4: e0bffc17 ldw r2,-16(fp)
803e1d8: 10001f26 beq r2,zero,803e258 <igmpv2_process_report+0xe8>
{
if (inm->inm_timer != 0)
803e1dc: e0bffc17 ldw r2,-16(fp)
803e1e0: 10800317 ldw r2,12(r2)
803e1e4: 10001626 beq r2,zero,803e240 <igmpv2_process_report+0xd0>
{
/* we have a timer running */
if (!(netp->igmpv1_rtr_present &&
803e1e8: e0bfff17 ldw r2,-4(fp)
803e1ec: 10802d03 ldbu r2,180(r2)
803e1f0: 10803fcc andi r2,r2,255
803e1f4: 10000526 beq r2,zero,803e20c <igmpv2_process_report+0x9c>
igmp->igmp_type == IGMPv2_MEMBERSHIP_REPORT))
803e1f8: e0bffd17 ldw r2,-12(fp)
803e1fc: 10800003 ldbu r2,0(r2)
if (!(netp->igmpv1_rtr_present &&
803e200: 10803fcc andi r2,r2,255
803e204: 108005a0 cmpeqi r2,r2,22
803e208: 1000181e bne r2,zero,803e26c <igmpv2_process_report+0xfc>
{
/* cancel timer */
inm->inm_timer = 0;
803e20c: e0bffc17 ldw r2,-16(fp)
803e210: 10000315 stw zero,12(r2)
/* decrement the count of running timers */
--igmp_timers_are_running;
803e214: d0a06917 ldw r2,-32348(gp)
803e218: 10bfffc4 addi r2,r2,-1
803e21c: d0a06915 stw r2,-32348(gp)
/* indicate that we are not the last host to send a
* report for this group */
inm->last2send_report = IGMP_FALSE;
803e220: e0bffc17 ldw r2,-16(fp)
803e224: 10000405 stb zero,16(r2)
++igmpstats.igmpv2mode_v12_reports_rcvd_canceled_timer;
803e228: 008201b4 movhi r2,2054
803e22c: 10b77b17 ldw r2,-8724(r2)
803e230: 10c00044 addi r3,r2,1
803e234: 008201b4 movhi r2,2054
803e238: 10f77b15 stw r3,-8724(r2)
803e23c: 00000b06 br 803e26c <igmpv2_process_report+0xfc>
else
{
/* we don't have a timer running; perhaps the source
* host has just joined the group, and has sent an
* unsolicited report */
++igmpstats.igmpv2mode_v12_reports_rcvd_no_timer;
803e240: 008201b4 movhi r2,2054
803e244: 10b77c17 ldw r2,-8720(r2)
803e248: 10c00044 addi r3,r2,1
803e24c: 008201b4 movhi r2,2054
803e250: 10f77c15 stw r3,-8720(r2)
803e254: 00000506 br 803e26c <igmpv2_process_report+0xfc>
* on that interface. Even if imperfect filtering at the
* device level causes reports for unregistered groups to
* be passed up to the IP module, ip_rcv_phase2 () is
* responsible for dropping them, and so we should never
* receive such packets. */
++igmpstats.igmpv2mode_v12_unknown_grp_reports_rcvd;
803e258: 008201b4 movhi r2,2054
803e25c: 10b78717 ldw r2,-8676(r2)
803e260: 10c00044 addi r3,r2,1
803e264: 008201b4 movhi r2,2054
803e268: 10f78715 stw r3,-8676(r2)
}
return IGMP_OK;
803e26c: 0005883a mov r2,zero
}
803e270: e037883a mov sp,fp
803e274: dfc00117 ldw ra,4(sp)
803e278: df000017 ldw fp,0(sp)
803e27c: dec00204 addi sp,sp,8
803e280: f800283a ret
0803e284 <igmpv2_process_query>:
*
* OUTPUT: This function always returns IGMP_OK.
*/
int igmpv2_process_query (PACKET p)
{
803e284: defff804 addi sp,sp,-32
803e288: dfc00715 stw ra,28(sp)
803e28c: df000615 stw fp,24(sp)
803e290: df000604 addi fp,sp,24
803e294: e13ffa15 stw r4,-24(fp)
NET netp;
u_short max_resp_time;
u_char process_all;
struct in_multi * inm;
netp = p->net;
803e298: e0bffa17 ldw r2,-24(fp)
803e29c: 10800617 ldw r2,24(r2)
803e2a0: e0bffd15 stw r2,-12(fp)
pip = ip_head (p);
803e2a4: e0bffa17 ldw r2,-24(fp)
803e2a8: 10800317 ldw r2,12(r2)
803e2ac: e0bffc15 stw r2,-16(fp)
igmp = (struct igmp *) (ip_data (pip));
803e2b0: e0bffc17 ldw r2,-16(fp)
803e2b4: 10800003 ldbu r2,0(r2)
803e2b8: 10803fcc andi r2,r2,255
803e2bc: 100490ba slli r2,r2,2
803e2c0: 10800f0c andi r2,r2,60
803e2c4: e0fffc17 ldw r3,-16(fp)
803e2c8: 1885883a add r2,r3,r2
803e2cc: e0bffb15 stw r2,-20(fp)
if (igmp->igmp_code == 0)
803e2d0: e0bffb17 ldw r2,-20(fp)
803e2d4: 10800043 ldbu r2,1(r2)
803e2d8: 10803fcc andi r2,r2,255
803e2dc: 1000101e bne r2,zero,803e320 <igmpv2_process_query+0x9c>
{
/* this is a IGMPv1 Host Membership Query */
netp->igmpv1_rtr_present = IGMP_TRUE;
803e2e0: e0bffd17 ldw r2,-12(fp)
803e2e4: 00c00044 movi r3,1
803e2e8: 10c02d05 stb r3,180(r2)
netp->igmpv1_query_rcvd_time = cticks;
803e2ec: d0e07d17 ldw r3,-32268(gp)
803e2f0: e0bffd17 ldw r2,-12(fp)
803e2f4: 10c02e15 stw r3,184(r2)
++igmpstats.igmpv2mode_v1_queries_rcvd;
803e2f8: 008201b4 movhi r2,2054
803e2fc: 10b77817 ldw r2,-8736(r2)
803e300: 10c00044 addi r3,r2,1
803e304: 008201b4 movhi r2,2054
803e308: 10f77815 stw r3,-8736(r2)
/* set maximum time to respond to the equivalent of 10
* seconds worth of "ticks" (the timeout routine is
* intended to be invoked PR_FASTHZ (5) times a second,
* so each tick is equal to 200 ms) */
max_resp_time = IGMP_MAX_HOST_REPORT_DELAY * PR_FASTHZ;
803e30c: 00800c84 movi r2,50
803e310: e0bfff8d sth r2,-2(fp)
process_all = IGMP_TRUE;
803e314: 00800044 movi r2,1
803e318: e0bfff45 stb r2,-3(fp)
803e31c: 00001806 br 803e380 <igmpv2_process_query+0xfc>
}
else
{
/* this is either a IGMPv2 General Query or
* a IGMPv2 Group-Specific Query */
if (igmp->igmp_group == 0)
803e320: e0bffb17 ldw r2,-20(fp)
803e324: 10800117 ldw r2,4(r2)
803e328: 1000081e bne r2,zero,803e34c <igmpv2_process_query+0xc8>
{
/* this is a IGMPv2 General Query */
++igmpstats.igmpv2mode_v2_general_queries_rcvd;
803e32c: 008201b4 movhi r2,2054
803e330: 10b77917 ldw r2,-8732(r2)
803e334: 10c00044 addi r3,r2,1
803e338: 008201b4 movhi r2,2054
803e33c: 10f77915 stw r3,-8732(r2)
process_all = IGMP_TRUE;
803e340: 00800044 movi r2,1
803e344: e0bfff45 stb r2,-3(fp)
803e348: 00000606 br 803e364 <igmpv2_process_query+0xe0>
}
else
{
/* this is a IGMPv2 Group-Specific Query */
++igmpstats.igmpv2mode_v2_grp_specific_queries_rcvd;
803e34c: 008201b4 movhi r2,2054
803e350: 10b77a17 ldw r2,-8728(r2)
803e354: 10c00044 addi r3,r2,1
803e358: 008201b4 movhi r2,2054
803e35c: 10f77a15 stw r3,-8728(r2)
process_all = IGMP_FALSE;
803e360: e03fff45 stb zero,-3(fp)
* IGMPv2 General Query or a IGMPv2 Group-Specific Query,
* set maximum time to respond to value extracted
* from received message. The value in the message
* is in tenths of a second. max_resp_time is in
* units of ticks (where one tick is 200 ms) */
max_resp_time = (igmp->igmp_code * PR_FASTHZ) / 10;
803e364: e0bffb17 ldw r2,-20(fp)
803e368: 10800043 ldbu r2,1(r2)
803e36c: 10803fcc andi r2,r2,255
803e370: 1006d7fa srli r3,r2,31
803e374: 1885883a add r2,r3,r2
803e378: 1005d07a srai r2,r2,1
803e37c: e0bfff8d sth r2,-2(fp)
/* process all entries in a link's multicast address linked
* list (pointed to by mc_list) as part of the response to
* the received IGMPv1 Host Membership Query or IGMPv2 General
* Query message */
if (process_all)
803e380: e0bfff43 ldbu r2,-3(fp)
803e384: 10001726 beq r2,zero,803e3e4 <igmpv2_process_query+0x160>
{
for (inm = netp->mc_list; inm; inm = inm->inm_next)
803e388: e0bffd17 ldw r2,-12(fp)
803e38c: 10802c17 ldw r2,176(r2)
803e390: e0bffe15 stw r2,-8(fp)
803e394: 00001006 br 803e3d8 <igmpv2_process_query+0x154>
{
/* skip all IPv6 entries - they are indicated by
* an IPv4 address field of 0 */
if (!(inm->inm_addr)) continue;
803e398: e0bffe17 ldw r2,-8(fp)
803e39c: 10800017 ldw r2,0(r2)
803e3a0: 10000926 beq r2,zero,803e3c8 <igmpv2_process_query+0x144>
/* skip IPv4 multicast address of 224.0.0.1 (note that
* the IPv4 address stored in inm_addr is in network
* byte order */
if (inm->inm_addr != igmp_all_hosts_group)
803e3a4: e0bffe17 ldw r2,-8(fp)
803e3a8: 10c00017 ldw r3,0(r2)
803e3ac: d0a06b17 ldw r2,-32340(gp)
803e3b0: 18800626 beq r3,r2,803e3cc <igmpv2_process_query+0x148>
igmpv2_chk_set_timer (inm, max_resp_time);
803e3b4: e0bfff8b ldhu r2,-2(fp)
803e3b8: 100b883a mov r5,r2
803e3bc: e13ffe17 ldw r4,-8(fp)
803e3c0: 803e4440 call 803e444 <igmpv2_chk_set_timer>
803e3c4: 00000106 br 803e3cc <igmpv2_process_query+0x148>
if (!(inm->inm_addr)) continue;
803e3c8: 0001883a nop
for (inm = netp->mc_list; inm; inm = inm->inm_next)
803e3cc: e0bffe17 ldw r2,-8(fp)
803e3d0: 10800517 ldw r2,20(r2)
803e3d4: e0bffe15 stw r2,-8(fp)
803e3d8: e0bffe17 ldw r2,-8(fp)
803e3dc: 103fee1e bne r2,zero,803e398 <igmpv2_process_query+0x114>
803e3e0: 00001206 br 803e42c <igmpv2_process_query+0x1a8>
{
/* process one (for IGMPv2 Group-Specific Query) entry (the
* one that corresponds to the address listed in the received
* query) - it should be present in the link's multicast
* address list */
inm = lookup_mcast(igmp->igmp_group, netp);
803e3e4: e0bffb17 ldw r2,-20(fp)
803e3e8: 10800117 ldw r2,4(r2)
803e3ec: e17ffd17 ldw r5,-12(fp)
803e3f0: 1009883a mov r4,r2
803e3f4: 803c5040 call 803c504 <lookup_mcast>
803e3f8: e0bffe15 stw r2,-8(fp)
if (inm != NULL)
803e3fc: e0bffe17 ldw r2,-8(fp)
803e400: 10000526 beq r2,zero,803e418 <igmpv2_process_query+0x194>
igmpv2_chk_set_timer (inm, max_resp_time);
803e404: e0bfff8b ldhu r2,-2(fp)
803e408: 100b883a mov r5,r2
803e40c: e13ffe17 ldw r4,-8(fp)
803e410: 803e4440 call 803e444 <igmpv2_chk_set_timer>
803e414: 00000506 br 803e42c <igmpv2_process_query+0x1a8>
else ++igmpstats.igmpv2mode_v2_unknown_grp_specific_queries_rcvd;
803e418: 008201b4 movhi r2,2054
803e41c: 10b78617 ldw r2,-8680(r2)
803e420: 10c00044 addi r3,r2,1
803e424: 008201b4 movhi r2,2054
803e428: 10f78615 stw r3,-8680(r2)
} /* end ELSE (process ALL) */
/* return success; caller will the received packet back to the
* free pool */
return IGMP_OK;
803e42c: 0005883a mov r2,zero
}
803e430: e037883a mov sp,fp
803e434: dfc00117 ldw ra,4(sp)
803e438: df000017 ldw fp,0(sp)
803e43c: dec00204 addi sp,sp,8
803e440: f800283a ret
0803e444 <igmpv2_chk_set_timer>:
*
* OUTPUT: None.
*/
void igmpv2_chk_set_timer (struct in_multi * inm, u_short max_resp_time)
{
803e444: defffc04 addi sp,sp,-16
803e448: dfc00315 stw ra,12(sp)
803e44c: df000215 stw fp,8(sp)
803e450: df000204 addi fp,sp,8
803e454: e13fff15 stw r4,-4(fp)
803e458: 2805883a mov r2,r5
803e45c: e0bffe0d sth r2,-8(fp)
* Otherwise, the current timer for this group is scheduled
* to expire within the duration indicated in the Query
* message, so we let it continue.
*/
if ((inm->inm_timer > max_resp_time) ||
803e460: e0bfff17 ldw r2,-4(fp)
803e464: 10800317 ldw r2,12(r2)
803e468: e0fffe0b ldhu r3,-8(fp)
803e46c: 18800336 bltu r3,r2,803e47c <igmpv2_chk_set_timer+0x38>
(inm->inm_timer == 0))
803e470: e0bfff17 ldw r2,-4(fp)
803e474: 10800317 ldw r2,12(r2)
if ((inm->inm_timer > max_resp_time) ||
803e478: 1000381e bne r2,zero,803e55c <igmpv2_chk_set_timer+0x118>
{
if (inm->inm_timer == 0) ++igmp_timers_are_running;
803e47c: e0bfff17 ldw r2,-4(fp)
803e480: 10800317 ldw r2,12(r2)
803e484: 1000031e bne r2,zero,803e494 <igmpv2_chk_set_timer+0x50>
803e488: d0a06917 ldw r2,-32348(gp)
803e48c: 10800044 addi r2,r2,1
803e490: d0a06915 stw r2,-32348(gp)
inm->inm_timer = (unsigned) IGMPv2_RANDOM_DELAY (max_resp_time, inm->inm_addr);
803e494: 008201b4 movhi r2,2054
803e498: 10f95117 ldw r3,-6844(r2)
803e49c: 008201b4 movhi r2,2054
803e4a0: 10b77017 ldw r2,-8768(r2)
803e4a4: 10800a17 ldw r2,40(r2)
803e4a8: 1008d63a srli r4,r2,24
803e4ac: 008201b4 movhi r2,2054
803e4b0: 10b77017 ldw r2,-8768(r2)
803e4b4: 10800a17 ldw r2,40(r2)
803e4b8: 1004d23a srli r2,r2,8
803e4bc: 10bfc00c andi r2,r2,65280
803e4c0: 2088b03a or r4,r4,r2
803e4c4: 008201b4 movhi r2,2054
803e4c8: 10b77017 ldw r2,-8768(r2)
803e4cc: 10800a17 ldw r2,40(r2)
803e4d0: 1004923a slli r2,r2,8
803e4d4: 10803fec andhi r2,r2,255
803e4d8: 2088b03a or r4,r4,r2
803e4dc: 008201b4 movhi r2,2054
803e4e0: 10b77017 ldw r2,-8768(r2)
803e4e4: 10800a17 ldw r2,40(r2)
803e4e8: 1004963a slli r2,r2,24
803e4ec: 2084b03a or r2,r4,r2
803e4f0: 1887883a add r3,r3,r2
803e4f4: e0bfff17 ldw r2,-4(fp)
803e4f8: 10800017 ldw r2,0(r2)
803e4fc: 1008d63a srli r4,r2,24
803e500: e0bfff17 ldw r2,-4(fp)
803e504: 10800017 ldw r2,0(r2)
803e508: 1004d23a srli r2,r2,8
803e50c: 10bfc00c andi r2,r2,65280
803e510: 2088b03a or r4,r4,r2
803e514: e0bfff17 ldw r2,-4(fp)
803e518: 10800017 ldw r2,0(r2)
803e51c: 1004923a slli r2,r2,8
803e520: 10803fec andhi r2,r2,255
803e524: 2088b03a or r4,r4,r2
803e528: e0bfff17 ldw r2,-4(fp)
803e52c: 10800017 ldw r2,0(r2)
803e530: 1004963a slli r2,r2,24
803e534: 2084b03a or r2,r4,r2
803e538: 1885883a add r2,r3,r2
803e53c: e0fffe0b ldhu r3,-8(fp)
803e540: 180b883a mov r5,r3
803e544: 1009883a mov r4,r2
803e548: 800d05c0 call 800d05c <__umodsi3>
803e54c: 10c00044 addi r3,r2,1
803e550: e0bfff17 ldw r2,-4(fp)
803e554: 10c00315 stw r3,12(r2)
}
return;
803e558: 0001883a nop
803e55c: 0001883a nop
}
803e560: e037883a mov sp,fp
803e564: dfc00117 ldw ra,4(sp)
803e568: df000017 ldw fp,0(sp)
803e56c: dec00204 addi sp,sp,8
803e570: f800283a ret
0803e574 <igmpv2_chk4_rtr_alert_opt>:
* the IP Router Alert option in the received
* packet, and IGMP_FALSE otherwise.
*/
u_char igmpv2_chk4_rtr_alert_opt (struct ip * pip)
{
803e574: defffb04 addi sp,sp,-20
803e578: df000415 stw fp,16(sp)
803e57c: df000404 addi fp,sp,16
803e580: e13ffc15 stw r4,-16(fp)
u_long * rtr_alert_optp;
u_char total_optlen;
u_char optlen;
u_char optval;
total_optlen = ip_hlen (pip) - sizeof (struct ip);
803e584: e0bffc17 ldw r2,-16(fp)
803e588: 10800003 ldbu r2,0(r2)
803e58c: 100490ba slli r2,r2,2
803e590: 10800f0c andi r2,r2,60
803e594: 10bffb04 addi r2,r2,-20
803e598: e0bffec5 stb r2,-5(fp)
if (total_optlen > 0)
803e59c: e0bffec3 ldbu r2,-5(fp)
803e5a0: 10003e26 beq r2,zero,803e69c <igmpv2_chk4_rtr_alert_opt+0x128>
{
/* point to just past the end of the IP header */
optp = (u_char *) (pip + 1);
803e5a4: e0bffc17 ldw r2,-16(fp)
803e5a8: 10800504 addi r2,r2,20
803e5ac: e0bfff15 stw r2,-4(fp)
while (total_optlen > 0)
803e5b0: 00003806 br 803e694 <igmpv2_chk4_rtr_alert_opt+0x120>
{
/* only the lowermost 5 bits are significant */
optval = (*optp) & IPOPT_TYPE_MASK;
803e5b4: e0bfff17 ldw r2,-4(fp)
803e5b8: 10800003 ldbu r2,0(r2)
803e5bc: 108007cc andi r2,r2,31
803e5c0: e0bffe45 stb r2,-7(fp)
switch (optval)
803e5c4: e0bffe43 ldbu r2,-7(fp)
803e5c8: 10c00060 cmpeqi r3,r2,1
803e5cc: 1800071e bne r3,zero,803e5ec <igmpv2_chk4_rtr_alert_opt+0x78>
803e5d0: 10c00520 cmpeqi r3,r2,20
803e5d4: 1800081e bne r3,zero,803e5f8 <igmpv2_chk4_rtr_alert_opt+0x84>
803e5d8: 1000201e bne r2,zero,803e65c <igmpv2_chk4_rtr_alert_opt+0xe8>
{
case EOL_OPT:
/* we've encountered the End of Option List option,
* and so setting optlen isn't necessary */
optlen = 1;
803e5dc: 00800044 movi r2,1
803e5e0: e0bffe85 stb r2,-6(fp)
/* we're done - we couldn't locate the IP Router Alert
* option in this IP header */
return IGMP_FALSE;
803e5e4: 0005883a mov r2,zero
803e5e8: 00002d06 br 803e6a0 <igmpv2_chk4_rtr_alert_opt+0x12c>
case NOOP_OPT:
/* skip past the one byte of the No Operation option */
optlen = 1;
803e5ec: 00800044 movi r2,1
803e5f0: e0bffe85 stb r2,-6(fp)
break;
803e5f4: 00001f06 br 803e674 <igmpv2_chk4_rtr_alert_opt+0x100>
case IP_RTR_ALERT_OPT:
rtr_alert_optp = (u_long *) optp;
803e5f8: e0bfff17 ldw r2,-4(fp)
803e5fc: e0bffd15 stw r2,-12(fp)
if ((ntohl (*rtr_alert_optp)) == IP_RTR_ALERT_OPT_DATA)
803e600: e0bffd17 ldw r2,-12(fp)
803e604: 10800017 ldw r2,0(r2)
803e608: 1006d63a srli r3,r2,24
803e60c: e0bffd17 ldw r2,-12(fp)
803e610: 10800017 ldw r2,0(r2)
803e614: 1004d23a srli r2,r2,8
803e618: 10bfc00c andi r2,r2,65280
803e61c: 1886b03a or r3,r3,r2
803e620: e0bffd17 ldw r2,-12(fp)
803e624: 10800017 ldw r2,0(r2)
803e628: 1004923a slli r2,r2,8
803e62c: 10803fec andhi r2,r2,255
803e630: 1886b03a or r3,r3,r2
803e634: e0bffd17 ldw r2,-12(fp)
803e638: 10800017 ldw r2,0(r2)
803e63c: 1004963a slli r2,r2,24
803e640: 1886b03a or r3,r3,r2
803e644: 00a50134 movhi r2,37892
803e648: 1880021e bne r3,r2,803e654 <igmpv2_chk4_rtr_alert_opt+0xe0>
/* found the option, return success */
return IGMP_TRUE;
803e64c: 00800044 movi r2,1
803e650: 00001306 br 803e6a0 <igmpv2_chk4_rtr_alert_opt+0x12c>
else return IGMP_FALSE;
803e654: 0005883a mov r2,zero
803e658: 00001106 br 803e6a0 <igmpv2_chk4_rtr_alert_opt+0x12c>
default:
/* extract the length of the current option, and compute
* the total length of this option */
optlen = (*(optp + 1)) + 2;
803e65c: e0bfff17 ldw r2,-4(fp)
803e660: 10800044 addi r2,r2,1
803e664: 10800003 ldbu r2,0(r2)
803e668: 10800084 addi r2,r2,2
803e66c: e0bffe85 stb r2,-6(fp)
break;
803e670: 0001883a nop
}
/* skip past the bytes associated with the current option to
* point to the next option. */
optp += optlen;
803e674: e0bffe83 ldbu r2,-6(fp)
803e678: e0ffff17 ldw r3,-4(fp)
803e67c: 1885883a add r2,r3,r2
803e680: e0bfff15 stw r2,-4(fp)
total_optlen -= optlen;
803e684: e0fffec3 ldbu r3,-5(fp)
803e688: e0bffe83 ldbu r2,-6(fp)
803e68c: 1885c83a sub r2,r3,r2
803e690: e0bffec5 stb r2,-5(fp)
while (total_optlen > 0)
803e694: e0bffec3 ldbu r2,-5(fp)
803e698: 103fc61e bne r2,zero,803e5b4 <igmpv2_chk4_rtr_alert_opt+0x40>
} /* end WHILE */
}
/* didn't find IP Alert option in IP header of rcvd packet */
return IGMP_FALSE;
803e69c: 0005883a mov r2,zero
}
803e6a0: e037883a mov sp,fp
803e6a4: df000017 ldw fp,0(sp)
803e6a8: dec00104 addi sp,sp,4
803e6ac: f800283a ret
0803e6b0 <IPADDR_TO_NETP>:
* RETURNS:
*/
void
IPADDR_TO_NETP(ip_addr addr, NET* netp)
{
803e6b0: defffc04 addi sp,sp,-16
803e6b4: df000315 stw fp,12(sp)
803e6b8: df000304 addi fp,sp,12
803e6bc: e13ffe15 stw r4,-8(fp)
803e6c0: e17ffd15 stw r5,-12(fp)
u_short idx = 0;
803e6c4: e03fff8d sth zero,-2(fp)
*netp = nets[idx];
803e6c8: e0bfff8b ldhu r2,-2(fp)
803e6cc: 100690ba slli r3,r2,2
803e6d0: 008201b4 movhi r2,2054
803e6d4: 1885883a add r2,r3,r2
803e6d8: 10f77017 ldw r3,-8768(r2)
803e6dc: e0bffd17 ldw r2,-12(fp)
803e6e0: 10c00015 stw r3,0(r2)
/*
* If ip address is not specified, return the first intfc that supports
* multicast
*/
if (addr == AADDR)
803e6e4: e0bffe17 ldw r2,-8(fp)
803e6e8: 1000281e bne r2,zero,803e78c <IPADDR_TO_NETP+0xdc>
{
for (idx = 0; idx < ifNumber; idx++)
803e6ec: e03fff8d sth zero,-2(fp)
803e6f0: 00001206 br 803e73c <IPADDR_TO_NETP+0x8c>
{
if (nets[idx]->n_mcastlist)
803e6f4: e0bfff8b ldhu r2,-2(fp)
803e6f8: 100690ba slli r3,r2,2
803e6fc: 008201b4 movhi r2,2054
803e700: 1885883a add r2,r3,r2
803e704: 10b77017 ldw r2,-8768(r2)
803e708: 10802b17 ldw r2,172(r2)
803e70c: 10000826 beq r2,zero,803e730 <IPADDR_TO_NETP+0x80>
{
*netp = nets[idx];
803e710: e0bfff8b ldhu r2,-2(fp)
803e714: 100690ba slli r3,r2,2
803e718: 008201b4 movhi r2,2054
803e71c: 1885883a add r2,r3,r2
803e720: 10f77017 ldw r3,-8768(r2)
803e724: e0bffd17 ldw r2,-12(fp)
803e728: 10c00015 stw r3,0(r2)
break;
803e72c: 00002006 br 803e7b0 <IPADDR_TO_NETP+0x100>
for (idx = 0; idx < ifNumber; idx++)
803e730: e0bfff8b ldhu r2,-2(fp)
803e734: 10800044 addi r2,r2,1
803e738: e0bfff8d sth r2,-2(fp)
803e73c: e0ffff8b ldhu r3,-2(fp)
803e740: d0a06717 ldw r2,-32356(gp)
803e744: 18bfeb36 bltu r3,r2,803e6f4 <IPADDR_TO_NETP+0x44>
}
else
*netp = nets[idx];
}
}
}
803e748: 00001906 br 803e7b0 <IPADDR_TO_NETP+0x100>
idx++;
803e74c: e0bfff8b ldhu r2,-2(fp)
803e750: 10800044 addi r2,r2,1
803e754: e0bfff8d sth r2,-2(fp)
if (idx >= ifNumber)
803e758: e0ffff8b ldhu r3,-2(fp)
803e75c: d0a06717 ldw r2,-32356(gp)
803e760: 18800336 bltu r3,r2,803e770 <IPADDR_TO_NETP+0xc0>
*netp = NULL;
803e764: e0bffd17 ldw r2,-12(fp)
803e768: 10000015 stw zero,0(r2)
break;
803e76c: 00001006 br 803e7b0 <IPADDR_TO_NETP+0x100>
*netp = nets[idx];
803e770: e0bfff8b ldhu r2,-2(fp)
803e774: 100690ba slli r3,r2,2
803e778: 008201b4 movhi r2,2054
803e77c: 1885883a add r2,r3,r2
803e780: 10f77017 ldw r3,-8768(r2)
803e784: e0bffd17 ldw r2,-12(fp)
803e788: 10c00015 stw r3,0(r2)
while ((*netp != NULL) && ((*netp)->n_ipaddr != addr))
803e78c: e0bffd17 ldw r2,-12(fp)
803e790: 10800017 ldw r2,0(r2)
803e794: 10000626 beq r2,zero,803e7b0 <IPADDR_TO_NETP+0x100>
803e798: e0bffd17 ldw r2,-12(fp)
803e79c: 10800017 ldw r2,0(r2)
803e7a0: 10800a17 ldw r2,40(r2)
803e7a4: e0fffe17 ldw r3,-8(fp)
803e7a8: 18bfe81e bne r3,r2,803e74c <IPADDR_TO_NETP+0x9c>
}
803e7ac: 00000006 br 803e7b0 <IPADDR_TO_NETP+0x100>
803e7b0: 0001883a nop
803e7b4: e037883a mov sp,fp
803e7b8: df000017 ldw fp,0(sp)
803e7bc: dec00104 addi sp,sp,4
803e7c0: f800283a ret
0803e7c4 <ip_setmoptions>:
* RETURNS:
*/
int
ip_setmoptions(int optname, struct socket * so, void * val)
{
803e7c4: defff304 addi sp,sp,-52
803e7c8: dfc00c15 stw ra,48(sp)
803e7cc: df000b15 stw fp,44(sp)
803e7d0: dc000a15 stw r16,40(sp)
803e7d4: df000b04 addi fp,sp,44
803e7d8: e13ff715 stw r4,-36(fp)
803e7dc: e17ff615 stw r5,-40(fp)
803e7e0: e1bff515 stw r6,-44(fp)
int error = 0;
803e7e4: e03ffe15 stw zero,-8(fp)
u_short i;
struct ip_mreq * mreq;
struct net * netp = NULL;
803e7e8: e03ff815 stw zero,-32(fp)
struct ip_moptions * imo = so->inp_moptions;
803e7ec: e0bff617 ldw r2,-40(fp)
803e7f0: 10800317 ldw r2,12(r2)
803e7f4: e0bffc15 stw r2,-16(fp)
struct ip_moptions **imop = &so->inp_moptions;
803e7f8: e0bff617 ldw r2,-40(fp)
803e7fc: 10800304 addi r2,r2,12
803e800: e0bffb15 stw r2,-20(fp)
ip_addr addr;
if (imo == NULL)
803e804: e0bffc17 ldw r2,-16(fp)
803e808: 1000141e bne r2,zero,803e85c <ip_setmoptions+0x98>
{
/*
* No multicast option buffer attached to the pcb;
* allocate one and initialize to default values.
*/
imo = (struct ip_moptions*)IM_ALLOC(sizeof(*imo));
803e80c: 01001604 movi r4,88
803e810: 802982c0 call 802982c <npalloc>
803e814: e0bffc15 stw r2,-16(fp)
if (imo == NULL)
803e818: e0bffc17 ldw r2,-16(fp)
803e81c: 1000021e bne r2,zero,803e828 <ip_setmoptions+0x64>
return (ENOBUFS);
803e820: 00801a44 movi r2,105
803e824: 00014906 br 803ed4c <ip_setmoptions+0x588>
*imop = imo;
803e828: e0bffb17 ldw r2,-20(fp)
803e82c: e0fffc17 ldw r3,-16(fp)
803e830: 10c00015 stw r3,0(r2)
imo->imo_multicast_netp = NULL;
803e834: e0bffc17 ldw r2,-16(fp)
803e838: 10000015 stw zero,0(r2)
imo->imo_multicast_ttl = IP_DEFAULT_MULTICAST_TTL;
803e83c: e0bffc17 ldw r2,-16(fp)
803e840: 00c00044 movi r3,1
803e844: 10c00105 stb r3,4(r2)
imo->imo_multicast_loop = IP_DEFAULT_MULTICAST_LOOP;
803e848: e0bffc17 ldw r2,-16(fp)
803e84c: 00c00044 movi r3,1
803e850: 10c00145 stb r3,5(r2)
imo->imo_num_memberships = 0;
803e854: e0bffc17 ldw r2,-16(fp)
803e858: 1000018d sth zero,6(r2)
}
switch (optname)
803e85c: e0bff717 ldw r2,-36(fp)
803e860: 10bffdc4 addi r2,r2,-9
803e864: 10c00168 cmpgeui r3,r2,5
803e868: 18011c1e bne r3,zero,803ecdc <ip_setmoptions+0x518>
803e86c: 100690ba slli r3,r2,2
803e870: 00820134 movhi r2,2052
803e874: 1885883a add r2,r3,r2
803e878: 10ba2017 ldw r2,-6016(r2)
803e87c: 1000683a jmp r2
803e880: 0803e894 ori zero,at,4002
803e884: 0803e8fc xorhi zero,at,4003
803e888: 0803e910 cmplti zero,at,4004
803e88c: 0803e944 addi zero,at,4005
803e890: 0803eb08 cmpgei zero,at,4012
case IP_MULTICAST_IF:
/*
* Select the interface for outgoing multicast packets.
*/
addr = *(ip_addr *)val;
803e894: e0bff517 ldw r2,-44(fp)
803e898: 10800017 ldw r2,0(r2)
803e89c: e0bffa15 stw r2,-24(fp)
/*
* AADDR is used to remove a previous selection.
* When no interface is selected, a default one is
* chosen every time a multicast packet is sent.
*/
if (addr == AADDR)
803e8a0: e0bffa17 ldw r2,-24(fp)
803e8a4: 1000031e bne r2,zero,803e8b4 <ip_setmoptions+0xf0>
{
imo->imo_multicast_netp = NULL;
803e8a8: e0bffc17 ldw r2,-16(fp)
803e8ac: 10000015 stw zero,0(r2)
break;
803e8b0: 00010e06 br 803ecec <ip_setmoptions+0x528>
/*
* The selected interface is identified by its local
* IP address. Find the interface and confirm that
* it supports multicasting.
*/
IPADDR_TO_NETP(addr, &netp);
803e8b4: e0bff804 addi r2,fp,-32
803e8b8: 100b883a mov r5,r2
803e8bc: e13ffa17 ldw r4,-24(fp)
803e8c0: 803e6b00 call 803e6b0 <IPADDR_TO_NETP>
if ((netp == NULL) || (netp->n_mcastlist) == NULL)
803e8c4: e0bff817 ldw r2,-32(fp)
803e8c8: 10000326 beq r2,zero,803e8d8 <ip_setmoptions+0x114>
803e8cc: e0bff817 ldw r2,-32(fp)
803e8d0: 10802b17 ldw r2,172(r2)
803e8d4: 1000031e bne r2,zero,803e8e4 <ip_setmoptions+0x120>
{
error = EADDRNOTAVAIL;
803e8d8: 00801f44 movi r2,125
803e8dc: e0bffe15 stw r2,-8(fp)
break;
803e8e0: 00010206 br 803ecec <ip_setmoptions+0x528>
}
if (addr != AADDR)
803e8e4: e0bffa17 ldw r2,-24(fp)
803e8e8: 1000ff26 beq r2,zero,803ece8 <ip_setmoptions+0x524>
imo->imo_multicast_netp = netp;
803e8ec: e0fff817 ldw r3,-32(fp)
803e8f0: e0bffc17 ldw r2,-16(fp)
803e8f4: 10c00015 stw r3,0(r2)
break;
803e8f8: 0000fb06 br 803ece8 <ip_setmoptions+0x524>
case IP_MULTICAST_TTL:
/*
* Set the IP time-to-live for outgoing multicast packets.
*/
imo->imo_multicast_ttl = *(u_char *)val;
803e8fc: e0bff517 ldw r2,-44(fp)
803e900: 10c00003 ldbu r3,0(r2)
803e904: e0bffc17 ldw r2,-16(fp)
803e908: 10c00105 stb r3,4(r2)
break;
803e90c: 0000f706 br 803ecec <ip_setmoptions+0x528>
case IP_MULTICAST_LOOP:
/*
* Set the loopback flag for outgoing multicast packets.
* Must be zero or one.
*/
if (*(u_char *)val > 1)
803e910: e0bff517 ldw r2,-44(fp)
803e914: 10800003 ldbu r2,0(r2)
803e918: 10803fcc andi r2,r2,255
803e91c: 108000b0 cmpltui r2,r2,2
803e920: 1000031e bne r2,zero,803e930 <ip_setmoptions+0x16c>
{
error = EINVAL;
803e924: 00800584 movi r2,22
803e928: e0bffe15 stw r2,-8(fp)
break;
803e92c: 0000ef06 br 803ecec <ip_setmoptions+0x528>
}
imo->imo_multicast_loop = *(u_char *)(val);
803e930: e0bff517 ldw r2,-44(fp)
803e934: 10c00003 ldbu r3,0(r2)
803e938: e0bffc17 ldw r2,-16(fp)
803e93c: 10c00145 stb r3,5(r2)
break;
803e940: 0000ea06 br 803ecec <ip_setmoptions+0x528>
case IP_ADD_MEMBERSHIP:
/*
* Add a multicast group membership.
* Group must be a valid IP multicast address.
*/
mreq = (struct ip_mreq *)val;
803e944: e0bff517 ldw r2,-44(fp)
803e948: e0bff915 stw r2,-28(fp)
if (!IN_MULTICAST(ntohl(mreq->imr_multiaddr)))
803e94c: e0bff917 ldw r2,-28(fp)
803e950: 10800017 ldw r2,0(r2)
803e954: 1006d63a srli r3,r2,24
803e958: e0bff917 ldw r2,-28(fp)
803e95c: 10800017 ldw r2,0(r2)
803e960: 1004d23a srli r2,r2,8
803e964: 10bfc00c andi r2,r2,65280
803e968: 1886b03a or r3,r3,r2
803e96c: e0bff917 ldw r2,-28(fp)
803e970: 10800017 ldw r2,0(r2)
803e974: 1004923a slli r2,r2,8
803e978: 10803fec andhi r2,r2,255
803e97c: 1886b03a or r3,r3,r2
803e980: e0bff917 ldw r2,-28(fp)
803e984: 10800017 ldw r2,0(r2)
803e988: 1004963a slli r2,r2,24
803e98c: 1884b03a or r2,r3,r2
803e990: 10fc002c andhi r3,r2,61440
803e994: 00b80034 movhi r2,57344
803e998: 18800326 beq r3,r2,803e9a8 <ip_setmoptions+0x1e4>
{
error = EINVAL;
803e99c: 00800584 movi r2,22
803e9a0: e0bffe15 stw r2,-8(fp)
break;
803e9a4: 0000d106 br 803ecec <ip_setmoptions+0x528>
* If no interface address was provided, use the interface of
* the route to the given multicast address.
* For the Iniche stack implementation, look for a default
* interface that supports multicast.
*/
IPADDR_TO_NETP(mreq->imr_interface, &netp);
803e9a8: e0bff917 ldw r2,-28(fp)
803e9ac: 10800117 ldw r2,4(r2)
803e9b0: e0fff804 addi r3,fp,-32
803e9b4: 180b883a mov r5,r3
803e9b8: 1009883a mov r4,r2
803e9bc: 803e6b00 call 803e6b0 <IPADDR_TO_NETP>
/*
* See if we found an interface, and confirm that it
* supports multicast.
*/
if (netp == NULL || (netp->n_mcastlist) == NULL)
803e9c0: e0bff817 ldw r2,-32(fp)
803e9c4: 10000326 beq r2,zero,803e9d4 <ip_setmoptions+0x210>
803e9c8: e0bff817 ldw r2,-32(fp)
803e9cc: 10802b17 ldw r2,172(r2)
803e9d0: 1000031e bne r2,zero,803e9e0 <ip_setmoptions+0x21c>
{
error = EADDRNOTAVAIL;
803e9d4: 00801f44 movi r2,125
803e9d8: e0bffe15 stw r2,-8(fp)
break;
803e9dc: 0000c306 br 803ecec <ip_setmoptions+0x528>
}
/*
* See if the membership already exists or if all the
* membership slots are full.
*/
for (i = 0; i < imo->imo_num_memberships; ++i)
803e9e0: e03ffd8d sth zero,-10(fp)
803e9e4: 00001606 br 803ea40 <ip_setmoptions+0x27c>
{
if (imo->imo_membership[i]->inm_netp == netp &&
803e9e8: e0bffd8b ldhu r2,-10(fp)
803e9ec: e0fffc17 ldw r3,-16(fp)
803e9f0: 10800084 addi r2,r2,2
803e9f4: 100490ba slli r2,r2,2
803e9f8: 1885883a add r2,r3,r2
803e9fc: 10800017 ldw r2,0(r2)
803ea00: 10c00117 ldw r3,4(r2)
803ea04: e0bff817 ldw r2,-32(fp)
803ea08: 18800a1e bne r3,r2,803ea34 <ip_setmoptions+0x270>
imo->imo_membership[i]->inm_addr
803ea0c: e0bffd8b ldhu r2,-10(fp)
803ea10: e0fffc17 ldw r3,-16(fp)
803ea14: 10800084 addi r2,r2,2
803ea18: 100490ba slli r2,r2,2
803ea1c: 1885883a add r2,r3,r2
803ea20: 10800017 ldw r2,0(r2)
803ea24: 10c00017 ldw r3,0(r2)
== mreq->imr_multiaddr)
803ea28: e0bff917 ldw r2,-28(fp)
803ea2c: 10800017 ldw r2,0(r2)
if (imo->imo_membership[i]->inm_netp == netp &&
803ea30: 18800926 beq r3,r2,803ea58 <ip_setmoptions+0x294>
for (i = 0; i < imo->imo_num_memberships; ++i)
803ea34: e0bffd8b ldhu r2,-10(fp)
803ea38: 10800044 addi r2,r2,1
803ea3c: e0bffd8d sth r2,-10(fp)
803ea40: e0bffc17 ldw r2,-16(fp)
803ea44: 1080018b ldhu r2,6(r2)
803ea48: e0fffd8b ldhu r3,-10(fp)
803ea4c: 10bfffcc andi r2,r2,65535
803ea50: 18bfe536 bltu r3,r2,803e9e8 <ip_setmoptions+0x224>
803ea54: 00000106 br 803ea5c <ip_setmoptions+0x298>
{
break;
803ea58: 0001883a nop
}
}
if (i < imo->imo_num_memberships)
803ea5c: e0bffc17 ldw r2,-16(fp)
803ea60: 1080018b ldhu r2,6(r2)
803ea64: e0fffd8b ldhu r3,-10(fp)
803ea68: 10bfffcc andi r2,r2,65535
803ea6c: 1880032e bgeu r3,r2,803ea7c <ip_setmoptions+0x2b8>
{
error = EADDRINUSE;
803ea70: 00801c04 movi r2,112
803ea74: e0bffe15 stw r2,-8(fp)
break;
803ea78: 00009c06 br 803ecec <ip_setmoptions+0x528>
}
if (i == IP_MAX_MEMBERSHIPS)
803ea7c: e0bffd8b ldhu r2,-10(fp)
803ea80: 10800518 cmpnei r2,r2,20
803ea84: 1000031e bne r2,zero,803ea94 <ip_setmoptions+0x2d0>
{
error = ETOOMANYREFS;
803ea88: 00802044 movi r2,129
803ea8c: e0bffe15 stw r2,-8(fp)
break;
803ea90: 00009606 br 803ecec <ip_setmoptions+0x528>
/*
* Everything looks good; add a new record to the multicast
* address list for the given interface.
*/
if ((imo->imo_membership[i] =
in_addmulti(&mreq->imr_multiaddr, netp, 4)) == NULL)
803ea94: e0bff917 ldw r2,-28(fp)
803ea98: e0fff817 ldw r3,-32(fp)
if ((imo->imo_membership[i] =
803ea9c: e43ffd8b ldhu r16,-10(fp)
in_addmulti(&mreq->imr_multiaddr, netp, 4)) == NULL)
803eaa0: 01800104 movi r6,4
803eaa4: 180b883a mov r5,r3
803eaa8: 1009883a mov r4,r2
803eaac: 803c2ac0 call 803c2ac <in_addmulti>
803eab0: 1009883a mov r4,r2
if ((imo->imo_membership[i] =
803eab4: e0fffc17 ldw r3,-16(fp)
803eab8: 80800084 addi r2,r16,2
803eabc: 100490ba slli r2,r2,2
803eac0: 1885883a add r2,r3,r2
803eac4: 11000015 stw r4,0(r2)
803eac8: e0fffc17 ldw r3,-16(fp)
803eacc: 80800084 addi r2,r16,2
803ead0: 100490ba slli r2,r2,2
803ead4: 1885883a add r2,r3,r2
803ead8: 10800017 ldw r2,0(r2)
803eadc: 1000031e bne r2,zero,803eaec <ip_setmoptions+0x328>
{
error = ENOBUFS;
803eae0: 00801a44 movi r2,105
803eae4: e0bffe15 stw r2,-8(fp)
break;
803eae8: 00008006 br 803ecec <ip_setmoptions+0x528>
}
++imo->imo_num_memberships;
803eaec: e0bffc17 ldw r2,-16(fp)
803eaf0: 1080018b ldhu r2,6(r2)
803eaf4: 10800044 addi r2,r2,1
803eaf8: 1007883a mov r3,r2
803eafc: e0bffc17 ldw r2,-16(fp)
803eb00: 10c0018d sth r3,6(r2)
break;
803eb04: 00007906 br 803ecec <ip_setmoptions+0x528>
case IP_DROP_MEMBERSHIP:
/*
* Drop a multicast group membership.
* Group must be a valid IP multicast address.
*/
mreq = (struct ip_mreq *)val;
803eb08: e0bff517 ldw r2,-44(fp)
803eb0c: e0bff915 stw r2,-28(fp)
if (!IN_MULTICAST(ntohl(mreq->imr_multiaddr)))
803eb10: e0bff917 ldw r2,-28(fp)
803eb14: 10800017 ldw r2,0(r2)
803eb18: 1006d63a srli r3,r2,24
803eb1c: e0bff917 ldw r2,-28(fp)
803eb20: 10800017 ldw r2,0(r2)
803eb24: 1004d23a srli r2,r2,8
803eb28: 10bfc00c andi r2,r2,65280
803eb2c: 1886b03a or r3,r3,r2
803eb30: e0bff917 ldw r2,-28(fp)
803eb34: 10800017 ldw r2,0(r2)
803eb38: 1004923a slli r2,r2,8
803eb3c: 10803fec andhi r2,r2,255
803eb40: 1886b03a or r3,r3,r2
803eb44: e0bff917 ldw r2,-28(fp)
803eb48: 10800017 ldw r2,0(r2)
803eb4c: 1004963a slli r2,r2,24
803eb50: 1884b03a or r2,r3,r2
803eb54: 10fc002c andhi r3,r2,61440
803eb58: 00b80034 movhi r2,57344
803eb5c: 18800326 beq r3,r2,803eb6c <ip_setmoptions+0x3a8>
{
error = EINVAL;
803eb60: 00800584 movi r2,22
803eb64: e0bffe15 stw r2,-8(fp)
break;
803eb68: 00006006 br 803ecec <ip_setmoptions+0x528>
* If an interface address was specified, get a pointer
* to its ifnet structure. If an interface address was not
* specified, get a pointer to the first interface that
* supports multicast.
*/
IPADDR_TO_NETP(mreq->imr_interface, &netp);
803eb6c: e0bff917 ldw r2,-28(fp)
803eb70: 10800117 ldw r2,4(r2)
803eb74: e0fff804 addi r3,fp,-32
803eb78: 180b883a mov r5,r3
803eb7c: 1009883a mov r4,r2
803eb80: 803e6b00 call 803e6b0 <IPADDR_TO_NETP>
if (netp == NULL)
803eb84: e0bff817 ldw r2,-32(fp)
803eb88: 1000031e bne r2,zero,803eb98 <ip_setmoptions+0x3d4>
{
error = EADDRNOTAVAIL;
803eb8c: 00801f44 movi r2,125
803eb90: e0bffe15 stw r2,-8(fp)
break;
803eb94: 00005506 br 803ecec <ip_setmoptions+0x528>
}
/*
* Find the membership in the membership array.
*/
for (i = 0; i < imo->imo_num_memberships; ++i)
803eb98: e03ffd8d sth zero,-10(fp)
803eb9c: 00001806 br 803ec00 <ip_setmoptions+0x43c>
{
if ((netp == NULL ||
803eba0: e0bff817 ldw r2,-32(fp)
803eba4: 10000926 beq r2,zero,803ebcc <ip_setmoptions+0x408>
imo->imo_membership[i]->inm_netp == netp) &&
803eba8: e0bffd8b ldhu r2,-10(fp)
803ebac: e0fffc17 ldw r3,-16(fp)
803ebb0: 10800084 addi r2,r2,2
803ebb4: 100490ba slli r2,r2,2
803ebb8: 1885883a add r2,r3,r2
803ebbc: 10800017 ldw r2,0(r2)
803ebc0: 10c00117 ldw r3,4(r2)
803ebc4: e0bff817 ldw r2,-32(fp)
if ((netp == NULL ||
803ebc8: 18800a1e bne r3,r2,803ebf4 <ip_setmoptions+0x430>
imo->imo_membership[i]->inm_addr ==
803ebcc: e0bffd8b ldhu r2,-10(fp)
803ebd0: e0fffc17 ldw r3,-16(fp)
803ebd4: 10800084 addi r2,r2,2
803ebd8: 100490ba slli r2,r2,2
803ebdc: 1885883a add r2,r3,r2
803ebe0: 10800017 ldw r2,0(r2)
803ebe4: 10c00017 ldw r3,0(r2)
mreq->imr_multiaddr)
803ebe8: e0bff917 ldw r2,-28(fp)
803ebec: 10800017 ldw r2,0(r2)
imo->imo_membership[i]->inm_netp == netp) &&
803ebf0: 18800926 beq r3,r2,803ec18 <ip_setmoptions+0x454>
for (i = 0; i < imo->imo_num_memberships; ++i)
803ebf4: e0bffd8b ldhu r2,-10(fp)
803ebf8: 10800044 addi r2,r2,1
803ebfc: e0bffd8d sth r2,-10(fp)
803ec00: e0bffc17 ldw r2,-16(fp)
803ec04: 1080018b ldhu r2,6(r2)
803ec08: e0fffd8b ldhu r3,-10(fp)
803ec0c: 10bfffcc andi r2,r2,65535
803ec10: 18bfe336 bltu r3,r2,803eba0 <ip_setmoptions+0x3dc>
803ec14: 00000106 br 803ec1c <ip_setmoptions+0x458>
{
break;
803ec18: 0001883a nop
}
}
if (i == imo->imo_num_memberships)
803ec1c: e0bffc17 ldw r2,-16(fp)
803ec20: 1080018b ldhu r2,6(r2)
803ec24: e0fffd8b ldhu r3,-10(fp)
803ec28: 10bfffcc andi r2,r2,65535
803ec2c: 1880031e bne r3,r2,803ec3c <ip_setmoptions+0x478>
{
error = EADDRNOTAVAIL;
803ec30: 00801f44 movi r2,125
803ec34: e0bffe15 stw r2,-8(fp)
break;
803ec38: 00002c06 br 803ecec <ip_setmoptions+0x528>
}
/*
* Give up the multicast address record to which the
* membership points.
*/
in_delmulti(imo->imo_membership[i]);
803ec3c: e0bffd8b ldhu r2,-10(fp)
803ec40: e0fffc17 ldw r3,-16(fp)
803ec44: 10800084 addi r2,r2,2
803ec48: 100490ba slli r2,r2,2
803ec4c: 1885883a add r2,r3,r2
803ec50: 10800017 ldw r2,0(r2)
803ec54: 1009883a mov r4,r2
803ec58: 803c3f80 call 803c3f8 <in_delmulti>
/*
* Remove the gap in the membership array.
*/
for (++i; i < imo->imo_num_memberships; ++i)
803ec5c: e0bffd8b ldhu r2,-10(fp)
803ec60: 10800044 addi r2,r2,1
803ec64: e0bffd8d sth r2,-10(fp)
803ec68: 00001006 br 803ecac <ip_setmoptions+0x4e8>
imo->imo_membership[i-1] = imo->imo_membership[i];
803ec6c: e0fffd8b ldhu r3,-10(fp)
803ec70: e0bffd8b ldhu r2,-10(fp)
803ec74: 10bfffc4 addi r2,r2,-1
803ec78: e13ffc17 ldw r4,-16(fp)
803ec7c: 18c00084 addi r3,r3,2
803ec80: 180690ba slli r3,r3,2
803ec84: 20c7883a add r3,r4,r3
803ec88: 18c00017 ldw r3,0(r3)
803ec8c: e13ffc17 ldw r4,-16(fp)
803ec90: 10800084 addi r2,r2,2
803ec94: 100490ba slli r2,r2,2
803ec98: 2085883a add r2,r4,r2
803ec9c: 10c00015 stw r3,0(r2)
for (++i; i < imo->imo_num_memberships; ++i)
803eca0: e0bffd8b ldhu r2,-10(fp)
803eca4: 10800044 addi r2,r2,1
803eca8: e0bffd8d sth r2,-10(fp)
803ecac: e0bffc17 ldw r2,-16(fp)
803ecb0: 1080018b ldhu r2,6(r2)
803ecb4: e0fffd8b ldhu r3,-10(fp)
803ecb8: 10bfffcc andi r2,r2,65535
803ecbc: 18bfeb36 bltu r3,r2,803ec6c <ip_setmoptions+0x4a8>
--imo->imo_num_memberships;
803ecc0: e0bffc17 ldw r2,-16(fp)
803ecc4: 1080018b ldhu r2,6(r2)
803ecc8: 10bfffc4 addi r2,r2,-1
803eccc: 1007883a mov r3,r2
803ecd0: e0bffc17 ldw r2,-16(fp)
803ecd4: 10c0018d sth r3,6(r2)
break;
803ecd8: 00000406 br 803ecec <ip_setmoptions+0x528>
default:
error = EOPNOTSUPP;
803ecdc: 008017c4 movi r2,95
803ece0: e0bffe15 stw r2,-8(fp)
break;
803ece4: 00000106 br 803ecec <ip_setmoptions+0x528>
break;
803ece8: 0001883a nop
}
/*
* If all options have default values, no need to keep the mbuf.
*/
if (imo->imo_multicast_netp == NULL &&
803ecec: e0bffc17 ldw r2,-16(fp)
803ecf0: 10800017 ldw r2,0(r2)
803ecf4: 1000141e bne r2,zero,803ed48 <ip_setmoptions+0x584>
imo->imo_multicast_ttl == IP_DEFAULT_MULTICAST_TTL &&
803ecf8: e0bffc17 ldw r2,-16(fp)
803ecfc: 10800103 ldbu r2,4(r2)
if (imo->imo_multicast_netp == NULL &&
803ed00: 10803fcc andi r2,r2,255
803ed04: 10800058 cmpnei r2,r2,1
803ed08: 10000f1e bne r2,zero,803ed48 <ip_setmoptions+0x584>
imo->imo_multicast_loop == IP_DEFAULT_MULTICAST_LOOP &&
803ed0c: e0bffc17 ldw r2,-16(fp)
803ed10: 10800143 ldbu r2,5(r2)
imo->imo_multicast_ttl == IP_DEFAULT_MULTICAST_TTL &&
803ed14: 10803fcc andi r2,r2,255
803ed18: 10800058 cmpnei r2,r2,1
803ed1c: 10000a1e bne r2,zero,803ed48 <ip_setmoptions+0x584>
imo->imo_num_memberships == 0)
803ed20: e0bffc17 ldw r2,-16(fp)
803ed24: 1080018b ldhu r2,6(r2)
imo->imo_multicast_loop == IP_DEFAULT_MULTICAST_LOOP &&
803ed28: 10bfffcc andi r2,r2,65535
803ed2c: 1000061e bne r2,zero,803ed48 <ip_setmoptions+0x584>
{
IM_FREE(*imop);
803ed30: e0bffb17 ldw r2,-20(fp)
803ed34: 10800017 ldw r2,0(r2)
803ed38: 1009883a mov r4,r2
803ed3c: 80298600 call 8029860 <npfree>
*imop = NULL;
803ed40: e0bffb17 ldw r2,-20(fp)
803ed44: 10000015 stw zero,0(r2)
}
return (error);
803ed48: e0bffe17 ldw r2,-8(fp)
}
803ed4c: e6ffff04 addi sp,fp,-4
803ed50: dfc00217 ldw ra,8(sp)
803ed54: df000117 ldw fp,4(sp)
803ed58: dc000017 ldw r16,0(sp)
803ed5c: dec00304 addi sp,sp,12
803ed60: f800283a ret
0803ed64 <ip_getmoptions>:
* RETURNS:
*/
int
ip_getmoptions(int optname, struct socket * so, void * val)
{
803ed64: defff804 addi sp,sp,-32
803ed68: df000715 stw fp,28(sp)
803ed6c: df000704 addi fp,sp,28
803ed70: e13ffb15 stw r4,-20(fp)
803ed74: e17ffa15 stw r5,-24(fp)
803ed78: e1bff915 stw r6,-28(fp)
u_char * ttl;
u_char * loop;
ip_addr *addr;
struct ip_moptions* imo = so->inp_moptions;
803ed7c: e0bffa17 ldw r2,-24(fp)
803ed80: 10800317 ldw r2,12(r2)
803ed84: e0bfff15 stw r2,-4(fp)
/* The following code will be commented out for Iniche stack.
* Don't allocate a buffer here.
*
* *mp = m_get(M_WAIT, MT_SOOPTS);
*/
switch (optname)
803ed88: e0bffb17 ldw r2,-20(fp)
803ed8c: 108002a0 cmpeqi r2,r2,10
803ed90: 1000171e bne r2,zero,803edf0 <ip_getmoptions+0x8c>
803ed94: e0bffb17 ldw r2,-20(fp)
803ed98: 108002e0 cmpeqi r2,r2,11
803ed9c: 1000221e bne r2,zero,803ee28 <ip_getmoptions+0xc4>
803eda0: e0bffb17 ldw r2,-20(fp)
803eda4: 10800258 cmpnei r2,r2,9
803eda8: 10002d1e bne r2,zero,803ee60 <ip_getmoptions+0xfc>
{
case IP_MULTICAST_IF:
addr = (ip_addr *)(val);
803edac: e0bff917 ldw r2,-28(fp)
803edb0: e0bffe15 stw r2,-8(fp)
if (imo == NULL || imo->imo_multicast_netp == NULL)
803edb4: e0bfff17 ldw r2,-4(fp)
803edb8: 10000326 beq r2,zero,803edc8 <ip_getmoptions+0x64>
803edbc: e0bfff17 ldw r2,-4(fp)
803edc0: 10800017 ldw r2,0(r2)
803edc4: 1000031e bne r2,zero,803edd4 <ip_getmoptions+0x70>
*addr = AADDR;
803edc8: e0bffe17 ldw r2,-8(fp)
803edcc: 10000015 stw zero,0(r2)
803edd0: 00000506 br 803ede8 <ip_getmoptions+0x84>
else
*addr = imo->imo_multicast_netp->n_ipaddr;
803edd4: e0bfff17 ldw r2,-4(fp)
803edd8: 10800017 ldw r2,0(r2)
803eddc: 10c00a17 ldw r3,40(r2)
803ede0: e0bffe17 ldw r2,-8(fp)
803ede4: 10c00015 stw r3,0(r2)
return (0);
803ede8: 0005883a mov r2,zero
803edec: 00001d06 br 803ee64 <ip_getmoptions+0x100>
case IP_MULTICAST_TTL:
ttl = (u_char *)val;
803edf0: e0bff917 ldw r2,-28(fp)
803edf4: e0bffd15 stw r2,-12(fp)
if (imo == NULL)
803edf8: e0bfff17 ldw r2,-4(fp)
803edfc: 1000041e bne r2,zero,803ee10 <ip_getmoptions+0xac>
*ttl = IP_DEFAULT_MULTICAST_TTL;
803ee00: e0bffd17 ldw r2,-12(fp)
803ee04: 00c00044 movi r3,1
803ee08: 10c00005 stb r3,0(r2)
803ee0c: 00000406 br 803ee20 <ip_getmoptions+0xbc>
else
*ttl = imo->imo_multicast_ttl;
803ee10: e0bfff17 ldw r2,-4(fp)
803ee14: 10c00103 ldbu r3,4(r2)
803ee18: e0bffd17 ldw r2,-12(fp)
803ee1c: 10c00005 stb r3,0(r2)
return (0);
803ee20: 0005883a mov r2,zero
803ee24: 00000f06 br 803ee64 <ip_getmoptions+0x100>
case IP_MULTICAST_LOOP:
loop = (u_char *)val;
803ee28: e0bff917 ldw r2,-28(fp)
803ee2c: e0bffc15 stw r2,-16(fp)
if (imo == NULL)
803ee30: e0bfff17 ldw r2,-4(fp)
803ee34: 1000041e bne r2,zero,803ee48 <ip_getmoptions+0xe4>
*loop = IP_DEFAULT_MULTICAST_LOOP;
803ee38: e0bffc17 ldw r2,-16(fp)
803ee3c: 00c00044 movi r3,1
803ee40: 10c00005 stb r3,0(r2)
803ee44: 00000406 br 803ee58 <ip_getmoptions+0xf4>
else
*loop = imo->imo_multicast_loop;
803ee48: e0bfff17 ldw r2,-4(fp)
803ee4c: 10c00143 ldbu r3,5(r2)
803ee50: e0bffc17 ldw r2,-16(fp)
803ee54: 10c00005 stb r3,0(r2)
return (0);
803ee58: 0005883a mov r2,zero
803ee5c: 00000106 br 803ee64 <ip_getmoptions+0x100>
default:
return (EOPNOTSUPP);
803ee60: 008017c4 movi r2,95
}
}
803ee64: e037883a mov sp,fp
803ee68: df000017 ldw fp,0(sp)
803ee6c: dec00104 addi sp,sp,4
803ee70: f800283a ret
0803ee74 <ip_freemoptions>:
* RETURNS:
*/
void
ip_freemoptions(struct ip_moptions * imo)
{
803ee74: defffc04 addi sp,sp,-16
803ee78: dfc00315 stw ra,12(sp)
803ee7c: df000215 stw fp,8(sp)
803ee80: df000204 addi fp,sp,8
803ee84: e13ffe15 stw r4,-8(fp)
u_short i;
if (imo != NULL)
803ee88: e0bffe17 ldw r2,-8(fp)
803ee8c: 10001426 beq r2,zero,803eee0 <ip_freemoptions+0x6c>
{
for (i = 0; i < imo->imo_num_memberships; ++i)
803ee90: e03fff8d sth zero,-2(fp)
803ee94: 00000b06 br 803eec4 <ip_freemoptions+0x50>
in_delmulti(imo->imo_membership[i]);
803ee98: e0bfff8b ldhu r2,-2(fp)
803ee9c: e0fffe17 ldw r3,-8(fp)
803eea0: 10800084 addi r2,r2,2
803eea4: 100490ba slli r2,r2,2
803eea8: 1885883a add r2,r3,r2
803eeac: 10800017 ldw r2,0(r2)
803eeb0: 1009883a mov r4,r2
803eeb4: 803c3f80 call 803c3f8 <in_delmulti>
for (i = 0; i < imo->imo_num_memberships; ++i)
803eeb8: e0bfff8b ldhu r2,-2(fp)
803eebc: 10800044 addi r2,r2,1
803eec0: e0bfff8d sth r2,-2(fp)
803eec4: e0bffe17 ldw r2,-8(fp)
803eec8: 1080018b ldhu r2,6(r2)
803eecc: e0ffff8b ldhu r3,-2(fp)
803eed0: 10bfffcc andi r2,r2,65535
803eed4: 18bff036 bltu r3,r2,803ee98 <ip_freemoptions+0x24>
npfree(imo);
803eed8: e13ffe17 ldw r4,-8(fp)
803eedc: 80298600 call 8029860 <npfree>
}
}
803eee0: 0001883a nop
803eee4: e037883a mov sp,fp
803eee8: dfc00117 ldw ra,4(sp)
803eeec: df000017 ldw fp,0(sp)
803eef0: dec00204 addi sp,sp,8
803eef4: f800283a ret
0803eef8 <u_mctest_init>:
*
* RETURNS:
*/
void u_mctest_init()
{
803eef8: defffe04 addi sp,sp,-8
803eefc: dfc00115 stw ra,4(sp)
803ef00: df000015 stw fp,0(sp)
803ef04: d839883a mov fp,sp
printf("mctest init called\n");
803ef08: 01020174 movhi r4,2053
803ef0c: 212d2e04 addi r4,r4,-19272
803ef10: 8002d9c0 call 8002d9c <puts>
// altera changes end (cadler@altera.com)
install_menu(u_mctest_menu);
// altera changes begin (cadler@altera.com)
#endif //IN_MENUS
// altera changes end (cadler@altera.com)
}
803ef14: 0001883a nop
803ef18: e037883a mov sp,fp
803ef1c: dfc00117 ldw ra,4(sp)
803ef20: df000017 ldw fp,0(sp)
803ef24: dec00204 addi sp,sp,8
803ef28: f800283a ret
0803ef2c <u_mctest_run>:
*
* RETURNS:
*/
int u_mctest_run(void * pio)
{
803ef2c: defede04 addi sp,sp,-1160
803ef30: dfc12115 stw ra,1156(sp)
803ef34: df012015 stw fp,1152(sp)
803ef38: df012004 addi fp,sp,1152
803ef3c: e13ee215 stw r4,-1144(fp)
struct sockaddr_in stLocal, stTo, stFrom;
char achIn[BUFSIZE];
char achOut[] = "Message number: ";
803ef40: e0fee884 addi r3,fp,-1118
803ef44: 00820174 movhi r2,2053
803ef48: 10adda04 addi r2,r2,-18584
803ef4c: 01000784 movi r4,30
803ef50: 200d883a mov r6,r4
803ef54: 100b883a mov r5,r2
803ef58: 1809883a mov r4,r3
803ef5c: 80086b80 call 80086b8 <memcpy>
struct ip_mreq stMreq;
u_char cTmp;
unsigned long endtime;
/* get a datagram socket */
s = t_socket(AF_INET,SOCK_DGRAM, 0);
803ef60: 000d883a mov r6,zero
803ef64: 01400084 movi r5,2
803ef68: 01000084 movi r4,2
803ef6c: 802ba700 call 802ba70 <t_socket>
803ef70: e0bffe15 stw r2,-8(fp)
if (s == INVALID_SOCKET)
803ef74: e0bffe17 ldw r2,-8(fp)
803ef78: 10bfffd8 cmpnei r2,r2,-1
803ef7c: 1000091e bne r2,zero,803efa4 <u_mctest_run+0x78>
{
ns_printf (pio,"t_socket() failed, Err: %d\n", t_errno(s));
803ef80: e13ffe17 ldw r4,-8(fp)
803ef84: 802cfbc0 call 802cfbc <t_errno>
803ef88: 100d883a mov r6,r2
803ef8c: 01420174 movhi r5,2053
803ef90: 296d3304 addi r5,r5,-19252
803ef94: e13ee217 ldw r4,-1144(fp)
803ef98: 80273900 call 8027390 <ns_printf>
exit(1);
803ef9c: 01000044 movi r4,1
803efa0: 8042abc0 call 8042abc <exit>
}
/* avoid EADDRINUSE error on bind() */
iTmp = 1;
803efa4: 00800044 movi r2,1
803efa8: e0bee715 stw r2,-1124(fp)
iRet = t_setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&iTmp, sizeof(iTmp));
803efac: e0fee704 addi r3,fp,-1124
803efb0: 00800104 movi r2,4
803efb4: d8800015 stw r2,0(sp)
803efb8: 180f883a mov r7,r3
803efbc: 01800104 movi r6,4
803efc0: 017fffc4 movi r5,-1
803efc4: e13ffe17 ldw r4,-8(fp)
803efc8: 802c44c0 call 802c44c <t_setsockopt>
803efcc: e0bffd15 stw r2,-12(fp)
if (iRet == SOCKET_ERROR)
803efd0: e0bffd17 ldw r2,-12(fp)
803efd4: 10bfffd8 cmpnei r2,r2,-1
803efd8: 1000071e bne r2,zero,803eff8 <u_mctest_run+0xcc>
{
ns_printf (pio,"t_setsockopt() SO_REUSEADDR failed, Err: %d\n",
803efdc: e13ffe17 ldw r4,-8(fp)
803efe0: 802cfbc0 call 802cfbc <t_errno>
803efe4: 100d883a mov r6,r2
803efe8: 01420174 movhi r5,2053
803efec: 296d3a04 addi r5,r5,-19224
803eff0: e13ee217 ldw r4,-1144(fp)
803eff4: 80273900 call 8027390 <ns_printf>
t_errno(s));
}
/* name the socket */
stLocal.sin_family = AF_INET;
803eff8: 00800084 movi r2,2
803effc: e0bff80d sth r2,-32(fp)
stLocal.sin_addr.s_addr = htonl(INADDR_ANY);
803f000: e03ff915 stw zero,-28(fp)
stLocal.sin_port = htons(TEST_PORT);
803f004: 00a00344 movi r2,-32755
803f008: e0bff88d sth r2,-30(fp)
iRet = t_bind(s, (struct sockaddr*) &stLocal, sizeof(struct sockaddr_in));
803f00c: e0bff804 addi r2,fp,-32
803f010: 01800404 movi r6,16
803f014: 100b883a mov r5,r2
803f018: e13ffe17 ldw r4,-8(fp)
803f01c: 802baf00 call 802baf0 <t_bind>
803f020: e0bffd15 stw r2,-12(fp)
if (iRet == SOCKET_ERROR)
803f024: e0bffd17 ldw r2,-12(fp)
803f028: 10bfffd8 cmpnei r2,r2,-1
803f02c: 1000061e bne r2,zero,803f048 <u_mctest_run+0x11c>
{
printf ("t_bind() failed, Err: %d\n",
803f030: e13ffe17 ldw r4,-8(fp)
803f034: 802cfbc0 call 802cfbc <t_errno>
803f038: 100b883a mov r5,r2
803f03c: 01020174 movhi r4,2053
803f040: 212d4604 addi r4,r4,-19176
803f044: 8002c780 call 8002c78 <printf>
t_errno(s));
}
/* join the multicast group. TEST_ADDR */
ns_printf (pio,"Joining multicast group: %s\n", TEST_ADDR);
803f048: 01820174 movhi r6,2053
803f04c: 31ad4d04 addi r6,r6,-19148
803f050: 01420174 movhi r5,2053
803f054: 296d5004 addi r5,r5,-19136
803f058: e13ee217 ldw r4,-1144(fp)
803f05c: 80273900 call 8027390 <ns_printf>
stMreq.imr_multiaddr = inet_addr(TEST_ADDR);
803f060: 01020174 movhi r4,2053
803f064: 212d4d04 addi r4,r4,-19148
803f068: 803fc380 call 803fc38 <inet_addr>
803f06c: e0bee515 stw r2,-1132(fp)
stMreq.imr_interface = netstatic[0].n_ipaddr;
803f070: 008201b4 movhi r2,2054
803f074: 10b6ba17 ldw r2,-9496(r2)
803f078: e0bee615 stw r2,-1128(fp)
iRet = t_setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
803f07c: e0fee504 addi r3,fp,-1132
803f080: 00800204 movi r2,8
803f084: d8800015 stw r2,0(sp)
803f088: 180f883a mov r7,r3
803f08c: 01800304 movi r6,12
803f090: 000b883a mov r5,zero
803f094: e13ffe17 ldw r4,-8(fp)
803f098: 802c44c0 call 802c44c <t_setsockopt>
803f09c: e0bffd15 stw r2,-12(fp)
(char *)&stMreq, sizeof(stMreq));
if (iRet == SOCKET_ERROR)
803f0a0: e0bffd17 ldw r2,-12(fp)
803f0a4: 10bfffd8 cmpnei r2,r2,-1
803f0a8: 1000071e bne r2,zero,803f0c8 <u_mctest_run+0x19c>
{
ns_printf (pio,"t_setsockopt() IP_ADD_MEMBERSHIP failed, Err: %d\n",
803f0ac: e13ffe17 ldw r4,-8(fp)
803f0b0: 802cfbc0 call 802cfbc <t_errno>
803f0b4: 100d883a mov r6,r2
803f0b8: 01420174 movhi r5,2053
803f0bc: 296d5804 addi r5,r5,-19104
803f0c0: e13ee217 ldw r4,-1144(fp)
803f0c4: 80273900 call 8027390 <ns_printf>
t_errno(s));
}
tk_yield();
803f0c8: 8027ce40 call 8027ce4 <tk_yield>
/* join the multicast group. TEST_ADDR1 */
ns_printf (pio,"Joining multicast group: %s\n", TEST_ADDR1);
803f0cc: 01820174 movhi r6,2053
803f0d0: 31ad6504 addi r6,r6,-19052
803f0d4: 01420174 movhi r5,2053
803f0d8: 296d5004 addi r5,r5,-19136
803f0dc: e13ee217 ldw r4,-1144(fp)
803f0e0: 80273900 call 8027390 <ns_printf>
stMreq.imr_multiaddr = inet_addr(TEST_ADDR1);
803f0e4: 01020174 movhi r4,2053
803f0e8: 212d6504 addi r4,r4,-19052
803f0ec: 803fc380 call 803fc38 <inet_addr>
803f0f0: e0bee515 stw r2,-1132(fp)
stMreq.imr_interface = netstatic[0].n_ipaddr;
803f0f4: 008201b4 movhi r2,2054
803f0f8: 10b6ba17 ldw r2,-9496(r2)
803f0fc: e0bee615 stw r2,-1128(fp)
iRet = t_setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
803f100: e0fee504 addi r3,fp,-1132
803f104: 00800204 movi r2,8
803f108: d8800015 stw r2,0(sp)
803f10c: 180f883a mov r7,r3
803f110: 01800304 movi r6,12
803f114: 000b883a mov r5,zero
803f118: e13ffe17 ldw r4,-8(fp)
803f11c: 802c44c0 call 802c44c <t_setsockopt>
803f120: e0bffd15 stw r2,-12(fp)
(char *)&stMreq, sizeof(stMreq));
if (iRet == SOCKET_ERROR)
803f124: e0bffd17 ldw r2,-12(fp)
803f128: 10bfffd8 cmpnei r2,r2,-1
803f12c: 1000071e bne r2,zero,803f14c <u_mctest_run+0x220>
{
ns_printf (pio,"t_setsockopt() IP_ADD_MEMBERSHIP failed, Err: %d\n",
803f130: e13ffe17 ldw r4,-8(fp)
803f134: 802cfbc0 call 802cfbc <t_errno>
803f138: 100d883a mov r6,r2
803f13c: 01420174 movhi r5,2053
803f140: 296d5804 addi r5,r5,-19104
803f144: e13ee217 ldw r4,-1144(fp)
803f148: 80273900 call 8027390 <ns_printf>
t_errno(s));
}
tk_yield();
803f14c: 8027ce40 call 8027ce4 <tk_yield>
/* join the multicast group. TEST_ADDR2 */
ns_printf (pio,"Joining multicast group: %s\n", TEST_ADDR2);
803f150: 01820174 movhi r6,2053
803f154: 31ad6804 addi r6,r6,-19040
803f158: 01420174 movhi r5,2053
803f15c: 296d5004 addi r5,r5,-19136
803f160: e13ee217 ldw r4,-1144(fp)
803f164: 80273900 call 8027390 <ns_printf>
stMreq.imr_multiaddr = inet_addr(TEST_ADDR2);
803f168: 01020174 movhi r4,2053
803f16c: 212d6804 addi r4,r4,-19040
803f170: 803fc380 call 803fc38 <inet_addr>
803f174: e0bee515 stw r2,-1132(fp)
stMreq.imr_interface = netstatic[0].n_ipaddr;
803f178: 008201b4 movhi r2,2054
803f17c: 10b6ba17 ldw r2,-9496(r2)
803f180: e0bee615 stw r2,-1128(fp)
iRet = t_setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
803f184: e0fee504 addi r3,fp,-1132
803f188: 00800204 movi r2,8
803f18c: d8800015 stw r2,0(sp)
803f190: 180f883a mov r7,r3
803f194: 01800304 movi r6,12
803f198: 000b883a mov r5,zero
803f19c: e13ffe17 ldw r4,-8(fp)
803f1a0: 802c44c0 call 802c44c <t_setsockopt>
803f1a4: e0bffd15 stw r2,-12(fp)
(char *)&stMreq, sizeof(stMreq));
if (iRet == SOCKET_ERROR)
803f1a8: e0bffd17 ldw r2,-12(fp)
803f1ac: 10bfffd8 cmpnei r2,r2,-1
803f1b0: 1000071e bne r2,zero,803f1d0 <u_mctest_run+0x2a4>
{
ns_printf (pio,"t_setsockopt() IP_ADD_MEMBERSHIP failed, Err: %d\n",
803f1b4: e13ffe17 ldw r4,-8(fp)
803f1b8: 802cfbc0 call 802cfbc <t_errno>
803f1bc: 100d883a mov r6,r2
803f1c0: 01420174 movhi r5,2053
803f1c4: 296d5804 addi r5,r5,-19104
803f1c8: e13ee217 ldw r4,-1144(fp)
803f1cc: 80273900 call 8027390 <ns_printf>
t_errno(s));
}
tk_yield();
803f1d0: 8027ce40 call 8027ce4 <tk_yield>
/* set TTL to traverse up to multiple routers */
cTmp = TTL_VALUE;
803f1d4: 00800084 movi r2,2
803f1d8: e0bee4c5 stb r2,-1133(fp)
iRet = t_setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&cTmp, sizeof(cTmp));
803f1dc: e0fee4c4 addi r3,fp,-1133
803f1e0: 00800044 movi r2,1
803f1e4: d8800015 stw r2,0(sp)
803f1e8: 180f883a mov r7,r3
803f1ec: 01800284 movi r6,10
803f1f0: 000b883a mov r5,zero
803f1f4: e13ffe17 ldw r4,-8(fp)
803f1f8: 802c44c0 call 802c44c <t_setsockopt>
803f1fc: e0bffd15 stw r2,-12(fp)
if (iRet == SOCKET_ERROR)
803f200: e0bffd17 ldw r2,-12(fp)
803f204: 10bfffd8 cmpnei r2,r2,-1
803f208: 1000071e bne r2,zero,803f228 <u_mctest_run+0x2fc>
{
ns_printf (pio,"t_setsockopt() IP_MULTICAST_TTL failed, Err: %d\n",
803f20c: e13ffe17 ldw r4,-8(fp)
803f210: 802cfbc0 call 802cfbc <t_errno>
803f214: 100d883a mov r6,r2
803f218: 01420174 movhi r5,2053
803f21c: 296d6b04 addi r5,r5,-19028
803f220: e13ee217 ldw r4,-1144(fp)
803f224: 80273900 call 8027390 <ns_printf>
t_errno(s));
}
/* enable loopback */
cTmp = 1;
803f228: 00800044 movi r2,1
803f22c: e0bee4c5 stb r2,-1133(fp)
iRet = t_setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&cTmp, sizeof(cTmp));
803f230: e0fee4c4 addi r3,fp,-1133
803f234: 00800044 movi r2,1
803f238: d8800015 stw r2,0(sp)
803f23c: 180f883a mov r7,r3
803f240: 018002c4 movi r6,11
803f244: 000b883a mov r5,zero
803f248: e13ffe17 ldw r4,-8(fp)
803f24c: 802c44c0 call 802c44c <t_setsockopt>
803f250: e0bffd15 stw r2,-12(fp)
if (iRet == SOCKET_ERROR)
803f254: e0bffd17 ldw r2,-12(fp)
803f258: 10bfffd8 cmpnei r2,r2,-1
803f25c: 1000071e bne r2,zero,803f27c <u_mctest_run+0x350>
{
ns_printf (pio,"t_setsockopt() IP_MULTICAST_LOOP failed, Err: %d\n",
803f260: e13ffe17 ldw r4,-8(fp)
803f264: 802cfbc0 call 802cfbc <t_errno>
803f268: 100d883a mov r6,r2
803f26c: 01420174 movhi r5,2053
803f270: 296d7804 addi r5,r5,-18976
803f274: e13ee217 ldw r4,-1144(fp)
803f278: 80273900 call 8027390 <ns_printf>
t_errno(s));
}
/* assign our destination address */
stTo.sin_family = AF_INET;
803f27c: 00800084 movi r2,2
803f280: e0bff40d sth r2,-48(fp)
stTo.sin_addr.s_addr = inet_addr(TEST_ADDR1);
803f284: 01020174 movhi r4,2053
803f288: 212d6504 addi r4,r4,-19052
803f28c: 803fc380 call 803fc38 <inet_addr>
803f290: e0bff515 stw r2,-44(fp)
stTo.sin_port = htons(TEST_PORT);
803f294: 00a00344 movi r2,-32755
803f298: e0bff48d sth r2,-46(fp)
ns_printf (pio,"Now sending to (and receiving from) multicast group: %s\n",
803f29c: 01820174 movhi r6,2053
803f2a0: 31ad6504 addi r6,r6,-19052
803f2a4: 01420174 movhi r5,2053
803f2a8: 296d8504 addi r5,r5,-18924
803f2ac: e13ee217 ldw r4,-1144(fp)
803f2b0: 80273900 call 8027390 <ns_printf>
TEST_ADDR1);
for (i = 0; i < LOOPMAX; i++)
803f2b4: e03fff15 stw zero,-4(fp)
803f2b8: 00008606 br 803f4d4 <u_mctest_run+0x5a8>
{
static int iCounter = 1;
/* send to the multicast address */
sprintf(&achOut[16], "%d", iCounter++);
803f2bc: d0a03117 ldw r2,-32572(gp)
803f2c0: 10c00044 addi r3,r2,1
803f2c4: d0e03115 stw r3,-32572(gp)
803f2c8: e0fee884 addi r3,fp,-1118
803f2cc: 18c00404 addi r3,r3,16
803f2d0: 100d883a mov r6,r2
803f2d4: 01420174 movhi r5,2053
803f2d8: 296d9404 addi r5,r5,-18864
803f2dc: 1809883a mov r4,r3
803f2e0: 8042d980 call 8042d98 <sprintf>
iRet = t_sendto(s, achOut, sizeof(achOut), 0, (struct sockaddr*)&stTo,
803f2e4: e0fee884 addi r3,fp,-1118
803f2e8: 00800404 movi r2,16
803f2ec: d8800115 stw r2,4(sp)
803f2f0: e0bff404 addi r2,fp,-48
803f2f4: d8800015 stw r2,0(sp)
803f2f8: 000f883a mov r7,zero
803f2fc: 01800784 movi r6,30
803f300: 180b883a mov r5,r3
803f304: e13ffe17 ldw r4,-8(fp)
803f308: 802c9ac0 call 802c9ac <t_sendto>
803f30c: e0bffd15 stw r2,-12(fp)
sizeof(struct sockaddr_in));
if (iRet < 0)
803f310: e0bffd17 ldw r2,-12(fp)
803f314: 1000080e bge r2,zero,803f338 <u_mctest_run+0x40c>
{
/* perror("sendto() failed\n"); */
ns_printf (pio,"t_sendto() failed, Error: %d\n", t_errno(s));
803f318: e13ffe17 ldw r4,-8(fp)
803f31c: 802cfbc0 call 802cfbc <t_errno>
803f320: 100d883a mov r6,r2
803f324: 01420174 movhi r5,2053
803f328: 296d9504 addi r5,r5,-18860
803f32c: e13ee217 ldw r4,-1144(fp)
803f330: 80273900 call 8027390 <ns_printf>
/* exit(1); */
goto exitloop;
803f334: 00006b06 br 803f4e4 <u_mctest_run+0x5b8>
}
/* make the socket non-blocking */
iTmp = 1;
803f338: 00800044 movi r2,1
803f33c: e0bee715 stw r2,-1124(fp)
iRet = t_setsockopt(s, SOL_SOCKET, SO_NONBLOCK, (char *)&iTmp, sizeof(iTmp));
803f340: e0fee704 addi r3,fp,-1124
803f344: 00800104 movi r2,4
803f348: d8800015 stw r2,0(sp)
803f34c: 180f883a mov r7,r3
803f350: 01840584 movi r6,4118
803f354: 017fffc4 movi r5,-1
803f358: e13ffe17 ldw r4,-8(fp)
803f35c: 802c44c0 call 802c44c <t_setsockopt>
803f360: e0bffd15 stw r2,-12(fp)
if (iRet == SOCKET_ERROR)
803f364: e0bffd17 ldw r2,-12(fp)
803f368: 10bfffd8 cmpnei r2,r2,-1
803f36c: 1000071e bne r2,zero,803f38c <u_mctest_run+0x460>
{
ns_printf (pio,"t_setsockopt() SO_NONBLOCK (1) failed, Err: %d\n",
803f370: e13ffe17 ldw r4,-8(fp)
803f374: 802cfbc0 call 802cfbc <t_errno>
803f378: 100d883a mov r6,r2
803f37c: 01420174 movhi r5,2053
803f380: 296d9d04 addi r5,r5,-18828
803f384: e13ee217 ldw r4,-1144(fp)
803f388: 80273900 call 8027390 <ns_printf>
t_errno(s));
}
/* loop around for 5 seconds waiting to receive datagrams */
endtime = cticks + (TPS * 5);
803f38c: d0a07d17 ldw r2,-32268(gp)
803f390: 10807d04 addi r2,r2,500
803f394: e0bffc15 stw r2,-16(fp)
while (cticks < endtime)
803f398: 00003406 br 803f46c <u_mctest_run+0x540>
{
int sa_size = sizeof(struct sockaddr_in);
803f39c: 00800404 movi r2,16
803f3a0: e0bee315 stw r2,-1140(fp)
tk_yield();
803f3a4: 8027ce40 call 8027ce4 <tk_yield>
iRet = t_recvfrom(s, achIn, BUFSIZE, 0, (struct sockaddr*)&stFrom, &sa_size);
803f3a8: e0fef004 addi r3,fp,-1088
803f3ac: e0bee304 addi r2,fp,-1140
803f3b0: d8800115 stw r2,4(sp)
803f3b4: e0bff004 addi r2,fp,-64
803f3b8: d8800015 stw r2,0(sp)
803f3bc: 000f883a mov r7,zero
803f3c0: 01810004 movi r6,1024
803f3c4: 180b883a mov r5,r3
803f3c8: e13ffe17 ldw r4,-8(fp)
803f3cc: 802c8700 call 802c870 <t_recvfrom>
803f3d0: e0bffd15 stw r2,-12(fp)
if (iRet < 0)
803f3d4: e0bffd17 ldw r2,-12(fp)
803f3d8: 10000c0e bge r2,zero,803f40c <u_mctest_run+0x4e0>
{
if (t_errno(s) != EWOULDBLOCK)
803f3dc: e13ffe17 ldw r4,-8(fp)
803f3e0: 802cfbc0 call 802cfbc <t_errno>
803f3e4: 108002e0 cmpeqi r2,r2,11
803f3e8: 1000081e bne r2,zero,803f40c <u_mctest_run+0x4e0>
{
/* perror("recvfrom() failed\n"); */
ns_printf (pio,"t_recvfrom() failed, Error: %d\n", t_errno(s));
803f3ec: e13ffe17 ldw r4,-8(fp)
803f3f0: 802cfbc0 call 802cfbc <t_errno>
803f3f4: 100d883a mov r6,r2
803f3f8: 01420174 movhi r5,2053
803f3fc: 296da904 addi r5,r5,-18780
803f400: e13ee217 ldw r4,-1144(fp)
803f404: 80273900 call 8027390 <ns_printf>
803f408: 00003606 br 803f4e4 <u_mctest_run+0x5b8>
/* exit(1); */
goto exitloop;
}
}
if (iRet > 0)
803f40c: e0bffd17 ldw r2,-12(fp)
803f410: 0080160e bge zero,r2,803f46c <u_mctest_run+0x540>
{
ns_printf(pio,"From host:%s port:%d, %s\n",
803f414: e0bff117 ldw r2,-60(fp)
803f418: 1009883a mov r4,r2
803f41c: 8026fbc0 call 8026fbc <print_ipad>
803f420: 1009883a mov r4,r2
print_ipad(stFrom.sin_addr.s_addr),
ntohs(stFrom.sin_port), achIn);
803f424: e0bff08b ldhu r2,-62(fp)
803f428: 10bfffcc andi r2,r2,65535
803f42c: 1004d23a srli r2,r2,8
803f430: 10bfffcc andi r2,r2,65535
803f434: 10c03fcc andi r3,r2,255
803f438: e0bff08b ldhu r2,-62(fp)
803f43c: 10bfffcc andi r2,r2,65535
803f440: 1004923a slli r2,r2,8
803f444: 10bfffcc andi r2,r2,65535
ns_printf(pio,"From host:%s port:%d, %s\n",
803f448: 1886b03a or r3,r3,r2
803f44c: e0bef004 addi r2,fp,-1088
803f450: d8800015 stw r2,0(sp)
803f454: 180f883a mov r7,r3
803f458: 200d883a mov r6,r4
803f45c: 01420174 movhi r5,2053
803f460: 296db104 addi r5,r5,-18748
803f464: e13ee217 ldw r4,-1144(fp)
803f468: 80273900 call 8027390 <ns_printf>
while (cticks < endtime)
803f46c: d0e07d17 ldw r3,-32268(gp)
803f470: e0bffc17 ldw r2,-16(fp)
803f474: 18bfc936 bltu r3,r2,803f39c <u_mctest_run+0x470>
}
} /* end while (cticks...) */
/* make the socket blocking */
cTmp = 0;
803f478: e03ee4c5 stb zero,-1133(fp)
iRet = t_setsockopt(s, SOL_SOCKET, SO_NONBLOCK, (char *)&cTmp, sizeof(cTmp));
803f47c: e0fee4c4 addi r3,fp,-1133
803f480: 00800044 movi r2,1
803f484: d8800015 stw r2,0(sp)
803f488: 180f883a mov r7,r3
803f48c: 01840584 movi r6,4118
803f490: 017fffc4 movi r5,-1
803f494: e13ffe17 ldw r4,-8(fp)
803f498: 802c44c0 call 802c44c <t_setsockopt>
803f49c: e0bffd15 stw r2,-12(fp)
if (iRet == SOCKET_ERROR)
803f4a0: e0bffd17 ldw r2,-12(fp)
803f4a4: 10bfffd8 cmpnei r2,r2,-1
803f4a8: 1000071e bne r2,zero,803f4c8 <u_mctest_run+0x59c>
{
ns_printf (pio,"t_setsockopt() SO_NONBLOCK (0) failed, Err: %d\n",
803f4ac: e13ffe17 ldw r4,-8(fp)
803f4b0: 802cfbc0 call 802cfbc <t_errno>
803f4b4: 100d883a mov r6,r2
803f4b8: 01420174 movhi r5,2053
803f4bc: 296db804 addi r5,r5,-18720
803f4c0: e13ee217 ldw r4,-1144(fp)
803f4c4: 80273900 call 8027390 <ns_printf>
for (i = 0; i < LOOPMAX; i++)
803f4c8: e0bfff17 ldw r2,-4(fp)
803f4cc: 10800044 addi r2,r2,1
803f4d0: e0bfff15 stw r2,-4(fp)
803f4d4: e0bfff17 ldw r2,-4(fp)
803f4d8: 108000d0 cmplti r2,r2,3
803f4dc: 103f771e bne r2,zero,803f2bc <u_mctest_run+0x390>
t_errno(s));
}
} /* end for(;;) */
exitloop:
803f4e0: 0001883a nop
/* delete the multicast group. */
stMreq.imr_multiaddr = inet_addr(TEST_ADDR);
803f4e4: 01020174 movhi r4,2053
803f4e8: 212d4d04 addi r4,r4,-19148
803f4ec: 803fc380 call 803fc38 <inet_addr>
803f4f0: e0bee515 stw r2,-1132(fp)
stMreq.imr_interface = netstatic[0].n_ipaddr;
803f4f4: 008201b4 movhi r2,2054
803f4f8: 10b6ba17 ldw r2,-9496(r2)
803f4fc: e0bee615 stw r2,-1128(fp)
iRet = t_setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char *)&stMreq, sizeof(stMreq));
803f500: e0fee504 addi r3,fp,-1132
803f504: 00800204 movi r2,8
803f508: d8800015 stw r2,0(sp)
803f50c: 180f883a mov r7,r3
803f510: 01800344 movi r6,13
803f514: 000b883a mov r5,zero
803f518: e13ffe17 ldw r4,-8(fp)
803f51c: 802c44c0 call 802c44c <t_setsockopt>
803f520: e0bffd15 stw r2,-12(fp)
if (iRet == SOCKET_ERROR)
803f524: e0bffd17 ldw r2,-12(fp)
803f528: 10bfffd8 cmpnei r2,r2,-1
803f52c: 1000071e bne r2,zero,803f54c <u_mctest_run+0x620>
{
ns_printf (pio,"t_setsockopt() IP_DROP_MEMBERSHIP failed, Err: %d\n",
803f530: e13ffe17 ldw r4,-8(fp)
803f534: 802cfbc0 call 802cfbc <t_errno>
803f538: 100d883a mov r6,r2
803f53c: 01420174 movhi r5,2053
803f540: 296dc404 addi r5,r5,-18672
803f544: e13ee217 ldw r4,-1144(fp)
803f548: 80273900 call 8027390 <ns_printf>
{
ns_printf (pio,"t_shutdown failed. Err: %d\n", t_errno(s));
}
#endif
iRet = t_socketclose(s);
803f54c: e13ffe17 ldw r4,-8(fp)
803f550: 802ce700 call 802ce70 <t_socketclose>
803f554: e0bffd15 stw r2,-12(fp)
if (iRet == SOCKET_ERROR)
803f558: e0bffd17 ldw r2,-12(fp)
803f55c: 10bfffd8 cmpnei r2,r2,-1
803f560: 1000071e bne r2,zero,803f580 <u_mctest_run+0x654>
{
ns_printf (pio,"t_socketclose() failed. Err: %d\n", t_errno(s));
803f564: e13ffe17 ldw r4,-8(fp)
803f568: 802cfbc0 call 802cfbc <t_errno>
803f56c: 100d883a mov r6,r2
803f570: 01420174 movhi r5,2053
803f574: 296dd104 addi r5,r5,-18620
803f578: e13ee217 ldw r4,-1144(fp)
803f57c: 80273900 call 8027390 <ns_printf>
}
return(0);
803f580: 0005883a mov r2,zero
} /* end main() */
803f584: e037883a mov sp,fp
803f588: dfc00117 ldw ra,4(sp)
803f58c: df000017 ldw fp,0(sp)
803f590: dec00204 addi sp,sp,8
803f594: f800283a ret
0803f598 <init_memdev>:
* RETURNS:
*/
int
init_memdev(void)
{
803f598: deffff04 addi sp,sp,-4
803f59c: df000015 stw fp,0(sp)
803f5a0: d839883a mov fp,sp
/* add our IO pointer to master list */
mdio.next = vfsystems;
803f5a4: d0e0a117 ldw r3,-32124(gp)
803f5a8: 00820174 movhi r2,2053
803f5ac: 10f25915 stw r3,-13980(r2)
vfsystems = &mdio;
803f5b0: 00820174 movhi r2,2053
803f5b4: 10b25904 addi r2,r2,-13980
803f5b8: d0a0a115 stw r2,-32124(gp)
/* add the memory device files to vfs list */
mdlist[0].next = vfsfiles;
803f5bc: d0e0a317 ldw r3,-32116(gp)
803f5c0: 00820174 movhi r2,2053
803f5c4: 10f26215 stw r3,-13944(r2)
vfsfiles = &mdlist[3];
803f5c8: 00820174 movhi r2,2053
803f5cc: 10b28304 addi r2,r2,-13812
803f5d0: d0a0a315 stw r2,-32116(gp)
return 0;
803f5d4: 0005883a mov r2,zero
}
803f5d8: e037883a mov sp,fp
803f5dc: df000017 ldw fp,0(sp)
803f5e0: dec00104 addi sp,sp,4
803f5e4: f800283a ret
0803f5e8 <md_fopen>:
* RETURNS:
*/
VFILE*
md_fopen(char * name, char * mode)
{
803f5e8: defffd04 addi sp,sp,-12
803f5ec: df000215 stw fp,8(sp)
803f5f0: df000204 addi fp,sp,8
803f5f4: e13fff15 stw r4,-4(fp)
803f5f8: e17ffe15 stw r5,-8(fp)
USE_ARG(mode);
USE_ARG(name);
return NULL;
803f5fc: 0005883a mov r2,zero
}
803f600: e037883a mov sp,fp
803f604: df000017 ldw fp,0(sp)
803f608: dec00104 addi sp,sp,4
803f60c: f800283a ret
0803f610 <md_fclose>:
* RETURNS:
*/
void
md_fclose(VFILE * vfd)
{
803f610: defffe04 addi sp,sp,-8
803f614: df000115 stw fp,4(sp)
803f618: df000104 addi fp,sp,4
803f61c: e13fff15 stw r4,-4(fp)
USE_ARG(vfd);
}
803f620: 0001883a nop
803f624: e037883a mov sp,fp
803f628: df000017 ldw fp,0(sp)
803f62c: dec00104 addi sp,sp,4
803f630: f800283a ret
0803f634 <md_fread>:
* RETURNS:
*/
int
md_fread(char * buf, unsigned size, unsigned items, VFILE * vfd)
{
803f634: defff704 addi sp,sp,-36
803f638: dfc00815 stw ra,32(sp)
803f63c: df000715 stw fp,28(sp)
803f640: df000704 addi fp,sp,28
803f644: e13ffc15 stw r4,-16(fp)
803f648: e17ffb15 stw r5,-20(fp)
803f64c: e1bffa15 stw r6,-24(fp)
803f650: e1fff915 stw r7,-28(fp)
u_long bcount; /* number of bytes put in caller's buffer */
u_long location; /* current offset into file */
unsigned long file_size = MEMDEV_SIZE;
803f654: 00800834 movhi r2,32
803f658: e0bffe15 stw r2,-8(fp)
if(vfd && vfd->file)
803f65c: e0bff917 ldw r2,-28(fp)
803f660: 10000726 beq r2,zero,803f680 <md_fread+0x4c>
803f664: e0bff917 ldw r2,-28(fp)
803f668: 10800117 ldw r2,4(r2)
803f66c: 10000426 beq r2,zero,803f680 <md_fread+0x4c>
{
file_size = vfd->file->real_size;
803f670: e0bff917 ldw r2,-28(fp)
803f674: 10800117 ldw r2,4(r2)
803f678: 10800717 ldw r2,28(r2)
803f67c: e0bffe15 stw r2,-8(fp)
#ifdef SEG16_16 /* 16-bit x86 must include segment. */
if(vfd->cmploc == (u_char*)0xFFFFFFFF) /* at EOF */
return 0;
location = (u_long)(((char huge *)vfd->cmploc) - ((char huge *)vfd->file->data));
#else
location = (u_long)(vfd->cmploc - vfd->file->data);
803f680: e0bff917 ldw r2,-28(fp)
803f684: 10c00217 ldw r3,8(r2)
803f688: e0bff917 ldw r2,-28(fp)
803f68c: 10800117 ldw r2,4(r2)
803f690: 10800617 ldw r2,24(r2)
803f694: 1885c83a sub r2,r3,r2
803f698: e0bffd15 stw r2,-12(fp)
#endif /* SEG16_16 */
bcount = (items * (u_long)size); /* number of bytes to transfer */
803f69c: e0fffa17 ldw r3,-24(fp)
803f6a0: e0bffb17 ldw r2,-20(fp)
803f6a4: 1885383a mul r2,r3,r2
803f6a8: e0bfff15 stw r2,-4(fp)
/* if near end of memory, trim read count accordingly */
if ((location + bcount) > file_size)
803f6ac: e0fffd17 ldw r3,-12(fp)
803f6b0: e0bfff17 ldw r2,-4(fp)
803f6b4: 1885883a add r2,r3,r2
803f6b8: e0fffe17 ldw r3,-8(fp)
803f6bc: 1880042e bgeu r3,r2,803f6d0 <md_fread+0x9c>
bcount = ((u_long)file_size - location);
803f6c0: e0fffe17 ldw r3,-8(fp)
803f6c4: e0bffd17 ldw r2,-12(fp)
803f6c8: 1885c83a sub r2,r3,r2
803f6cc: e0bfff15 stw r2,-4(fp)
/* trap bogus size items and end-of-x86 memory conditions */
if((location >= file_size) ||
803f6d0: e0fffd17 ldw r3,-12(fp)
803f6d4: e0bffe17 ldw r2,-8(fp)
803f6d8: 1880052e bgeu r3,r2,803f6f0 <md_fread+0xbc>
(bcount & 0xFFFF0000) ||
803f6dc: e0bfff17 ldw r2,-4(fp)
803f6e0: 10bfffec andhi r2,r2,65535
if((location >= file_size) ||
803f6e4: 1000021e bne r2,zero,803f6f0 <md_fread+0xbc>
(bcount & 0xFFFF0000) ||
803f6e8: e0bfff17 ldw r2,-4(fp)
803f6ec: 1000021e bne r2,zero,803f6f8 <md_fread+0xc4>
(bcount == 0))
{
return 0;
803f6f0: 0005883a mov r2,zero
803f6f4: 00002006 br 803f778 <md_fread+0x144>
/* Use VF_NODATA if memory devices have a size, but no
data. This can be used to measure file read speed
without introducing an undefined data copy. */
/* VF_NODATA is defined in ../h/vfsfiles.h */
if (!(vfd->file->flags & VF_NODATA))
803f6f8: e0bff917 ldw r2,-28(fp)
803f6fc: 10800117 ldw r2,4(r2)
803f700: 1080058b ldhu r2,22(r2)
803f704: 10bfffcc andi r2,r2,65535
803f708: 10a0001c xori r2,r2,32768
803f70c: 10a00004 addi r2,r2,-32768
803f710: 10001016 blt r2,zero,803f754 <md_fread+0x120>
{
if (vfd->file->name[0] == 'm') /* memory device */
803f714: e0bff917 ldw r2,-28(fp)
803f718: 10800117 ldw r2,4(r2)
803f71c: 10800103 ldbu r2,4(r2)
803f720: 10803fcc andi r2,r2,255
803f724: 1080201c xori r2,r2,128
803f728: 10bfe004 addi r2,r2,-128
803f72c: 10801b58 cmpnei r2,r2,109
803f730: 1000081e bne r2,zero,803f754 <md_fread+0x120>
MEMCPY(buf, vfd->cmploc + MEMDEV_BASE, (unsigned)bcount);
803f734: e0bff917 ldw r2,-28(fp)
803f738: 10c00217 ldw r3,8(r2)
803f73c: 00800834 movhi r2,32
803f740: 1885883a add r2,r3,r2
803f744: e1bfff17 ldw r6,-4(fp)
803f748: 100b883a mov r5,r2
803f74c: e13ffc17 ldw r4,-16(fp)
803f750: 80086b80 call 80086b8 <memcpy>
vfd->cmploc = (u_char *)cp;
else /* read wrapped memory, set pointer to EOF value */
vfd->cmploc = (u_char*)(0xFFFFFFFF); /* EOF */
}
#else
vfd->cmploc += bcount; /* adjust location */
803f754: e0bff917 ldw r2,-28(fp)
803f758: 10c00217 ldw r3,8(r2)
803f75c: e0bfff17 ldw r2,-4(fp)
803f760: 1887883a add r3,r3,r2
803f764: e0bff917 ldw r2,-28(fp)
803f768: 10c00215 stw r3,8(r2)
#endif
return ((int)bcount/size);
803f76c: e17ffb17 ldw r5,-20(fp)
803f770: e13fff17 ldw r4,-4(fp)
803f774: 800cff80 call 800cff8 <__udivsi3>
}
803f778: e037883a mov sp,fp
803f77c: dfc00117 ldw ra,4(sp)
803f780: df000017 ldw fp,0(sp)
803f784: dec00204 addi sp,sp,8
803f788: f800283a ret
0803f78c <md_fwrite>:
* RETURNS:
*/
int
md_fwrite(char * buf, unsigned size, unsigned items, VFILE * vfd)
{
803f78c: defffb04 addi sp,sp,-20
803f790: df000415 stw fp,16(sp)
803f794: df000404 addi fp,sp,16
803f798: e13fff15 stw r4,-4(fp)
803f79c: e17ffe15 stw r5,-8(fp)
803f7a0: e1bffd15 stw r6,-12(fp)
803f7a4: e1fffc15 stw r7,-16(fp)
if (vfd->file->name[0] == 'm') /* memory device */
803f7a8: e0bffc17 ldw r2,-16(fp)
803f7ac: 10800117 ldw r2,4(r2)
803f7b0: 10800103 ldbu r2,4(r2)
803f7b4: 10803fcc andi r2,r2,255
803f7b8: 1080201c xori r2,r2,128
803f7bc: 10bfe004 addi r2,r2,-128
803f7c0: 10801b58 cmpnei r2,r2,109
803f7c4: 1000021e bne r2,zero,803f7d0 <md_fwrite+0x44>
return 0; /* not writable device */
803f7c8: 0005883a mov r2,zero
803f7cc: 00000906 br 803f7f4 <md_fwrite+0x68>
vfd->cmploc += (items * size); /* adjust location */
803f7d0: e0bffc17 ldw r2,-16(fp)
803f7d4: 10c00217 ldw r3,8(r2)
803f7d8: e13ffd17 ldw r4,-12(fp)
803f7dc: e0bffe17 ldw r2,-8(fp)
803f7e0: 2085383a mul r2,r4,r2
803f7e4: 1887883a add r3,r3,r2
803f7e8: e0bffc17 ldw r2,-16(fp)
803f7ec: 10c00215 stw r3,8(r2)
USE_ARG(buf); /* supress compiler warnings */
return (items);
803f7f0: e0bffd17 ldw r2,-12(fp)
}
803f7f4: e037883a mov sp,fp
803f7f8: df000017 ldw fp,0(sp)
803f7fc: dec00104 addi sp,sp,4
803f800: f800283a ret
0803f804 <md_fseek>:
* RETURNS:
*/
int
md_fseek(VFILE * vfd, long offset, int mode)
{
803f804: defffc04 addi sp,sp,-16
803f808: df000315 stw fp,12(sp)
803f80c: df000304 addi fp,sp,12
803f810: e13fff15 stw r4,-4(fp)
803f814: e17ffe15 stw r5,-8(fp)
803f818: e1bffd15 stw r6,-12(fp)
USE_ARG(vfd); /* supress compiler warnings */
USE_ARG(offset);
USE_ARG(mode);
return 0;
803f81c: 0005883a mov r2,zero
}
803f820: e037883a mov sp,fp
803f824: df000017 ldw fp,0(sp)
803f828: dec00104 addi sp,sp,4
803f82c: f800283a ret
0803f830 <md_ftell>:
* RETURNS:
*/
long
md_ftell(VFILE * vfd)
{
803f830: defffe04 addi sp,sp,-8
803f834: df000115 stw fp,4(sp)
803f838: df000104 addi fp,sp,4
803f83c: e13fff15 stw r4,-4(fp)
USE_ARG(vfd); /* supress compiler warnings */
return MEMDEV_SIZE;
803f840: 00800834 movhi r2,32
}
803f844: e037883a mov sp,fp
803f848: df000017 ldw fp,0(sp)
803f84c: dec00104 addi sp,sp,4
803f850: f800283a ret
0803f854 <md_fgetc>:
* RETURNS:
*/
int
md_fgetc(VFILE * vfd)
{
803f854: defffc04 addi sp,sp,-16
803f858: df000315 stw fp,12(sp)
803f85c: df000304 addi fp,sp,12
803f860: e13ffd15 stw r4,-12(fp)
unsigned location; /* current offset infile */
int retval = 0;
803f864: e03fff15 stw zero,-4(fp)
location = vfd->cmploc - vfd->file->data;
803f868: e0bffd17 ldw r2,-12(fp)
803f86c: 10c00217 ldw r3,8(r2)
803f870: e0bffd17 ldw r2,-12(fp)
803f874: 10800117 ldw r2,4(r2)
803f878: 10800617 ldw r2,24(r2)
803f87c: 1885c83a sub r2,r3,r2
803f880: e0bffe15 stw r2,-8(fp)
if (location >= vfd->file->real_size) /* at end of file? */
803f884: e0bffd17 ldw r2,-12(fp)
803f888: 10800117 ldw r2,4(r2)
803f88c: 10800717 ldw r2,28(r2)
803f890: e0fffe17 ldw r3,-8(fp)
803f894: 18800236 bltu r3,r2,803f8a0 <md_fgetc+0x4c>
return EOF;
803f898: 00bfffc4 movi r2,-1
803f89c: 00001a06 br 803f908 <md_fgetc+0xb4>
if (!(vfd->file->flags & VF_NODATA))
803f8a0: e0bffd17 ldw r2,-12(fp)
803f8a4: 10800117 ldw r2,4(r2)
803f8a8: 1080058b ldhu r2,22(r2)
803f8ac: 10bfffcc andi r2,r2,65535
803f8b0: 10a0001c xori r2,r2,32768
803f8b4: 10a00004 addi r2,r2,-32768
803f8b8: 10000d16 blt r2,zero,803f8f0 <md_fgetc+0x9c>
{
if (vfd->file->name[0] == 'm') /* memory device */
803f8bc: e0bffd17 ldw r2,-12(fp)
803f8c0: 10800117 ldw r2,4(r2)
803f8c4: 10800103 ldbu r2,4(r2)
803f8c8: 10803fcc andi r2,r2,255
803f8cc: 1080201c xori r2,r2,128
803f8d0: 10bfe004 addi r2,r2,-128
803f8d4: 10801b58 cmpnei r2,r2,109
803f8d8: 1000051e bne r2,zero,803f8f0 <md_fgetc+0x9c>
retval = (int)(*vfd->cmploc) & 0xFF ;
803f8dc: e0bffd17 ldw r2,-12(fp)
803f8e0: 10800217 ldw r2,8(r2)
803f8e4: 10800003 ldbu r2,0(r2)
803f8e8: 10803fcc andi r2,r2,255
803f8ec: e0bfff15 stw r2,-4(fp)
}
/* else for null device or files without data,
use whatever is in retval */
vfd->cmploc++; /* adjust location */
803f8f0: e0bffd17 ldw r2,-12(fp)
803f8f4: 10800217 ldw r2,8(r2)
803f8f8: 10c00044 addi r3,r2,1
803f8fc: e0bffd17 ldw r2,-12(fp)
803f900: 10c00215 stw r3,8(r2)
return retval;
803f904: e0bfff17 ldw r2,-4(fp)
}
803f908: e037883a mov sp,fp
803f90c: df000017 ldw fp,0(sp)
803f910: dec00104 addi sp,sp,4
803f914: f800283a ret
0803f918 <md_unlink>:
* RETURNS:
*/
int
md_unlink(char * filename)
{
803f918: defffe04 addi sp,sp,-8
803f91c: df000115 stw fp,4(sp)
803f920: df000104 addi fp,sp,4
803f924: e13fff15 stw r4,-4(fp)
USE_ARG(filename); /* supress compiler warnings */
return 0;
803f928: 0005883a mov r2,zero
}
803f92c: e037883a mov sp,fp
803f930: df000017 ldw fp,0(sp)
803f934: dec00104 addi sp,sp,4
803f938: f800283a ret
0803f93c <parse_ipad>:
char *
parse_ipad(ip_addr * ipout, /* pointer to IP address to set */
unsigned * sbits, /* default subnet bit number */
char * stringin) /* buffer with ascii to parse */
{
803f93c: defff604 addi sp,sp,-40
803f940: dfc00915 stw ra,36(sp)
803f944: df000815 stw fp,32(sp)
803f948: df000804 addi fp,sp,32
803f94c: e13ffa15 stw r4,-24(fp)
803f950: e17ff915 stw r5,-28(fp)
803f954: e1bff815 stw r6,-32(fp)
char * cp;
int dots = 0; /* periods imbedded in input string */
803f958: e03ffe15 stw zero,-8(fp)
union
{
u_char c[4];
u_long l;
} retval;
char * toobig = "each number must be less than 255";
803f95c: 00820174 movhi r2,2053
803f960: 10ade204 addi r2,r2,-18552
803f964: e0bffd15 stw r2,-12(fp)
cp = stringin;
803f968: e0bff817 ldw r2,-32(fp)
803f96c: e0bfff15 stw r2,-4(fp)
while (*cp)
803f970: 00002506 br 803fa08 <parse_ipad+0xcc>
{
if (*cp > '9' || *cp < '.' || *cp == '/')
803f974: e0bfff17 ldw r2,-4(fp)
803f978: 10800003 ldbu r2,0(r2)
803f97c: 10803fcc andi r2,r2,255
803f980: 1080201c xori r2,r2,128
803f984: 10bfe004 addi r2,r2,-128
803f988: 10800e88 cmpgei r2,r2,58
803f98c: 10000e1e bne r2,zero,803f9c8 <parse_ipad+0x8c>
803f990: e0bfff17 ldw r2,-4(fp)
803f994: 10800003 ldbu r2,0(r2)
803f998: 10803fcc andi r2,r2,255
803f99c: 1080201c xori r2,r2,128
803f9a0: 10bfe004 addi r2,r2,-128
803f9a4: 10800b90 cmplti r2,r2,46
803f9a8: 1000071e bne r2,zero,803f9c8 <parse_ipad+0x8c>
803f9ac: e0bfff17 ldw r2,-4(fp)
803f9b0: 10800003 ldbu r2,0(r2)
803f9b4: 10803fcc andi r2,r2,255
803f9b8: 1080201c xori r2,r2,128
803f9bc: 10bfe004 addi r2,r2,-128
803f9c0: 10800bd8 cmpnei r2,r2,47
803f9c4: 1000031e bne r2,zero,803f9d4 <parse_ipad+0x98>
return("all chars must be digits (0-9) or dots (.)");
803f9c8: 00820174 movhi r2,2053
803f9cc: 10adeb04 addi r2,r2,-18516
803f9d0: 00009406 br 803fc24 <parse_ipad+0x2e8>
if (*cp == '.')dots++;
803f9d4: e0bfff17 ldw r2,-4(fp)
803f9d8: 10800003 ldbu r2,0(r2)
803f9dc: 10803fcc andi r2,r2,255
803f9e0: 1080201c xori r2,r2,128
803f9e4: 10bfe004 addi r2,r2,-128
803f9e8: 10800b98 cmpnei r2,r2,46
803f9ec: 1000031e bne r2,zero,803f9fc <parse_ipad+0xc0>
803f9f0: e0bffe17 ldw r2,-8(fp)
803f9f4: 10800044 addi r2,r2,1
803f9f8: e0bffe15 stw r2,-8(fp)
cp++;
803f9fc: e0bfff17 ldw r2,-4(fp)
803fa00: 10800044 addi r2,r2,1
803fa04: e0bfff15 stw r2,-4(fp)
while (*cp)
803fa08: e0bfff17 ldw r2,-4(fp)
803fa0c: 10800003 ldbu r2,0(r2)
803fa10: 10803fcc andi r2,r2,255
803fa14: 1080201c xori r2,r2,128
803fa18: 10bfe004 addi r2,r2,-128
803fa1c: 103fd51e bne r2,zero,803f974 <parse_ipad+0x38>
}
if ( dots < 1 || dots > 3 )
803fa20: e0bffe17 ldw r2,-8(fp)
803fa24: 0080030e bge zero,r2,803fa34 <parse_ipad+0xf8>
803fa28: e0bffe17 ldw r2,-8(fp)
803fa2c: 10800110 cmplti r2,r2,4
803fa30: 1000031e bne r2,zero,803fa40 <parse_ipad+0x104>
return("string must contain 1 - 3 dots (.)");
803fa34: 00820174 movhi r2,2053
803fa38: 10adf604 addi r2,r2,-18472
803fa3c: 00007906 br 803fc24 <parse_ipad+0x2e8>
cp = stringin;
803fa40: e0bff817 ldw r2,-32(fp)
803fa44: e0bfff15 stw r2,-4(fp)
if ((number = atoi(cp)) > 255) /* set net number */
803fa48: e13fff17 ldw r4,-4(fp)
803fa4c: 8042aa40 call 8042aa4 <atoi>
803fa50: e0bffc15 stw r2,-16(fp)
803fa54: e0bffc17 ldw r2,-16(fp)
803fa58: 10804010 cmplti r2,r2,256
803fa5c: 1000021e bne r2,zero,803fa68 <parse_ipad+0x12c>
return(toobig);
803fa60: e0bffd17 ldw r2,-12(fp)
803fa64: 00006f06 br 803fc24 <parse_ipad+0x2e8>
retval.c[0] = (u_char)number;
803fa68: e0bffc17 ldw r2,-16(fp)
803fa6c: e0bffb05 stb r2,-20(fp)
while (*cp != '.')cp++; /* find dot (end of number) */
803fa70: 00000306 br 803fa80 <parse_ipad+0x144>
803fa74: e0bfff17 ldw r2,-4(fp)
803fa78: 10800044 addi r2,r2,1
803fa7c: e0bfff15 stw r2,-4(fp)
803fa80: e0bfff17 ldw r2,-4(fp)
803fa84: 10800003 ldbu r2,0(r2)
803fa88: 10803fcc andi r2,r2,255
803fa8c: 1080201c xori r2,r2,128
803fa90: 10bfe004 addi r2,r2,-128
803fa94: 10800b98 cmpnei r2,r2,46
803fa98: 103ff61e bne r2,zero,803fa74 <parse_ipad+0x138>
cp++; /* point past dot */
803fa9c: e0bfff17 ldw r2,-4(fp)
803faa0: 10800044 addi r2,r2,1
803faa4: e0bfff15 stw r2,-4(fp)
if (dots == 1 || dots == 2) retval.c[1] = 0;
803faa8: e0bffe17 ldw r2,-8(fp)
803faac: 10800060 cmpeqi r2,r2,1
803fab0: 1000031e bne r2,zero,803fac0 <parse_ipad+0x184>
803fab4: e0bffe17 ldw r2,-8(fp)
803fab8: 10800098 cmpnei r2,r2,2
803fabc: 1000021e bne r2,zero,803fac8 <parse_ipad+0x18c>
803fac0: e03ffb45 stb zero,-19(fp)
803fac4: 00001806 br 803fb28 <parse_ipad+0x1ec>
else
{
number = atoi(cp);
803fac8: e13fff17 ldw r4,-4(fp)
803facc: 8042aa40 call 8042aa4 <atoi>
803fad0: e0bffc15 stw r2,-16(fp)
while (*cp != '.')cp++; /* find dot (end of number) */
803fad4: 00000306 br 803fae4 <parse_ipad+0x1a8>
803fad8: e0bfff17 ldw r2,-4(fp)
803fadc: 10800044 addi r2,r2,1
803fae0: e0bfff15 stw r2,-4(fp)
803fae4: e0bfff17 ldw r2,-4(fp)
803fae8: 10800003 ldbu r2,0(r2)
803faec: 10803fcc andi r2,r2,255
803faf0: 1080201c xori r2,r2,128
803faf4: 10bfe004 addi r2,r2,-128
803faf8: 10800b98 cmpnei r2,r2,46
803fafc: 103ff61e bne r2,zero,803fad8 <parse_ipad+0x19c>
cp++; /* point past dot */
803fb00: e0bfff17 ldw r2,-4(fp)
803fb04: 10800044 addi r2,r2,1
803fb08: e0bfff15 stw r2,-4(fp)
if (number > 255) return(toobig);
803fb0c: e0bffc17 ldw r2,-16(fp)
803fb10: 10804010 cmplti r2,r2,256
803fb14: 1000021e bne r2,zero,803fb20 <parse_ipad+0x1e4>
803fb18: e0bffd17 ldw r2,-12(fp)
803fb1c: 00004106 br 803fc24 <parse_ipad+0x2e8>
retval.c[1] = (u_char)number;
803fb20: e0bffc17 ldw r2,-16(fp)
803fb24: e0bffb45 stb r2,-19(fp)
}
if (dots == 1) retval.c[2] = 0;
803fb28: e0bffe17 ldw r2,-8(fp)
803fb2c: 10800058 cmpnei r2,r2,1
803fb30: 1000021e bne r2,zero,803fb3c <parse_ipad+0x200>
803fb34: e03ffb85 stb zero,-18(fp)
803fb38: 00001806 br 803fb9c <parse_ipad+0x260>
else
{
number = atoi(cp);
803fb3c: e13fff17 ldw r4,-4(fp)
803fb40: 8042aa40 call 8042aa4 <atoi>
803fb44: e0bffc15 stw r2,-16(fp)
while (*cp != '.')cp++; /* find dot (end of number) */
803fb48: 00000306 br 803fb58 <parse_ipad+0x21c>
803fb4c: e0bfff17 ldw r2,-4(fp)
803fb50: 10800044 addi r2,r2,1
803fb54: e0bfff15 stw r2,-4(fp)
803fb58: e0bfff17 ldw r2,-4(fp)
803fb5c: 10800003 ldbu r2,0(r2)
803fb60: 10803fcc andi r2,r2,255
803fb64: 1080201c xori r2,r2,128
803fb68: 10bfe004 addi r2,r2,-128
803fb6c: 10800b98 cmpnei r2,r2,46
803fb70: 103ff61e bne r2,zero,803fb4c <parse_ipad+0x210>
cp++; /* point past dot */
803fb74: e0bfff17 ldw r2,-4(fp)
803fb78: 10800044 addi r2,r2,1
803fb7c: e0bfff15 stw r2,-4(fp)
if (number > 255) return(toobig);
803fb80: e0bffc17 ldw r2,-16(fp)
803fb84: 10804010 cmplti r2,r2,256
803fb88: 1000021e bne r2,zero,803fb94 <parse_ipad+0x258>
803fb8c: e0bffd17 ldw r2,-12(fp)
803fb90: 00002406 br 803fc24 <parse_ipad+0x2e8>
retval.c[2] = (u_char)number;
803fb94: e0bffc17 ldw r2,-16(fp)
803fb98: e0bffb85 stb r2,-18(fp)
}
if ((number = atoi(cp)) > 255)
803fb9c: e13fff17 ldw r4,-4(fp)
803fba0: 8042aa40 call 8042aa4 <atoi>
803fba4: e0bffc15 stw r2,-16(fp)
803fba8: e0bffc17 ldw r2,-16(fp)
803fbac: 10804010 cmplti r2,r2,256
803fbb0: 1000021e bne r2,zero,803fbbc <parse_ipad+0x280>
return(toobig);
803fbb4: e0bffd17 ldw r2,-12(fp)
803fbb8: 00001a06 br 803fc24 <parse_ipad+0x2e8>
retval.c[3] = (u_char)number;
803fbbc: e0bffc17 ldw r2,-16(fp)
803fbc0: e0bffbc5 stb r2,-17(fp)
if (retval.c[0] < 128) *sbits = 8;
803fbc4: e0bffb03 ldbu r2,-20(fp)
803fbc8: 10803fcc andi r2,r2,255
803fbcc: 1080201c xori r2,r2,128
803fbd0: 10bfe004 addi r2,r2,-128
803fbd4: 10000416 blt r2,zero,803fbe8 <parse_ipad+0x2ac>
803fbd8: e0bff917 ldw r2,-28(fp)
803fbdc: 00c00204 movi r3,8
803fbe0: 10c00015 stw r3,0(r2)
803fbe4: 00000b06 br 803fc14 <parse_ipad+0x2d8>
else if(retval.c[0] < 192) *sbits = 16;
803fbe8: e0bffb03 ldbu r2,-20(fp)
803fbec: 10803fcc andi r2,r2,255
803fbf0: 10803028 cmpgeui r2,r2,192
803fbf4: 1000041e bne r2,zero,803fc08 <parse_ipad+0x2cc>
803fbf8: e0bff917 ldw r2,-28(fp)
803fbfc: 00c00404 movi r3,16
803fc00: 10c00015 stw r3,0(r2)
803fc04: 00000306 br 803fc14 <parse_ipad+0x2d8>
else *sbits = 24;
803fc08: e0bff917 ldw r2,-28(fp)
803fc0c: 00c00604 movi r3,24
803fc10: 10c00015 stw r3,0(r2)
*ipout = retval.l; /* everything went OK, return number */
803fc14: e0fffb17 ldw r3,-20(fp)
803fc18: e0bffa17 ldw r2,-24(fp)
803fc1c: 10c00015 stw r3,0(r2)
return(NULL); /* return OK code (no error string) */
803fc20: 0005883a mov r2,zero
}
803fc24: e037883a mov sp,fp
803fc28: dfc00117 ldw ra,4(sp)
803fc2c: df000017 ldw fp,0(sp)
803fc30: dec00204 addi sp,sp,8
803fc34: f800283a ret
0803fc38 <inet_addr>:
* RETURNS: u_long ipaddr
*/
u_long
inet_addr(char FAR * str)
{
803fc38: defffb04 addi sp,sp,-20
803fc3c: dfc00415 stw ra,16(sp)
803fc40: df000315 stw fp,12(sp)
803fc44: df000304 addi fp,sp,12
803fc48: e13ffd15 stw r4,-12(fp)
* we need to make the conversion. Usually this function will be
* used for debugging, so I think we can bear the STRCPY overhead.
*/
static char nearBuf[30];
strcpy((char FAR *)nearBuf,str);
803fc4c: e17ffd17 ldw r5,-12(fp)
803fc50: 01020174 movhi r4,2053
803fc54: 21338304 addi r4,r4,-12788
803fc58: 8042f600 call 8042f60 <strcpy>
if ( parse_ipad(&ipaddr,&bits,nearBuf) == NULL )
803fc5c: e0fffe04 addi r3,fp,-8
803fc60: e0bfff04 addi r2,fp,-4
803fc64: 01820174 movhi r6,2053
803fc68: 31b38304 addi r6,r6,-12788
803fc6c: 180b883a mov r5,r3
803fc70: 1009883a mov r4,r2
803fc74: 803f93c0 call 803f93c <parse_ipad>
803fc78: 1000021e bne r2,zero,803fc84 <inet_addr+0x4c>
{
return ipaddr ;
803fc7c: e0bfff17 ldw r2,-4(fp)
803fc80: 00000106 br 803fc88 <inet_addr+0x50>
}
else
{
return (u_long)NULL ;
803fc84: 0005883a mov r2,zero
}
}
803fc88: e037883a mov sp,fp
803fc8c: dfc00117 ldw ra,4(sp)
803fc90: df000017 ldw fp,0(sp)
803fc94: dec00204 addi sp,sp,8
803fc98: f800283a ret
0803fc9c <hextoa>:
* RETURNS: character 0-9 or A-F
*/
char
hextoa(int val)
{
803fc9c: defffe04 addi sp,sp,-8
803fca0: df000115 stw fp,4(sp)
803fca4: df000104 addi fp,sp,4
803fca8: e13fff15 stw r4,-4(fp)
val &= 0x0f;
803fcac: e0bfff17 ldw r2,-4(fp)
803fcb0: 108003cc andi r2,r2,15
803fcb4: e0bfff15 stw r2,-4(fp)
if(val < 10)
803fcb8: e0bfff17 ldw r2,-4(fp)
803fcbc: 10800288 cmpgei r2,r2,10
803fcc0: 1000031e bne r2,zero,803fcd0 <hextoa+0x34>
return (char)(val + '0');
803fcc4: e0bfff17 ldw r2,-4(fp)
803fcc8: 10800c04 addi r2,r2,48
803fccc: 00000206 br 803fcd8 <hextoa+0x3c>
else
return (char)(val + 55); /* converts 10-15 -> "A-F" */
803fcd0: e0bfff17 ldw r2,-4(fp)
803fcd4: 10800dc4 addi r2,r2,55
}
803fcd8: e037883a mov sp,fp
803fcdc: df000017 ldw fp,0(sp)
803fce0: dec00104 addi sp,sp,4
803fce4: f800283a ret
0803fce8 <inet_pton>:
char * pton_error = "";
int
inet_pton(int af, const char * src, void * dst)
{
803fce8: defff804 addi sp,sp,-32
803fcec: dfc00715 stw ra,28(sp)
803fcf0: df000615 stw fp,24(sp)
803fcf4: df000604 addi fp,sp,24
803fcf8: e13ffc15 stw r4,-16(fp)
803fcfc: e17ffb15 stw r5,-20(fp)
803fd00: e1bffa15 stw r6,-24(fp)
int words; /* count of words written to dest */
#endif
#if defined(IP_V4) || defined(MINI_IP)
/* RFC 2133 wants us to support both types of address */
if(af == AF_INET) /* wants a v4 address */
803fd04: e0bffc17 ldw r2,-16(fp)
803fd08: 10800098 cmpnei r2,r2,2
803fd0c: 1000151e bne r2,zero,803fd64 <inet_pton+0x7c>
{
u_long ip4addr;
unsigned sbits;
char * err;
err = parse_ipad(&ip4addr, &sbits, (char *) src);
803fd10: e0fffd04 addi r3,fp,-12
803fd14: e0bffe04 addi r2,fp,-8
803fd18: e1bffb17 ldw r6,-20(fp)
803fd1c: 180b883a mov r5,r3
803fd20: 1009883a mov r4,r2
803fd24: 803f93c0 call 803f93c <parse_ipad>
803fd28: e0bfff15 stw r2,-4(fp)
if(err == NULL)
803fd2c: e0bfff17 ldw r2,-4(fp)
803fd30: 1000071e bne r2,zero,803fd50 <inet_pton+0x68>
{
/* copy the parsed address into caller's buffer, and
* return success
*/
MEMCPY(dst, &ip4addr, sizeof (u_long));
803fd34: e0bffe04 addi r2,fp,-8
803fd38: 01800104 movi r6,4
803fd3c: 100b883a mov r5,r2
803fd40: e13ffa17 ldw r4,-24(fp)
803fd44: 80086b80 call 80086b8 <memcpy>
return 0;
803fd48: 0005883a mov r2,zero
803fd4c: 00000606 br 803fd68 <inet_pton+0x80>
}
else
{
/* return failure */
pton_error = "IPv4 address parse failure";
803fd50: 00820174 movhi r2,2053
803fd54: 10ae0004 addi r2,r2,-18432
803fd58: d0a03315 stw r2,-32564(gp)
return 1;
803fd5c: 00800044 movi r2,1
803fd60: 00000106 br 803fd68 <inet_pton+0x80>
pton_error = "too short - missing colon?";
return 1;
}
#endif /* IP_V6 */
return 0;
803fd64: 0005883a mov r2,zero
}
803fd68: e037883a mov sp,fp
803fd6c: dfc00117 ldw ra,4(sp)
803fd70: df000017 ldw fp,0(sp)
803fd74: dec00204 addi sp,sp,8
803fd78: f800283a ret
0803fd7c <inet_ntop>:
* address output (40 bytes).
*/
const char *
inet_ntop(int af, const void *addr, char *str, size_t size)
{
803fd7c: defff804 addi sp,sp,-32
803fd80: dfc00715 stw ra,28(sp)
803fd84: df000615 stw fp,24(sp)
803fd88: df000604 addi fp,sp,24
803fd8c: e13ffd15 stw r4,-12(fp)
803fd90: e17ffc15 stw r5,-16(fp)
803fd94: e1bffb15 stw r6,-20(fp)
803fd98: e1fffa15 stw r7,-24(fp)
char *cp;
#if defined(IP_V4) || defined(MINI_IP)
if (af == AF_INET)
803fd9c: e0bffd17 ldw r2,-12(fp)
803fda0: 10800098 cmpnei r2,r2,2
803fda4: 1000101e bne r2,zero,803fde8 <inet_ntop+0x6c>
{
u_long ip4addr;
ip4addr = *(u_long*)addr;
803fda8: e0bffc17 ldw r2,-16(fp)
803fdac: 10800017 ldw r2,0(r2)
803fdb0: e0bfff15 stw r2,-4(fp)
cp = print_ipad(ip4addr);
803fdb4: e13fff17 ldw r4,-4(fp)
803fdb8: 8026fbc0 call 8026fbc <print_ipad>
803fdbc: e0bffe15 stw r2,-8(fp)
if (strlen(cp) < size)
803fdc0: e13ffe17 ldw r4,-8(fp)
803fdc4: 8002dac0 call 8002dac <strlen>
803fdc8: 1007883a mov r3,r2
803fdcc: e0bffa17 ldw r2,-24(fp)
803fdd0: 1880052e bgeu r3,r2,803fde8 <inet_ntop+0x6c>
{
strcpy(str, cp);
803fdd4: e17ffe17 ldw r5,-8(fp)
803fdd8: e13ffb17 ldw r4,-20(fp)
803fddc: 8042f600 call 8042f60 <strcpy>
return (str);
803fde0: e0bffb17 ldw r2,-20(fp)
803fde4: 00000106 br 803fdec <inet_ntop+0x70>
return (str);
}
}
#endif
return ((const char *)NULL);
803fde8: 0005883a mov r2,zero
}
803fdec: e037883a mov sp,fp
803fdf0: dfc00117 ldw ra,4(sp)
803fdf4: df000017 ldw fp,0(sp)
803fdf8: dec00204 addi sp,sp,8
803fdfc: f800283a ret
0803fe00 <print46_addr>:
*
* RETURNS: Pointer to string with the address in readable format.
*/
char * print46_addr(struct sockaddr *ipaddr)
{
803fe00: defffc04 addi sp,sp,-16
803fe04: dfc00315 stw ra,12(sp)
803fe08: df000215 stw fp,8(sp)
803fe0c: df000204 addi fp,sp,8
803fe10: e13ffe15 stw r4,-8(fp)
if (ipaddr->sa_family == AF_INET)
803fe14: e0bffe17 ldw r2,-8(fp)
803fe18: 1080000b ldhu r2,0(r2)
803fe1c: 10bfffcc andi r2,r2,65535
803fe20: 10800098 cmpnei r2,r2,2
803fe24: 1000071e bne r2,zero,803fe44 <print46_addr+0x44>
{
struct sockaddr_in * addr = (struct sockaddr_in *)ipaddr;
803fe28: e0bffe17 ldw r2,-8(fp)
803fe2c: e0bfff15 stw r2,-4(fp)
return print_ipad(addr->sin_addr.s_addr);
803fe30: e0bfff17 ldw r2,-4(fp)
803fe34: 10800117 ldw r2,4(r2)
803fe38: 1009883a mov r4,r2
803fe3c: 8026fbc0 call 8026fbc <print_ipad>
803fe40: 00000106 br 803fe48 <print46_addr+0x48>
static char namebuf[46]; /* max len of IPv6 addr */
return (char *)inet_ntop(AF_INET6,&addr->sin6_addr, namebuf, sizeof(namebuf));
}
#endif
return NULL;
803fe44: 0005883a mov r2,zero
}
803fe48: e037883a mov sp,fp
803fe4c: dfc00117 ldw ra,4(sp)
803fe50: df000017 ldw fp,0(sp)
803fe54: dec00204 addi sp,sp,8
803fe58: f800283a ret
0803fe5c <inet46_addr>:
*
*/
int
inet46_addr(char * str, struct sockaddr *address)
{
803fe5c: defffb04 addi sp,sp,-20
803fe60: dfc00415 stw ra,16(sp)
803fe64: df000315 stw fp,12(sp)
803fe68: df000304 addi fp,sp,12
803fe6c: e13ffe15 stw r4,-8(fp)
803fe70: e17ffd15 stw r5,-12(fp)
/* Read the IPv4/IPv6 address */
address->sa_family = AF_INET; /* assume IPv4 address by default */
803fe74: e0bffd17 ldw r2,-12(fp)
803fe78: 00c00084 movi r3,2
803fe7c: 10c0000d sth r3,0(r2)
if ((str[1] == '.') || (str[2] == '.') || (str[3] == '.'))
803fe80: e0bffe17 ldw r2,-8(fp)
803fe84: 10800044 addi r2,r2,1
803fe88: 10800003 ldbu r2,0(r2)
803fe8c: 10803fcc andi r2,r2,255
803fe90: 1080201c xori r2,r2,128
803fe94: 10bfe004 addi r2,r2,-128
803fe98: 10800ba0 cmpeqi r2,r2,46
803fe9c: 1000101e bne r2,zero,803fee0 <inet46_addr+0x84>
803fea0: e0bffe17 ldw r2,-8(fp)
803fea4: 10800084 addi r2,r2,2
803fea8: 10800003 ldbu r2,0(r2)
803feac: 10803fcc andi r2,r2,255
803feb0: 1080201c xori r2,r2,128
803feb4: 10bfe004 addi r2,r2,-128
803feb8: 10800ba0 cmpeqi r2,r2,46
803febc: 1000081e bne r2,zero,803fee0 <inet46_addr+0x84>
803fec0: e0bffe17 ldw r2,-8(fp)
803fec4: 108000c4 addi r2,r2,3
803fec8: 10800003 ldbu r2,0(r2)
803fecc: 10803fcc andi r2,r2,255
803fed0: 1080201c xori r2,r2,128
803fed4: 10bfe004 addi r2,r2,-128
803fed8: 10800b98 cmpnei r2,r2,46
803fedc: 10000a1e bne r2,zero,803ff08 <inet46_addr+0xac>
{
struct sockaddr_in *addr = (struct sockaddr_in *)address;
803fee0: e0bffd17 ldw r2,-12(fp)
803fee4: e0bfff15 stw r2,-4(fp)
addr->sin_addr.s_addr = inet_addr(str);
803fee8: e13ffe17 ldw r4,-8(fp)
803feec: 803fc380 call 803fc38 <inet_addr>
803fef0: 1007883a mov r3,r2
803fef4: e0bfff17 ldw r2,-4(fp)
803fef8: 10c00115 stw r3,4(r2)
addr->sin_family = AF_INET;
803fefc: e0bfff17 ldw r2,-4(fp)
803ff00: 00c00084 movi r3,2
803ff04: 10c0000d sth r3,0(r2)
inet_pton(AF_INET6, str, &addr->sin6_addr);
addr->sin6_family = AF_INET6;
}
#endif
return 0;
803ff08: 0005883a mov r2,zero
}
803ff0c: e037883a mov sp,fp
803ff10: dfc00117 ldw ra,4(sp)
803ff14: df000017 ldw fp,0(sp)
803ff18: dec00204 addi sp,sp,8
803ff1c: f800283a ret
0803ff20 <inet_setport>:
*
* RETURNS: -
*/
void inet_setport(struct sockaddr *addr,int port)
{
803ff20: defffc04 addi sp,sp,-16
803ff24: df000315 stw fp,12(sp)
803ff28: df000304 addi fp,sp,12
803ff2c: e13ffe15 stw r4,-8(fp)
803ff30: e17ffd15 stw r5,-12(fp)
if (addr->sa_family == AF_INET)
803ff34: e0bffe17 ldw r2,-8(fp)
803ff38: 1080000b ldhu r2,0(r2)
803ff3c: 10bfffcc andi r2,r2,65535
803ff40: 10800098 cmpnei r2,r2,2
803ff44: 10000c1e bne r2,zero,803ff78 <inet_setport+0x58>
{
struct sockaddr_in *si = (struct sockaddr_in *)addr;
803ff48: e0bffe17 ldw r2,-8(fp)
803ff4c: e0bfff15 stw r2,-4(fp)
si->sin_port = htons(port);
803ff50: e0bffd17 ldw r2,-12(fp)
803ff54: 1005d23a srai r2,r2,8
803ff58: 10803fcc andi r2,r2,255
803ff5c: 1007883a mov r3,r2
803ff60: e0bffd17 ldw r2,-12(fp)
803ff64: 1004923a slli r2,r2,8
803ff68: 1884b03a or r2,r3,r2
803ff6c: 1007883a mov r3,r2
803ff70: e0bfff17 ldw r2,-4(fp)
803ff74: 10c0008d sth r3,2(r2)
struct sockaddr_in6 *si = (struct sockaddr_in6 *)addr;
si->sin6_port = htons(port);
}
#endif
}
803ff78: 0001883a nop
803ff7c: e037883a mov sp,fp
803ff80: df000017 ldw fp,0(sp)
803ff84: dec00104 addi sp,sp,4
803ff88: f800283a ret
0803ff8c <convert_ip>:
*Returns:
*
*/
unsigned long convert_ip(const char *p)
{
803ff8c: defff904 addi sp,sp,-28
803ff90: df000615 stw fp,24(sp)
803ff94: df000604 addi fp,sp,24
803ff98: e13ffa15 stw r4,-24(fp)
const char *cp = p;
803ff9c: e0bffa17 ldw r2,-24(fp)
803ffa0: e0bfff15 stw r2,-4(fp)
unsigned long dw;
unsigned char *lpb = (unsigned char *) &dw;
803ffa4: e0bffb04 addi r2,fp,-20
803ffa8: e0bffc15 stw r2,-16(fp)
int n = 0;
803ffac: e03ffe15 stw zero,-8(fp)
unsigned short v = 0;
803ffb0: e03ffd8d sth zero,-10(fp)
dw = 0;
803ffb4: e03ffb15 stw zero,-20(fp)
while(*cp)
803ffb8: 00003106 br 8040080 <convert_ip+0xf4>
{
if( *cp == '.')
803ffbc: e0bfff17 ldw r2,-4(fp)
803ffc0: 10800003 ldbu r2,0(r2)
803ffc4: 10803fcc andi r2,r2,255
803ffc8: 1080201c xori r2,r2,128
803ffcc: 10bfe004 addi r2,r2,-128
803ffd0: 10800b98 cmpnei r2,r2,46
803ffd4: 10000e1e bne r2,zero,8040010 <convert_ip+0x84>
{
lpb[n] = (unsigned char) v;
803ffd8: e0bffe17 ldw r2,-8(fp)
803ffdc: e0fffc17 ldw r3,-16(fp)
803ffe0: 1885883a add r2,r3,r2
803ffe4: e0fffd8b ldhu r3,-10(fp)
803ffe8: 10c00005 stb r3,0(r2)
v = 0;
803ffec: e03ffd8d sth zero,-10(fp)
n++;
803fff0: e0bffe17 ldw r2,-8(fp)
803fff4: 10800044 addi r2,r2,1
803fff8: e0bffe15 stw r2,-8(fp)
if(n > 3)
803fffc: e0bffe17 ldw r2,-8(fp)
8040000: 10800110 cmplti r2,r2,4
8040004: 10001b1e bne r2,zero,8040074 <convert_ip+0xe8>
{
return dw;
8040008: e0bffb17 ldw r2,-20(fp)
804000c: 00002806 br 80400b0 <convert_ip+0x124>
}
}
else if(((*cp >= '0') && (*cp <= '9')))
8040010: e0bfff17 ldw r2,-4(fp)
8040014: 10800003 ldbu r2,0(r2)
8040018: 10803fcc andi r2,r2,255
804001c: 1080201c xori r2,r2,128
8040020: 10bfe004 addi r2,r2,-128
8040024: 10800c10 cmplti r2,r2,48
8040028: 1000121e bne r2,zero,8040074 <convert_ip+0xe8>
804002c: e0bfff17 ldw r2,-4(fp)
8040030: 10800003 ldbu r2,0(r2)
8040034: 10803fcc andi r2,r2,255
8040038: 1080201c xori r2,r2,128
804003c: 10bfe004 addi r2,r2,-128
8040040: 10800e88 cmpgei r2,r2,58
8040044: 10000b1e bne r2,zero,8040074 <convert_ip+0xe8>
{
v = (v * 10) + (*cp - '0');
8040048: e0bffd8b ldhu r2,-10(fp)
804004c: 108002a4 muli r2,r2,10
8040050: 1007883a mov r3,r2
8040054: e0bfff17 ldw r2,-4(fp)
8040058: 10800003 ldbu r2,0(r2)
804005c: 10803fcc andi r2,r2,255
8040060: 1080201c xori r2,r2,128
8040064: 10bfe004 addi r2,r2,-128
8040068: 1885883a add r2,r3,r2
804006c: 10bff404 addi r2,r2,-48
8040070: e0bffd8d sth r2,-10(fp)
}
cp++;
8040074: e0bfff17 ldw r2,-4(fp)
8040078: 10800044 addi r2,r2,1
804007c: e0bfff15 stw r2,-4(fp)
while(*cp)
8040080: e0bfff17 ldw r2,-4(fp)
8040084: 10800003 ldbu r2,0(r2)
8040088: 10803fcc andi r2,r2,255
804008c: 1080201c xori r2,r2,128
8040090: 10bfe004 addi r2,r2,-128
8040094: 103fc91e bne r2,zero,803ffbc <convert_ip+0x30>
}
lpb[n] = (unsigned char) v;
8040098: e0bffe17 ldw r2,-8(fp)
804009c: e0fffc17 ldw r3,-16(fp)
80400a0: 1885883a add r2,r3,r2
80400a4: e0fffd8b ldhu r3,-10(fp)
80400a8: 10c00005 stb r3,0(r2)
return dw;
80400ac: e0bffb17 ldw r2,-20(fp)
} /* convert_ip() */
80400b0: e037883a mov sp,fp
80400b4: df000017 ldw fp,0(sp)
80400b8: dec00104 addi sp,sp,4
80400bc: f800283a ret
080400c0 <tcp_cksum>:
* RETURNS:
*/
unshort
tcp_cksum(struct ip * pip)
{
80400c0: defff704 addi sp,sp,-36
80400c4: dfc00815 stw ra,32(sp)
80400c8: df000715 stw fp,28(sp)
80400cc: df000704 addi fp,sp,28
80400d0: e13ff915 stw r4,-28(fp)
unshort oldsum;
unshort newsum;
struct tcphdr * tp;
#ifdef MUTE_WARNS /* stifle compiler warnings */
tcpdata = (char *)NULL;
80400d4: e03ffe15 stw zero,-8(fp)
#endif /* MUTE_WARNS */
IN_PROFILER(PF_TSUM, PF_ENTRY);
oddchar = 0;
80400d8: e03ffdc5 stb zero,-9(fp)
iphlen = (unshort)ip_hlen(pip);
80400dc: e0bff917 ldw r2,-28(fp)
80400e0: 10800003 ldbu r2,0(r2)
80400e4: 10803fcc andi r2,r2,255
80400e8: 100490ba slli r2,r2,2
80400ec: 10800f0c andi r2,r2,60
80400f0: e0bffc8d sth r2,-14(fp)
tcplen = htons(pip->ip_len) - iphlen;
80400f4: e0bff917 ldw r2,-28(fp)
80400f8: 1080008b ldhu r2,2(r2)
80400fc: 10bfffcc andi r2,r2,65535
8040100: 1004d23a srli r2,r2,8
8040104: 1007883a mov r3,r2
8040108: e0bff917 ldw r2,-28(fp)
804010c: 1080008b ldhu r2,2(r2)
8040110: 10bfffcc andi r2,r2,65535
8040114: 1004923a slli r2,r2,8
8040118: 1884b03a or r2,r3,r2
804011c: 1007883a mov r3,r2
8040120: e0bffc8b ldhu r2,-14(fp)
8040124: 1885c83a sub r2,r3,r2
8040128: e0bfff8d sth r2,-2(fp)
tp = (struct tcphdr*)ip_data(pip); /* get TCP header */
804012c: e0bff917 ldw r2,-28(fp)
8040130: 10800003 ldbu r2,0(r2)
8040134: 10803fcc andi r2,r2,255
8040138: 100490ba slli r2,r2,2
804013c: 10800f0c andi r2,r2,60
8040140: e0fff917 ldw r3,-28(fp)
8040144: 1885883a add r2,r3,r2
8040148: e0bffb15 stw r2,-20(fp)
oldsum = tp->th_sum; /* Save passed checksum */
804014c: e0bffb17 ldw r2,-20(fp)
8040150: 1080040b ldhu r2,16(r2)
8040154: e0bffa8d sth r2,-22(fp)
* cannot overflow a 16 bit field) and put them in the cksum field.
* We include the IP addresses by passing them to the lower level
* fast sum routine. This results in their values being factored into
* the sum and the cksum field contributes zero.
*/
tp->th_sum = htons(tcplen + 6);
8040158: e0bfff8b ldhu r2,-2(fp)
804015c: 10800184 addi r2,r2,6
8040160: 1005d23a srai r2,r2,8
8040164: 10803fcc andi r2,r2,255
8040168: 1007883a mov r3,r2
804016c: e0bfff8b ldhu r2,-2(fp)
8040170: 10800184 addi r2,r2,6
8040174: 1004923a slli r2,r2,8
8040178: 1884b03a or r2,r3,r2
804017c: 1007883a mov r3,r2
8040180: e0bffb17 ldw r2,-20(fp)
8040184: 10c0040d sth r3,16(r2)
/* zero pad odd sized packets for checksumming */
if (tcplen & 1)
8040188: e0bfff8b ldhu r2,-2(fp)
804018c: 1080004c andi r2,r2,1
8040190: 10000e26 beq r2,zero,80401cc <tcp_cksum+0x10c>
{
tcpdata = ((char*)pip) + iphlen + tcplen; /* end of packet */
8040194: e0fffc8b ldhu r3,-14(fp)
8040198: e0bfff8b ldhu r2,-2(fp)
804019c: 1885883a add r2,r3,r2
80401a0: e0fff917 ldw r3,-28(fp)
80401a4: 1885883a add r2,r3,r2
80401a8: e0bffe15 stw r2,-8(fp)
oddchar = *tcpdata;
80401ac: e0bffe17 ldw r2,-8(fp)
80401b0: 10800003 ldbu r2,0(r2)
80401b4: e0bffdc5 stb r2,-9(fp)
*tcpdata = '\0'; /* zero out pad byte */
80401b8: e0bffe17 ldw r2,-8(fp)
80401bc: 10000005 stb zero,0(r2)
tcplen++; /* bump length to pass to cksum() */
80401c0: e0bfff8b ldhu r2,-2(fp)
80401c4: 10800044 addi r2,r2,1
80401c8: e0bfff8d sth r2,-2(fp)
/* Pass a pointer to the beginning of the IP address area into the IP header
* the the low level sum routine. Add the size of these two IP addresses to
* the length, and convert the length to 16 bit words.
*/
newsum = ~cksum(((char*)tp) - 8, (tcplen + 8) >> 1);
80401cc: e0bffb17 ldw r2,-20(fp)
80401d0: 10fffe04 addi r3,r2,-8
80401d4: e0bfff8b ldhu r2,-2(fp)
80401d8: 10800204 addi r2,r2,8
80401dc: 1005d07a srai r2,r2,1
80401e0: 100b883a mov r5,r2
80401e4: 1809883a mov r4,r3
80401e8: 8026d7c0 call 8026d7c <cksum>
80401ec: 0084303a nor r2,zero,r2
80401f0: e0bffd0d sth r2,-12(fp)
/* If the old checksum is 0xffff, but the actual checksum is 0x0000,
* declare that to be a match.
*/
if ((newsum != oldsum) && (oldsum == 0xffff) && (newsum == 0x0000))
80401f4: e0fffd0b ldhu r3,-12(fp)
80401f8: e0bffa8b ldhu r2,-22(fp)
80401fc: 18800726 beq r3,r2,804021c <tcp_cksum+0x15c>
8040200: e0fffa8b ldhu r3,-22(fp)
8040204: 00bfffd4 movui r2,65535
8040208: 1880041e bne r3,r2,804021c <tcp_cksum+0x15c>
804020c: e0bffd0b ldhu r2,-12(fp)
8040210: 1000021e bne r2,zero,804021c <tcp_cksum+0x15c>
newsum = 0xffff;
8040214: 00bfffc4 movi r2,-1
8040218: e0bffd0d sth r2,-12(fp)
/* restore what we clobbered */
tp->th_sum = oldsum; /* put back passed checksum */
804021c: e0bffb17 ldw r2,-20(fp)
8040220: e0fffa8b ldhu r3,-22(fp)
8040224: 10c0040d sth r3,16(r2)
if (oddchar)
8040228: e0bffdc7 ldb r2,-9(fp)
804022c: 10000326 beq r2,zero,804023c <tcp_cksum+0x17c>
*tcpdata = oddchar; /* restore odd byte if we zeroed it */
8040230: e0bffe17 ldw r2,-8(fp)
8040234: e0fffdc3 ldbu r3,-9(fp)
8040238: 10c00005 stb r3,0(r2)
IN_PROFILER(PF_TSUM, PF_EXIT);
return newsum;
804023c: e0bffd0b ldhu r2,-12(fp)
}
8040240: e037883a mov sp,fp
8040244: dfc00117 ldw ra,4(sp)
8040248: df000017 ldw fp,0(sp)
804024c: dec00204 addi sp,sp,8
8040250: f800283a ret
08040254 <udp_open>:
ip_addr fhost, /* foreign host, 0L for any */
unshort fsock, /* foreign socket, 0 for any */
unshort lsock, /* local socket */
int (*handler)(PACKET, void*), /* rcv upcall */
void * data) /* random data, returned on upcalls to aid demuxing */
{
8040254: defff404 addi sp,sp,-48
8040258: dfc00b15 stw ra,44(sp)
804025c: df000a15 stw fp,40(sp)
8040260: df000a04 addi fp,sp,40
8040264: e13ffd15 stw r4,-12(fp)
8040268: 2805883a mov r2,r5
804026c: 3007883a mov r3,r6
8040270: e1fffa15 stw r7,-24(fp)
8040274: e0bffc0d sth r2,-16(fp)
8040278: 1805883a mov r2,r3
804027c: e0bffb0d sth r2,-20(fp)
/*
* Altera Niche Stack Nios port modification:
* cast 'data' to remove build warning
*/
#ifdef NPDEBUG
if (NDEBUG & INFOMSG)
8040280: d0a06617 ldw r2,-32360(gp)
8040284: 1080010c andi r2,r2,4
8040288: 10001526 beq r2,zero,80402e0 <udp_open+0x8c>
dprintf("udp_open: host %u.%u.%u.%u, lsock %u, fsock %u, foo %04x\n",
804028c: e0bffd17 ldw r2,-12(fp)
8040290: 12003fcc andi r8,r2,255
PUSH_IPADDR(fhost),lsock, fsock, (unsigned int)data);
8040294: e0bffd17 ldw r2,-12(fp)
8040298: 1004d23a srli r2,r2,8
dprintf("udp_open: host %u.%u.%u.%u, lsock %u, fsock %u, foo %04x\n",
804029c: 11803fcc andi r6,r2,255
PUSH_IPADDR(fhost),lsock, fsock, (unsigned int)data);
80402a0: e0bffd17 ldw r2,-12(fp)
80402a4: 1004d43a srli r2,r2,16
dprintf("udp_open: host %u.%u.%u.%u, lsock %u, fsock %u, foo %04x\n",
80402a8: 11c03fcc andi r7,r2,255
PUSH_IPADDR(fhost),lsock, fsock, (unsigned int)data);
80402ac: e0bffd17 ldw r2,-12(fp)
80402b0: 1004d63a srli r2,r2,24
dprintf("udp_open: host %u.%u.%u.%u, lsock %u, fsock %u, foo %04x\n",
80402b4: e0fffb0b ldhu r3,-20(fp)
80402b8: e13ffc0b ldhu r4,-16(fp)
80402bc: e1400217 ldw r5,8(fp)
80402c0: d9400315 stw r5,12(sp)
80402c4: d9000215 stw r4,8(sp)
80402c8: d8c00115 stw r3,4(sp)
80402cc: d8800015 stw r2,0(sp)
80402d0: 400b883a mov r5,r8
80402d4: 01020174 movhi r4,2053
80402d8: 212e0704 addi r4,r4,-18404
80402dc: 8002c780 call 8002c78 <printf>
#endif
LOCK_NET_RESOURCE(NET_RESID);
80402e0: 0009883a mov r4,zero
80402e4: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
ocon = NULL;
80402e8: e03ffe15 stw zero,-8(fp)
for (con = firstudp; con; con = con->u_next)
80402ec: d0a09e17 ldw r2,-32136(gp)
80402f0: e0bfff15 stw r2,-4(fp)
80402f4: 00002006 br 8040378 <udp_open+0x124>
{
ocon = con; /* remember last con in list */
80402f8: e0bfff17 ldw r2,-4(fp)
80402fc: e0bffe15 stw r2,-8(fp)
/* we only want to check UDP-over-IPv4 connections */
if (!(con->u_flags & UDPCF_V4))
continue;
#endif
if (con->u_lport == lsock && con->u_fport == fsock &&
8040300: e0bfff17 ldw r2,-4(fp)
8040304: 1080018b ldhu r2,6(r2)
8040308: e0fffb0b ldhu r3,-20(fp)
804030c: 10bfffcc andi r2,r2,65535
8040310: 1880161e bne r3,r2,804036c <udp_open+0x118>
8040314: e0bfff17 ldw r2,-4(fp)
8040318: 1080020b ldhu r2,8(r2)
804031c: e0fffc0b ldhu r3,-16(fp)
8040320: 10bfffcc andi r2,r2,65535
8040324: 1880111e bne r3,r2,804036c <udp_open+0x118>
con->u_lhost == 0 && con->u_fhost == fhost)
8040328: e0bfff17 ldw r2,-4(fp)
804032c: 10800317 ldw r2,12(r2)
if (con->u_lport == lsock && con->u_fport == fsock &&
8040330: 10000e1e bne r2,zero,804036c <udp_open+0x118>
con->u_lhost == 0 && con->u_fhost == fhost)
8040334: e0bfff17 ldw r2,-4(fp)
8040338: 10800417 ldw r2,16(r2)
804033c: e0fffd17 ldw r3,-12(fp)
8040340: 18800a1e bne r3,r2,804036c <udp_open+0x118>
{
#ifdef NPDEBUG
if (NDEBUG & (INFOMSG|PROTERR))
8040344: d0a06617 ldw r2,-32360(gp)
8040348: 1080050c andi r2,r2,20
804034c: 10000326 beq r2,zero,804035c <udp_open+0x108>
dprintf("UDP: Connection already exists.\n");
8040350: 01020174 movhi r4,2053
8040354: 212e1604 addi r4,r4,-18344
8040358: 8002d9c0 call 8002d9c <puts>
#endif
UNLOCK_NET_RESOURCE(NET_RESID);
804035c: 0009883a mov r4,zero
8040360: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return(NULL);
8040364: 0005883a mov r2,zero
8040368: 00003506 br 8040440 <udp_open+0x1ec>
for (con = firstudp; con; con = con->u_next)
804036c: e0bfff17 ldw r2,-4(fp)
8040370: 10800017 ldw r2,0(r2)
8040374: e0bfff15 stw r2,-4(fp)
8040378: e0bfff17 ldw r2,-4(fp)
804037c: 103fde1e bne r2,zero,80402f8 <udp_open+0xa4>
}
}
con = (UDPCONN)UC_ALLOC(sizeof(struct udp_conn));
8040380: 01000804 movi r4,32
8040384: 802982c0 call 802982c <npalloc>
8040388: e0bfff15 stw r2,-4(fp)
if (con == 0)
804038c: e0bfff17 ldw r2,-4(fp)
8040390: 10000a1e bne r2,zero,80403bc <udp_open+0x168>
{
#ifdef NPDEBUG
if (NDEBUG & INFOMSG)
8040394: d0a06617 ldw r2,-32360(gp)
8040398: 1080010c andi r2,r2,4
804039c: 10000326 beq r2,zero,80403ac <udp_open+0x158>
dprintf("UDP: Couldn't allocate conn storage.\n");
80403a0: 01020174 movhi r4,2053
80403a4: 212e1e04 addi r4,r4,-18312
80403a8: 8002d9c0 call 8002d9c <puts>
#endif
UNLOCK_NET_RESOURCE(NET_RESID);
80403ac: 0009883a mov r4,zero
80403b0: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return(NULL);
80403b4: 0005883a mov r2,zero
80403b8: 00002106 br 8040440 <udp_open+0x1ec>
}
if (ocon) /* ocon is end of list */
80403bc: e0bffe17 ldw r2,-8(fp)
80403c0: 10000426 beq r2,zero,80403d4 <udp_open+0x180>
ocon->u_next = con; /* add new connection to end */
80403c4: e0bffe17 ldw r2,-8(fp)
80403c8: e0ffff17 ldw r3,-4(fp)
80403cc: 10c00015 stw r3,0(r2)
80403d0: 00000206 br 80403dc <udp_open+0x188>
else /* no list, start one */
firstudp = con;
80403d4: e0bfff17 ldw r2,-4(fp)
80403d8: d0a09e15 stw r2,-32136(gp)
con->u_next = 0;
80403dc: e0bfff17 ldw r2,-4(fp)
80403e0: 10000015 stw zero,0(r2)
con->u_lport = lsock; /* fill in connection info */
80403e4: e0bfff17 ldw r2,-4(fp)
80403e8: e0fffb0b ldhu r3,-20(fp)
80403ec: 10c0018d sth r3,6(r2)
con->u_fport = fsock;
80403f0: e0bfff17 ldw r2,-4(fp)
80403f4: e0fffc0b ldhu r3,-16(fp)
80403f8: 10c0020d sth r3,8(r2)
con->u_lhost = 0;
80403fc: e0bfff17 ldw r2,-4(fp)
8040400: 10000315 stw zero,12(r2)
con->u_fhost = fhost;
8040404: e0bfff17 ldw r2,-4(fp)
8040408: e0fffd17 ldw r3,-12(fp)
804040c: 10c00415 stw r3,16(r2)
con->u_rcv = handler;
8040410: e0bfff17 ldw r2,-4(fp)
8040414: e0fffa17 ldw r3,-24(fp)
8040418: 10c00515 stw r3,20(r2)
con->u_data = data;
804041c: e0bfff17 ldw r2,-4(fp)
8040420: e0c00217 ldw r3,8(fp)
8040424: 10c00615 stw r3,24(r2)
con->u_flags = UDPCF_V4;
8040428: e0bfff17 ldw r2,-4(fp)
804042c: 00c00044 movi r3,1
8040430: 10c0010d sth r3,4(r2)
UNLOCK_NET_RESOURCE(NET_RESID);
8040434: 0009883a mov r4,zero
8040438: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return(con);
804043c: e0bfff17 ldw r2,-4(fp)
}
8040440: e037883a mov sp,fp
8040444: dfc00117 ldw ra,4(sp)
8040448: df000017 ldw fp,0(sp)
804044c: dec00204 addi sp,sp,8
8040450: f800283a ret
08040454 <udp_close>:
* RETURNS: void
*/
void
udp_close(UDPCONN con)
{
8040454: defffb04 addi sp,sp,-20
8040458: dfc00415 stw ra,16(sp)
804045c: df000315 stw fp,12(sp)
8040460: df000304 addi fp,sp,12
8040464: e13ffd15 stw r4,-12(fp)
UDPCONN pcon;
UDPCONN lcon;
#ifdef NPDEBUG
if ((con == NULL) || (firstudp == NULL))
8040468: e0bffd17 ldw r2,-12(fp)
804046c: 10000226 beq r2,zero,8040478 <udp_close+0x24>
8040470: d0a09e17 ldw r2,-32136(gp)
8040474: 1000021e bne r2,zero,8040480 <udp_close+0x2c>
{
dtrap(); /* bad programming! */
8040478: 8028cd40 call 8028cd4 <dtrap>
return;
804047c: 00002606 br 8040518 <udp_close+0xc4>
}
#endif /* NPDEBUG */
LOCK_NET_RESOURCE(NET_RESID);
8040480: 0009883a mov r4,zero
8040484: 8028f380 call 8028f38 <LOCK_NET_RESOURCE>
/* find connection in list and unlink it */
lcon = NULL; /* clear ptr to last connection */
8040488: e03ffe15 stw zero,-8(fp)
for (pcon = firstudp; pcon; pcon = pcon->u_next)
804048c: d0a09e17 ldw r2,-32136(gp)
8040490: e0bfff15 stw r2,-4(fp)
8040494: 00000806 br 80404b8 <udp_close+0x64>
{
if (pcon == con) /* found connection to delete */
8040498: e0ffff17 ldw r3,-4(fp)
804049c: e0bffd17 ldw r2,-12(fp)
80404a0: 18800826 beq r3,r2,80404c4 <udp_close+0x70>
break;
lcon = pcon; /* remember last connection */
80404a4: e0bfff17 ldw r2,-4(fp)
80404a8: e0bffe15 stw r2,-8(fp)
for (pcon = firstudp; pcon; pcon = pcon->u_next)
80404ac: e0bfff17 ldw r2,-4(fp)
80404b0: 10800017 ldw r2,0(r2)
80404b4: e0bfff15 stw r2,-4(fp)
80404b8: e0bfff17 ldw r2,-4(fp)
80404bc: 103ff61e bne r2,zero,8040498 <udp_close+0x44>
80404c0: 00000106 br 80404c8 <udp_close+0x74>
break;
80404c4: 0001883a nop
}
if (!pcon)
80404c8: e0bfff17 ldw r2,-4(fp)
80404cc: 1000041e bne r2,zero,80404e0 <udp_close+0x8c>
{
dtrap(); /* prog error - connenction not in list */
80404d0: 8028cd40 call 8028cd4 <dtrap>
UNLOCK_NET_RESOURCE(NET_RESID);
80404d4: 0009883a mov r4,zero
80404d8: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
return;
80404dc: 00000e06 br 8040518 <udp_close+0xc4>
}
if (lcon) /* in con is not head of list */
80404e0: e0bffe17 ldw r2,-8(fp)
80404e4: 10000526 beq r2,zero,80404fc <udp_close+0xa8>
lcon->u_next = con->u_next; /* unlink */
80404e8: e0bffd17 ldw r2,-12(fp)
80404ec: 10c00017 ldw r3,0(r2)
80404f0: e0bffe17 ldw r2,-8(fp)
80404f4: 10c00015 stw r3,0(r2)
80404f8: 00000306 br 8040508 <udp_close+0xb4>
else
firstudp = con->u_next; /* remove from head */
80404fc: e0bffd17 ldw r2,-12(fp)
8040500: 10800017 ldw r2,0(r2)
8040504: d0a09e15 stw r2,-32136(gp)
UC_FREE(con); /* free memory for structure */
8040508: e13ffd17 ldw r4,-12(fp)
804050c: 80298600 call 8029860 <npfree>
UNLOCK_NET_RESOURCE(NET_RESID);
8040510: 0009883a mov r4,zero
8040514: 8028ff40 call 8028ff4 <UNLOCK_NET_RESOURCE>
}
8040518: e037883a mov sp,fp
804051c: dfc00117 ldw ra,4(sp)
8040520: df000017 ldw fp,0(sp)
8040524: dec00204 addi sp,sp,8
8040528: f800283a ret
0804052c <in_pcballoc>:
*/
int
in_pcballoc(struct socket * so,
struct inpcb * head)
{
804052c: defffb04 addi sp,sp,-20
8040530: dfc00415 stw ra,16(sp)
8040534: df000315 stw fp,12(sp)
8040538: df000304 addi fp,sp,12
804053c: e13ffe15 stw r4,-8(fp)
8040540: e17ffd15 stw r5,-12(fp)
struct inpcb * inp;
inp = INP_ALLOC (sizeof (*inp));
8040544: 01000b04 movi r4,44
8040548: 802982c0 call 802982c <npalloc>
804054c: e0bfff15 stw r2,-4(fp)
if (inp == 0)
8040550: e0bfff17 ldw r2,-4(fp)
8040554: 1000021e bne r2,zero,8040560 <in_pcballoc+0x34>
return ENOMEM;
8040558: 00800304 movi r2,12
804055c: 00001006 br 80405a0 <in_pcballoc+0x74>
inp->inp_head = head;
8040560: e0bfff17 ldw r2,-4(fp)
8040564: e0fffd17 ldw r3,-12(fp)
8040568: 10c00215 stw r3,8(r2)
inp->inp_socket = so;
804056c: e0bfff17 ldw r2,-4(fp)
8040570: e0fffe17 ldw r3,-8(fp)
8040574: 10c00815 stw r3,32(r2)
/* Set Path MTU to a very small default. It should get expanded
* later by v4 or v6 specific SYN code. We don't want it zero
* in case it doesn't get expanded promptly.
*/
inp->inp_pmtu = 512;
8040578: e0bfff17 ldw r2,-4(fp)
804057c: 00c08004 movi r3,512
8040580: 10c00615 stw r3,24(r2)
insque(inp, head);
8040584: e17ffd17 ldw r5,-12(fp)
8040588: e13fff17 ldw r4,-4(fp)
804058c: 802a3340 call 802a334 <insque>
so->so_pcb = inp;
8040590: e0bffe17 ldw r2,-8(fp)
8040594: e0ffff17 ldw r3,-4(fp)
8040598: 10c00115 stw r3,4(r2)
return 0;
804059c: 0005883a mov r2,zero
}
80405a0: e037883a mov sp,fp
80405a4: dfc00117 ldw ra,4(sp)
80405a8: df000017 ldw fp,0(sp)
80405ac: dec00204 addi sp,sp,8
80405b0: f800283a ret
080405b4 <in_pcbdetach>:
* RETURNS:
*/
void
in_pcbdetach(struct inpcb * inp)
{
80405b4: defffc04 addi sp,sp,-16
80405b8: dfc00315 stw ra,12(sp)
80405bc: df000215 stw fp,8(sp)
80405c0: df000204 addi fp,sp,8
80405c4: e13ffe15 stw r4,-8(fp)
struct socket * so = inp->inp_socket;
80405c8: e0bffe17 ldw r2,-8(fp)
80405cc: 10800817 ldw r2,32(r2)
80405d0: e0bfff15 stw r2,-4(fp)
so->so_pcb = 0;
80405d4: e0bfff17 ldw r2,-4(fp)
80405d8: 10000115 stw zero,4(r2)
sofree(so);
80405dc: e13fff17 ldw r4,-4(fp)
80405e0: 802d3240 call 802d324 <sofree>
remque(inp);
80405e4: e13ffe17 ldw r4,-8(fp)
80405e8: 802a2c40 call 802a2c4 <remque>
INP_FREE (inp);
80405ec: e13ffe17 ldw r4,-8(fp)
80405f0: 80298600 call 8029860 <npfree>
}
80405f4: 0001883a nop
80405f8: e037883a mov sp,fp
80405fc: dfc00117 ldw ra,4(sp)
8040600: df000017 ldw fp,0(sp)
8040604: dec00204 addi sp,sp,8
8040608: f800283a ret
0804060c <in_pcbbind>:
int
in_pcbbind(
struct inpcb * inp,
struct mbuf * nam)
{
804060c: defff504 addi sp,sp,-44
8040610: dfc00a15 stw ra,40(sp)
8040614: df000915 stw fp,36(sp)
8040618: df000904 addi fp,sp,36
804061c: e13ffa15 stw r4,-24(fp)
8040620: e17ff915 stw r5,-28(fp)
struct socket * so = inp->inp_socket;
8040624: e0bffa17 ldw r2,-24(fp)
8040628: 10800817 ldw r2,32(r2)
804062c: e0bffd15 stw r2,-12(fp)
struct inpcb * head = inp->inp_head;
8040630: e0bffa17 ldw r2,-24(fp)
8040634: 10800217 ldw r2,8(r2)
8040638: e0bffc15 stw r2,-16(fp)
struct sockaddr_in * sin;
u_short lport = 0;
804063c: e03fff8d sth zero,-2(fp)
if (inp->inp_lport || inp->inp_laddr.s_addr != INADDR_ANY)
8040640: e0bffa17 ldw r2,-24(fp)
8040644: 1080078b ldhu r2,30(r2)
8040648: 10bfffcc andi r2,r2,65535
804064c: 1000031e bne r2,zero,804065c <in_pcbbind+0x50>
8040650: e0bffa17 ldw r2,-24(fp)
8040654: 10800417 ldw r2,16(r2)
8040658: 10000226 beq r2,zero,8040664 <in_pcbbind+0x58>
return (EINVAL);
804065c: 00800584 movi r2,22
8040660: 00006906 br 8040808 <in_pcbbind+0x1fc>
if (nam == 0)
8040664: e0bff917 ldw r2,-28(fp)
8040668: 10003926 beq r2,zero,8040750 <in_pcbbind+0x144>
goto noname;
sin = mtod(nam, struct sockaddr_in *);
804066c: e0bff917 ldw r2,-28(fp)
8040670: 10800317 ldw r2,12(r2)
8040674: e0bffb15 stw r2,-20(fp)
/*
* removed test here for "if (nam->m_len != sizeof (*sin))"
* since it really complicatges supporting dual IPv4/v6, and
* the 2.0 stack now checks this in t_bind(). -JB-
*/
if (sin->sin_addr.s_addr != INADDR_ANY)
8040678: e0bffb17 ldw r2,-20(fp)
804067c: 10800117 ldw r2,4(r2)
8040680: 10000a26 beq r2,zero,80406ac <in_pcbbind+0xa0>
{
if (ip_mymach(sin->sin_addr.s_addr) != sin->sin_addr.s_addr)
8040684: e0bffb17 ldw r2,-20(fp)
8040688: 10800117 ldw r2,4(r2)
804068c: 1009883a mov r4,r2
8040690: 803b0280 call 803b028 <ip_mymach>
8040694: 1007883a mov r3,r2
8040698: e0bffb17 ldw r2,-20(fp)
804069c: 10800117 ldw r2,4(r2)
80406a0: 18800226 beq r3,r2,80406ac <in_pcbbind+0xa0>
return (EADDRNOTAVAIL);
80406a4: 00801f44 movi r2,125
80406a8: 00005706 br 8040808 <in_pcbbind+0x1fc>
}
lport = sin->sin_port;
80406ac: e0bffb17 ldw r2,-20(fp)
80406b0: 1080008b ldhu r2,2(r2)
80406b4: e0bfff8d sth r2,-2(fp)
if (lport)
80406b8: e0bfff8b ldhu r2,-2(fp)
80406bc: 10001f26 beq r2,zero,804073c <in_pcbbind+0x130>
{
int wild = 0;
80406c0: e03ffe15 stw zero,-8(fp)
/* even GROSSER, but this is the Internet */
if ((so->so_options & SO_REUSEADDR) == 0 &&
80406c4: e0bffd17 ldw r2,-12(fp)
80406c8: 10800417 ldw r2,16(r2)
80406cc: 1080010c andi r2,r2,4
80406d0: 10000c1e bne r2,zero,8040704 <in_pcbbind+0xf8>
((so->so_proto->pr_flags & PR_CONNREQUIRED) == 0 ||
80406d4: e0bffd17 ldw r2,-12(fp)
80406d8: 10800217 ldw r2,8(r2)
80406dc: 1080010b ldhu r2,4(r2)
80406e0: 10bfffcc andi r2,r2,65535
80406e4: 1080010c andi r2,r2,4
if ((so->so_options & SO_REUSEADDR) == 0 &&
80406e8: 10000426 beq r2,zero,80406fc <in_pcbbind+0xf0>
(so->so_options & SO_ACCEPTCONN) == 0))
80406ec: e0bffd17 ldw r2,-12(fp)
80406f0: 10800417 ldw r2,16(r2)
80406f4: 1080008c andi r2,r2,2
((so->so_proto->pr_flags & PR_CONNREQUIRED) == 0 ||
80406f8: 1000021e bne r2,zero,8040704 <in_pcbbind+0xf8>
{
wild = INPLOOKUP_WILDCARD;
80406fc: 00800044 movi r2,1
8040700: e0bffe15 stw r2,-8(fp)
}
if (in_pcblookup(head,
8040704: e0bffb17 ldw r2,-20(fp)
8040708: 11000117 ldw r4,4(r2)
804070c: e0bfff8b ldhu r2,-2(fp)
8040710: e0fffe17 ldw r3,-8(fp)
8040714: d8c00115 stw r3,4(sp)
8040718: d8800015 stw r2,0(sp)
804071c: 200f883a mov r7,r4
8040720: 000d883a mov r6,zero
8040724: 000b883a mov r5,zero
8040728: e13ffc17 ldw r4,-16(fp)
804072c: 8040b600 call 8040b60 <in_pcblookup>
8040730: 10000226 beq r2,zero,804073c <in_pcbbind+0x130>
0L, 0, sin->sin_addr.s_addr, lport, wild))
{
return (EADDRINUSE);
8040734: 00801c04 movi r2,112
8040738: 00003306 br 8040808 <in_pcbbind+0x1fc>
}
}
inp->inp_laddr = sin->sin_addr;
804073c: e0bffa17 ldw r2,-24(fp)
8040740: e0fffb17 ldw r3,-20(fp)
8040744: 18c00117 ldw r3,4(r3)
8040748: 10c00415 stw r3,16(r2)
804074c: 00000106 br 8040754 <in_pcbbind+0x148>
goto noname;
8040750: 0001883a nop
noname:
if (lport == 0)
8040754: e0bfff8b ldhu r2,-2(fp)
8040758: 1000271e bne r2,zero,80407f8 <in_pcbbind+0x1ec>
{
do
{
if (head->inp_lport++ < IPPORT_RESERVED ||
804075c: e0bffc17 ldw r2,-16(fp)
8040760: 1080078b ldhu r2,30(r2)
8040764: 10c00044 addi r3,r2,1
8040768: 1809883a mov r4,r3
804076c: e0fffc17 ldw r3,-16(fp)
8040770: 1900078d sth r4,30(r3)
8040774: 10bfffcc andi r2,r2,65535
8040778: 10810030 cmpltui r2,r2,1024
804077c: 1000051e bne r2,zero,8040794 <in_pcbbind+0x188>
head->inp_lport > IPPORT_USERRESERVED)
8040780: e0bffc17 ldw r2,-16(fp)
8040784: 1080078b ldhu r2,30(r2)
if (head->inp_lport++ < IPPORT_RESERVED ||
8040788: 10bfffcc andi r2,r2,65535
804078c: 1084e270 cmpltui r2,r2,5001
8040790: 1000031e bne r2,zero,80407a0 <in_pcbbind+0x194>
{
head->inp_lport = IPPORT_RESERVED;
8040794: e0bffc17 ldw r2,-16(fp)
8040798: 00c10004 movi r3,1024
804079c: 10c0078d sth r3,30(r2)
}
lport = htons(head->inp_lport);
80407a0: e0bffc17 ldw r2,-16(fp)
80407a4: 1080078b ldhu r2,30(r2)
80407a8: 10bfffcc andi r2,r2,65535
80407ac: 1004d23a srli r2,r2,8
80407b0: 1007883a mov r3,r2
80407b4: e0bffc17 ldw r2,-16(fp)
80407b8: 1080078b ldhu r2,30(r2)
80407bc: 10bfffcc andi r2,r2,65535
80407c0: 1004923a slli r2,r2,8
80407c4: 1884b03a or r2,r3,r2
80407c8: e0bfff8d sth r2,-2(fp)
} while(in_pcblookup(head, 0L, 0, inp->inp_laddr.s_addr, lport, 0));
80407cc: e0bffa17 ldw r2,-24(fp)
80407d0: 10c00417 ldw r3,16(r2)
80407d4: e0bfff8b ldhu r2,-2(fp)
80407d8: d8000115 stw zero,4(sp)
80407dc: d8800015 stw r2,0(sp)
80407e0: 180f883a mov r7,r3
80407e4: 000d883a mov r6,zero
80407e8: 000b883a mov r5,zero
80407ec: e13ffc17 ldw r4,-16(fp)
80407f0: 8040b600 call 8040b60 <in_pcblookup>
80407f4: 103fd91e bne r2,zero,804075c <in_pcbbind+0x150>
}
inp->inp_lport = lport;
80407f8: e0bffa17 ldw r2,-24(fp)
80407fc: e0ffff8b ldhu r3,-2(fp)
8040800: 10c0078d sth r3,30(r2)
return (0);
8040804: 0005883a mov r2,zero
}
8040808: e037883a mov sp,fp
804080c: dfc00117 ldw ra,4(sp)
8040810: df000017 ldw fp,0(sp)
8040814: dec00204 addi sp,sp,8
8040818: f800283a ret
0804081c <in_pcbconnect>:
*/
int
in_pcbconnect(struct inpcb * inp,
struct mbuf * nam)
{
804081c: defff604 addi sp,sp,-40
8040820: dfc00915 stw ra,36(sp)
8040824: df000815 stw fp,32(sp)
8040828: df000804 addi fp,sp,32
804082c: e13ffb15 stw r4,-20(fp)
8040830: e17ffa15 stw r5,-24(fp)
unsigned long ifaddr;
struct sockaddr_in * sin = mtod(nam, struct sockaddr_in *);
8040834: e0bffa17 ldw r2,-24(fp)
8040838: 10800317 ldw r2,12(r2)
804083c: e0bffe15 stw r2,-8(fp)
if (nam->m_len < sizeof (*sin))
8040840: e0bffa17 ldw r2,-24(fp)
8040844: 10800217 ldw r2,8(r2)
8040848: 10800428 cmpgeui r2,r2,16
804084c: 1000021e bne r2,zero,8040858 <in_pcbconnect+0x3c>
return (EINVAL);
8040850: 00800584 movi r2,22
8040854: 00006406 br 80409e8 <in_pcbconnect+0x1cc>
if (sin->sin_family != AF_INET)
8040858: e0bffe17 ldw r2,-8(fp)
804085c: 1080000b ldhu r2,0(r2)
8040860: 10bfffcc andi r2,r2,65535
8040864: 10a0001c xori r2,r2,32768
8040868: 10a00004 addi r2,r2,-32768
804086c: 108000a0 cmpeqi r2,r2,2
8040870: 1000021e bne r2,zero,804087c <in_pcbconnect+0x60>
return (EAFNOSUPPORT);
8040874: 00801a84 movi r2,106
8040878: 00005b06 br 80409e8 <in_pcbconnect+0x1cc>
if (sin->sin_port == 0)
804087c: e0bffe17 ldw r2,-8(fp)
8040880: 1080008b ldhu r2,2(r2)
8040884: 10bfffcc andi r2,r2,65535
8040888: 1000021e bne r2,zero,8040894 <in_pcbconnect+0x78>
return (EADDRNOTAVAIL);
804088c: 00801f44 movi r2,125
8040890: 00005506 br 80409e8 <in_pcbconnect+0x1cc>
* use the primary local address.
* If the supplied address is INADDR_BROADCAST,
* and the primary interface supports broadcast,
* choose the broadcast address for that interface.
*/
if (sin->sin_addr.s_addr == INADDR_ANY)
8040894: e0bffe17 ldw r2,-8(fp)
8040898: 10800117 ldw r2,4(r2)
804089c: 10000d1e bne r2,zero,80408d4 <in_pcbconnect+0xb8>
{
if (inp && inp->ifp)
80408a0: e0bffb17 ldw r2,-20(fp)
80408a4: 10000926 beq r2,zero,80408cc <in_pcbconnect+0xb0>
80408a8: e0bffb17 ldw r2,-20(fp)
80408ac: 10800a17 ldw r2,40(r2)
80408b0: 10000626 beq r2,zero,80408cc <in_pcbconnect+0xb0>
sin->sin_addr.s_addr = inp->ifp->n_ipaddr;
80408b4: e0bffb17 ldw r2,-20(fp)
80408b8: 10800a17 ldw r2,40(r2)
80408bc: 10c00a17 ldw r3,40(r2)
80408c0: e0bffe17 ldw r2,-8(fp)
80408c4: 10c00115 stw r3,4(r2)
80408c8: 00000806 br 80408ec <in_pcbconnect+0xd0>
else
return (EADDRNOTAVAIL);
80408cc: 00801f44 movi r2,125
80408d0: 00004506 br 80409e8 <in_pcbconnect+0x1cc>
}
else if (sin->sin_addr.s_addr == INADDR_BROADCAST)
80408d4: e0bffe17 ldw r2,-8(fp)
80408d8: 10800117 ldw r2,4(r2)
80408dc: 10bfffd8 cmpnei r2,r2,-1
80408e0: 1000021e bne r2,zero,80408ec <in_pcbconnect+0xd0>
return (EADDRNOTAVAIL);
80408e4: 00801f44 movi r2,125
80408e8: 00003f06 br 80409e8 <in_pcbconnect+0x1cc>
if (inp->inp_laddr.s_addr == INADDR_ANY)
80408ec: e0bffb17 ldw r2,-20(fp)
80408f0: 10800417 ldw r2,16(r2)
80408f4: 10000f1e bne r2,zero,8040934 <in_pcbconnect+0x118>
{
#ifdef MULTI_HOMED
ip_addr hop1; /* dummy for pass to iproute() */
NET npnet; /* the netport iface we can send on */
/* call netport stack's IP routing */
npnet = iproute(sin->sin_addr.s_addr, &hop1);
80408f8: e0bffe17 ldw r2,-8(fp)
80408fc: 10800117 ldw r2,4(r2)
8040900: e0fffc04 addi r3,fp,-16
8040904: 180b883a mov r5,r3
8040908: 1009883a mov r4,r2
804090c: 803b3700 call 803b370 <iproute>
8040910: e0bffd15 stw r2,-12(fp)
if (!npnet)
8040914: e0bffd17 ldw r2,-12(fp)
8040918: 1000021e bne r2,zero,8040924 <in_pcbconnect+0x108>
return EADDRNOTAVAIL;
804091c: 00801f44 movi r2,125
8040920: 00003106 br 80409e8 <in_pcbconnect+0x1cc>
ifaddr = npnet->n_ipaddr; /* local address for this host */
8040924: e0bffd17 ldw r2,-12(fp)
8040928: 10800a17 ldw r2,40(r2)
804092c: e0bfff15 stw r2,-4(fp)
8040930: 00000306 br 8040940 <in_pcbconnect+0x124>
#else /* not netport MULTI_HOMED, use 0th (only) iface */
ifaddr = nets[0]->n_ipaddr;
#endif /* MULTI_HOMED */
}
else /* inp->inp_laddr.s_addr != INADDR_ANY */
ifaddr = inp->inp_laddr.s_addr; /* use address passed */
8040934: e0bffb17 ldw r2,-20(fp)
8040938: 10800417 ldw r2,16(r2)
804093c: e0bfff15 stw r2,-4(fp)
if (in_pcblookup(inp->inp_head,
8040940: e0bffb17 ldw r2,-20(fp)
8040944: 10c00217 ldw r3,8(r2)
8040948: e0bffe17 ldw r2,-8(fp)
804094c: 11000117 ldw r4,4(r2)
sin->sin_addr.s_addr,
sin->sin_port,
8040950: e0bffe17 ldw r2,-8(fp)
8040954: 1080008b ldhu r2,2(r2)
if (in_pcblookup(inp->inp_head,
8040958: 117fffcc andi r5,r2,65535
ifaddr,
inp->inp_lport,
804095c: e0bffb17 ldw r2,-20(fp)
8040960: 1080078b ldhu r2,30(r2)
if (in_pcblookup(inp->inp_head,
8040964: 10bfffcc andi r2,r2,65535
8040968: d8000115 stw zero,4(sp)
804096c: d8800015 stw r2,0(sp)
8040970: e1ffff17 ldw r7,-4(fp)
8040974: 280d883a mov r6,r5
8040978: 200b883a mov r5,r4
804097c: 1809883a mov r4,r3
8040980: 8040b600 call 8040b60 <in_pcblookup>
8040984: 10000226 beq r2,zero,8040990 <in_pcbconnect+0x174>
0))
{
return (EADDRINUSE);
8040988: 00801c04 movi r2,112
804098c: 00001606 br 80409e8 <in_pcbconnect+0x1cc>
}
if (inp->inp_laddr.s_addr == INADDR_ANY)
8040990: e0bffb17 ldw r2,-20(fp)
8040994: 10800417 ldw r2,16(r2)
8040998: 10000a1e bne r2,zero,80409c4 <in_pcbconnect+0x1a8>
{
if (inp->inp_lport == 0)
804099c: e0bffb17 ldw r2,-20(fp)
80409a0: 1080078b ldhu r2,30(r2)
80409a4: 10bfffcc andi r2,r2,65535
80409a8: 1000031e bne r2,zero,80409b8 <in_pcbconnect+0x19c>
(void)in_pcbbind(inp, (struct mbuf *)0);
80409ac: 000b883a mov r5,zero
80409b0: e13ffb17 ldw r4,-20(fp)
80409b4: 804060c0 call 804060c <in_pcbbind>
inp->inp_laddr.s_addr = ifaddr;
80409b8: e0bffb17 ldw r2,-20(fp)
80409bc: e0ffff17 ldw r3,-4(fp)
80409c0: 10c00415 stw r3,16(r2)
}
inp->inp_faddr = sin->sin_addr;
80409c4: e0bffb17 ldw r2,-20(fp)
80409c8: e0fffe17 ldw r3,-8(fp)
80409cc: 18c00117 ldw r3,4(r3)
80409d0: 10c00315 stw r3,12(r2)
inp->inp_fport = sin->sin_port;
80409d4: e0bffe17 ldw r2,-8(fp)
80409d8: 10c0008b ldhu r3,2(r2)
80409dc: e0bffb17 ldw r2,-20(fp)
80409e0: 10c0070d sth r3,28(r2)
return 0;
80409e4: 0005883a mov r2,zero
}
80409e8: e037883a mov sp,fp
80409ec: dfc00117 ldw ra,4(sp)
80409f0: df000017 ldw fp,0(sp)
80409f4: dec00204 addi sp,sp,8
80409f8: f800283a ret
080409fc <in_pcbdisconnect>:
* RETURNS:
*/
void
in_pcbdisconnect(struct inpcb * inp)
{
80409fc: defffd04 addi sp,sp,-12
8040a00: dfc00215 stw ra,8(sp)
8040a04: df000115 stw fp,4(sp)
8040a08: df000104 addi fp,sp,4
8040a0c: e13fff15 stw r4,-4(fp)
inp->inp_faddr.s_addr = INADDR_ANY;
8040a10: e0bfff17 ldw r2,-4(fp)
8040a14: 10000315 stw zero,12(r2)
inp->inp_fport = 0;
8040a18: e0bfff17 ldw r2,-4(fp)
8040a1c: 1000070d sth zero,28(r2)
if (inp->inp_socket->so_state & SS_NOFDREF)
8040a20: e0bfff17 ldw r2,-4(fp)
8040a24: 10800817 ldw r2,32(r2)
8040a28: 1080088b ldhu r2,34(r2)
8040a2c: 10bfffcc andi r2,r2,65535
8040a30: 1080004c andi r2,r2,1
8040a34: 10000226 beq r2,zero,8040a40 <in_pcbdisconnect+0x44>
in_pcbdetach (inp);
8040a38: e13fff17 ldw r4,-4(fp)
8040a3c: 80405b40 call 80405b4 <in_pcbdetach>
}
8040a40: 0001883a nop
8040a44: e037883a mov sp,fp
8040a48: dfc00117 ldw ra,4(sp)
8040a4c: df000017 ldw fp,0(sp)
8040a50: dec00204 addi sp,sp,8
8040a54: f800283a ret
08040a58 <in_setsockaddr>:
*/
void
in_setsockaddr(struct inpcb * inp,
struct mbuf * nam)
{
8040a58: defffb04 addi sp,sp,-20
8040a5c: dfc00415 stw ra,16(sp)
8040a60: df000315 stw fp,12(sp)
8040a64: df000304 addi fp,sp,12
8040a68: e13ffe15 stw r4,-8(fp)
8040a6c: e17ffd15 stw r5,-12(fp)
struct sockaddr_in * sin;
nam->m_len = sizeof (*sin);
8040a70: e0bffd17 ldw r2,-12(fp)
8040a74: 00c00404 movi r3,16
8040a78: 10c00215 stw r3,8(r2)
sin = mtod(nam, struct sockaddr_in *);
8040a7c: e0bffd17 ldw r2,-12(fp)
8040a80: 10800317 ldw r2,12(r2)
8040a84: e0bfff15 stw r2,-4(fp)
MEMSET(sin, 0, sizeof (*sin));
8040a88: 01800404 movi r6,16
8040a8c: 000b883a mov r5,zero
8040a90: e13fff17 ldw r4,-4(fp)
8040a94: 80088e40 call 80088e4 <memset>
sin->sin_family = AF_INET;
8040a98: e0bfff17 ldw r2,-4(fp)
8040a9c: 00c00084 movi r3,2
8040aa0: 10c0000d sth r3,0(r2)
sin->sin_port = inp->inp_lport;
8040aa4: e0bffe17 ldw r2,-8(fp)
8040aa8: 10c0078b ldhu r3,30(r2)
8040aac: e0bfff17 ldw r2,-4(fp)
8040ab0: 10c0008d sth r3,2(r2)
sin->sin_addr = inp->inp_laddr;
8040ab4: e0bfff17 ldw r2,-4(fp)
8040ab8: e0fffe17 ldw r3,-8(fp)
8040abc: 18c00417 ldw r3,16(r3)
8040ac0: 10c00115 stw r3,4(r2)
}
8040ac4: 0001883a nop
8040ac8: e037883a mov sp,fp
8040acc: dfc00117 ldw ra,4(sp)
8040ad0: df000017 ldw fp,0(sp)
8040ad4: dec00204 addi sp,sp,8
8040ad8: f800283a ret
08040adc <in_setpeeraddr>:
void
in_setpeeraddr(
struct inpcb * inp,
struct mbuf * nam)
{
8040adc: defffb04 addi sp,sp,-20
8040ae0: dfc00415 stw ra,16(sp)
8040ae4: df000315 stw fp,12(sp)
8040ae8: df000304 addi fp,sp,12
8040aec: e13ffe15 stw r4,-8(fp)
8040af0: e17ffd15 stw r5,-12(fp)
struct sockaddr_in * sin;
nam->m_len = sizeof (*sin);
8040af4: e0bffd17 ldw r2,-12(fp)
8040af8: 00c00404 movi r3,16
8040afc: 10c00215 stw r3,8(r2)
sin = mtod(nam, struct sockaddr_in *);
8040b00: e0bffd17 ldw r2,-12(fp)
8040b04: 10800317 ldw r2,12(r2)
8040b08: e0bfff15 stw r2,-4(fp)
MEMSET(sin, 0, sizeof (*sin));
8040b0c: 01800404 movi r6,16
8040b10: 000b883a mov r5,zero
8040b14: e13fff17 ldw r4,-4(fp)
8040b18: 80088e40 call 80088e4 <memset>
sin->sin_family = AF_INET;
8040b1c: e0bfff17 ldw r2,-4(fp)
8040b20: 00c00084 movi r3,2
8040b24: 10c0000d sth r3,0(r2)
sin->sin_port = inp->inp_fport;
8040b28: e0bffe17 ldw r2,-8(fp)
8040b2c: 10c0070b ldhu r3,28(r2)
8040b30: e0bfff17 ldw r2,-4(fp)
8040b34: 10c0008d sth r3,2(r2)
sin->sin_addr = inp->inp_faddr;
8040b38: e0bfff17 ldw r2,-4(fp)
8040b3c: e0fffe17 ldw r3,-8(fp)
8040b40: 18c00317 ldw r3,12(r3)
8040b44: 10c00115 stw r3,4(r2)
}
8040b48: 0001883a nop
8040b4c: e037883a mov sp,fp
8040b50: dfc00117 ldw ra,4(sp)
8040b54: df000017 ldw fp,0(sp)
8040b58: dec00204 addi sp,sp,8
8040b5c: f800283a ret
08040b60 <in_pcblookup>:
u_long faddr,
unshort xfport,
u_long laddr,
unshort xlport,
int flags)
{
8040b60: defff504 addi sp,sp,-44
8040b64: df000a15 stw fp,40(sp)
8040b68: df000a04 addi fp,sp,40
8040b6c: e13ffa15 stw r4,-24(fp)
8040b70: e17ff915 stw r5,-28(fp)
8040b74: 3007883a mov r3,r6
8040b78: e1fff715 stw r7,-36(fp)
8040b7c: e0800117 ldw r2,4(fp)
8040b80: e0fff80d sth r3,-32(fp)
8040b84: e0bff60d sth r2,-40(fp)
struct inpcb * inp, * match = 0;
8040b88: e03ffe15 stw zero,-8(fp)
unshort fport = xfport;
8040b8c: e0bff80b ldhu r2,-32(fp)
8040b90: e0bffb8d sth r2,-18(fp)
unshort lport = xlport;
8040b94: e0bff60b ldhu r2,-40(fp)
8040b98: e0bffb0d sth r2,-20(fp)
int matchwild = 3;
8040b9c: 008000c4 movi r2,3
8040ba0: e0bffd15 stw r2,-12(fp)
int wildcard;
for (inp = head->inp_next; inp != head; inp = inp->inp_next)
8040ba4: e0bffa17 ldw r2,-24(fp)
8040ba8: 10800017 ldw r2,0(r2)
8040bac: e0bfff15 stw r2,-4(fp)
8040bb0: 00004f06 br 8040cf0 <in_pcblookup+0x190>
{
if (inp->inp_lport != lport)
8040bb4: e0bfff17 ldw r2,-4(fp)
8040bb8: 1080078b ldhu r2,30(r2)
8040bbc: e0fffb0b ldhu r3,-20(fp)
8040bc0: 10bfffcc andi r2,r2,65535
8040bc4: 1880401e bne r3,r2,8040cc8 <in_pcblookup+0x168>
continue;
/* Skip non IPv4 sockets */
if(inp->inp_socket->so_domain != AF_INET)
8040bc8: e0bfff17 ldw r2,-4(fp)
8040bcc: 10800817 ldw r2,32(r2)
8040bd0: 10800517 ldw r2,20(r2)
8040bd4: 108000a0 cmpeqi r2,r2,2
8040bd8: 10003d26 beq r2,zero,8040cd0 <in_pcblookup+0x170>
continue;
wildcard = 0;
8040bdc: e03ffc15 stw zero,-16(fp)
if (inp->inp_laddr.s_addr != INADDR_ANY)
8040be0: e0bfff17 ldw r2,-4(fp)
8040be4: 10800417 ldw r2,16(r2)
8040be8: 10000b26 beq r2,zero,8040c18 <in_pcblookup+0xb8>
{
if (laddr == INADDR_ANY)
8040bec: e0bff717 ldw r2,-36(fp)
8040bf0: 1000041e bne r2,zero,8040c04 <in_pcblookup+0xa4>
wildcard++;
8040bf4: e0bffc17 ldw r2,-16(fp)
8040bf8: 10800044 addi r2,r2,1
8040bfc: e0bffc15 stw r2,-16(fp)
8040c00: 00000a06 br 8040c2c <in_pcblookup+0xcc>
else if (inp->inp_laddr.s_addr != laddr)
8040c04: e0bfff17 ldw r2,-4(fp)
8040c08: 10800417 ldw r2,16(r2)
8040c0c: e0fff717 ldw r3,-36(fp)
8040c10: 18800626 beq r3,r2,8040c2c <in_pcblookup+0xcc>
continue;
8040c14: 00003306 br 8040ce4 <in_pcblookup+0x184>
}
else
{
if (laddr != INADDR_ANY)
8040c18: e0bff717 ldw r2,-36(fp)
8040c1c: 10000326 beq r2,zero,8040c2c <in_pcblookup+0xcc>
wildcard++;
8040c20: e0bffc17 ldw r2,-16(fp)
8040c24: 10800044 addi r2,r2,1
8040c28: e0bffc15 stw r2,-16(fp)
}
if (inp->inp_faddr.s_addr != INADDR_ANY)
8040c2c: e0bfff17 ldw r2,-4(fp)
8040c30: 10800317 ldw r2,12(r2)
8040c34: 10001026 beq r2,zero,8040c78 <in_pcblookup+0x118>
{
if (faddr == INADDR_ANY)
8040c38: e0bff917 ldw r2,-28(fp)
8040c3c: 1000041e bne r2,zero,8040c50 <in_pcblookup+0xf0>
wildcard++;
8040c40: e0bffc17 ldw r2,-16(fp)
8040c44: 10800044 addi r2,r2,1
8040c48: e0bffc15 stw r2,-16(fp)
8040c4c: 00000f06 br 8040c8c <in_pcblookup+0x12c>
else if (inp->inp_faddr.s_addr != faddr ||
8040c50: e0bfff17 ldw r2,-4(fp)
8040c54: 10800317 ldw r2,12(r2)
8040c58: e0fff917 ldw r3,-28(fp)
8040c5c: 18801e1e bne r3,r2,8040cd8 <in_pcblookup+0x178>
inp->inp_fport != fport)
8040c60: e0bfff17 ldw r2,-4(fp)
8040c64: 1080070b ldhu r2,28(r2)
else if (inp->inp_faddr.s_addr != faddr ||
8040c68: e0fffb8b ldhu r3,-18(fp)
8040c6c: 10bfffcc andi r2,r2,65535
8040c70: 18800626 beq r3,r2,8040c8c <in_pcblookup+0x12c>
{
continue;
8040c74: 00001806 br 8040cd8 <in_pcblookup+0x178>
}
} else
{
if (faddr != INADDR_ANY)
8040c78: e0bff917 ldw r2,-28(fp)
8040c7c: 10000326 beq r2,zero,8040c8c <in_pcblookup+0x12c>
wildcard++;
8040c80: e0bffc17 ldw r2,-16(fp)
8040c84: 10800044 addi r2,r2,1
8040c88: e0bffc15 stw r2,-16(fp)
}
if (wildcard && (flags & INPLOOKUP_WILDCARD) == 0)
8040c8c: e0bffc17 ldw r2,-16(fp)
8040c90: 10000326 beq r2,zero,8040ca0 <in_pcblookup+0x140>
8040c94: e0800217 ldw r2,8(fp)
8040c98: 1080004c andi r2,r2,1
8040c9c: 10001026 beq r2,zero,8040ce0 <in_pcblookup+0x180>
continue;
if (wildcard < matchwild)
8040ca0: e0fffc17 ldw r3,-16(fp)
8040ca4: e0bffd17 ldw r2,-12(fp)
8040ca8: 18800e0e bge r3,r2,8040ce4 <in_pcblookup+0x184>
{
match = inp;
8040cac: e0bfff17 ldw r2,-4(fp)
8040cb0: e0bffe15 stw r2,-8(fp)
matchwild = wildcard;
8040cb4: e0bffc17 ldw r2,-16(fp)
8040cb8: e0bffd15 stw r2,-12(fp)
if (matchwild == 0)
8040cbc: e0bffd17 ldw r2,-12(fp)
8040cc0: 10000f26 beq r2,zero,8040d00 <in_pcblookup+0x1a0>
8040cc4: 00000706 br 8040ce4 <in_pcblookup+0x184>
continue;
8040cc8: 0001883a nop
8040ccc: 00000506 br 8040ce4 <in_pcblookup+0x184>
continue;
8040cd0: 0001883a nop
8040cd4: 00000306 br 8040ce4 <in_pcblookup+0x184>
continue;
8040cd8: 0001883a nop
8040cdc: 00000106 br 8040ce4 <in_pcblookup+0x184>
continue;
8040ce0: 0001883a nop
for (inp = head->inp_next; inp != head; inp = inp->inp_next)
8040ce4: e0bfff17 ldw r2,-4(fp)
8040ce8: 10800017 ldw r2,0(r2)
8040cec: e0bfff15 stw r2,-4(fp)
8040cf0: e0ffff17 ldw r3,-4(fp)
8040cf4: e0bffa17 ldw r2,-24(fp)
8040cf8: 18bfae1e bne r3,r2,8040bb4 <in_pcblookup+0x54>
8040cfc: 00000106 br 8040d04 <in_pcblookup+0x1a4>
break;
8040d00: 0001883a nop
}
}
if (match == NULL)
8040d04: e0bffe17 ldw r2,-8(fp)
8040d08: 1000021e bne r2,zero,8040d14 <in_pcblookup+0x1b4>
return match;
8040d0c: e0bffe17 ldw r2,-8(fp)
8040d10: 00002406 br 8040da4 <in_pcblookup+0x244>
if (head->inp_next == match) /* got cache hit? */
8040d14: e0bffa17 ldw r2,-24(fp)
8040d18: 10800017 ldw r2,0(r2)
8040d1c: e0fffe17 ldw r3,-8(fp)
8040d20: 1880041e bne r3,r2,8040d34 <in_pcblookup+0x1d4>
{
inpcb_cachehits++;
8040d24: d0a09f17 ldw r2,-32132(gp)
8040d28: 10800044 addi r2,r2,1
8040d2c: d0a09f15 stw r2,-32132(gp)
8040d30: 00001b06 br 8040da0 <in_pcblookup+0x240>
}
else
{
inpcb_cachemiss++;
8040d34: d0a0a017 ldw r2,-32128(gp)
8040d38: 10800044 addi r2,r2,1
8040d3c: d0a0a015 stw r2,-32128(gp)
/* "cache" the match to be first checked next time. */
match->inp_next->inp_prev = match->inp_prev; /*unlink match */
8040d40: e0bffe17 ldw r2,-8(fp)
8040d44: 10800017 ldw r2,0(r2)
8040d48: e0fffe17 ldw r3,-8(fp)
8040d4c: 18c00117 ldw r3,4(r3)
8040d50: 10c00115 stw r3,4(r2)
match->inp_prev->inp_next = match->inp_next;
8040d54: e0bffe17 ldw r2,-8(fp)
8040d58: 10800117 ldw r2,4(r2)
8040d5c: e0fffe17 ldw r3,-8(fp)
8040d60: 18c00017 ldw r3,0(r3)
8040d64: 10c00015 stw r3,0(r2)
/* relink match as head->inp_next */
match->inp_next = head->inp_next;
8040d68: e0bffa17 ldw r2,-24(fp)
8040d6c: 10c00017 ldw r3,0(r2)
8040d70: e0bffe17 ldw r2,-8(fp)
8040d74: 10c00015 stw r3,0(r2)
head->inp_next = match;
8040d78: e0bffa17 ldw r2,-24(fp)
8040d7c: e0fffe17 ldw r3,-8(fp)
8040d80: 10c00015 stw r3,0(r2)
match->inp_prev = head;
8040d84: e0bffe17 ldw r2,-8(fp)
8040d88: e0fffa17 ldw r3,-24(fp)
8040d8c: 10c00115 stw r3,4(r2)
match->inp_next->inp_prev = match;
8040d90: e0bffe17 ldw r2,-8(fp)
8040d94: 10800017 ldw r2,0(r2)
8040d98: e0fffe17 ldw r3,-8(fp)
8040d9c: 10c00115 stw r3,4(r2)
}
return (match);
8040da0: e0bffe17 ldw r2,-8(fp)
}
8040da4: e037883a mov sp,fp
8040da8: df000017 ldw fp,0(sp)
8040dac: dec00104 addi sp,sp,4
8040db0: f800283a ret
08040db4 <set_vfopen_error>:
*
* RETURNS:
*/
void set_vfopen_error(int error)
{
8040db4: defffe04 addi sp,sp,-8
8040db8: df000115 stw fp,4(sp)
8040dbc: df000104 addi fp,sp,4
8040dc0: e13fff15 stw r4,-4(fp)
vfopen_error = error;
8040dc4: e0bfff17 ldw r2,-4(fp)
8040dc8: d0a0a415 stw r2,-32112(gp)
}
8040dcc: 0001883a nop
8040dd0: e037883a mov sp,fp
8040dd4: df000017 ldw fp,0(sp)
8040dd8: dec00104 addi sp,sp,4
8040ddc: f800283a ret
08040de0 <get_vfopen_error>:
*
* RETURNS:
*/
int get_vfopen_error()
{
8040de0: deffff04 addi sp,sp,-4
8040de4: df000015 stw fp,0(sp)
8040de8: d839883a mov fp,sp
return vfopen_error;
8040dec: d0a0a417 ldw r2,-32112(gp)
}
8040df0: e037883a mov sp,fp
8040df4: df000017 ldw fp,0(sp)
8040df8: dec00104 addi sp,sp,4
8040dfc: f800283a ret
08040e00 <vf_alloc_and_link_vop>:
*
* RETURNS:
*/
VFILE * vf_alloc_and_link_vop()
{
8040e00: defffd04 addi sp,sp,-12
8040e04: dfc00215 stw ra,8(sp)
8040e08: df000115 stw fp,4(sp)
8040e0c: df000104 addi fp,sp,4
struct vfs_open * vop;
/* enforce maximum number of simultaneously open files */
if (vfs_open_files >= VFS_MAX_OPEN_FILES)
8040e10: d0a0a617 ldw r2,-32104(gp)
8040e14: 10803ff0 cmpltui r2,r2,255
8040e18: 1000021e bne r2,zero,8040e24 <vf_alloc_and_link_vop+0x24>
{
#ifdef VFS_VERBOSE
dprintf("vfs_open_files too big (%ld) in vf_alloc_and_link_vop()\n",
vfs_open_files);
#endif /* VFS_VERBOSE */
return NULL;
8040e1c: 0005883a mov r2,zero
8040e20: 00000e06 br 8040e5c <vf_alloc_and_link_vop+0x5c>
}
/* allocate a structure to represent the open file */
vop = VFS_VFS_OPEN_ALLOC();
8040e24: 01000504 movi r4,20
8040e28: 802982c0 call 802982c <npalloc>
8040e2c: e0bfff15 stw r2,-4(fp)
/* if the allocation succeeded */
if (vop)
8040e30: e0bfff17 ldw r2,-4(fp)
8040e34: 10000826 beq r2,zero,8040e58 <vf_alloc_and_link_vop+0x58>
{
/* add to the beginning of the list of open files */
vop->next = vfiles;
8040e38: d0e0a217 ldw r3,-32120(gp)
8040e3c: e0bfff17 ldw r2,-4(fp)
8040e40: 10c00015 stw r3,0(r2)
vfiles = vop;
8040e44: e0bfff17 ldw r2,-4(fp)
8040e48: d0a0a215 stw r2,-32120(gp)
/* increment the count of open files */
vfs_open_files++;
8040e4c: d0a0a617 ldw r2,-32104(gp)
8040e50: 10800044 addi r2,r2,1
8040e54: d0a0a615 stw r2,-32104(gp)
#ifdef VFS_VERBOSE
else
dprintf("VFS_VFS_OPEN_ALLOC() failed in vf_alloc_and_link_vop()\n");
#endif /* VFS_VERBOSE */
return vop;
8040e58: e0bfff17 ldw r2,-4(fp)
}
8040e5c: e037883a mov sp,fp
8040e60: dfc00117 ldw ra,4(sp)
8040e64: df000017 ldw fp,0(sp)
8040e68: dec00204 addi sp,sp,8
8040e6c: f800283a ret
08040e70 <vf_alloc_buffer>:
*
* RETURNS:
*/
unsigned char * vf_alloc_buffer(unsigned long size)
{
8040e70: defff904 addi sp,sp,-28
8040e74: dfc00615 stw ra,24(sp)
8040e78: df000515 stw fp,20(sp)
8040e7c: df000504 addi fp,sp,20
8040e80: e13ffb15 stw r4,-20(fp)
unsigned int long_size,int_size;
#endif /* MUTE_WARNS */
/* make sure the requested allocation does not exceed the total
memory space reserved for file buffers */
if ((vfs_total_rw_space + size) > VFS_MAX_TOTAL_RW_SPACE)
8040e84: d0e0a717 ldw r3,-32100(gp)
8040e88: e0bffb17 ldw r2,-20(fp)
8040e8c: 1885883a add r2,r3,r2
8040e90: 00ffffd4 movui r3,65535
8040e94: 1880022e bgeu r3,r2,8040ea0 <vf_alloc_buffer+0x30>
return NULL;
8040e98: 0005883a mov r2,zero
8040e9c: 00002106 br 8040f24 <vf_alloc_buffer+0xb4>
* any bigger than what will fit in an unsigned int
*/
#ifdef MUTE_WARNS
/* the idiotic hoops you got to jump through to suppress compiler
warnings */
long_size = sizeof(unsigned long);
8040ea0: 00800104 movi r2,4
8040ea4: e0bfff15 stw r2,-4(fp)
int_size = sizeof(unsigned int);
8040ea8: 00800104 movi r2,4
8040eac: e0bffe15 stw r2,-8(fp)
if (long_size > int_size)
8040eb0: e0bfff17 ldw r2,-4(fp)
8040eb4: e0fffe17 ldw r3,-8(fp)
8040eb8: 1880102e bgeu r3,r2,8040efc <vf_alloc_buffer+0x8c>
* most systems where this "if" expression will evaluate to
* true (2 byte ints, 4 byte longs). if any of those upper bits
* are on in your requested size, you otta luck.
*/
#ifdef MUTE_WARNS
switch (int_size)
8040ebc: e0bffe17 ldw r2,-8(fp)
8040ec0: 10800098 cmpnei r2,r2,2
8040ec4: 1000081e bne r2,zero,8040ee8 <vf_alloc_buffer+0x78>
#else
switch (sizeof(unsigned int))
#endif /* MUTE_WARNS */
{
case 2 :
mem_mask = 0xffff0000;
8040ec8: 00bffff4 movhi r2,65535
8040ecc: e0bffd15 stw r2,-12(fp)
break;
8040ed0: 0001883a nop
default :
dtrap(); /* you have a weird compiler */
return NULL;
}
if (size & mem_mask)
8040ed4: e0fffb17 ldw r3,-20(fp)
8040ed8: e0bffd17 ldw r2,-12(fp)
8040edc: 1884703a and r2,r3,r2
8040ee0: 10000626 beq r2,zero,8040efc <vf_alloc_buffer+0x8c>
8040ee4: 00000306 br 8040ef4 <vf_alloc_buffer+0x84>
dtrap(); /* you have a weird compiler */
8040ee8: 8028cd40 call 8028cd4 <dtrap>
return NULL;
8040eec: 0005883a mov r2,zero
8040ef0: 00000c06 br 8040f24 <vf_alloc_buffer+0xb4>
return NULL;
8040ef4: 0005883a mov r2,zero
8040ef8: 00000a06 br 8040f24 <vf_alloc_buffer+0xb4>
}
/* try to allocate a buffer of the requested size */
buffer = (unsigned char *) npalloc((unsigned int) size);
8040efc: e13ffb17 ldw r4,-20(fp)
8040f00: 802982c0 call 802982c <npalloc>
8040f04: e0bffc15 stw r2,-16(fp)
/* if the allocation succeeded */
if (buffer)
8040f08: e0bffc17 ldw r2,-16(fp)
8040f0c: 10000426 beq r2,zero,8040f20 <vf_alloc_buffer+0xb0>
{
/* add size to the count of total buffer space allocated */
vfs_total_rw_space += size;
8040f10: d0e0a717 ldw r3,-32100(gp)
8040f14: e0bffb17 ldw r2,-20(fp)
8040f18: 1885883a add r2,r3,r2
8040f1c: d0a0a715 stw r2,-32100(gp)
}
return buffer;
8040f20: e0bffc17 ldw r2,-16(fp)
}
8040f24: e037883a mov sp,fp
8040f28: dfc00117 ldw ra,4(sp)
8040f2c: df000017 ldw fp,0(sp)
8040f30: dec00204 addi sp,sp,8
8040f34: f800283a ret
08040f38 <vf_free_buffer>:
*
* RETURNS:
*/
void vf_free_buffer(unsigned char * buffer, unsigned long size)
{
8040f38: defffc04 addi sp,sp,-16
8040f3c: dfc00315 stw ra,12(sp)
8040f40: df000215 stw fp,8(sp)
8040f44: df000204 addi fp,sp,8
8040f48: e13fff15 stw r4,-4(fp)
8040f4c: e17ffe15 stw r5,-8(fp)
/* free the buffer */
if (buffer)
8040f50: e0bfff17 ldw r2,-4(fp)
8040f54: 10000226 beq r2,zero,8040f60 <vf_free_buffer+0x28>
npfree(buffer);
8040f58: e13fff17 ldw r4,-4(fp)
8040f5c: 80298600 call 8029860 <npfree>
/* and subtract its size from the total buffer space count */
vfs_total_rw_space -= size;
8040f60: d0e0a717 ldw r3,-32100(gp)
8040f64: e0bffe17 ldw r2,-8(fp)
8040f68: 1885c83a sub r2,r3,r2
8040f6c: d0a0a715 stw r2,-32100(gp)
}
8040f70: 0001883a nop
8040f74: e037883a mov sp,fp
8040f78: dfc00117 ldw ra,4(sp)
8040f7c: df000017 ldw fp,0(sp)
8040f80: dec00204 addi sp,sp,8
8040f84: f800283a ret
08040f88 <vfopen_locked>:
* RETURNS:
*/
VFILE *
vfopen_locked(char * name, char * mode)
{
8040f88: defff904 addi sp,sp,-28
8040f8c: dfc00615 stw ra,24(sp)
8040f90: df000515 stw fp,20(sp)
8040f94: df000504 addi fp,sp,20
8040f98: e13ffc15 stw r4,-16(fp)
8040f9c: e17ffb15 stw r5,-20(fp)
struct vfs_file * vfp;
struct vfs_open * vop;
/* clear any previous vfopen() error */
set_vfopen_error(0);
8040fa0: 0009883a mov r4,zero
8040fa4: 8040db40 call 8040db4 <set_vfopen_error>
/* the old code used to do special handling of '?' in files for
* the benefit of the web server. the web server should be doing
* this now. this is here to make sure that its doing it
*/
if (strchr(name,'?'))
8040fa8: 01400fc4 movi r5,63
8040fac: e13ffc17 ldw r4,-16(fp)
8040fb0: 8042dfc0 call 8042dfc <strchr>
8040fb4: 10000326 beq r2,zero,8040fc4 <vfopen_locked+0x3c>
{
dtrap();
8040fb8: 8028cd40 call 8028cd4 <dtrap>
return NULL;
8040fbc: 0005883a mov r2,zero
8040fc0: 0000ba06 br 80412ac <vfopen_locked+0x324>
}
/* determine if the file exists */
/* if the directory exists, vfp will point to its directory entry
structure else vfp will be NULL */
vfp = vfslookup_locked(name);
8040fc4: e13ffc17 ldw r4,-16(fp)
8040fc8: 80422080 call 8042208 <vfslookup_locked>
8040fcc: e0bffe15 stw r2,-8(fp)
/* if the file exists */
if (vfp)
8040fd0: e0bffe17 ldw r2,-8(fp)
8040fd4: 10004a26 beq r2,zero,8041100 <vfopen_locked+0x178>
#ifdef HT_RWVFS
/* if mode begins with 'w' we will truncate to end of file */
/* make sure the file is writable before proceeding */
if ((*mode == 'w') && !(vfp->flags & VF_WRITE))
8040fd8: e0bffb17 ldw r2,-20(fp)
8040fdc: 10800003 ldbu r2,0(r2)
8040fe0: 10803fcc andi r2,r2,255
8040fe4: 1080201c xori r2,r2,128
8040fe8: 10bfe004 addi r2,r2,-128
8040fec: 10801dd8 cmpnei r2,r2,119
8040ff0: 1000091e bne r2,zero,8041018 <vfopen_locked+0x90>
8040ff4: e0bffe17 ldw r2,-8(fp)
8040ff8: 1080058b ldhu r2,22(r2)
8040ffc: 10bfffcc andi r2,r2,65535
8041000: 1080080c andi r2,r2,32
8041004: 1000041e bne r2,zero,8041018 <vfopen_locked+0x90>
{
set_vfopen_error(ENP_FILEIO);
8041008: 013ff984 movi r4,-26
804100c: 8040db40 call 8040db4 <set_vfopen_error>
#ifdef VFS_VERBOSE
dprintf("mode w with no VF_WRITE\n");
#endif /* VFS_VERBOSE */
return NULL;
8041010: 0005883a mov r2,zero
8041014: 0000a506 br 80412ac <vfopen_locked+0x324>
}
#endif /* HT_RWVFS */
/* allocate a VFILE structure to represent the open file */
vop = vf_alloc_and_link_vop();
8041018: 8040e000 call 8040e00 <vf_alloc_and_link_vop>
804101c: e0bffd15 stw r2,-12(fp)
/* check for failure */
if (!vop)
8041020: e0bffd17 ldw r2,-12(fp)
8041024: 1000041e bne r2,zero,8041038 <vfopen_locked+0xb0>
{
set_vfopen_error(ENP_NOMEM);
8041028: 013ffb04 movi r4,-20
804102c: 8040db40 call 8040db4 <set_vfopen_error>
#ifdef VFS_VERBOSE
dprintf("vf_alloc_and_link_vop() failed 1\n");
#endif /* VFS_VERBOSE */
return NULL;
8041030: 0005883a mov r2,zero
8041034: 00009d06 br 80412ac <vfopen_locked+0x324>
}
/* link to the file's directory entry structure */
vop->file = vfp;
8041038: e0bffd17 ldw r2,-12(fp)
804103c: e0fffe17 ldw r3,-8(fp)
8041040: 10c00115 stw r3,4(r2)
/* by default start at the beginning of the file */
/* note that vfp->data could be NULL at this point since empty
files might have no data buffer allocated to them */
vop->cmploc = vfp->data; /* start at beginning of file */
8041044: e0bffe17 ldw r2,-8(fp)
8041048: 10c00617 ldw r3,24(r2)
804104c: e0bffd17 ldw r2,-12(fp)
8041050: 10c00215 stw r3,8(r2)
#ifdef HT_RWVFS
/* if mode begins with 'a', seek to end of file */
if (*mode == 'a')
8041054: e0bffb17 ldw r2,-20(fp)
8041058: 10800003 ldbu r2,0(r2)
804105c: 10803fcc andi r2,r2,255
8041060: 1080201c xori r2,r2,128
8041064: 10bfe004 addi r2,r2,-128
8041068: 10801858 cmpnei r2,r2,97
804106c: 10000a1e bne r2,zero,8041098 <vfopen_locked+0x110>
{
if (vfp->data)
8041070: e0bffe17 ldw r2,-8(fp)
8041074: 10800617 ldw r2,24(r2)
8041078: 10000726 beq r2,zero,8041098 <vfopen_locked+0x110>
{
vop->cmploc = vfp->data + vfp->comp_size;
804107c: e0bffe17 ldw r2,-8(fp)
8041080: 10c00617 ldw r3,24(r2)
8041084: e0bffe17 ldw r2,-8(fp)
8041088: 10800817 ldw r2,32(r2)
804108c: 1887883a add r3,r3,r2
8041090: e0bffd17 ldw r2,-12(fp)
8041094: 10c00215 stw r3,8(r2)
}
}
/* if mode begins with 'w', truncate to end of file */
if (*mode == 'w')
8041098: e0bffb17 ldw r2,-20(fp)
804109c: 10800003 ldbu r2,0(r2)
80410a0: 10803fcc andi r2,r2,255
80410a4: 1080201c xori r2,r2,128
80410a8: 10bfe004 addi r2,r2,-128
80410ac: 10801dd8 cmpnei r2,r2,119
80410b0: 1000111e bne r2,zero,80410f8 <vfopen_locked+0x170>
{
/* set the size of the file before compression to 0 */
vfp->real_size = 0;
80410b4: e0bffe17 ldw r2,-8(fp)
80410b8: 10000715 stw zero,28(r2)
/* set the size of the compressed data to 0 */
vfp->comp_size = 0;
80410bc: e0bffe17 ldw r2,-8(fp)
80410c0: 10000815 stw zero,32(r2)
/* note we leave the pointer to the file buffer and its length
alone since first writes will go to it */
/* flag that the file has been modified */
vfp->flags |= VF_STALE;
80410c4: e0bffe17 ldw r2,-8(fp)
80410c8: 1080058b ldhu r2,22(r2)
80410cc: 10808014 ori r2,r2,512
80410d0: 1007883a mov r3,r2
80410d4: e0bffe17 ldw r2,-8(fp)
80410d8: 10c0058d sth r3,22(r2)
/* turn off the compression flag */
vfp->flags &= ~VF_HTMLCOMPRESSED;
80410dc: e0bffe17 ldw r2,-8(fp)
80410e0: 10c0058b ldhu r3,22(r2)
80410e4: 00bfff84 movi r2,-2
80410e8: 1884703a and r2,r3,r2
80410ec: 1007883a mov r3,r2
80410f0: e0bffe17 ldw r2,-8(fp)
80410f4: 10c0058d sth r3,22(r2)
}
#endif /* HT_RWVFS */
return vop;
80410f8: e0bffd17 ldw r2,-12(fp)
80410fc: 00006b06 br 80412ac <vfopen_locked+0x324>
#ifdef HT_EXTDEV
/* if the mode implies that the file should be created if it
does not exist */
if (*mode != 'r')
8041100: e0bffb17 ldw r2,-20(fp)
8041104: 10800003 ldbu r2,0(r2)
8041108: 10803fcc andi r2,r2,255
804110c: 1080201c xori r2,r2,128
8041110: 10bfe004 addi r2,r2,-128
8041114: 10801ca0 cmpeqi r2,r2,114
8041118: 1000121e bne r2,zero,8041164 <vfopen_locked+0x1dc>
{
/* see if one of the other systems wants to create this file */
/* if none of the below devices can open the file, continue on */
struct vfroutines * vfs;
for (vfs = vfsystems; vfs; vfs = vfs->next)
804111c: d0a0a117 ldw r2,-32124(gp)
8041120: e0bfff15 stw r2,-4(fp)
8041124: 00000d06 br 804115c <vfopen_locked+0x1d4>
{
if ((vop = vfs->r_fopen(name, mode)) != NULL)
8041128: e0bfff17 ldw r2,-4(fp)
804112c: 10800117 ldw r2,4(r2)
8041130: e17ffb17 ldw r5,-20(fp)
8041134: e13ffc17 ldw r4,-16(fp)
8041138: 103ee83a callr r2
804113c: e0bffd15 stw r2,-12(fp)
8041140: e0bffd17 ldw r2,-12(fp)
8041144: 10000226 beq r2,zero,8041150 <vfopen_locked+0x1c8>
{
return vop;
8041148: e0bffd17 ldw r2,-12(fp)
804114c: 00005706 br 80412ac <vfopen_locked+0x324>
for (vfs = vfsystems; vfs; vfs = vfs->next)
8041150: e0bfff17 ldw r2,-4(fp)
8041154: 10800017 ldw r2,0(r2)
8041158: e0bfff15 stw r2,-4(fp)
804115c: e0bfff17 ldw r2,-4(fp)
8041160: 103ff11e bne r2,zero,8041128 <vfopen_locked+0x1a0>
#ifdef HT_RWVFS
/* if the mode implies that the file should be created if it
does not exist */
if (*mode != 'r')
8041164: e0bffb17 ldw r2,-20(fp)
8041168: 10800003 ldbu r2,0(r2)
804116c: 10803fcc andi r2,r2,255
8041170: 1080201c xori r2,r2,128
8041174: 10bfe004 addi r2,r2,-128
8041178: 10801ca0 cmpeqi r2,r2,114
804117c: 1000481e bne r2,zero,80412a0 <vfopen_locked+0x318>
{
/* enforce maximum number of files */
if (vfs_total_dyna_files >= VFS_MAX_DYNA_FILES)
8041180: d0a0a817 ldw r2,-32096(gp)
8041184: 10803ff0 cmpltui r2,r2,255
8041188: 1000041e bne r2,zero,804119c <vfopen_locked+0x214>
{
set_vfopen_error(ENP_NOMEM);
804118c: 013ffb04 movi r4,-20
8041190: 8040db40 call 8040db4 <set_vfopen_error>
#ifdef VFS_VERBOSE
dprintf("vf_total_dyna_files too big in vfopen_locked()\n");
#endif /* VFS_VERBOSE */
return NULL;
8041194: 0005883a mov r2,zero
8041198: 00004406 br 80412ac <vfopen_locked+0x324>
}
/* make sure the file name is not too long for the VFS */
if (strlen(name) > FILENAMEMAX)
804119c: e13ffc17 ldw r4,-16(fp)
80411a0: 8002dac0 call 8002dac <strlen>
80411a4: 10800470 cmpltui r2,r2,17
80411a8: 1000041e bne r2,zero,80411bc <vfopen_locked+0x234>
{
set_vfopen_error(ENP_PARAM);
80411ac: 013ffd84 movi r4,-10
80411b0: 8040db40 call 8040db4 <set_vfopen_error>
#ifdef VFS_VERBOSE
dprintf("file name too long in vfopen_locked()\n");
#endif /* VFS_VERBOSE */
return NULL;
80411b4: 0005883a mov r2,zero
80411b8: 00003c06 br 80412ac <vfopen_locked+0x324>
}
/* allocate a vfs_file structure to hold the new file entry in */
vfp = VFS_VFS_FILE_ALLOC();
80411bc: 01000b04 movi r4,44
80411c0: 802982c0 call 802982c <npalloc>
80411c4: e0bffe15 stw r2,-8(fp)
/* check for memory allocation failure */
if (!vfp)
80411c8: e0bffe17 ldw r2,-8(fp)
80411cc: 1000041e bne r2,zero,80411e0 <vfopen_locked+0x258>
{
set_vfopen_error(ENP_NOMEM);
80411d0: 013ffb04 movi r4,-20
80411d4: 8040db40 call 8040db4 <set_vfopen_error>
#ifdef VFS_VERBOSE
dprintf("VFS_VFS_FILE_ALLOC() failed in vfopen_locked()\n");
#endif /* VFS_VERBOSE */
return NULL;
80411d8: 0005883a mov r2,zero
80411dc: 00003306 br 80412ac <vfopen_locked+0x324>
}
/* allocate a VFILE structure to represent the open file */
vop = vf_alloc_and_link_vop();
80411e0: 8040e000 call 8040e00 <vf_alloc_and_link_vop>
80411e4: e0bffd15 stw r2,-12(fp)
/* check for memory allocation failure */
if (!vop)
80411e8: e0bffd17 ldw r2,-12(fp)
80411ec: 1000061e bne r2,zero,8041208 <vfopen_locked+0x280>
{
VFS_VFS_FILE_FREE(vfp); /* free the allocated vfs_file entry */
80411f0: e13ffe17 ldw r4,-8(fp)
80411f4: 80298600 call 8029860 <npfree>
set_vfopen_error(ENP_NOMEM);
80411f8: 013ffb04 movi r4,-20
80411fc: 8040db40 call 8040db4 <set_vfopen_error>
#ifdef VFS_VERBOSE
dprintf("vf_alloc_and_link_vop() failed 2\n");
#endif /* VFS_VERBOSE */
return NULL;
8041200: 0005883a mov r2,zero
8041204: 00002906 br 80412ac <vfopen_locked+0x324>
}
/* add the vfs_file structure to the head of the list */
vfp->next = vfsfiles;
8041208: d0e0a317 ldw r3,-32116(gp)
804120c: e0bffe17 ldw r2,-8(fp)
8041210: 10c00015 stw r3,0(r2)
vfsfiles = vfp;
8041214: e0bffe17 ldw r2,-8(fp)
8041218: d0a0a315 stw r2,-32116(gp)
/* increment count of total files */
vfs_total_dyna_files++;
804121c: d0a0a817 ldw r2,-32096(gp)
8041220: 10800044 addi r2,r2,1
8041224: d0a0a815 stw r2,-32096(gp)
/* remove leading directory separator before storing name */
if (*name == '/' || *name == '\\')
8041228: e0bffc17 ldw r2,-16(fp)
804122c: 10800003 ldbu r2,0(r2)
8041230: 10803fcc andi r2,r2,255
8041234: 1080201c xori r2,r2,128
8041238: 10bfe004 addi r2,r2,-128
804123c: 10800be0 cmpeqi r2,r2,47
8041240: 1000071e bne r2,zero,8041260 <vfopen_locked+0x2d8>
8041244: e0bffc17 ldw r2,-16(fp)
8041248: 10800003 ldbu r2,0(r2)
804124c: 10803fcc andi r2,r2,255
8041250: 1080201c xori r2,r2,128
8041254: 10bfe004 addi r2,r2,-128
8041258: 10801718 cmpnei r2,r2,92
804125c: 1000031e bne r2,zero,804126c <vfopen_locked+0x2e4>
name++;
8041260: e0bffc17 ldw r2,-16(fp)
8041264: 10800044 addi r2,r2,1
8041268: e0bffc15 stw r2,-16(fp)
/* store the converted name in the directory entry structure */
strcpy(vfp->name,name);
804126c: e0bffe17 ldw r2,-8(fp)
8041270: 10800104 addi r2,r2,4
8041274: e17ffc17 ldw r5,-16(fp)
8041278: 1009883a mov r4,r2
804127c: 8042f600 call 8042f60 <strcpy>
/* set the flags */
vfp->flags = VF_DYNAMICINFO /* the directory entry was allocated */
8041280: e0bffe17 ldw r2,-8(fp)
8041284: 00c0d804 movi r3,864
8041288: 10c0058d sth r3,22(r2)
* note that this means the data pointer contains a null
* because we don't allocate any buffer to hold the data
* in until the first write
*/
/* link to the file's directory entry structure */
vop->file = vfp;
804128c: e0bffd17 ldw r2,-12(fp)
8041290: e0fffe17 ldw r3,-8(fp)
8041294: 10c00115 stw r3,4(r2)
/* the cmploc and tag fields of the vop retain their NULLs from
* npalloc(). cmploc contains NULL because there is no data
* buffer to point to yet. tag contains NULL because no
* decompression operation has started yet
*/
return vop;
8041298: e0bffd17 ldw r2,-12(fp)
804129c: 00000306 br 80412ac <vfopen_locked+0x324>
/* pass the open to the local file system */
return (VFILE *) fopen(name,mode);
#else
set_vfopen_error(ENP_NOFILE);
80412a0: 013ff9c4 movi r4,-25
80412a4: 8040db40 call 8040db4 <set_vfopen_error>
#ifdef VFS_VERBOSE
dprintf("fell thru to end of vfopen_locked()\n");
#endif /* VFS_VERBOSE */
return NULL;
80412a8: 0005883a mov r2,zero
#endif /* HT_LOCALFS */
}
80412ac: e037883a mov sp,fp
80412b0: dfc00117 ldw ra,4(sp)
80412b4: df000017 ldw fp,0(sp)
80412b8: dec00204 addi sp,sp,8
80412bc: f800283a ret
080412c0 <vfopen>:
* RETURNS:
*/
VFILE *
vfopen(char * name, char * mode)
{
80412c0: defffb04 addi sp,sp,-20
80412c4: dfc00415 stw ra,16(sp)
80412c8: df000315 stw fp,12(sp)
80412cc: df000304 addi fp,sp,12
80412d0: e13ffe15 stw r4,-8(fp)
80412d4: e17ffd15 stw r5,-12(fp)
if (vfs_log_file_name)
dprintf("vfopen() passed >%s<,%s\n",name,mode);
#endif /* VFS_UNIT_TEST */
/* lock the VFS */
vfs_lock();
80412d8: 01000144 movi r4,5
80412dc: 80292b40 call 80292b4 <wait_app_sem>
vfd = vfopen_locked(name,mode);
80412e0: e17ffd17 ldw r5,-12(fp)
80412e4: e13ffe17 ldw r4,-8(fp)
80412e8: 8040f880 call 8040f88 <vfopen_locked>
80412ec: e0bfff15 stw r2,-4(fp)
vfs_unlock();
80412f0: 01000144 movi r4,5
80412f4: 80293680 call 8029368 <post_app_sem>
return vfd;
80412f8: e0bfff17 ldw r2,-4(fp)
}
80412fc: e037883a mov sp,fp
8041300: dfc00117 ldw ra,4(sp)
8041304: df000017 ldw fp,0(sp)
8041308: dec00204 addi sp,sp,8
804130c: f800283a ret
08041310 <vfclose_locked>:
* RETURNS:
*/
void
vfclose_locked(VFILE * vfd)
{
8041310: defff804 addi sp,sp,-32
8041314: dfc00715 stw ra,28(sp)
8041318: df000615 stw fp,24(sp)
804131c: df000604 addi fp,sp,24
8041320: e13ffa15 stw r4,-24(fp)
VFILE * vtmp;
VFILE * vlast;
vlast = NULL;
8041324: e03ffe15 stw zero,-8(fp)
/* see if vfd is in our list of open virtual files. We
can't use isvfile() since we need a pointer to last. */
vtmp = vfiles;
8041328: d0a0a217 ldw r2,-32120(gp)
804132c: e0bfff15 stw r2,-4(fp)
while (vtmp)
8041330: 00000806 br 8041354 <vfclose_locked+0x44>
{
/* if this is the one we are looking for, exist search loop */
if (vfd == vtmp)
8041334: e0fffa17 ldw r3,-24(fp)
8041338: e0bfff17 ldw r2,-4(fp)
804133c: 18800826 beq r3,r2,8041360 <vfclose_locked+0x50>
break;
/* bump the next and previous pointers along to try the next one */
vlast = vtmp;
8041340: e0bfff17 ldw r2,-4(fp)
8041344: e0bffe15 stw r2,-8(fp)
vtmp = vtmp->next;
8041348: e0bfff17 ldw r2,-4(fp)
804134c: 10800017 ldw r2,0(r2)
8041350: e0bfff15 stw r2,-4(fp)
while (vtmp)
8041354: e0bfff17 ldw r2,-4(fp)
8041358: 103ff61e bne r2,zero,8041334 <vfclose_locked+0x24>
804135c: 00000106 br 8041364 <vfclose_locked+0x54>
break;
8041360: 0001883a nop
}
/* if the passed in handle was not in the list we maintain */
if (vfd != vtmp)
8041364: e0fffa17 ldw r3,-24(fp)
8041368: e0bfff17 ldw r2,-4(fp)
804136c: 1880511e bne r3,r2,80414b4 <vfclose_locked+0x1a4>
/* this not really a forever loop. it exists so we can break easily
and deal with all the ifdefs */
while (1)
{
struct vfs_file * vfp = vfd->file;
8041370: e0bffa17 ldw r2,-24(fp)
8041374: 10800117 ldw r2,4(r2)
8041378: e0bffd15 stw r2,-12(fp)
/* vfd->file will be null if somebody unlinked the file after
* this handle was created to point to it. if the file itself
* is gone there is nothing left to do, so break to list
* deletion code at bottom of loop
*/
if (vfp == NULL)
804137c: e0bffd17 ldw r2,-12(fp)
8041380: 10003826 beq r2,zero,8041464 <vfclose_locked+0x154>
break;
#endif /* HT_RWVFS */
#ifdef HT_EXTDEV
/* if the file was created by an external file system */
if (vfp->method)
8041384: e0bffd17 ldw r2,-12(fp)
8041388: 10800a17 ldw r2,40(r2)
804138c: 10000826 beq r2,zero,80413b0 <vfclose_locked+0xa0>
{
/* call that file system's fclose() */
struct vfroutines * vfs = (struct vfroutines*)(vfp->method);
8041390: e0bffd17 ldw r2,-12(fp)
8041394: 10800a17 ldw r2,40(r2)
8041398: e0bffc15 stw r2,-16(fp)
vfs->r_fclose(vfd);
804139c: e0bffc17 ldw r2,-16(fp)
80413a0: 10800217 ldw r2,8(r2)
80413a4: e13ffa17 ldw r4,-24(fp)
80413a8: 103ee83a callr r2
break; /* break to list deletion code after end of phoney loop */
80413ac: 00003006 br 8041470 <vfclose_locked+0x160>
/* if the buffer containing the data was allocated dynamically,
* and there are VFS_CLOSE_FRAG_FLOOR bytes of unused data
* between the end of the file and the end of the buffer
*/
if ((vfp->flags & VF_DYNAMICDATA) &&
80413b0: e0bffd17 ldw r2,-12(fp)
80413b4: 1080058b ldhu r2,22(r2)
80413b8: 10bfffcc andi r2,r2,65535
80413bc: 1080200c andi r2,r2,128
80413c0: 10002a26 beq r2,zero,804146c <vfclose_locked+0x15c>
((vfp->buf_size - vfp->comp_size) > VFS_CLOSE_FRAG_FLOOR) &&
80413c4: e0bffd17 ldw r2,-12(fp)
80413c8: 10c00917 ldw r3,36(r2)
80413cc: e0bffd17 ldw r2,-12(fp)
80413d0: 10800817 ldw r2,32(r2)
80413d4: 1885c83a sub r2,r3,r2
if ((vfp->flags & VF_DYNAMICDATA) &&
80413d8: 10804030 cmpltui r2,r2,256
80413dc: 1000231e bne r2,zero,804146c <vfclose_locked+0x15c>
vfp->data) /* this last test is a sanity check */
80413e0: e0bffd17 ldw r2,-12(fp)
80413e4: 10800617 ldw r2,24(r2)
((vfp->buf_size - vfp->comp_size) > VFS_CLOSE_FRAG_FLOOR) &&
80413e8: 10002026 beq r2,zero,804146c <vfclose_locked+0x15c>
{
/* try to reclaim the unused data */
/* allocate a new buffer just big enough for the data */
new_buffer = vf_alloc_buffer(vfp->comp_size);
80413ec: e0bffd17 ldw r2,-12(fp)
80413f0: 10800817 ldw r2,32(r2)
80413f4: 1009883a mov r4,r2
80413f8: 8040e700 call 8040e70 <vf_alloc_buffer>
80413fc: e0bffb15 stw r2,-20(fp)
/* if the allocation worked */
if (new_buffer)
8041400: e0bffb17 ldw r2,-20(fp)
8041404: 10001926 beq r2,zero,804146c <vfclose_locked+0x15c>
{
/* copy the old buffer to the new one */
MEMCPY(new_buffer,vfp->data,(unsigned int) (vfp->comp_size));
8041408: e0bffd17 ldw r2,-12(fp)
804140c: 10c00617 ldw r3,24(r2)
8041410: e0bffd17 ldw r2,-12(fp)
8041414: 10800817 ldw r2,32(r2)
8041418: 100d883a mov r6,r2
804141c: 180b883a mov r5,r3
8041420: e13ffb17 ldw r4,-20(fp)
8041424: 80086b80 call 80086b8 <memcpy>
/* free the old buffer */
vf_free_buffer(vfp->data,vfp->buf_size);
8041428: e0bffd17 ldw r2,-12(fp)
804142c: 10c00617 ldw r3,24(r2)
8041430: e0bffd17 ldw r2,-12(fp)
8041434: 10800917 ldw r2,36(r2)
8041438: 100b883a mov r5,r2
804143c: 1809883a mov r4,r3
8041440: 8040f380 call 8040f38 <vf_free_buffer>
/* update the buffer pointer and size to reflect the
just big enough buffer */
vfp->data = new_buffer;
8041444: e0bffd17 ldw r2,-12(fp)
8041448: e0fffb17 ldw r3,-20(fp)
804144c: 10c00615 stw r3,24(r2)
vfp->buf_size = vfp->comp_size;
8041450: e0bffd17 ldw r2,-12(fp)
8041454: 10c00817 ldw r3,32(r2)
8041458: e0bffd17 ldw r2,-12(fp)
804145c: 10c00915 stw r3,36(r2)
#endif /* VFS_AUTO_SYNC */
#endif /* HT_RWVFS */
/* break to list deletion code below */
break;
8041460: 00000206 br 804146c <vfclose_locked+0x15c>
break;
8041464: 0001883a nop
8041468: 00000106 br 8041470 <vfclose_locked+0x160>
break;
804146c: 0001883a nop
}
if (vlast) /* unlink from list of open files */
8041470: e0bffe17 ldw r2,-8(fp)
8041474: 10000526 beq r2,zero,804148c <vfclose_locked+0x17c>
vlast->next = vtmp->next;
8041478: e0bfff17 ldw r2,-4(fp)
804147c: 10c00017 ldw r3,0(r2)
8041480: e0bffe17 ldw r2,-8(fp)
8041484: 10c00015 stw r3,0(r2)
8041488: 00000306 br 8041498 <vfclose_locked+0x188>
else
vfiles = vtmp->next;
804148c: e0bfff17 ldw r2,-4(fp)
8041490: 10800017 ldw r2,0(r2)
8041494: d0a0a215 stw r2,-32120(gp)
/* free structure addressed by open handle */
VFS_VFS_OPEN_FREE(vtmp);
8041498: e13fff17 ldw r4,-4(fp)
804149c: 80298600 call 8029860 <npfree>
/* decrement the number of open files */
vfs_open_files--;
80414a0: d0a0a617 ldw r2,-32104(gp)
80414a4: 10bfffc4 addi r2,r2,-1
80414a8: d0a0a615 stw r2,-32104(gp)
return;
80414ac: 0001883a nop
80414b0: 00000106 br 80414b8 <vfclose_locked+0x1a8>
return;
80414b4: 0001883a nop
}
80414b8: e037883a mov sp,fp
80414bc: dfc00117 ldw ra,4(sp)
80414c0: df000017 ldw fp,0(sp)
80414c4: dec00204 addi sp,sp,8
80414c8: f800283a ret
080414cc <vfclose>:
*
* RETURNS:
*/
void vfclose(VFILE * vfd)
{
80414cc: defffd04 addi sp,sp,-12
80414d0: dfc00215 stw ra,8(sp)
80414d4: df000115 stw fp,4(sp)
80414d8: df000104 addi fp,sp,4
80414dc: e13fff15 stw r4,-4(fp)
vfs_lock();
80414e0: 01000144 movi r4,5
80414e4: 80292b40 call 80292b4 <wait_app_sem>
vfclose_locked(vfd);
80414e8: e13fff17 ldw r4,-4(fp)
80414ec: 80413100 call 8041310 <vfclose_locked>
vfs_unlock();
80414f0: 01000144 movi r4,5
80414f4: 80293680 call 8029368 <post_app_sem>
}
80414f8: 0001883a nop
80414fc: e037883a mov sp,fp
8041500: dfc00117 ldw ra,4(sp)
8041504: df000017 ldw fp,0(sp)
8041508: dec00204 addi sp,sp,8
804150c: f800283a ret
08041510 <vfflush>:
*
* RETURNS:
*/
int vfflush(VFILE * vfd)
{
8041510: defffd04 addi sp,sp,-12
8041514: dfc00215 stw ra,8(sp)
8041518: df000115 stw fp,4(sp)
804151c: df000104 addi fp,sp,4
8041520: e13fff15 stw r4,-4(fp)
vfs_lock();
8041524: 01000144 movi r4,5
8041528: 80292b40 call 80292b4 <wait_app_sem>
printf("vfflush(): This function needs to be implemented\n");
804152c: 01020174 movhi r4,2053
8041530: 212e2804 addi r4,r4,-18272
8041534: 8002d9c0 call 8002d9c <puts>
vfs_unlock();
8041538: 01000144 movi r4,5
804153c: 80293680 call 8029368 <post_app_sem>
return(0);
8041540: 0005883a mov r2,zero
}
8041544: e037883a mov sp,fp
8041548: dfc00117 ldw ra,4(sp)
804154c: df000017 ldw fp,0(sp)
8041550: dec00204 addi sp,sp,8
8041554: f800283a ret
08041558 <vfgets>:
char * vfgets(char * s, int lim, VFILE * fp)
{
8041558: defff904 addi sp,sp,-28
804155c: dfc00615 stw ra,24(sp)
8041560: df000515 stw fp,20(sp)
8041564: df000504 addi fp,sp,20
8041568: e13ffd15 stw r4,-12(fp)
804156c: e17ffc15 stw r5,-16(fp)
8041570: e1bffb15 stw r6,-20(fp)
int c = EOF;
8041574: 00bfffc4 movi r2,-1
8041578: e0bfff15 stw r2,-4(fp)
char* ret = s;
804157c: e0bffd17 ldw r2,-12(fp)
8041580: e0bffe15 stw r2,-8(fp)
while ( --lim > 0 && (c = vgetc(fp)) != EOF)
8041584: 00000b06 br 80415b4 <vfgets+0x5c>
if (( *ret ++ = c) == '\n')
8041588: e0bffe17 ldw r2,-8(fp)
804158c: 10c00044 addi r3,r2,1
8041590: e0fffe15 stw r3,-8(fp)
8041594: e0ffff17 ldw r3,-4(fp)
8041598: 10c00005 stb r3,0(r2)
804159c: 10800003 ldbu r2,0(r2)
80415a0: 10803fcc andi r2,r2,255
80415a4: 1080201c xori r2,r2,128
80415a8: 10bfe004 addi r2,r2,-128
80415ac: 10800298 cmpnei r2,r2,10
80415b0: 10000c26 beq r2,zero,80415e4 <vfgets+0x8c>
while ( --lim > 0 && (c = vgetc(fp)) != EOF)
80415b4: e0bffc17 ldw r2,-16(fp)
80415b8: 10bfffc4 addi r2,r2,-1
80415bc: e0bffc15 stw r2,-16(fp)
80415c0: e0bffc17 ldw r2,-16(fp)
80415c4: 0080080e bge zero,r2,80415e8 <vfgets+0x90>
80415c8: e13ffb17 ldw r4,-20(fp)
80415cc: 80421c00 call 80421c0 <vgetc>
80415d0: e0bfff15 stw r2,-4(fp)
80415d4: e0bfff17 ldw r2,-4(fp)
80415d8: 10bfffd8 cmpnei r2,r2,-1
80415dc: 103fea1e bne r2,zero,8041588 <vfgets+0x30>
80415e0: 00000106 br 80415e8 <vfgets+0x90>
break;
80415e4: 0001883a nop
*ret = '\0';
80415e8: e0bffe17 ldw r2,-8(fp)
80415ec: 10000005 stb zero,0(r2)
return ( c == EOF && ret == s) ? NULL : s;
80415f0: e0bfff17 ldw r2,-4(fp)
80415f4: 10bfffd8 cmpnei r2,r2,-1
80415f8: 1000031e bne r2,zero,8041608 <vfgets+0xb0>
80415fc: e0fffe17 ldw r3,-8(fp)
8041600: e0bffd17 ldw r2,-12(fp)
8041604: 18800226 beq r3,r2,8041610 <vfgets+0xb8>
8041608: e0bffd17 ldw r2,-12(fp)
804160c: 00000106 br 8041614 <vfgets+0xbc>
8041610: 0005883a mov r2,zero
}
8041614: e037883a mov sp,fp
8041618: dfc00117 ldw ra,4(sp)
804161c: df000017 ldw fp,0(sp)
8041620: dec00204 addi sp,sp,8
8041624: f800283a ret
08041628 <vfeof>:
*
* RETURNS: 1 if the file pointer is at EOF, otherwise 0
*/
int vfeof(VFILE * vfd)
{
8041628: defffc04 addi sp,sp,-16
804162c: dfc00315 stw ra,12(sp)
8041630: df000215 stw fp,8(sp)
8041634: df000204 addi fp,sp,8
8041638: e13ffe15 stw r4,-8(fp)
int c = 0;
804163c: e03fff15 stw zero,-4(fp)
#ifdef HT_LOCALFS
return(feof((FILE*)vfd));
#endif
if ((c = vgetc(vfd)) == EOF )
8041640: e13ffe17 ldw r4,-8(fp)
8041644: 80421c00 call 80421c0 <vgetc>
8041648: e0bfff15 stw r2,-4(fp)
804164c: e0bfff17 ldw r2,-4(fp)
8041650: 10bfffd8 cmpnei r2,r2,-1
8041654: 1000021e bne r2,zero,8041660 <vfeof+0x38>
{
return 1;
8041658: 00800044 movi r2,1
804165c: 00000106 br 8041664 <vfeof+0x3c>
}
return 0;
8041660: 0005883a mov r2,zero
}
8041664: e037883a mov sp,fp
8041668: dfc00117 ldw ra,4(sp)
804166c: df000017 ldw fp,0(sp)
8041670: dec00204 addi sp,sp,8
8041674: f800283a ret
08041678 <vunlink_flag_open_files>:
*
* RETURNS:
*/
void vunlink_flag_open_files(struct vfs_file * vfp)
{
8041678: defffd04 addi sp,sp,-12
804167c: df000215 stw fp,8(sp)
8041680: df000204 addi fp,sp,8
8041684: e13ffe15 stw r4,-8(fp)
VFILE * vtmp;
/* for all open files */
for (vtmp = vfiles; vtmp; vtmp = vtmp->next)
8041688: d0a0a217 ldw r2,-32120(gp)
804168c: e0bfff15 stw r2,-4(fp)
8041690: 00000906 br 80416b8 <vunlink_flag_open_files+0x40>
{
/* if the open file handle is referencing the file we are
deleting, set that reference to NULL */
if (vtmp->file == vfp)
8041694: e0bfff17 ldw r2,-4(fp)
8041698: 10800117 ldw r2,4(r2)
804169c: e0fffe17 ldw r3,-8(fp)
80416a0: 1880021e bne r3,r2,80416ac <vunlink_flag_open_files+0x34>
vtmp->file = NULL;
80416a4: e0bfff17 ldw r2,-4(fp)
80416a8: 10000115 stw zero,4(r2)
for (vtmp = vfiles; vtmp; vtmp = vtmp->next)
80416ac: e0bfff17 ldw r2,-4(fp)
80416b0: 10800017 ldw r2,0(r2)
80416b4: e0bfff15 stw r2,-4(fp)
80416b8: e0bfff17 ldw r2,-4(fp)
80416bc: 103ff51e bne r2,zero,8041694 <vunlink_flag_open_files+0x1c>
}
}
80416c0: 0001883a nop
80416c4: e037883a mov sp,fp
80416c8: df000017 ldw fp,0(sp)
80416cc: dec00104 addi sp,sp,4
80416d0: f800283a ret
080416d4 <vunlink>:
* Change prototype from char * name to const char to
* follow C library standard.
*/
int
vunlink(const char * const_name)
{
80416d4: defff604 addi sp,sp,-40
80416d8: dfc00915 stw ra,36(sp)
80416dc: df000815 stw fp,32(sp)
80416e0: df000804 addi fp,sp,32
80416e4: e13ff815 stw r4,-32(fp)
struct vfs_file * vfp;
int rc = 0;
80416e8: e03fff15 stw zero,-4(fp)
/*
* Altera Niche Stack Nios port modification:
* Change prototype from char * name to const char to
* follow C library standard.
*/
char * name = malloc(strlen(const_name)+1);
80416ec: e13ff817 ldw r4,-32(fp)
80416f0: 8002dac0 call 8002dac <strlen>
80416f4: 10800044 addi r2,r2,1
80416f8: 1009883a mov r4,r2
80416fc: 8042c980 call 8042c98 <malloc>
8041700: e0bffc15 stw r2,-16(fp)
strcpy(name, const_name);
8041704: e17ff817 ldw r5,-32(fp)
8041708: e13ffc17 ldw r4,-16(fp)
804170c: 8042f600 call 8042f60 <strcpy>
if (vfs_log_file_name)
dprintf("vunlink() passed >%s<\n",name);
#endif /* VFS_UNIT_TEST */
/* lock the VFS */
vfs_lock();
8041710: 01000144 movi r4,5
8041714: 80292b40 call 80292b4 <wait_app_sem>
/* see if the converted name is one of the one's in our list */
/* if it isn't */
if ((vfp = vfslookup_locked(name)) == NULL)
8041718: e13ffc17 ldw r4,-16(fp)
804171c: 80422080 call 8042208 <vfslookup_locked>
8041720: e0bffb15 stw r2,-20(fp)
8041724: e0bffb17 ldw r2,-20(fp)
8041728: 1000061e bne r2,zero,8041744 <vunlink+0x70>
{
vfs_unlock();
804172c: 01000144 movi r4,5
8041730: 80293680 call 8029368 <post_app_sem>
#ifdef HT_LOCALFS
/* default to call on local system */
return remove(name);
#else
/* no local file system, so return error condition */
free(name);
8041734: e13ffc17 ldw r4,-16(fp)
8041738: 8042ca80 call 8042ca8 <free>
return -1;
804173c: 00bfffc4 movi r2,-1
8041740: 00005f06 br 80418c0 <vunlink+0x1ec>
#ifdef HT_RWVFS
/* save the next link pointer since in one path through the code,
* the vfs_file structure gets freed before its unlinked from the
* list
*/
vfnext = vfp->next;
8041744: e0bffb17 ldw r2,-20(fp)
8041748: 10800017 ldw r2,0(r2)
804174c: e0bffa15 stw r2,-24(fp)
/* search list of files to determine predecessor in list */
vflast = NULL;
8041750: e03ffd15 stw zero,-12(fp)
for (vtmp = vfsfiles; vtmp != NULL; vtmp = vtmp->next)
8041754: d0a0a317 ldw r2,-32116(gp)
8041758: e0bffe15 stw r2,-8(fp)
804175c: 00000806 br 8041780 <vunlink+0xac>
{
if (vtmp == vfp)
8041760: e0fffe17 ldw r3,-8(fp)
8041764: e0bffb17 ldw r2,-20(fp)
8041768: 18800826 beq r3,r2,804178c <vunlink+0xb8>
break;
vflast = vtmp;
804176c: e0bffe17 ldw r2,-8(fp)
8041770: e0bffd15 stw r2,-12(fp)
for (vtmp = vfsfiles; vtmp != NULL; vtmp = vtmp->next)
8041774: e0bffe17 ldw r2,-8(fp)
8041778: 10800017 ldw r2,0(r2)
804177c: e0bffe15 stw r2,-8(fp)
8041780: e0bffe17 ldw r2,-8(fp)
8041784: 103ff61e bne r2,zero,8041760 <vunlink+0x8c>
8041788: 00000106 br 8041790 <vunlink+0xbc>
break;
804178c: 0001883a nop
}
/* this shouldn't happen since vfslookup_locked() already searched
the list, but just in case */
if (vtmp == NULL)
8041790: e0bffe17 ldw r2,-8(fp)
8041794: 1000071e bne r2,zero,80417b4 <vunlink+0xe0>
{
dtrap();
8041798: 8028cd40 call 8028cd4 <dtrap>
vfs_unlock();
804179c: 01000144 movi r4,5
80417a0: 80293680 call 8029368 <post_app_sem>
free(name);
80417a4: e13ffc17 ldw r4,-16(fp)
80417a8: 8042ca80 call 8042ca8 <free>
return -1;
80417ac: 00bfffc4 movi r2,-1
80417b0: 00004306 br 80418c0 <vunlink+0x1ec>
while (1)
{
#ifdef HT_EXTDEV
/* if the file was created by an external file system */
if (vfp->method)
80417b4: e0bffb17 ldw r2,-20(fp)
80417b8: 10800a17 ldw r2,40(r2)
80417bc: 10000926 beq r2,zero,80417e4 <vunlink+0x110>
{
/* call that file system's unlink() */
struct vfroutines * vfs = (struct vfroutines*) (vfp->method);
80417c0: e0bffb17 ldw r2,-20(fp)
80417c4: 10800a17 ldw r2,40(r2)
80417c8: e0bff915 stw r2,-28(fp)
rc = vfs->r_unlink(name);
80417cc: e0bff917 ldw r2,-28(fp)
80417d0: 10800817 ldw r2,32(r2)
80417d4: e13ffc17 ldw r4,-16(fp)
80417d8: 103ee83a callr r2
80417dc: e0bfff15 stw r2,-4(fp)
break; /* break to list deletion code after end of phoney loop */
80417e0: 00002606 br 804187c <vunlink+0x1a8>
}
#endif /* HT_EXTDEV */
/* if the file is not write enabled, return error condition */
if (!(vfp->flags & VF_WRITE))
80417e4: e0bffb17 ldw r2,-20(fp)
80417e8: 1080058b ldhu r2,22(r2)
80417ec: 10bfffcc andi r2,r2,65535
80417f0: 1080080c andi r2,r2,32
80417f4: 1000061e bne r2,zero,8041810 <vunlink+0x13c>
{
vfs_unlock();
80417f8: 01000144 movi r4,5
80417fc: 80293680 call 8029368 <post_app_sem>
free(name);
8041800: e13ffc17 ldw r4,-16(fp)
8041804: 8042ca80 call 8042ca8 <free>
return -1;
8041808: 00bfffc4 movi r2,-1
804180c: 00002c06 br 80418c0 <vunlink+0x1ec>
}
/* if the data buffer containing the file's data was dynamically
allocated and is not null */
if ((vfp->flags & VF_DYNAMICDATA) && (vfp->data))
8041810: e0bffb17 ldw r2,-20(fp)
8041814: 1080058b ldhu r2,22(r2)
8041818: 10bfffcc andi r2,r2,65535
804181c: 1080200c andi r2,r2,128
8041820: 10000a26 beq r2,zero,804184c <vunlink+0x178>
8041824: e0bffb17 ldw r2,-20(fp)
8041828: 10800617 ldw r2,24(r2)
804182c: 10000726 beq r2,zero,804184c <vunlink+0x178>
{
/* free the buffer */
vf_free_buffer(vfp->data,vfp->buf_size);
8041830: e0bffb17 ldw r2,-20(fp)
8041834: 10c00617 ldw r3,24(r2)
8041838: e0bffb17 ldw r2,-20(fp)
804183c: 10800917 ldw r2,36(r2)
8041840: 100b883a mov r5,r2
8041844: 1809883a mov r4,r3
8041848: 8040f380 call 8040f38 <vf_free_buffer>
}
/* if the vfs_file structure itself was allocated dynamically */
if (vfp->flags & VF_DYNAMICINFO)
804184c: e0bffb17 ldw r2,-20(fp)
8041850: 1080058b ldhu r2,22(r2)
8041854: 10bfffcc andi r2,r2,65535
8041858: 1080100c andi r2,r2,64
804185c: 10000526 beq r2,zero,8041874 <vunlink+0x1a0>
{
/* decrement count of total files */
vfs_total_dyna_files--;
8041860: d0a0a817 ldw r2,-32096(gp)
8041864: 10bfffc4 addi r2,r2,-1
8041868: d0a0a815 stw r2,-32096(gp)
/* free the vfs_file structure */
VFS_VFS_FILE_FREE(vfp);
804186c: e13ffb17 ldw r4,-20(fp)
8041870: 80298600 call 8029860 <npfree>
the vfs_file has been deleted from the list */
#ifdef VFS_AUTO_SYNC
do_sync = 1;
#endif
/* we were successful at our unlink */
rc = 0;
8041874: e03fff15 stw zero,-4(fp)
break;
8041878: 0001883a nop
}
/* delete the vfs_file structure from the list headed by vfsfiles */
if (vflast)
804187c: e0bffd17 ldw r2,-12(fp)
8041880: 10000426 beq r2,zero,8041894 <vunlink+0x1c0>
vflast->next = vfnext;
8041884: e0bffd17 ldw r2,-12(fp)
8041888: e0fffa17 ldw r3,-24(fp)
804188c: 10c00015 stw r3,0(r2)
8041890: 00000206 br 804189c <vunlink+0x1c8>
else
vfsfiles = vfnext;
8041894: e0bffa17 ldw r2,-24(fp)
8041898: d0a0a315 stw r2,-32116(gp)
/* fix up references to deleted file in list of currently open VFILEs */
vunlink_flag_open_files(vfp);
804189c: e13ffb17 ldw r4,-20(fp)
80418a0: 80416780 call 8041678 <vunlink_flag_open_files>
/* flag that the directory is stale so vfs_sync() knows it has to do
something */
vfs_dir_stale = TRUE;
80418a4: 00800044 movi r2,1
80418a8: d0a0a515 stw r2,-32108(gp)
/* unlinks not allowed on read-only VFS */
rc = -1;
#endif /* HT_RWVFS */
vfs_unlock();
80418ac: 01000144 movi r4,5
80418b0: 80293680 call 8029368 <post_app_sem>
free(name);
80418b4: e13ffc17 ldw r4,-16(fp)
80418b8: 8042ca80 call 8042ca8 <free>
return rc;
80418bc: e0bfff17 ldw r2,-4(fp)
}
80418c0: e037883a mov sp,fp
80418c4: dfc00117 ldw ra,4(sp)
80418c8: df000017 ldw fp,0(sp)
80418cc: dec00204 addi sp,sp,8
80418d0: f800283a ret
080418d4 <vfread>:
* RETURNS:
*/
int
vfread(char * buf, unsigned size, unsigned items, VFILE * vfd)
{
80418d4: defff604 addi sp,sp,-40
80418d8: dfc00915 stw ra,36(sp)
80418dc: df000815 stw fp,32(sp)
80418e0: df000804 addi fp,sp,32
80418e4: e13ffb15 stw r4,-20(fp)
80418e8: e17ffa15 stw r5,-24(fp)
80418ec: e1bff915 stw r6,-28(fp)
80418f0: e1fff815 stw r7,-32(fp)
unsigned bcount; /* number of bytes put in caller's buffer */
IN_PROFILER(PF_FS, PF_ENTRY);
/* lock the VFS */
vfs_lock();
80418f4: 01000144 movi r4,5
80418f8: 80292b40 call 80292b4 <wait_app_sem>
/* if the file is in our list of open files */
if (isvfile_locked(vfd))
80418fc: e13ff817 ldw r4,-32(fp)
8041900: 80425400 call 8042540 <isvfile_locked>
8041904: 10004d26 beq r2,zero,8041a3c <vfread+0x168>
{
#ifdef HT_RWVFS
/* the caller is trying to read a handle to a file that's been
deleted, so he gets 0 data back */
if (vfd->file == NULL)
8041908: e0bff817 ldw r2,-32(fp)
804190c: 10800117 ldw r2,4(r2)
8041910: 1000041e bne r2,zero,8041924 <vfread+0x50>
{
vfs_unlock();
8041914: 01000144 movi r4,5
8041918: 80293680 call 8029368 <post_app_sem>
IN_PROFILER(PF_FS, PF_EXIT);
return 0;
804191c: 0005883a mov r2,zero
8041920: 00004906 br 8041a48 <vfread+0x174>
}
#endif /* HT_RWVFS */
#ifdef HT_EXTDEV
/* if the file was created by an external file system */
if (vfd->file->method)
8041924: e0bff817 ldw r2,-32(fp)
8041928: 10800117 ldw r2,4(r2)
804192c: 10800a17 ldw r2,40(r2)
8041930: 10001026 beq r2,zero,8041974 <vfread+0xa0>
{
struct vfroutines * vfs = (struct vfroutines*) (vfd->file->method);
8041934: e0bff817 ldw r2,-32(fp)
8041938: 10800117 ldw r2,4(r2)
804193c: 10800a17 ldw r2,40(r2)
8041940: e0bffe15 stw r2,-8(fp)
int rc;
/* call that system's fread() */
rc = vfs->r_fread(buf,size,items,vfd);
8041944: e0bffe17 ldw r2,-8(fp)
8041948: 10800317 ldw r2,12(r2)
804194c: e1fff817 ldw r7,-32(fp)
8041950: e1bff917 ldw r6,-28(fp)
8041954: e17ffa17 ldw r5,-24(fp)
8041958: e13ffb17 ldw r4,-20(fp)
804195c: 103ee83a callr r2
8041960: e0bffd15 stw r2,-12(fp)
vfs_unlock();
8041964: 01000144 movi r4,5
8041968: 80293680 call 8029368 <post_app_sem>
IN_PROFILER(PF_FS, PF_EXIT);
return rc;
804196c: e0bffd17 ldw r2,-12(fp)
8041970: 00003506 br 8041a48 <vfread+0x174>
#ifdef HT_RWVFS
/* the data pointer can be NULL if somebody tries to read from
* a freshly created file, in which case there is no data in
* the file, so return 0
*/
if (!(vfd->file->data))
8041974: e0bff817 ldw r2,-32(fp)
8041978: 10800117 ldw r2,4(r2)
804197c: 10800617 ldw r2,24(r2)
8041980: 1000041e bne r2,zero,8041994 <vfread+0xc0>
{
vfs_unlock();
8041984: 01000144 movi r4,5
8041988: 80293680 call 8029368 <post_app_sem>
IN_PROFILER(PF_FS, PF_EXIT);
return 0;
804198c: 0005883a mov r2,zero
8041990: 00002d06 br 8041a48 <vfread+0x174>
}
#endif /* HT_RWVFS */
bcount = items * size; /* number of bytes to transfer */
8041994: e0fff917 ldw r3,-28(fp)
8041998: e0bffa17 ldw r2,-24(fp)
804199c: 1885383a mul r2,r3,r2
80419a0: e0bfff15 stw r2,-4(fp)
return(items); /* filled user buffer, return # items copied */
}
else /* else fall to faster non-compression code */
#endif /* HTML_COMPRESSION */
{ /* get here to do simple uncompressed data read */
unsigned location = vfd->cmploc - vfd->file->data;
80419a4: e0bff817 ldw r2,-32(fp)
80419a8: 10c00217 ldw r3,8(r2)
80419ac: e0bff817 ldw r2,-32(fp)
80419b0: 10800117 ldw r2,4(r2)
80419b4: 10800617 ldw r2,24(r2)
80419b8: 1885c83a sub r2,r3,r2
80419bc: e0bffc15 stw r2,-16(fp)
if (((unsigned long)location + bcount) > vfd->file->comp_size)
80419c0: e0fffc17 ldw r3,-16(fp)
80419c4: e0bfff17 ldw r2,-4(fp)
80419c8: 1885883a add r2,r3,r2
80419cc: e0fff817 ldw r3,-32(fp)
80419d0: 18c00117 ldw r3,4(r3)
80419d4: 18c00817 ldw r3,32(r3)
80419d8: 1880062e bgeu r3,r2,80419f4 <vfread+0x120>
bcount = (unsigned)(vfd->file->comp_size - location);
80419dc: e0bff817 ldw r2,-32(fp)
80419e0: 10800117 ldw r2,4(r2)
80419e4: 10c00817 ldw r3,32(r2)
80419e8: e0bffc17 ldw r2,-16(fp)
80419ec: 1885c83a sub r2,r3,r2
80419f0: e0bfff15 stw r2,-4(fp)
MEMCPY(buf, vfd->cmploc, bcount);
80419f4: e0bff817 ldw r2,-32(fp)
80419f8: 10800217 ldw r2,8(r2)
80419fc: e1bfff17 ldw r6,-4(fp)
8041a00: 100b883a mov r5,r2
8041a04: e13ffb17 ldw r4,-20(fp)
8041a08: 80086b80 call 80086b8 <memcpy>
vfd->cmploc += bcount;
8041a0c: e0bff817 ldw r2,-32(fp)
8041a10: 10c00217 ldw r3,8(r2)
8041a14: e0bfff17 ldw r2,-4(fp)
8041a18: 1887883a add r3,r3,r2
8041a1c: e0bff817 ldw r2,-32(fp)
8041a20: 10c00215 stw r3,8(r2)
}
vfs_unlock();
8041a24: 01000144 movi r4,5
8041a28: 80293680 call 8029368 <post_app_sem>
IN_PROFILER(PF_FS, PF_EXIT);
return (bcount/size);
8041a2c: e17ffa17 ldw r5,-24(fp)
8041a30: e13fff17 ldw r4,-4(fp)
8041a34: 800cff80 call 800cff8 <__udivsi3>
8041a38: 00000306 br 8041a48 <vfread+0x174>
}
vfs_unlock();
8041a3c: 01000144 movi r4,5
8041a40: 80293680 call 8029368 <post_app_sem>
#ifdef HT_LOCALFS
/* default to call on local system */
return(fread(buf, size, items, (FILE*)vfd));
#else
return 0;
8041a44: 0005883a mov r2,zero
#endif /* HT_LOCALFS */
}
8041a48: e037883a mov sp,fp
8041a4c: dfc00117 ldw ra,4(sp)
8041a50: df000017 ldw fp,0(sp)
8041a54: dec00204 addi sp,sp,8
8041a58: f800283a ret
08041a5c <vfwrite_locked>:
* RETURNS:
*/
int
vfwrite_locked(char * buf, unsigned size, unsigned items, VFILE * vfd)
{
8041a5c: defff204 addi sp,sp,-56
8041a60: dfc00d15 stw ra,52(sp)
8041a64: df000c15 stw fp,48(sp)
8041a68: df000c04 addi fp,sp,48
8041a6c: e13ff715 stw r4,-36(fp)
8041a70: e17ff615 stw r5,-40(fp)
8041a74: e1bff515 stw r6,-44(fp)
8041a78: e1fff415 stw r7,-48(fp)
unsigned long current_offset;
struct vfs_file * vfp;
#endif /* HT_RWVFS */
/* if the file is not in our list of files */
if (!isvfile_locked(vfd))
8041a7c: e13ff417 ldw r4,-48(fp)
8041a80: 80425400 call 8042540 <isvfile_locked>
8041a84: 1000021e bne r2,zero,8041a90 <vfwrite_locked+0x34>
{
#ifdef HT_LOCALFS
/* default to call on local system */
return(fwrite(buf, size, items, (FILE*)vfd));
#else
return EBADF;
8041a88: 00800244 movi r2,9
8041a8c: 0000d906 br 8041df4 <vfwrite_locked+0x398>
}
/* this file is in our list of files */
#ifdef HT_EXTDEV
/* if the file was created by an external file system */
if (vfd->file->method)
8041a90: e0bff417 ldw r2,-48(fp)
8041a94: 10800117 ldw r2,4(r2)
8041a98: 10800a17 ldw r2,40(r2)
8041a9c: 10000e26 beq r2,zero,8041ad8 <vfwrite_locked+0x7c>
{
struct vfroutines * vfs = (struct vfroutines*) (vfd->file->method);
8041aa0: e0bff417 ldw r2,-48(fp)
8041aa4: 10800117 ldw r2,4(r2)
8041aa8: 10800a17 ldw r2,40(r2)
8041aac: e0bfff15 stw r2,-4(fp)
int rc;
/* call that system's fwrite() */
rc = vfs->r_fwrite(buf,size,items,vfd);
8041ab0: e0bfff17 ldw r2,-4(fp)
8041ab4: 10800417 ldw r2,16(r2)
8041ab8: e1fff417 ldw r7,-48(fp)
8041abc: e1bff517 ldw r6,-44(fp)
8041ac0: e17ff617 ldw r5,-40(fp)
8041ac4: e13ff717 ldw r4,-36(fp)
8041ac8: 103ee83a callr r2
8041acc: e0bffe15 stw r2,-8(fp)
return rc;
8041ad0: e0bffe17 ldw r2,-8(fp)
8041ad4: 0000c706 br 8041df4 <vfwrite_locked+0x398>
#else /* HT_RWVFS */
/* the caller is trying to write to a file that's been deleted,
so he writes 0 data */
if (vfd->file == NULL)
8041ad8: e0bff417 ldw r2,-48(fp)
8041adc: 10800117 ldw r2,4(r2)
8041ae0: 1000021e bne r2,zero,8041aec <vfwrite_locked+0x90>
{
return 0;
8041ae4: 0005883a mov r2,zero
8041ae8: 0000c206 br 8041df4 <vfwrite_locked+0x398>
}
vfp = vfd->file;
8041aec: e0bff417 ldw r2,-48(fp)
8041af0: 10800117 ldw r2,4(r2)
8041af4: e0bffd15 stw r2,-12(fp)
/* if the file is not writable, return error condition */
if (!(vfp->flags & VF_WRITE))
8041af8: e0bffd17 ldw r2,-12(fp)
8041afc: 1080058b ldhu r2,22(r2)
8041b00: 10bfffcc andi r2,r2,65535
8041b04: 1080080c andi r2,r2,32
8041b08: 1000051e bne r2,zero,8041b20 <vfwrite_locked+0xc4>
{
vfd->error = ENP_FILEIO;
8041b0c: e0bff417 ldw r2,-48(fp)
8041b10: 00fff984 movi r3,-26
8041b14: 10c00415 stw r3,16(r2)
return 0;
8041b18: 0005883a mov r2,zero
8041b1c: 0000b506 br 8041df4 <vfwrite_locked+0x398>
}
/* compute number of bytes to write */
bcount = size * items;
8041b20: e0fff617 ldw r3,-40(fp)
8041b24: e0bff517 ldw r2,-44(fp)
8041b28: 1885383a mul r2,r3,r2
8041b2c: e0bffc15 stw r2,-16(fp)
/* get rid of this degenerate case up front */
if (bcount == 0)
8041b30: e0bffc17 ldw r2,-16(fp)
8041b34: 1000021e bne r2,zero,8041b40 <vfwrite_locked+0xe4>
{
return 0;
8041b38: 0005883a mov r2,zero
8041b3c: 0000ad06 br 8041df4 <vfwrite_locked+0x398>
}
/* if the file currently has no data buffer */
if (vfp->data == NULL)
8041b40: e0bffd17 ldw r2,-12(fp)
8041b44: 10800617 ldw r2,24(r2)
8041b48: 10003d1e bne r2,zero,8041c40 <vfwrite_locked+0x1e4>
{
/* compute the size of the buffer to be created */
/* we round up the size of the data to be written so we dont have
the overhead of a memory allocation on every write */
unsigned long buf_size = VFS_ROUND_UP((unsigned long)bcount);
8041b4c: e0bffc17 ldw r2,-16(fp)
8041b50: 10ffffc4 addi r3,r2,-1
8041b54: 00b80004 movi r2,-8192
8041b58: 1884703a and r2,r3,r2
8041b5c: 10880004 addi r2,r2,8192
8041b60: e0bffb15 stw r2,-20(fp)
/* allocate a buffer of that size */
vfp->data = vf_alloc_buffer(buf_size);
8041b64: e13ffb17 ldw r4,-20(fp)
8041b68: 8040e700 call 8040e70 <vf_alloc_buffer>
8041b6c: 1007883a mov r3,r2
8041b70: e0bffd17 ldw r2,-12(fp)
8041b74: 10c00615 stw r3,24(r2)
/* if the allocation failed */
if (!(vfp->data))
8041b78: e0bffd17 ldw r2,-12(fp)
8041b7c: 10800617 ldw r2,24(r2)
8041b80: 1000051e bne r2,zero,8041b98 <vfwrite_locked+0x13c>
{
vfd->error = ENP_NOMEM;
8041b84: e0bff417 ldw r2,-48(fp)
8041b88: 00fffb04 movi r3,-20
8041b8c: 10c00415 stw r3,16(r2)
return 0;
8041b90: 0005883a mov r2,zero
8041b94: 00009706 br 8041df4 <vfwrite_locked+0x398>
}
/* store the size of the allocated buffer */
vfp->buf_size = buf_size;
8041b98: e0bffd17 ldw r2,-12(fp)
8041b9c: e0fffb17 ldw r3,-20(fp)
8041ba0: 10c00915 stw r3,36(r2)
/* store the number of bytes written in the real and compressed
file sizes */
vfp->real_size = bcount;
8041ba4: e0bffd17 ldw r2,-12(fp)
8041ba8: e0fffc17 ldw r3,-16(fp)
8041bac: 10c00715 stw r3,28(r2)
vfp->comp_size = bcount;
8041bb0: e0bffd17 ldw r2,-12(fp)
8041bb4: e0fffc17 ldw r3,-16(fp)
8041bb8: 10c00815 stw r3,32(r2)
/* set the file pointer to the first byte following the last
byte written */
vfd->cmploc = vfp->data + bcount;
8041bbc: e0bffd17 ldw r2,-12(fp)
8041bc0: 10c00617 ldw r3,24(r2)
8041bc4: e0bffc17 ldw r2,-16(fp)
8041bc8: 1887883a add r3,r3,r2
8041bcc: e0bff417 ldw r2,-48(fp)
8041bd0: 10c00215 stw r3,8(r2)
/* turn off the compression flag */
vfp->flags &= ~VF_HTMLCOMPRESSED;
8041bd4: e0bffd17 ldw r2,-12(fp)
8041bd8: 10c0058b ldhu r3,22(r2)
8041bdc: 00bfff84 movi r2,-2
8041be0: 1884703a and r2,r3,r2
8041be4: 1007883a mov r3,r2
8041be8: e0bffd17 ldw r2,-12(fp)
8041bec: 10c0058d sth r3,22(r2)
/* the data in the file is stale */
vfp->flags |= VF_STALE;
8041bf0: e0bffd17 ldw r2,-12(fp)
8041bf4: 1080058b ldhu r2,22(r2)
8041bf8: 10808014 ori r2,r2,512
8041bfc: 1007883a mov r3,r2
8041c00: e0bffd17 ldw r2,-12(fp)
8041c04: 10c0058d sth r3,22(r2)
/* the buffer data was dynamically allocated */
vfp->flags |= VF_DYNAMICDATA;
8041c08: e0bffd17 ldw r2,-12(fp)
8041c0c: 1080058b ldhu r2,22(r2)
8041c10: 10802014 ori r2,r2,128
8041c14: 1007883a mov r3,r2
8041c18: e0bffd17 ldw r2,-12(fp)
8041c1c: 10c0058d sth r3,22(r2)
/* copy the data to be written to the file buffer */
MEMCPY(vfp->data,buf,bcount);
8041c20: e0bffd17 ldw r2,-12(fp)
8041c24: 10800617 ldw r2,24(r2)
8041c28: e1bffc17 ldw r6,-16(fp)
8041c2c: e17ff717 ldw r5,-36(fp)
8041c30: 1009883a mov r4,r2
8041c34: 80086b80 call 80086b8 <memcpy>
/* return the number of "items" written */
return items;
8041c38: e0bff517 ldw r2,-44(fp)
8041c3c: 00006d06 br 8041df4 <vfwrite_locked+0x398>
}
/* compute the current offset into the file */
current_offset = vfd->cmploc - vfp->data;
8041c40: e0bff417 ldw r2,-48(fp)
8041c44: 10c00217 ldw r3,8(r2)
8041c48: e0bffd17 ldw r2,-12(fp)
8041c4c: 10800617 ldw r2,24(r2)
8041c50: 1885c83a sub r2,r3,r2
8041c54: e0bffa15 stw r2,-24(fp)
/* if the data to be written wont fit into the file buffer */
if ((current_offset + bcount) > vfp->buf_size)
8041c58: e0fffa17 ldw r3,-24(fp)
8041c5c: e0bffc17 ldw r2,-16(fp)
8041c60: 1885883a add r2,r3,r2
8041c64: e0fffd17 ldw r3,-12(fp)
8041c68: 18c00917 ldw r3,36(r3)
8041c6c: 1880382e bgeu r3,r2,8041d50 <vfwrite_locked+0x2f4>
{
/* compute the size of a new buffer to hold the data */
unsigned long new_buf_size = VFS_ROUND_UP(current_offset + bcount);
8041c70: e0fffa17 ldw r3,-24(fp)
8041c74: e0bffc17 ldw r2,-16(fp)
8041c78: 1885883a add r2,r3,r2
8041c7c: 10ffffc4 addi r3,r2,-1
8041c80: 00b80004 movi r2,-8192
8041c84: 1884703a and r2,r3,r2
8041c88: 10880004 addi r2,r2,8192
8041c8c: e0bff915 stw r2,-28(fp)
unsigned char *new_buffer;
/* allocate a new buffer */
new_buffer = vf_alloc_buffer(new_buf_size);
8041c90: e13ff917 ldw r4,-28(fp)
8041c94: 8040e700 call 8040e70 <vf_alloc_buffer>
8041c98: e0bff815 stw r2,-32(fp)
/* check for allocation failure */
if (!new_buffer)
8041c9c: e0bff817 ldw r2,-32(fp)
8041ca0: 1000051e bne r2,zero,8041cb8 <vfwrite_locked+0x25c>
{
vfd->error = ENP_NOMEM;
8041ca4: e0bff417 ldw r2,-48(fp)
8041ca8: 00fffb04 movi r3,-20
8041cac: 10c00415 stw r3,16(r2)
return 0;
8041cb0: 0005883a mov r2,zero
8041cb4: 00004f06 br 8041df4 <vfwrite_locked+0x398>
}
/* copy the old buffer contents to the new buffer */
MEMCPY(new_buffer,vfp->data,(unsigned int) (vfp->comp_size));
8041cb8: e0bffd17 ldw r2,-12(fp)
8041cbc: 10c00617 ldw r3,24(r2)
8041cc0: e0bffd17 ldw r2,-12(fp)
8041cc4: 10800817 ldw r2,32(r2)
8041cc8: 100d883a mov r6,r2
8041ccc: 180b883a mov r5,r3
8041cd0: e13ff817 ldw r4,-32(fp)
8041cd4: 80086b80 call 80086b8 <memcpy>
/* if the old buffer had been dynamically allocated */
if (vfp->flags & VF_DYNAMICDATA)
8041cd8: e0bffd17 ldw r2,-12(fp)
8041cdc: 1080058b ldhu r2,22(r2)
8041ce0: 10bfffcc andi r2,r2,65535
8041ce4: 1080200c andi r2,r2,128
8041ce8: 10000726 beq r2,zero,8041d08 <vfwrite_locked+0x2ac>
{
/* free it */
vf_free_buffer(vfp->data,vfp->buf_size);
8041cec: e0bffd17 ldw r2,-12(fp)
8041cf0: 10c00617 ldw r3,24(r2)
8041cf4: e0bffd17 ldw r2,-12(fp)
8041cf8: 10800917 ldw r2,36(r2)
8041cfc: 100b883a mov r5,r2
8041d00: 1809883a mov r4,r3
8041d04: 8040f380 call 8040f38 <vf_free_buffer>
}
/* store the new buffer in the file structure */
vfp->data = new_buffer;
8041d08: e0bffd17 ldw r2,-12(fp)
8041d0c: e0fff817 ldw r3,-32(fp)
8041d10: 10c00615 stw r3,24(r2)
/* store the new buffer size in the file structure */
vfp->buf_size = new_buf_size;
8041d14: e0bffd17 ldw r2,-12(fp)
8041d18: e0fff917 ldw r3,-28(fp)
8041d1c: 10c00915 stw r3,36(r2)
/* the new buffer was dynamically allocated */
vfp->flags |= VF_DYNAMICDATA;
8041d20: e0bffd17 ldw r2,-12(fp)
8041d24: 1080058b ldhu r2,22(r2)
8041d28: 10802014 ori r2,r2,128
8041d2c: 1007883a mov r3,r2
8041d30: e0bffd17 ldw r2,-12(fp)
8041d34: 10c0058d sth r3,22(r2)
* buffer note that this means the VFS does not support
* simultaneous opens of the same file, since for that to work,
* all the other cmploc's that point to this file would
* have to be updated also
*/
vfd->cmploc = vfp->data + current_offset;
8041d38: e0bffd17 ldw r2,-12(fp)
8041d3c: 10c00617 ldw r3,24(r2)
8041d40: e0bffa17 ldw r2,-24(fp)
8041d44: 1887883a add r3,r3,r2
8041d48: e0bff417 ldw r2,-48(fp)
8041d4c: 10c00215 stw r3,8(r2)
}
/* copy the data to the current file pointer */
MEMCPY(vfd->cmploc,buf,bcount);
8041d50: e0bff417 ldw r2,-48(fp)
8041d54: 10800217 ldw r2,8(r2)
8041d58: e1bffc17 ldw r6,-16(fp)
8041d5c: e17ff717 ldw r5,-36(fp)
8041d60: 1009883a mov r4,r2
8041d64: 80086b80 call 80086b8 <memcpy>
/* update the current file pointer */
vfd->cmploc += bcount;
8041d68: e0bff417 ldw r2,-48(fp)
8041d6c: 10c00217 ldw r3,8(r2)
8041d70: e0bffc17 ldw r2,-16(fp)
8041d74: 1887883a add r3,r3,r2
8041d78: e0bff417 ldw r2,-48(fp)
8041d7c: 10c00215 stw r3,8(r2)
/* if the resulting current offset is greater than the file size */
if (current_offset + bcount > vfp->comp_size)
8041d80: e0fffa17 ldw r3,-24(fp)
8041d84: e0bffc17 ldw r2,-16(fp)
8041d88: 1885883a add r2,r3,r2
8041d8c: e0fffd17 ldw r3,-12(fp)
8041d90: 18c00817 ldw r3,32(r3)
8041d94: 1880052e bgeu r3,r2,8041dac <vfwrite_locked+0x350>
{
/* update the "compressed" file size */
vfp->comp_size = current_offset + bcount;
8041d98: e0fffa17 ldw r3,-24(fp)
8041d9c: e0bffc17 ldw r2,-16(fp)
8041da0: 1887883a add r3,r3,r2
8041da4: e0bffd17 ldw r2,-12(fp)
8041da8: 10c00815 stw r3,32(r2)
}
/* since we turn off the compression bit below, the "real" size and
the compressed size must be the same */
vfp->real_size = vfp->comp_size;
8041dac: e0bffd17 ldw r2,-12(fp)
8041db0: 10c00817 ldw r3,32(r2)
8041db4: e0bffd17 ldw r2,-12(fp)
8041db8: 10c00715 stw r3,28(r2)
/* turn off the compression flag */
vfp->flags &= ~VF_HTMLCOMPRESSED;
8041dbc: e0bffd17 ldw r2,-12(fp)
8041dc0: 10c0058b ldhu r3,22(r2)
8041dc4: 00bfff84 movi r2,-2
8041dc8: 1884703a and r2,r3,r2
8041dcc: 1007883a mov r3,r2
8041dd0: e0bffd17 ldw r2,-12(fp)
8041dd4: 10c0058d sth r3,22(r2)
/* the data in the file is stale */
vfp->flags |= VF_STALE;
8041dd8: e0bffd17 ldw r2,-12(fp)
8041ddc: 1080058b ldhu r2,22(r2)
8041de0: 10808014 ori r2,r2,512
8041de4: 1007883a mov r3,r2
8041de8: e0bffd17 ldw r2,-12(fp)
8041dec: 10c0058d sth r3,22(r2)
/* return the number of "items" written */
return items;
8041df0: e0bff517 ldw r2,-44(fp)
#endif /* HT_RWVFS */
}
8041df4: e037883a mov sp,fp
8041df8: dfc00117 ldw ra,4(sp)
8041dfc: df000017 ldw fp,0(sp)
8041e00: dec00204 addi sp,sp,8
8041e04: f800283a ret
08041e08 <vfwrite>:
* RETURNS:
*/
int
vfwrite(char * buf, unsigned size, unsigned items, VFILE * vfd)
{
8041e08: defff904 addi sp,sp,-28
8041e0c: dfc00615 stw ra,24(sp)
8041e10: df000515 stw fp,20(sp)
8041e14: df000504 addi fp,sp,20
8041e18: e13ffe15 stw r4,-8(fp)
8041e1c: e17ffd15 stw r5,-12(fp)
8041e20: e1bffc15 stw r6,-16(fp)
8041e24: e1fffb15 stw r7,-20(fp)
int rc;
IN_PROFILER(PF_FS, PF_ENTRY);
/* lock the VFS */
vfs_lock();
8041e28: 01000144 movi r4,5
8041e2c: 80292b40 call 80292b4 <wait_app_sem>
/* do the write */
rc = vfwrite_locked(buf, size, items, vfd);
8041e30: e1fffb17 ldw r7,-20(fp)
8041e34: e1bffc17 ldw r6,-16(fp)
8041e38: e17ffd17 ldw r5,-12(fp)
8041e3c: e13ffe17 ldw r4,-8(fp)
8041e40: 8041a5c0 call 8041a5c <vfwrite_locked>
8041e44: e0bfff15 stw r2,-4(fp)
/* unlock the VFS */
vfs_unlock();
8041e48: 01000144 movi r4,5
8041e4c: 80293680 call 8029368 <post_app_sem>
IN_PROFILER(PF_FS, PF_EXIT);
return rc;
8041e50: e0bfff17 ldw r2,-4(fp)
}
8041e54: e037883a mov sp,fp
8041e58: dfc00117 ldw ra,4(sp)
8041e5c: df000017 ldw fp,0(sp)
8041e60: dec00204 addi sp,sp,8
8041e64: f800283a ret
08041e68 <vfseek>:
* RETURNS:
*/
int
vfseek(VFILE * vfd, long offset, int mode)
{
8041e68: defff904 addi sp,sp,-28
8041e6c: dfc00615 stw ra,24(sp)
8041e70: df000515 stw fp,20(sp)
8041e74: df000504 addi fp,sp,20
8041e78: e13ffd15 stw r4,-12(fp)
8041e7c: e17ffc15 stw r5,-16(fp)
8041e80: e1bffb15 stw r6,-20(fp)
/* lock the VFS */
vfs_lock();
8041e84: 01000144 movi r4,5
8041e88: 80292b40 call 80292b4 <wait_app_sem>
if (isvfile_locked(vfd))
8041e8c: e13ffd17 ldw r4,-12(fp)
8041e90: 80425400 call 8042540 <isvfile_locked>
8041e94: 10004126 beq r2,zero,8041f9c <vfseek+0x134>
{
#ifdef HT_RWVFS
/* the caller is trying to seek a file that's been deleted,
so return an error indication */
if (vfd->file == NULL)
8041e98: e0bffd17 ldw r2,-12(fp)
8041e9c: 10800117 ldw r2,4(r2)
8041ea0: 1000041e bne r2,zero,8041eb4 <vfseek+0x4c>
{
vfs_unlock();
8041ea4: 01000144 movi r4,5
8041ea8: 80293680 call 8029368 <post_app_sem>
return -1;
8041eac: 00bfffc4 movi r2,-1
8041eb0: 00003d06 br 8041fa8 <vfseek+0x140>
}
#endif /* HT_RWVFS */
#ifdef HT_EXTDEV
if (vfd->file->method)
8041eb4: e0bffd17 ldw r2,-12(fp)
8041eb8: 10800117 ldw r2,4(r2)
8041ebc: 10800a17 ldw r2,40(r2)
8041ec0: 10000f26 beq r2,zero,8041f00 <vfseek+0x98>
{
struct vfroutines *vfp = (struct vfroutines*)(vfd->file->method);
8041ec4: e0bffd17 ldw r2,-12(fp)
8041ec8: 10800117 ldw r2,4(r2)
8041ecc: 10800a17 ldw r2,40(r2)
8041ed0: e0bfff15 stw r2,-4(fp)
int rc;
rc = vfp->r_fseek(vfd, offset, mode);
8041ed4: e0bfff17 ldw r2,-4(fp)
8041ed8: 10800517 ldw r2,20(r2)
8041edc: e1bffb17 ldw r6,-20(fp)
8041ee0: e17ffc17 ldw r5,-16(fp)
8041ee4: e13ffd17 ldw r4,-12(fp)
8041ee8: 103ee83a callr r2
8041eec: e0bffe15 stw r2,-8(fp)
vfs_unlock();
8041ef0: 01000144 movi r4,5
8041ef4: 80293680 call 8029368 <post_app_sem>
return rc;
8041ef8: e0bffe17 ldw r2,-8(fp)
8041efc: 00002a06 br 8041fa8 <vfseek+0x140>
}
#endif /* HT_EXTDEV */
/* this vfseek() currently only supports seek to exact
end or begining of file */
switch (mode)
8041f00: e0bffb17 ldw r2,-20(fp)
8041f04: 10800060 cmpeqi r2,r2,1
8041f08: 10000d1e bne r2,zero,8041f40 <vfseek+0xd8>
8041f0c: e0bffb17 ldw r2,-20(fp)
8041f10: 108000a0 cmpeqi r2,r2,2
8041f14: 1000111e bne r2,zero,8041f5c <vfseek+0xf4>
8041f18: e0bffb17 ldw r2,-20(fp)
8041f1c: 10001b1e bne r2,zero,8041f8c <vfseek+0x124>
{
case SEEK_SET:
vfd->cmploc = vfd->file->data + offset;
8041f20: e0bffd17 ldw r2,-12(fp)
8041f24: 10800117 ldw r2,4(r2)
8041f28: 10c00617 ldw r3,24(r2)
8041f2c: e0bffc17 ldw r2,-16(fp)
8041f30: 1887883a add r3,r3,r2
8041f34: e0bffd17 ldw r2,-12(fp)
8041f38: 10c00215 stw r3,8(r2)
break;
8041f3c: 00001306 br 8041f8c <vfseek+0x124>
case SEEK_CUR:
/* If the file is compressed, then the following
* adjustment is inaccurate. Currently we don't have
* any scenario where this happens. - handle later */
vfd->cmploc += offset;
8041f40: e0bffd17 ldw r2,-12(fp)
8041f44: 10c00217 ldw r3,8(r2)
8041f48: e0bffc17 ldw r2,-16(fp)
8041f4c: 1887883a add r3,r3,r2
8041f50: e0bffd17 ldw r2,-12(fp)
8041f54: 10c00215 stw r3,8(r2)
break;
8041f58: 00000c06 br 8041f8c <vfseek+0x124>
case SEEK_END:
vfd->cmploc = vfd->file->data + vfd->file->comp_size + offset;
8041f5c: e0bffd17 ldw r2,-12(fp)
8041f60: 10800117 ldw r2,4(r2)
8041f64: 10c00617 ldw r3,24(r2)
8041f68: e0bffd17 ldw r2,-12(fp)
8041f6c: 10800117 ldw r2,4(r2)
8041f70: 11000817 ldw r4,32(r2)
8041f74: e0bffc17 ldw r2,-16(fp)
8041f78: 2085883a add r2,r4,r2
8041f7c: 1887883a add r3,r3,r2
8041f80: e0bffd17 ldw r2,-12(fp)
8041f84: 10c00215 stw r3,8(r2)
break;
8041f88: 0001883a nop
}
vfs_unlock();
8041f8c: 01000144 movi r4,5
8041f90: 80293680 call 8029368 <post_app_sem>
return(0);
8041f94: 0005883a mov r2,zero
8041f98: 00000306 br 8041fa8 <vfseek+0x140>
}
vfs_unlock();
8041f9c: 01000144 movi r4,5
8041fa0: 80293680 call 8029368 <post_app_sem>
#ifdef HT_LOCALFS
/* default to call on local system */
return(fseek((FILE*)vfd, offset, mode));
#else
return -1;
8041fa4: 00bfffc4 movi r2,-1
#endif /* HT_LOCALFS */
}
8041fa8: e037883a mov sp,fp
8041fac: dfc00117 ldw ra,4(sp)
8041fb0: df000017 ldw fp,0(sp)
8041fb4: dec00204 addi sp,sp,8
8041fb8: f800283a ret
08041fbc <vftell>:
* RETURNS:
*/
long
vftell(VFILE * vfd)
{
8041fbc: defffb04 addi sp,sp,-20
8041fc0: dfc00415 stw ra,16(sp)
8041fc4: df000315 stw fp,12(sp)
8041fc8: df000304 addi fp,sp,12
8041fcc: e13ffd15 stw r4,-12(fp)
/* lock the VFS */
vfs_lock();
8041fd0: 01000144 movi r4,5
8041fd4: 80292b40 call 80292b4 <wait_app_sem>
if (isvfile_locked(vfd))
8041fd8: e13ffd17 ldw r4,-12(fp)
8041fdc: 80425400 call 8042540 <isvfile_locked>
8041fe0: 10003126 beq r2,zero,80420a8 <vftell+0xec>
{
#ifdef HT_RWVFS
/* the caller is trying to ftell a deleted file,
so return an error condition */
if (vfd->file == NULL)
8041fe4: e0bffd17 ldw r2,-12(fp)
8041fe8: 10800117 ldw r2,4(r2)
8041fec: 1000041e bne r2,zero,8042000 <vftell+0x44>
{
vfs_unlock();
8041ff0: 01000144 movi r4,5
8041ff4: 80293680 call 8029368 <post_app_sem>
return -1;
8041ff8: 00bfffc4 movi r2,-1
8041ffc: 00002d06 br 80420b4 <vftell+0xf8>
}
#endif /* HT_RWVFS */
#ifdef HT_EXTDEV
if (vfd->file->method)
8042000: e0bffd17 ldw r2,-12(fp)
8042004: 10800117 ldw r2,4(r2)
8042008: 10800a17 ldw r2,40(r2)
804200c: 10000d26 beq r2,zero,8042044 <vftell+0x88>
{
struct vfroutines * vfp = (struct vfroutines*) (vfd->file->method);
8042010: e0bffd17 ldw r2,-12(fp)
8042014: 10800117 ldw r2,4(r2)
8042018: 10800a17 ldw r2,40(r2)
804201c: e0bfff15 stw r2,-4(fp)
long rc;
rc = vfp->r_ftell(vfd);
8042020: e0bfff17 ldw r2,-4(fp)
8042024: 10800617 ldw r2,24(r2)
8042028: e13ffd17 ldw r4,-12(fp)
804202c: 103ee83a callr r2
8042030: e0bffe15 stw r2,-8(fp)
vfs_unlock();
8042034: 01000144 movi r4,5
8042038: 80293680 call 8029368 <post_app_sem>
return rc;
804203c: e0bffe17 ldw r2,-8(fp)
8042040: 00001c06 br 80420b4 <vftell+0xf8>
}
#endif /* HT_EXTDEV */
/* if file has been fseeked to end, return uncompressed size.
else return current location in compression stream */
if (vfd->cmploc == vfd->file->data + vfd->file->comp_size)
8042044: e0bffd17 ldw r2,-12(fp)
8042048: 10c00217 ldw r3,8(r2)
804204c: e0bffd17 ldw r2,-12(fp)
8042050: 10800117 ldw r2,4(r2)
8042054: 11000617 ldw r4,24(r2)
8042058: e0bffd17 ldw r2,-12(fp)
804205c: 10800117 ldw r2,4(r2)
8042060: 10800817 ldw r2,32(r2)
8042064: 2085883a add r2,r4,r2
8042068: 1880061e bne r3,r2,8042084 <vftell+0xc8>
{
vfs_unlock();
804206c: 01000144 movi r4,5
8042070: 80293680 call 8029368 <post_app_sem>
return vfd->file->comp_size;
8042074: e0bffd17 ldw r2,-12(fp)
8042078: 10800117 ldw r2,4(r2)
804207c: 10800817 ldw r2,32(r2)
8042080: 00000c06 br 80420b4 <vftell+0xf8>
}
else
{
vfs_unlock();
8042084: 01000144 movi r4,5
8042088: 80293680 call 8029368 <post_app_sem>
return (vfd->cmploc - vfd->file->data);
804208c: e0bffd17 ldw r2,-12(fp)
8042090: 10c00217 ldw r3,8(r2)
8042094: e0bffd17 ldw r2,-12(fp)
8042098: 10800117 ldw r2,4(r2)
804209c: 10800617 ldw r2,24(r2)
80420a0: 1885c83a sub r2,r3,r2
80420a4: 00000306 br 80420b4 <vftell+0xf8>
}
}
vfs_unlock();
80420a8: 01000144 movi r4,5
80420ac: 80293680 call 8029368 <post_app_sem>
#ifdef HT_LOCALFS
/* default to call on local system */
return(ftell((FILE*)vfd));
#else
return EBADF;
80420b0: 00800244 movi r2,9
#endif /* HT_LOCALFS */
}
80420b4: e037883a mov sp,fp
80420b8: dfc00117 ldw ra,4(sp)
80420bc: df000017 ldw fp,0(sp)
80420c0: dec00204 addi sp,sp,8
80420c4: f800283a ret
080420c8 <vgetc_locked>:
* RETURNS:
*/
int
vgetc_locked(VFILE * vfd)
{
80420c8: defffb04 addi sp,sp,-20
80420cc: dfc00415 stw ra,16(sp)
80420d0: df000315 stw fp,12(sp)
80420d4: df000304 addi fp,sp,12
80420d8: e13ffd15 stw r4,-12(fp)
int chr;
if (isvfile_locked(vfd))
80420dc: e13ffd17 ldw r4,-12(fp)
80420e0: 80425400 call 8042540 <isvfile_locked>
80420e4: 10002f26 beq r2,zero,80421a4 <vgetc_locked+0xdc>
{
#ifdef HT_RWVFS
/* the caller is trying to read a file that's been deleted,
so return an error condition */
if (vfd->file == NULL)
80420e8: e0bffd17 ldw r2,-12(fp)
80420ec: 10800117 ldw r2,4(r2)
80420f0: 1000021e bne r2,zero,80420fc <vgetc_locked+0x34>
{
return EOF;
80420f4: 00bfffc4 movi r2,-1
80420f8: 00002c06 br 80421ac <vgetc_locked+0xe4>
}
#endif /* HT_RWVFS */
#ifdef HT_EXTDEV
if (vfd->file->method)
80420fc: e0bffd17 ldw r2,-12(fp)
8042100: 10800117 ldw r2,4(r2)
8042104: 10800a17 ldw r2,40(r2)
8042108: 10000926 beq r2,zero,8042130 <vgetc_locked+0x68>
{
struct vfroutines * vfp = (struct vfroutines*) (vfd->file->method);
804210c: e0bffd17 ldw r2,-12(fp)
8042110: 10800117 ldw r2,4(r2)
8042114: 10800a17 ldw r2,40(r2)
8042118: e0bffe15 stw r2,-8(fp)
return (vfp->r_fgetc(vfd));
804211c: e0bffe17 ldw r2,-8(fp)
8042120: 10800717 ldw r2,28(r2)
8042124: e13ffd17 ldw r4,-12(fp)
8042128: 103ee83a callr r2
804212c: 00001f06 br 80421ac <vgetc_locked+0xe4>
#endif /* HT_EXTDEV */
#ifdef HT_RWVFS
/* a freshly created file might not have a data buffer associated
with it yet */
if (vfd->file->data == NULL)
8042130: e0bffd17 ldw r2,-12(fp)
8042134: 10800117 ldw r2,4(r2)
8042138: 10800617 ldw r2,24(r2)
804213c: 1000021e bne r2,zero,8042148 <vgetc_locked+0x80>
return EOF;
8042140: 00bfffc4 movi r2,-1
8042144: 00001906 br 80421ac <vgetc_locked+0xe4>
}
else /* HTML compression flag not set */
{
#endif /* HTML_COMPRESSION */
/* Check to see if read has advanced to end of file */
if (vfd->cmploc >= (vfd->file->data + vfd->file->comp_size))
8042148: e0bffd17 ldw r2,-12(fp)
804214c: 10c00217 ldw r3,8(r2)
8042150: e0bffd17 ldw r2,-12(fp)
8042154: 10800117 ldw r2,4(r2)
8042158: 11000617 ldw r4,24(r2)
804215c: e0bffd17 ldw r2,-12(fp)
8042160: 10800117 ldw r2,4(r2)
8042164: 10800817 ldw r2,32(r2)
8042168: 2085883a add r2,r4,r2
804216c: 18800336 bltu r3,r2,804217c <vgetc_locked+0xb4>
chr = EOF;
8042170: 00bfffc4 movi r2,-1
8042174: e0bfff15 stw r2,-4(fp)
8042178: 00000806 br 804219c <vgetc_locked+0xd4>
else /* else just get next char to return */
chr = *(vfd->cmploc++);
804217c: e0bffd17 ldw r2,-12(fp)
8042180: 10800217 ldw r2,8(r2)
8042184: 11000044 addi r4,r2,1
8042188: e0fffd17 ldw r3,-12(fp)
804218c: 19000215 stw r4,8(r3)
8042190: 10800003 ldbu r2,0(r2)
8042194: 10803fcc andi r2,r2,255
8042198: e0bfff15 stw r2,-4(fp)
#ifdef HTML_COMPRESSION
} /* need to close brace form if...else; */
#endif /* HTML_COMPRESSION */
return chr;
804219c: e0bfff17 ldw r2,-4(fp)
80421a0: 00000206 br 80421ac <vgetc_locked+0xe4>
#ifdef HT_LOCALFS
/* default to call on local system */
return(getc((FILE*)vfd));
#else
dtrap(); /* can this happen? */
80421a4: 8028cd40 call 8028cd4 <dtrap>
return EOF;
80421a8: 00bfffc4 movi r2,-1
#endif /* HT_LOCALFS */
}
80421ac: e037883a mov sp,fp
80421b0: dfc00117 ldw ra,4(sp)
80421b4: df000017 ldw fp,0(sp)
80421b8: dec00204 addi sp,sp,8
80421bc: f800283a ret
080421c0 <vgetc>:
* RETURNS:
*/
int
vgetc(VFILE * vfd)
{
80421c0: defffc04 addi sp,sp,-16
80421c4: dfc00315 stw ra,12(sp)
80421c8: df000215 stw fp,8(sp)
80421cc: df000204 addi fp,sp,8
80421d0: e13ffe15 stw r4,-8(fp)
int rc;
/* lock the VFS */
vfs_lock();
80421d4: 01000144 movi r4,5
80421d8: 80292b40 call 80292b4 <wait_app_sem>
/* get the character */
rc = vgetc_locked(vfd);
80421dc: e13ffe17 ldw r4,-8(fp)
80421e0: 80420c80 call 80420c8 <vgetc_locked>
80421e4: e0bfff15 stw r2,-4(fp)
/* unlock the VFS */
vfs_unlock();
80421e8: 01000144 movi r4,5
80421ec: 80293680 call 8029368 <post_app_sem>
return rc;
80421f0: e0bfff17 ldw r2,-4(fp)
}
80421f4: e037883a mov sp,fp
80421f8: dfc00117 ldw ra,4(sp)
80421fc: df000017 ldw fp,0(sp)
8042200: dec00204 addi sp,sp,8
8042204: f800283a ret
08042208 <vfslookup_locked>:
* RETURNS:
*/
struct vfs_file *
vfslookup_locked(char * name)
{
8042208: defffb04 addi sp,sp,-20
804220c: dfc00415 stw ra,16(sp)
8042210: df000315 stw fp,12(sp)
8042214: df000304 addi fp,sp,12
8042218: e13ffd15 stw r4,-12(fp)
#ifdef VFS_STRIPPATH
char * cp;
/* If root path is prepended to name, skip past it */
if (*name == '/' || *name == '\\')
804221c: e0bffd17 ldw r2,-12(fp)
8042220: 10800003 ldbu r2,0(r2)
8042224: 10803fcc andi r2,r2,255
8042228: 1080201c xori r2,r2,128
804222c: 10bfe004 addi r2,r2,-128
8042230: 10800be0 cmpeqi r2,r2,47
8042234: 1000071e bne r2,zero,8042254 <vfslookup_locked+0x4c>
8042238: e0bffd17 ldw r2,-12(fp)
804223c: 10800003 ldbu r2,0(r2)
8042240: 10803fcc andi r2,r2,255
8042244: 1080201c xori r2,r2,128
8042248: 10bfe004 addi r2,r2,-128
804224c: 10801718 cmpnei r2,r2,92
8042250: 1000191e bne r2,zero,80422b8 <vfslookup_locked+0xb0>
{
cp = strippath(name);
8042254: e13ffd17 ldw r4,-12(fp)
8042258: 80423740 call 8042374 <strippath>
804225c: e0bffe15 stw r2,-8(fp)
if (!cp) /* strippath coundn't match our path */
8042260: e0bffe17 ldw r2,-8(fp)
8042264: 1000121e bne r2,zero,80422b0 <vfslookup_locked+0xa8>
{
/* Files like "/hub47.gif" need to be taken care of */
if (*name == '/' || *name == '\\')
8042268: e0bffd17 ldw r2,-12(fp)
804226c: 10800003 ldbu r2,0(r2)
8042270: 10803fcc andi r2,r2,255
8042274: 1080201c xori r2,r2,128
8042278: 10bfe004 addi r2,r2,-128
804227c: 10800be0 cmpeqi r2,r2,47
8042280: 1000071e bne r2,zero,80422a0 <vfslookup_locked+0x98>
8042284: e0bffd17 ldw r2,-12(fp)
8042288: 10800003 ldbu r2,0(r2)
804228c: 10803fcc andi r2,r2,255
8042290: 1080201c xori r2,r2,128
8042294: 10bfe004 addi r2,r2,-128
8042298: 10801718 cmpnei r2,r2,92
804229c: 1000061e bne r2,zero,80422b8 <vfslookup_locked+0xb0>
name++;
80422a0: e0bffd17 ldw r2,-12(fp)
80422a4: 10800044 addi r2,r2,1
80422a8: e0bffd15 stw r2,-12(fp)
80422ac: 00000206 br 80422b8 <vfslookup_locked+0xb0>
}
else
name = cp ;
80422b0: e0bffe17 ldw r2,-8(fp)
80422b4: e0bffd15 stw r2,-12(fp)
}
#endif /* VFS_STRIPPATH */
/* see if there is a question mark in the file name */
if (strchr(name,'?'))
80422b8: 01400fc4 movi r5,63
80422bc: e13ffd17 ldw r4,-12(fp)
80422c0: 8042dfc0 call 8042dfc <strchr>
80422c4: 10000326 beq r2,zero,80422d4 <vfslookup_locked+0xcc>
{
dtrap(); /* is this still allowed? */
80422c8: 8028cd40 call 8028cd4 <dtrap>
return NULL;
80422cc: 0005883a mov r2,zero
80422d0: 00001106 br 8042318 <vfslookup_locked+0x110>
}
for (vp = vfsfiles; vp; vp = vp->next) /* search vfs list for name */
80422d4: d0a0a317 ldw r2,-32116(gp)
80422d8: e0bfff15 stw r2,-4(fp)
80422dc: 00000b06 br 804230c <vfslookup_locked+0x104>
{
if (strcmp(name, vp->name) == 0)
80422e0: e0bfff17 ldw r2,-4(fp)
80422e4: 10800104 addi r2,r2,4
80422e8: 100b883a mov r5,r2
80422ec: e13ffd17 ldw r4,-12(fp)
80422f0: 800c2240 call 800c224 <strcmp>
80422f4: 1000021e bne r2,zero,8042300 <vfslookup_locked+0xf8>
return vp;
80422f8: e0bfff17 ldw r2,-4(fp)
80422fc: 00000606 br 8042318 <vfslookup_locked+0x110>
for (vp = vfsfiles; vp; vp = vp->next) /* search vfs list for name */
8042300: e0bfff17 ldw r2,-4(fp)
8042304: 10800017 ldw r2,0(r2)
8042308: e0bfff15 stw r2,-4(fp)
804230c: e0bfff17 ldw r2,-4(fp)
8042310: 103ff31e bne r2,zero,80422e0 <vfslookup_locked+0xd8>
}
return NULL; /* fall to here if not found in for loop */
8042314: 0005883a mov r2,zero
}
8042318: e037883a mov sp,fp
804231c: dfc00117 ldw ra,4(sp)
8042320: df000017 ldw fp,0(sp)
8042324: dec00204 addi sp,sp,8
8042328: f800283a ret
0804232c <vfslookup>:
* RETURNS:
*/
struct vfs_file *
vfslookup(char * name)
{
804232c: defffc04 addi sp,sp,-16
8042330: dfc00315 stw ra,12(sp)
8042334: df000215 stw fp,8(sp)
8042338: df000204 addi fp,sp,8
804233c: e13ffe15 stw r4,-8(fp)
if (vfs_log_file_name)
dprintf("vfslookup() passed >%s<\n",name);
#endif /* VFS_UNIT_TEST */
/* lock the VFS */
vfs_lock();
8042340: 01000144 movi r4,5
8042344: 80292b40 call 80292b4 <wait_app_sem>
/* do the lookup */
vp = vfslookup_locked(name);
8042348: e13ffe17 ldw r4,-8(fp)
804234c: 80422080 call 8042208 <vfslookup_locked>
8042350: e0bfff15 stw r2,-4(fp)
/* unlock the VFS */
vfs_unlock();
8042354: 01000144 movi r4,5
8042358: 80293680 call 8029368 <post_app_sem>
return vp;
804235c: e0bfff17 ldw r2,-4(fp)
}
8042360: e037883a mov sp,fp
8042364: dfc00117 ldw ra,4(sp)
8042368: df000017 ldw fp,0(sp)
804236c: dec00204 addi sp,sp,8
8042370: f800283a ret
08042374 <strippath>:
* have the http_root_path prepended; or on any error.
*/
char *
strippath(char * name)
{
8042374: defff904 addi sp,sp,-28
8042378: dfc00615 stw ra,24(sp)
804237c: df000515 stw fp,20(sp)
8042380: df000504 addi fp,sp,20
8042384: e13ffb15 stw r4,-20(fp)
char * path; /* pointer into system path */
char * ptmp; /* another pointer into path */
char * ntmp; /* pointer into name text */
int dirlen;
ntmp = uslash(name); /* uslash() is defined in misclib\in_utils.c */
8042388: e13ffb17 ldw r4,-20(fp)
804238c: 80273140 call 8027314 <uslash>
8042390: e0bffe15 stw r2,-8(fp)
path = http_root_path; /* The servers root path, at least one UNIX slash */
8042394: d0a03417 ldw r2,-32560(gp)
8042398: e0bfff15 stw r2,-4(fp)
while (*path && *ntmp)
804239c: 00003a06 br 8042488 <strippath+0x114>
{
while (*path == '/') path++; /* strip leading slash */
80423a0: e0bfff17 ldw r2,-4(fp)
80423a4: 10800044 addi r2,r2,1
80423a8: e0bfff15 stw r2,-4(fp)
80423ac: e0bfff17 ldw r2,-4(fp)
80423b0: 10800003 ldbu r2,0(r2)
80423b4: 10803fcc andi r2,r2,255
80423b8: 1080201c xori r2,r2,128
80423bc: 10bfe004 addi r2,r2,-128
80423c0: 10800be0 cmpeqi r2,r2,47
80423c4: 103ff61e bne r2,zero,80423a0 <strippath+0x2c>
if (*path == 0)
80423c8: e0bfff17 ldw r2,-4(fp)
80423cc: 10800003 ldbu r2,0(r2)
80423d0: 10803fcc andi r2,r2,255
80423d4: 1080201c xori r2,r2,128
80423d8: 10bfe004 addi r2,r2,-128
80423dc: 10003726 beq r2,zero,80424bc <strippath+0x148>
break;
/* find number of chars in this directory layer's name */
ptmp = strchr(path, '/'); /* location of next slash in path */
80423e0: 01400bc4 movi r5,47
80423e4: e13fff17 ldw r4,-4(fp)
80423e8: 8042dfc0 call 8042dfc <strchr>
80423ec: e0bffc15 stw r2,-16(fp)
if (ptmp)
80423f0: e0bffc17 ldw r2,-16(fp)
80423f4: 10000526 beq r2,zero,804240c <strippath+0x98>
dirlen = ptmp - path;
80423f8: e0fffc17 ldw r3,-16(fp)
80423fc: e0bfff17 ldw r2,-4(fp)
8042400: 1885c83a sub r2,r3,r2
8042404: e0bffd15 stw r2,-12(fp)
8042408: 00000706 br 8042428 <strippath+0xb4>
else
dirlen = strlen(path);
804240c: e13fff17 ldw r4,-4(fp)
8042410: 8002dac0 call 8002dac <strlen>
8042414: e0bffd15 stw r2,-12(fp)
while (*ntmp == '/') ntmp++; /* strip leading slash */
8042418: 00000306 br 8042428 <strippath+0xb4>
804241c: e0bffe17 ldw r2,-8(fp)
8042420: 10800044 addi r2,r2,1
8042424: e0bffe15 stw r2,-8(fp)
8042428: e0bffe17 ldw r2,-8(fp)
804242c: 10800003 ldbu r2,0(r2)
8042430: 10803fcc andi r2,r2,255
8042434: 1080201c xori r2,r2,128
8042438: 10bfe004 addi r2,r2,-128
804243c: 10800be0 cmpeqi r2,r2,47
8042440: 103ff61e bne r2,zero,804241c <strippath+0xa8>
if (strncmp(ntmp, path, dirlen) == 0)
8042444: e0bffd17 ldw r2,-12(fp)
8042448: 100d883a mov r6,r2
804244c: e17fff17 ldw r5,-4(fp)
8042450: e13ffe17 ldw r4,-8(fp)
8042454: 8042fec0 call 8042fec <strncmp>
8042458: 1000091e bne r2,zero,8042480 <strippath+0x10c>
{
path += dirlen;
804245c: e0bffd17 ldw r2,-12(fp)
8042460: e0ffff17 ldw r3,-4(fp)
8042464: 1885883a add r2,r3,r2
8042468: e0bfff15 stw r2,-4(fp)
ntmp += dirlen;
804246c: e0bffd17 ldw r2,-12(fp)
8042470: e0fffe17 ldw r3,-8(fp)
8042474: 1885883a add r2,r3,r2
8042478: e0bffe15 stw r2,-8(fp)
804247c: 00000206 br 8042488 <strippath+0x114>
}
else
return NULL; /* didn't match */
8042480: 0005883a mov r2,zero
8042484: 00002906 br 804252c <strippath+0x1b8>
while (*path && *ntmp)
8042488: e0bfff17 ldw r2,-4(fp)
804248c: 10800003 ldbu r2,0(r2)
8042490: 10803fcc andi r2,r2,255
8042494: 1080201c xori r2,r2,128
8042498: 10bfe004 addi r2,r2,-128
804249c: 10000826 beq r2,zero,80424c0 <strippath+0x14c>
80424a0: e0bffe17 ldw r2,-8(fp)
80424a4: 10800003 ldbu r2,0(r2)
80424a8: 10803fcc andi r2,r2,255
80424ac: 1080201c xori r2,r2,128
80424b0: 10bfe004 addi r2,r2,-128
80424b4: 103fbd1e bne r2,zero,80423ac <strippath+0x38>
80424b8: 00000106 br 80424c0 <strippath+0x14c>
break;
80424bc: 0001883a nop
}
if (*path == '\0')
80424c0: e0bfff17 ldw r2,-4(fp)
80424c4: 10800003 ldbu r2,0(r2)
80424c8: 10803fcc andi r2,r2,255
80424cc: 1080201c xori r2,r2,128
80424d0: 10bfe004 addi r2,r2,-128
80424d4: 1000141e bne r2,zero,8042528 <strippath+0x1b4>
{
while (*ntmp == '\\' || *ntmp == '/')
80424d8: 00000306 br 80424e8 <strippath+0x174>
ntmp++;
80424dc: e0bffe17 ldw r2,-8(fp)
80424e0: 10800044 addi r2,r2,1
80424e4: e0bffe15 stw r2,-8(fp)
while (*ntmp == '\\' || *ntmp == '/')
80424e8: e0bffe17 ldw r2,-8(fp)
80424ec: 10800003 ldbu r2,0(r2)
80424f0: 10803fcc andi r2,r2,255
80424f4: 1080201c xori r2,r2,128
80424f8: 10bfe004 addi r2,r2,-128
80424fc: 10801720 cmpeqi r2,r2,92
8042500: 103ff61e bne r2,zero,80424dc <strippath+0x168>
8042504: e0bffe17 ldw r2,-8(fp)
8042508: 10800003 ldbu r2,0(r2)
804250c: 10803fcc andi r2,r2,255
8042510: 1080201c xori r2,r2,128
8042514: 10bfe004 addi r2,r2,-128
8042518: 10800be0 cmpeqi r2,r2,47
804251c: 103fef1e bne r2,zero,80424dc <strippath+0x168>
return ntmp;
8042520: e0bffe17 ldw r2,-8(fp)
8042524: 00000106 br 804252c <strippath+0x1b8>
}
else
return NULL;
8042528: 0005883a mov r2,zero
}
804252c: e037883a mov sp,fp
8042530: dfc00117 ldw ra,4(sp)
8042534: df000017 ldw fp,0(sp)
8042538: dec00204 addi sp,sp,8
804253c: f800283a ret
08042540 <isvfile_locked>:
* RETURNS:
*/
int
isvfile_locked(VFILE * vfp)
{
8042540: defffd04 addi sp,sp,-12
8042544: df000215 stw fp,8(sp)
8042548: df000204 addi fp,sp,8
804254c: e13ffe15 stw r4,-8(fp)
VFILE * vtmp;
for (vtmp = vfiles; vtmp; vtmp = vtmp->next)
8042550: d0a0a217 ldw r2,-32120(gp)
8042554: e0bfff15 stw r2,-4(fp)
8042558: 00000806 br 804257c <isvfile_locked+0x3c>
if (vtmp == vfp)
804255c: e0ffff17 ldw r3,-4(fp)
8042560: e0bffe17 ldw r2,-8(fp)
8042564: 1880021e bne r3,r2,8042570 <isvfile_locked+0x30>
return TRUE;
8042568: 00800044 movi r2,1
804256c: 00000606 br 8042588 <isvfile_locked+0x48>
for (vtmp = vfiles; vtmp; vtmp = vtmp->next)
8042570: e0bfff17 ldw r2,-4(fp)
8042574: 10800017 ldw r2,0(r2)
8042578: e0bfff15 stw r2,-4(fp)
804257c: e0bfff17 ldw r2,-4(fp)
8042580: 103ff61e bne r2,zero,804255c <isvfile_locked+0x1c>
return FALSE; /* passed pointer not found in list */
8042584: 0005883a mov r2,zero
}
8042588: e037883a mov sp,fp
804258c: df000017 ldw fp,0(sp)
8042590: dec00104 addi sp,sp,4
8042594: f800283a ret
08042598 <isvfile>:
* RETURNS:
*/
int
isvfile(VFILE * vfp)
{
8042598: defffc04 addi sp,sp,-16
804259c: dfc00315 stw ra,12(sp)
80425a0: df000215 stw fp,8(sp)
80425a4: df000204 addi fp,sp,8
80425a8: e13ffe15 stw r4,-8(fp)
int rc;
/* lock the VFS */
vfs_lock();
80425ac: 01000144 movi r4,5
80425b0: 80292b40 call 80292b4 <wait_app_sem>
/* do the lookup */
rc = isvfile_locked(vfp);
80425b4: e13ffe17 ldw r4,-8(fp)
80425b8: 80425400 call 8042540 <isvfile_locked>
80425bc: e0bfff15 stw r2,-4(fp)
/* unlock the VFS */
vfs_unlock();
80425c0: 01000144 movi r4,5
80425c4: 80293680 call 8029368 <post_app_sem>
return rc;
80425c8: e0bfff17 ldw r2,-4(fp)
}
80425cc: e037883a mov sp,fp
80425d0: dfc00117 ldw ra,4(sp)
80425d4: df000017 ldw fp,0(sp)
80425d8: dec00204 addi sp,sp,8
80425dc: f800283a ret
080425e0 <vferror>:
* RETURNS:
*/
int
vferror(VFILE * vfd)
{
80425e0: defffd04 addi sp,sp,-12
80425e4: dfc00215 stw ra,8(sp)
80425e8: df000115 stw fp,4(sp)
80425ec: df000104 addi fp,sp,4
80425f0: e13fff15 stw r4,-4(fp)
/* lock the VFS */
vfs_lock();
80425f4: 01000144 movi r4,5
80425f8: 80292b40 call 80292b4 <wait_app_sem>
if (isvfile_locked(vfd))
80425fc: e13fff17 ldw r4,-4(fp)
8042600: 80425400 call 8042540 <isvfile_locked>
8042604: 10000526 beq r2,zero,804261c <vferror+0x3c>
{
vfs_unlock();
8042608: 01000144 movi r4,5
804260c: 80293680 call 8029368 <post_app_sem>
return vfd->error;
8042610: e0bfff17 ldw r2,-4(fp)
8042614: 10800417 ldw r2,16(r2)
8042618: 00000306 br 8042628 <vferror+0x48>
}
vfs_unlock();
804261c: 01000144 movi r4,5
8042620: 80293680 call 8029368 <post_app_sem>
#ifdef HT_LOCALFS
return(ferror((FILE*)vfd));
#else /* not a VFILE, and no local FS */
return -1; /* should this be an error? */
8042624: 00bfffc4 movi r2,-1
#endif /* HT_LOCALFS */
}
8042628: e037883a mov sp,fp
804262c: dfc00117 ldw ra,4(sp)
8042630: df000017 ldw fp,0(sp)
8042634: dec00204 addi sp,sp,8
8042638: f800283a ret
0804263c <vclearerr>:
*
* RETURNS:
*/
void vclearerr(VFILE * vfd)
{
804263c: defffd04 addi sp,sp,-12
8042640: dfc00215 stw ra,8(sp)
8042644: df000115 stw fp,4(sp)
8042648: df000104 addi fp,sp,4
804264c: e13fff15 stw r4,-4(fp)
/* lock the VFS */
vfs_lock();
8042650: 01000144 movi r4,5
8042654: 80292b40 call 80292b4 <wait_app_sem>
if (isvfile_locked(vfd))
8042658: e13fff17 ldw r4,-4(fp)
804265c: 80425400 call 8042540 <isvfile_locked>
8042660: 10000526 beq r2,zero,8042678 <vclearerr+0x3c>
{
vfs_unlock();
8042664: 01000144 movi r4,5
8042668: 80293680 call 8029368 <post_app_sem>
vfd->error = 0;
804266c: e0bfff17 ldw r2,-4(fp)
8042670: 10000415 stw zero,16(r2)
return;
8042674: 00000206 br 8042680 <vclearerr+0x44>
}
vfs_unlock();
8042678: 01000144 movi r4,5
804267c: 80293680 call 8029368 <post_app_sem>
#ifdef HT_LOCALFS
clearerr((FILE *) vfd);
#endif /* HT_LOCALFS */
}
8042680: e037883a mov sp,fp
8042684: dfc00117 ldw ra,4(sp)
8042688: df000017 ldw fp,0(sp)
804268c: dec00204 addi sp,sp,8
8042690: f800283a ret
08042694 <prep_vfs>:
* PARAMS: NONE
*
* RETURNS: Error Code or 0 for OK
*/
int prep_vfs(void)
{
8042694: defffe04 addi sp,sp,-8
8042698: df000115 stw fp,4(sp)
804269c: df000104 addi fp,sp,4
int e = 0;
80426a0: e03fff15 stw zero,-4(fp)
{
dprintf("unable to install VFS NVPARMS, reconfigure nv_formats[]\n");
dtrap();
}
#endif /* INCLUDE_NVPARMS */
return e;
80426a4: e0bfff17 ldw r2,-4(fp)
}
80426a8: e037883a mov sp,fp
80426ac: df000017 ldw fp,0(sp)
80426b0: dec00104 addi sp,sp,4
80426b4: f800283a ret
080426b8 <alt_get_errno>:
{
80426b8: defffe04 addi sp,sp,-8
80426bc: dfc00115 stw ra,4(sp)
80426c0: df000015 stw fp,0(sp)
80426c4: d839883a mov fp,sp
return ((alt_errno) ? alt_errno() : &errno);
80426c8: d0a02717 ldw r2,-32612(gp)
80426cc: 10000326 beq r2,zero,80426dc <alt_get_errno+0x24>
80426d0: d0a02717 ldw r2,-32612(gp)
80426d4: 103ee83a callr r2
80426d8: 00000106 br 80426e0 <alt_get_errno+0x28>
80426dc: d0a04204 addi r2,gp,-32504
}
80426e0: e037883a mov sp,fp
80426e4: dfc00117 ldw ra,4(sp)
80426e8: df000017 ldw fp,0(sp)
80426ec: dec00204 addi sp,sp,8
80426f0: f800283a ret
080426f4 <alt_fcntl>:
*
* ALT_FCNTL is mapped onto the fcntl() system call in alt_syscall.h
*/
int ALT_FCNTL (int file, int cmd, ...)
{
80426f4: defff704 addi sp,sp,-36
80426f8: dfc00615 stw ra,24(sp)
80426fc: df000515 stw fp,20(sp)
8042700: df000504 addi fp,sp,20
8042704: e13ffc15 stw r4,-16(fp)
8042708: e17ffb15 stw r5,-20(fp)
804270c: e1800215 stw r6,8(fp)
8042710: e1c00315 stw r7,12(fp)
* A common error case is that when the file descriptor was created, the call
* to open() failed resulting in a negative file descriptor. This is trapped
* below so that we don't try and process an invalid file descriptor.
*/
fd = (file < 0) ? NULL : &alt_fd_list[file];
8042714: e0bffc17 ldw r2,-16(fp)
8042718: 10000616 blt r2,zero,8042734 <alt_fcntl+0x40>
804271c: e0bffc17 ldw r2,-16(fp)
8042720: 10c00324 muli r3,r2,12
8042724: 00820174 movhi r2,2053
8042728: 10b21a04 addi r2,r2,-14232
804272c: 1885883a add r2,r3,r2
8042730: 00000106 br 8042738 <alt_fcntl+0x44>
8042734: 0005883a mov r2,zero
8042738: e0bfff15 stw r2,-4(fp)
if (fd)
804273c: e0bfff17 ldw r2,-4(fp)
8042740: 10002b26 beq r2,zero,80427f0 <alt_fcntl+0xfc>
{
switch (cmd)
8042744: e0bffb17 ldw r2,-20(fp)
8042748: 108000e0 cmpeqi r2,r2,3
804274c: 1000041e bne r2,zero,8042760 <alt_fcntl+0x6c>
8042750: e0bffb17 ldw r2,-20(fp)
8042754: 10800120 cmpeqi r2,r2,4
8042758: 1000071e bne r2,zero,8042778 <alt_fcntl+0x84>
804275c: 00001e06 br 80427d8 <alt_fcntl+0xe4>
{
case F_GETFL:
return fd->fd_flags & ~((alt_u32) ALT_FD_FLAGS_MASK);
8042760: e0bfff17 ldw r2,-4(fp)
8042764: 10c00217 ldw r3,8(r2)
8042768: 00900034 movhi r2,16384
804276c: 10bfffc4 addi r2,r2,-1
8042770: 1884703a and r2,r3,r2
8042774: 00002306 br 8042804 <alt_fcntl+0x110>
case F_SETFL:
va_start(argp, cmd);
8042778: e0800204 addi r2,fp,8
804277c: e0bffd15 stw r2,-12(fp)
flags = va_arg(argp, long);
8042780: e0bffd17 ldw r2,-12(fp)
8042784: 10c00104 addi r3,r2,4
8042788: e0fffd15 stw r3,-12(fp)
804278c: 10800017 ldw r2,0(r2)
8042790: e0bffe15 stw r2,-8(fp)
fd->fd_flags &= ~ALT_FCNTL_FLAGS_MASK;
8042794: e0bfff17 ldw r2,-4(fp)
8042798: 10c00217 ldw r3,8(r2)
804279c: 00affdc4 movi r2,-16393
80427a0: 1886703a and r3,r3,r2
80427a4: e0bfff17 ldw r2,-4(fp)
80427a8: 10c00215 stw r3,8(r2)
fd->fd_flags |= (flags & ALT_FCNTL_FLAGS_MASK);
80427ac: e0bfff17 ldw r2,-4(fp)
80427b0: 10800217 ldw r2,8(r2)
80427b4: 1007883a mov r3,r2
80427b8: e0bffe17 ldw r2,-8(fp)
80427bc: 1090020c andi r2,r2,16392
80427c0: 1884b03a or r2,r3,r2
80427c4: 1007883a mov r3,r2
80427c8: e0bfff17 ldw r2,-4(fp)
80427cc: 10c00215 stw r3,8(r2)
va_end(argp);
return 0;
80427d0: 0005883a mov r2,zero
80427d4: 00000b06 br 8042804 <alt_fcntl+0x110>
default:
ALT_ERRNO = EINVAL;
80427d8: 80426b80 call 80426b8 <alt_get_errno>
80427dc: 1007883a mov r3,r2
80427e0: 00800584 movi r2,22
80427e4: 18800015 stw r2,0(r3)
return -1;
80427e8: 00bfffc4 movi r2,-1
80427ec: 00000506 br 8042804 <alt_fcntl+0x110>
}
}
ALT_ERRNO = EBADFD;
80427f0: 80426b80 call 80426b8 <alt_get_errno>
80427f4: 1007883a mov r3,r2
80427f8: 00801444 movi r2,81
80427fc: 18800015 stw r2,0(r3)
return -1;
8042800: 00bfffc4 movi r2,-1
}
8042804: e037883a mov sp,fp
8042808: dfc00117 ldw ra,4(sp)
804280c: df000017 ldw fp,0(sp)
8042810: dec00404 addi sp,sp,16
8042814: f800283a ret
08042818 <alt_find_file>:
* either '/' or '\0' is the prefix of the filename. For example the filename:
* "/myfilesystem/junk.txt" would match: "/myfilesystem", but not: "/myfile".
*/
alt_dev* alt_find_file (const char* name)
{
8042818: defffb04 addi sp,sp,-20
804281c: dfc00415 stw ra,16(sp)
8042820: df000315 stw fp,12(sp)
8042824: df000304 addi fp,sp,12
8042828: e13ffd15 stw r4,-12(fp)
alt_dev* next = (alt_dev*) alt_fs_list.next;
804282c: d0a02217 ldw r2,-32632(gp)
8042830: e0bfff15 stw r2,-4(fp)
/*
* Check each list entry in turn, until a match is found, or we reach the
* end of the list (i.e. next winds up pointing back to the list head).
*/
while (next != (alt_dev*) &alt_fs_list)
8042834: 00003106 br 80428fc <alt_find_file+0xe4>
{
len = strlen(next->name);
8042838: e0bfff17 ldw r2,-4(fp)
804283c: 10800217 ldw r2,8(r2)
8042840: 1009883a mov r4,r2
8042844: 8002dac0 call 8002dac <strlen>
8042848: e0bffe15 stw r2,-8(fp)
if (next->name[len-1] == '/')
804284c: e0bfff17 ldw r2,-4(fp)
8042850: 10c00217 ldw r3,8(r2)
8042854: e0bffe17 ldw r2,-8(fp)
8042858: 10bfffc4 addi r2,r2,-1
804285c: 1885883a add r2,r3,r2
8042860: 10800003 ldbu r2,0(r2)
8042864: 10803fcc andi r2,r2,255
8042868: 1080201c xori r2,r2,128
804286c: 10bfe004 addi r2,r2,-128
8042870: 10800bd8 cmpnei r2,r2,47
8042874: 1000031e bne r2,zero,8042884 <alt_find_file+0x6c>
{
len -= 1;
8042878: e0bffe17 ldw r2,-8(fp)
804287c: 10bfffc4 addi r2,r2,-1
8042880: e0bffe15 stw r2,-8(fp)
}
if (((name[len] == '/') || (name[len] == '\0')) &&
8042884: e0bffe17 ldw r2,-8(fp)
8042888: e0fffd17 ldw r3,-12(fp)
804288c: 1885883a add r2,r3,r2
8042890: 10800003 ldbu r2,0(r2)
8042894: 10803fcc andi r2,r2,255
8042898: 1080201c xori r2,r2,128
804289c: 10bfe004 addi r2,r2,-128
80428a0: 10800be0 cmpeqi r2,r2,47
80428a4: 1000081e bne r2,zero,80428c8 <alt_find_file+0xb0>
80428a8: e0bffe17 ldw r2,-8(fp)
80428ac: e0fffd17 ldw r3,-12(fp)
80428b0: 1885883a add r2,r3,r2
80428b4: 10800003 ldbu r2,0(r2)
80428b8: 10803fcc andi r2,r2,255
80428bc: 1080201c xori r2,r2,128
80428c0: 10bfe004 addi r2,r2,-128
80428c4: 10000a1e bne r2,zero,80428f0 <alt_find_file+0xd8>
!memcmp (next->name, name, len))
80428c8: e0bfff17 ldw r2,-4(fp)
80428cc: 10800217 ldw r2,8(r2)
80428d0: e0fffe17 ldw r3,-8(fp)
80428d4: 180d883a mov r6,r3
80428d8: e17ffd17 ldw r5,-12(fp)
80428dc: 1009883a mov r4,r2
80428e0: 8042cb80 call 8042cb8 <memcmp>
if (((name[len] == '/') || (name[len] == '\0')) &&
80428e4: 1000021e bne r2,zero,80428f0 <alt_find_file+0xd8>
{
/* match found */
return next;
80428e8: e0bfff17 ldw r2,-4(fp)
80428ec: 00000706 br 804290c <alt_find_file+0xf4>
}
next = (alt_dev*) next->llist.next;
80428f0: e0bfff17 ldw r2,-4(fp)
80428f4: 10800017 ldw r2,0(r2)
80428f8: e0bfff15 stw r2,-4(fp)
while (next != (alt_dev*) &alt_fs_list)
80428fc: e0ffff17 ldw r3,-4(fp)
8042900: d0a02204 addi r2,gp,-32632
8042904: 18bfcc1e bne r3,r2,8042838 <alt_find_file+0x20>
}
/* No match found */
return NULL;
8042908: 0005883a mov r2,zero
}
804290c: e037883a mov sp,fp
8042910: dfc00117 ldw ra,4(sp)
8042914: df000017 ldw fp,0(sp)
8042918: dec00204 addi sp,sp,8
804291c: f800283a ret
08042920 <alt_get_fd>:
* the offset of the file descriptor within the file descriptor array). A
* negative value indicates failure.
*/
int alt_get_fd (alt_dev* dev)
{
8042920: defff904 addi sp,sp,-28
8042924: dfc00615 stw ra,24(sp)
8042928: df000515 stw fp,20(sp)
804292c: df000504 addi fp,sp,20
8042930: e13ffb15 stw r4,-20(fp)
alt_32 i;
int rc = -EMFILE;
8042934: 00bffa04 movi r2,-24
8042938: e0bffe15 stw r2,-8(fp)
/*
* Take the alt_fd_list_lock semaphore in order to avoid races when
* accessing the file descriptor pool.
*/
ALT_SEM_PEND(alt_fd_list_lock, 0);
804293c: d0a08b17 ldw r2,-32212(gp)
8042940: e0bffd15 stw r2,-12(fp)
8042944: e03ffc8d sth zero,-14(fp)
OSSemPend (sem, timeout, &err);
8042948: e0bffc8b ldhu r2,-14(fp)
804294c: e0fffc44 addi r3,fp,-15
8042950: 180d883a mov r6,r3
8042954: 100b883a mov r5,r2
8042958: e13ffd17 ldw r4,-12(fp)
804295c: 8015a600 call 8015a60 <OSSemPend>
* indicates the highest file descriptor ever allocated. This is used to
* improve efficency when searching the file descriptor list, and
* therefore reduce contention on the alt_fd_list_lock semaphore.
*/
for (i = 0; i < ALT_MAX_FD; i++)
8042960: e03fff15 stw zero,-4(fp)
8042964: 00001706 br 80429c4 <alt_get_fd+0xa4>
{
if (!alt_fd_list[i].dev)
8042968: e0bfff17 ldw r2,-4(fp)
804296c: 10c00324 muli r3,r2,12
8042970: 00820174 movhi r2,2053
8042974: 1885883a add r2,r3,r2
8042978: 10b21a17 ldw r2,-14232(r2)
804297c: 10000e1e bne r2,zero,80429b8 <alt_get_fd+0x98>
{
alt_fd_list[i].dev = dev;
8042980: e0bfff17 ldw r2,-4(fp)
8042984: 11000324 muli r4,r2,12
8042988: e0fffb17 ldw r3,-20(fp)
804298c: 00820174 movhi r2,2053
8042990: 2085883a add r2,r4,r2
8042994: 10f21a15 stw r3,-14232(r2)
if (i > alt_max_fd)
8042998: d0e02617 ldw r3,-32616(gp)
804299c: e0bfff17 ldw r2,-4(fp)
80429a0: 1880020e bge r3,r2,80429ac <alt_get_fd+0x8c>
{
alt_max_fd = i;
80429a4: e0bfff17 ldw r2,-4(fp)
80429a8: d0a02615 stw r2,-32616(gp)
}
rc = i;
80429ac: e0bfff17 ldw r2,-4(fp)
80429b0: e0bffe15 stw r2,-8(fp)
goto alt_get_fd_exit;
80429b4: 00000706 br 80429d4 <alt_get_fd+0xb4>
for (i = 0; i < ALT_MAX_FD; i++)
80429b8: e0bfff17 ldw r2,-4(fp)
80429bc: 10800044 addi r2,r2,1
80429c0: e0bfff15 stw r2,-4(fp)
80429c4: e0bfff17 ldw r2,-4(fp)
80429c8: 10800410 cmplti r2,r2,16
80429cc: 103fe61e bne r2,zero,8042968 <alt_get_fd+0x48>
}
}
alt_get_fd_exit:
80429d0: 0001883a nop
/*
* Release the alt_fd_list_lock semaphore now that we are done with the
* file descriptor pool.
*/
ALT_SEM_POST(alt_fd_list_lock);
80429d4: d0a08b17 ldw r2,-32212(gp)
80429d8: 1009883a mov r4,r2
80429dc: 8015d840 call 8015d84 <OSSemPost>
return rc;
80429e0: e0bffe17 ldw r2,-8(fp)
}
80429e4: e037883a mov sp,fp
80429e8: dfc00117 ldw ra,4(sp)
80429ec: df000017 ldw fp,0(sp)
80429f0: dec00204 addi sp,sp,8
80429f4: f800283a ret
080429f8 <alt_exception_cause_generated_bad_addr>:
* Return: 1: BADADDR (bad_addr argument to handler) is valid
* 0: BADADDR is not valid
*/
int
alt_exception_cause_generated_bad_addr(alt_exception_cause cause)
{
80429f8: defffe04 addi sp,sp,-8
80429fc: df000115 stw fp,4(sp)
8042a00: df000104 addi fp,sp,4
8042a04: e13fff15 stw r4,-4(fp)
switch (cause) {
8042a08: e0bfff17 ldw r2,-4(fp)
8042a0c: 10bffe84 addi r2,r2,-6
8042a10: 10c00428 cmpgeui r3,r2,16
8042a14: 1800191e bne r3,zero,8042a7c <alt_exception_cause_generated_bad_addr+0x84>
8042a18: 100690ba slli r3,r2,2
8042a1c: 00820134 movhi r2,2052
8042a20: 1885883a add r2,r3,r2
8042a24: 108a8b17 ldw r2,10796(r2)
8042a28: 1000683a jmp r2
8042a2c: 08042a6c andhi zero,at,4265
8042a30: 08042a6c andhi zero,at,4265
8042a34: 08042a7c xorhi zero,at,4265
8042a38: 08042a7c xorhi zero,at,4265
8042a3c: 08042a7c xorhi zero,at,4265
8042a40: 08042a6c andhi zero,at,4265
8042a44: 08042a74 orhi zero,at,4265
8042a48: 08042a7c xorhi zero,at,4265
8042a4c: 08042a6c andhi zero,at,4265
8042a50: 08042a6c andhi zero,at,4265
8042a54: 08042a7c xorhi zero,at,4265
8042a58: 08042a6c andhi zero,at,4265
8042a5c: 08042a74 orhi zero,at,4265
8042a60: 08042a7c xorhi zero,at,4265
8042a64: 08042a7c xorhi zero,at,4265
8042a68: 08042a6c andhi zero,at,4265
case NIOS2_EXCEPTION_MISALIGNED_TARGET_PC:
case NIOS2_EXCEPTION_TLB_READ_PERM_VIOLATION:
case NIOS2_EXCEPTION_TLB_WRITE_PERM_VIOLATION:
case NIOS2_EXCEPTION_MPU_DATA_REGION_VIOLATION:
case NIOS2_EXCEPTION_ECC_DATA_ERR:
return 1;
8042a6c: 00800044 movi r2,1
8042a70: 00000306 br 8042a80 <alt_exception_cause_generated_bad_addr+0x88>
case NIOS2_EXCEPTION_TLB_MISS:
case NIOS2_EXCEPTION_ECC_TLB_ERR:
return 0;
8042a74: 0005883a mov r2,zero
8042a78: 00000106 br 8042a80 <alt_exception_cause_generated_bad_addr+0x88>
default:
return 0;
8042a7c: 0005883a mov r2,zero
}
}
8042a80: e037883a mov sp,fp
8042a84: df000017 ldw fp,0(sp)
8042a88: dec00104 addi sp,sp,4
8042a8c: f800283a ret
08042a90 <atexit>:
8042a90: 200b883a mov r5,r4
8042a94: 000f883a mov r7,zero
8042a98: 000d883a mov r6,zero
8042a9c: 0009883a mov r4,zero
8042aa0: 80454e81 jmpi 80454e8 <__register_exitproc>
08042aa4 <atoi>:
8042aa4: 01800284 movi r6,10
8042aa8: 000b883a mov r5,zero
8042aac: 80433281 jmpi 8043328 <strtol>
08042ab0 <_atoi_r>:
8042ab0: 01c00284 movi r7,10
8042ab4: 000d883a mov r6,zero
8042ab8: 804330c1 jmpi 804330c <_strtol_r>
08042abc <exit>:
8042abc: defffe04 addi sp,sp,-8
8042ac0: 000b883a mov r5,zero
8042ac4: dc000015 stw r16,0(sp)
8042ac8: dfc00115 stw ra,4(sp)
8042acc: 2021883a mov r16,r4
8042ad0: 80455780 call 8045578 <__call_exitprocs>
8042ad4: 00820174 movhi r2,2053
8042ad8: 1132ae17 ldw r4,-13640(r2)
8042adc: 20800f17 ldw r2,60(r4)
8042ae0: 10000126 beq r2,zero,8042ae8 <exit+0x2c>
8042ae4: 103ee83a callr r2
8042ae8: 8009883a mov r4,r16
8042aec: 80469740 call 8046974 <_exit>
08042af0 <memalign>:
8042af0: 00820174 movhi r2,2053
8042af4: 280d883a mov r6,r5
8042af8: 200b883a mov r5,r4
8042afc: 1132af17 ldw r4,-13636(r2)
8042b00: 8042b041 jmpi 8042b04 <_memalign_r>
08042b04 <_memalign_r>:
8042b04: 28800268 cmpgeui r2,r5,9
8042b08: 10005226 beq r2,zero,8042c54 <_memalign_r+0x150>
8042b0c: defffa04 addi sp,sp,-24
8042b10: dc400115 stw r17,4(sp)
8042b14: 344002c4 addi r17,r6,11
8042b18: dcc00315 stw r19,12(sp)
8042b1c: dfc00515 stw ra,20(sp)
8042b20: dd000415 stw r20,16(sp)
8042b24: dc800215 stw r18,8(sp)
8042b28: dc000015 stw r16,0(sp)
8042b2c: 888005f0 cmpltui r2,r17,23
8042b30: 2027883a mov r19,r4
8042b34: 1000391e bne r2,zero,8042c1c <_memalign_r+0x118>
8042b38: 00bffe04 movi r2,-8
8042b3c: 88a2703a and r17,r17,r2
8042b40: 88003816 blt r17,zero,8042c24 <_memalign_r+0x120>
8042b44: 89803736 bltu r17,r6,8042c24 <_memalign_r+0x120>
8042b48: 28800428 cmpgeui r2,r5,16
8042b4c: 2821883a mov r16,r5
8042b50: 1000011e bne r2,zero,8042b58 <_memalign_r+0x54>
8042b54: 04000404 movi r16,16
8042b58: 81400404 addi r5,r16,16
8042b5c: 2c4b883a add r5,r5,r17
8042b60: 9809883a mov r4,r19
8042b64: 8007ddc0 call 8007ddc <_malloc_r>
8042b68: 1025883a mov r18,r2
8042b6c: 10003026 beq r2,zero,8042c30 <_memalign_r+0x12c>
8042b70: 9809883a mov r4,r19
8042b74: 800fe0c0 call 800fe0c <__malloc_lock>
8042b78: 800b883a mov r5,r16
8042b7c: 9009883a mov r4,r18
8042b80: 953ffe04 addi r20,r18,-8
8042b84: 800d05c0 call 800d05c <__umodsi3>
8042b88: 10001b26 beq r2,zero,8042bf8 <_memalign_r+0xf4>
8042b8c: 817fffc4 addi r5,r16,-1
8042b90: 0405c83a sub r2,zero,r16
8042b94: 914b883a add r5,r18,r5
8042b98: 288a703a and r5,r5,r2
8042b9c: 297ffe04 addi r5,r5,-8
8042ba0: 2d07c83a sub r3,r5,r20
8042ba4: 18800408 cmpgei r2,r3,16
8042ba8: 10002c26 beq r2,zero,8042c5c <_memalign_r+0x158>
8042bac: 2829883a mov r20,r5
8042bb0: 90bfff17 ldw r2,-4(r18)
8042bb4: 013fff04 movi r4,-4
8042bb8: 900b883a mov r5,r18
8042bbc: 1104703a and r2,r2,r4
8042bc0: 10c5c83a sub r2,r2,r3
8042bc4: 11000054 ori r4,r2,1
8042bc8: a1000115 stw r4,4(r20)
8042bcc: a085883a add r2,r20,r2
8042bd0: 11800117 ldw r6,4(r2)
8042bd4: 9809883a mov r4,r19
8042bd8: 31800054 ori r6,r6,1
8042bdc: 11800115 stw r6,4(r2)
8042be0: 90bfff17 ldw r2,-4(r18)
8042be4: 1080004c andi r2,r2,1
8042be8: 10c4b03a or r2,r2,r3
8042bec: 90bfff15 stw r2,-4(r18)
8042bf0: 80071c40 call 80071c4 <_free_r>
8042bf4: a4800204 addi r18,r20,8
8042bf8: a0800117 ldw r2,4(r20)
8042bfc: 00ffff04 movi r3,-4
8042c00: 10c4703a and r2,r2,r3
8042c04: 1445c83a sub r2,r2,r17
8042c08: 10c00410 cmplti r3,r2,16
8042c0c: 18001726 beq r3,zero,8042c6c <_memalign_r+0x168>
8042c10: 9809883a mov r4,r19
8042c14: 800ff2c0 call 800ff2c <__malloc_unlock>
8042c18: 00000506 br 8042c30 <_memalign_r+0x12c>
8042c1c: 04400404 movi r17,16
8042c20: 89bfc92e bgeu r17,r6,8042b48 <_memalign_r+0x44>
8042c24: 00800304 movi r2,12
8042c28: 98800015 stw r2,0(r19)
8042c2c: 0025883a mov r18,zero
8042c30: 9005883a mov r2,r18
8042c34: dfc00517 ldw ra,20(sp)
8042c38: dd000417 ldw r20,16(sp)
8042c3c: dcc00317 ldw r19,12(sp)
8042c40: dc800217 ldw r18,8(sp)
8042c44: dc400117 ldw r17,4(sp)
8042c48: dc000017 ldw r16,0(sp)
8042c4c: dec00604 addi sp,sp,24
8042c50: f800283a ret
8042c54: 300b883a mov r5,r6
8042c58: 8007ddc1 jmpi 8007ddc <_malloc_r>
8042c5c: 2c0b883a add r5,r5,r16
8042c60: 2d07c83a sub r3,r5,r20
8042c64: 2829883a mov r20,r5
8042c68: 003fd106 br 8042bb0 <_memalign_r+0xac>
8042c6c: a44b883a add r5,r20,r17
8042c70: 10800054 ori r2,r2,1
8042c74: 28800115 stw r2,4(r5)
8042c78: a0800117 ldw r2,4(r20)
8042c7c: 29400204 addi r5,r5,8
8042c80: 9809883a mov r4,r19
8042c84: 1080004c andi r2,r2,1
8042c88: 1462b03a or r17,r2,r17
8042c8c: a4400115 stw r17,4(r20)
8042c90: 80071c40 call 80071c4 <_free_r>
8042c94: 003fde06 br 8042c10 <_memalign_r+0x10c>
08042c98 <malloc>:
8042c98: 00820174 movhi r2,2053
8042c9c: 200b883a mov r5,r4
8042ca0: 1132af17 ldw r4,-13636(r2)
8042ca4: 8007ddc1 jmpi 8007ddc <_malloc_r>
08042ca8 <free>:
8042ca8: 00820174 movhi r2,2053
8042cac: 200b883a mov r5,r4
8042cb0: 1132af17 ldw r4,-13636(r2)
8042cb4: 80071c41 jmpi 80071c4 <_free_r>
08042cb8 <memcmp>:
8042cb8: 30800130 cmpltui r2,r6,4
8042cbc: 10000b1e bne r2,zero,8042cec <memcmp+0x34>
8042cc0: 2144b03a or r2,r4,r5
8042cc4: 108000cc andi r2,r2,3
8042cc8: 10001a1e bne r2,zero,8042d34 <memcmp+0x7c>
8042ccc: 20c00017 ldw r3,0(r4)
8042cd0: 28800017 ldw r2,0(r5)
8042cd4: 1880171e bne r3,r2,8042d34 <memcmp+0x7c>
8042cd8: 31bfff04 addi r6,r6,-4
8042cdc: 30800128 cmpgeui r2,r6,4
8042ce0: 21000104 addi r4,r4,4
8042ce4: 29400104 addi r5,r5,4
8042ce8: 103ff81e bne r2,zero,8042ccc <memcmp+0x14>
8042cec: 30ffffc4 addi r3,r6,-1
8042cf0: 30000e26 beq r6,zero,8042d2c <memcmp+0x74>
8042cf4: 29800003 ldbu r6,0(r5)
8042cf8: 20800003 ldbu r2,0(r4)
8042cfc: 30800f1e bne r6,r2,8042d3c <memcmp+0x84>
8042d00: 18800044 addi r2,r3,1
8042d04: 20c00044 addi r3,r4,1
8042d08: 2089883a add r4,r4,r2
8042d0c: 00000506 br 8042d24 <memcmp+0x6c>
8042d10: 18800003 ldbu r2,0(r3)
8042d14: 29800003 ldbu r6,0(r5)
8042d18: 18c00044 addi r3,r3,1
8042d1c: 10803fcc andi r2,r2,255
8042d20: 1180061e bne r2,r6,8042d3c <memcmp+0x84>
8042d24: 29400044 addi r5,r5,1
8042d28: 193ff91e bne r3,r4,8042d10 <memcmp+0x58>
8042d2c: 0005883a mov r2,zero
8042d30: f800283a ret
8042d34: 30ffffc4 addi r3,r6,-1
8042d38: 003fee06 br 8042cf4 <memcmp+0x3c>
8042d3c: 1185c83a sub r2,r2,r6
8042d40: f800283a ret
08042d44 <_sprintf_r>:
8042d44: deffe404 addi sp,sp,-112
8042d48: 2811883a mov r8,r5
8042d4c: dfc01a15 stw ra,104(sp)
8042d50: d9c01b15 stw r7,108(sp)
8042d54: 00a00034 movhi r2,32768
8042d58: 00fffff4 movhi r3,65535
8042d5c: 10bfffc4 addi r2,r2,-1
8042d60: 18c08204 addi r3,r3,520
8042d64: d9c01b04 addi r7,sp,108
8042d68: d80b883a mov r5,sp
8042d6c: d8c00315 stw r3,12(sp)
8042d70: da000015 stw r8,0(sp)
8042d74: da000415 stw r8,16(sp)
8042d78: d8800515 stw r2,20(sp)
8042d7c: d8800215 stw r2,8(sp)
8042d80: 80433400 call 8043340 <___svfprintf_internal_r>
8042d84: d8c00017 ldw r3,0(sp)
8042d88: 18000005 stb zero,0(r3)
8042d8c: dfc01a17 ldw ra,104(sp)
8042d90: dec01c04 addi sp,sp,112
8042d94: f800283a ret
08042d98 <sprintf>:
8042d98: deffe304 addi sp,sp,-116
8042d9c: 2011883a mov r8,r4
8042da0: dfc01a15 stw ra,104(sp)
8042da4: d9801b15 stw r6,108(sp)
8042da8: d9c01c15 stw r7,112(sp)
8042dac: 00820174 movhi r2,2053
8042db0: 1132af17 ldw r4,-13636(r2)
8042db4: 00fffff4 movhi r3,65535
8042db8: 00a00034 movhi r2,32768
8042dbc: 10bfffc4 addi r2,r2,-1
8042dc0: 18c08204 addi r3,r3,520
8042dc4: 280d883a mov r6,r5
8042dc8: d9c01b04 addi r7,sp,108
8042dcc: d80b883a mov r5,sp
8042dd0: d8c00315 stw r3,12(sp)
8042dd4: da000015 stw r8,0(sp)
8042dd8: da000415 stw r8,16(sp)
8042ddc: d8800515 stw r2,20(sp)
8042de0: d8800215 stw r2,8(sp)
8042de4: 80433400 call 8043340 <___svfprintf_internal_r>
8042de8: d8c00017 ldw r3,0(sp)
8042dec: 18000005 stb zero,0(r3)
8042df0: dfc01a17 ldw ra,104(sp)
8042df4: dec01d04 addi sp,sp,116
8042df8: f800283a ret
08042dfc <strchr>:
8042dfc: 2a403fcc andi r9,r5,255
8042e00: 2811883a mov r8,r5
8042e04: 208000cc andi r2,r4,3
8042e08: 48003726 beq r9,zero,8042ee8 <strchr+0xec>
8042e0c: 10000b26 beq r2,zero,8042e3c <strchr+0x40>
8042e10: 20800003 ldbu r2,0(r4)
8042e14: 10003226 beq r2,zero,8042ee0 <strchr+0xe4>
8042e18: 48804f26 beq r9,r2,8042f58 <strchr+0x15c>
8042e1c: 4807883a mov r3,r9
8042e20: 00000306 br 8042e30 <strchr+0x34>
8042e24: 20800003 ldbu r2,0(r4)
8042e28: 10002d26 beq r2,zero,8042ee0 <strchr+0xe4>
8042e2c: 10c04a26 beq r2,r3,8042f58 <strchr+0x15c>
8042e30: 21000044 addi r4,r4,1
8042e34: 208000cc andi r2,r4,3
8042e38: 103ffa1e bne r2,zero,8042e24 <strchr+0x28>
8042e3c: 29403fcc andi r5,r5,255
8042e40: 2804923a slli r2,r5,8
8042e44: 20c00017 ldw r3,0(r4)
8042e48: 01ffbff4 movhi r7,65279
8042e4c: 288ab03a or r5,r5,r2
8042e50: 2816943a slli r11,r5,16
8042e54: 39ffbfc4 addi r7,r7,-257
8042e58: 19c5883a add r2,r3,r7
8042e5c: 5956b03a or r11,r11,r5
8042e60: 58caf03a xor r5,r11,r3
8042e64: 29cd883a add r6,r5,r7
8042e68: 00c6303a nor r3,zero,r3
8042e6c: 014a303a nor r5,zero,r5
8042e70: 10c4703a and r2,r2,r3
8042e74: 314a703a and r5,r6,r5
8042e78: 02a02074 movhi r10,32897
8042e7c: 1144b03a or r2,r2,r5
8042e80: 52a02004 addi r10,r10,-32640
8042e84: 1284703a and r2,r2,r10
8042e88: 10000c1e bne r2,zero,8042ebc <strchr+0xc0>
8042e8c: 21000104 addi r4,r4,4
8042e90: 20c00017 ldw r3,0(r4)
8042e94: 1acaf03a xor r5,r3,r11
8042e98: 19c5883a add r2,r3,r7
8042e9c: 29cd883a add r6,r5,r7
8042ea0: 00c6303a nor r3,zero,r3
8042ea4: 014a303a nor r5,zero,r5
8042ea8: 10c4703a and r2,r2,r3
8042eac: 314a703a and r5,r6,r5
8042eb0: 1144b03a or r2,r2,r5
8042eb4: 1284703a and r2,r2,r10
8042eb8: 103ff426 beq r2,zero,8042e8c <strchr+0x90>
8042ebc: 20800003 ldbu r2,0(r4)
8042ec0: 10000726 beq r2,zero,8042ee0 <strchr+0xe4>
8042ec4: 48802426 beq r9,r2,8042f58 <strchr+0x15c>
8042ec8: 42003fcc andi r8,r8,255
8042ecc: 00000106 br 8042ed4 <strchr+0xd8>
8042ed0: 12002126 beq r2,r8,8042f58 <strchr+0x15c>
8042ed4: 21000044 addi r4,r4,1
8042ed8: 20800003 ldbu r2,0(r4)
8042edc: 103ffc1e bne r2,zero,8042ed0 <strchr+0xd4>
8042ee0: 0005883a mov r2,zero
8042ee4: f800283a ret
8042ee8: 10000526 beq r2,zero,8042f00 <strchr+0x104>
8042eec: 20800003 ldbu r2,0(r4)
8042ef0: 10001926 beq r2,zero,8042f58 <strchr+0x15c>
8042ef4: 21000044 addi r4,r4,1
8042ef8: 208000cc andi r2,r4,3
8042efc: 103ffb1e bne r2,zero,8042eec <strchr+0xf0>
8042f00: 20c00017 ldw r3,0(r4)
8042f04: 01bfbff4 movhi r6,65279
8042f08: 31bfbfc4 addi r6,r6,-257
8042f0c: 1985883a add r2,r3,r6
8042f10: 01602074 movhi r5,32897
8042f14: 00c6303a nor r3,zero,r3
8042f18: 10c4703a and r2,r2,r3
8042f1c: 29602004 addi r5,r5,-32640
8042f20: 1144703a and r2,r2,r5
8042f24: 1000071e bne r2,zero,8042f44 <strchr+0x148>
8042f28: 21000104 addi r4,r4,4
8042f2c: 20c00017 ldw r3,0(r4)
8042f30: 1985883a add r2,r3,r6
8042f34: 00c6303a nor r3,zero,r3
8042f38: 10c4703a and r2,r2,r3
8042f3c: 1144703a and r2,r2,r5
8042f40: 103ff926 beq r2,zero,8042f28 <strchr+0x12c>
8042f44: 20800003 ldbu r2,0(r4)
8042f48: 10000326 beq r2,zero,8042f58 <strchr+0x15c>
8042f4c: 21000044 addi r4,r4,1
8042f50: 20800003 ldbu r2,0(r4)
8042f54: 103ffd1e bne r2,zero,8042f4c <strchr+0x150>
8042f58: 2005883a mov r2,r4
8042f5c: f800283a ret
08042f60 <strcpy>:
8042f60: 2906b03a or r3,r5,r4
8042f64: 18c000cc andi r3,r3,3
8042f68: 2005883a mov r2,r4
8042f6c: 18001d1e bne r3,zero,8042fe4 <strcpy+0x84>
8042f70: 29c00017 ldw r7,0(r5)
8042f74: 02bfbff4 movhi r10,65279
8042f78: 52bfbfc4 addi r10,r10,-257
8042f7c: 3a87883a add r3,r7,r10
8042f80: 01c8303a nor r4,zero,r7
8042f84: 02602074 movhi r9,32897
8042f88: 1906703a and r3,r3,r4
8042f8c: 4a602004 addi r9,r9,-32640
8042f90: 1a46703a and r3,r3,r9
8042f94: 100d883a mov r6,r2
8042f98: 1800091e bne r3,zero,8042fc0 <strcpy+0x60>
8042f9c: 31800104 addi r6,r6,4
8042fa0: 29400104 addi r5,r5,4
8042fa4: 31ffff15 stw r7,-4(r6)
8042fa8: 29c00017 ldw r7,0(r5)
8042fac: 3a87883a add r3,r7,r10
8042fb0: 01d0303a nor r8,zero,r7
8042fb4: 1a06703a and r3,r3,r8
8042fb8: 1a46703a and r3,r3,r9
8042fbc: 183ff726 beq r3,zero,8042f9c <strcpy+0x3c>
8042fc0: 29400044 addi r5,r5,1
8042fc4: 28ffffc3 ldbu r3,-1(r5)
8042fc8: 31800044 addi r6,r6,1
8042fcc: 30ffffc5 stb r3,-1(r6)
8042fd0: 18c03fcc andi r3,r3,255
8042fd4: 18c0201c xori r3,r3,128
8042fd8: 18ffe004 addi r3,r3,-128
8042fdc: 183ff81e bne r3,zero,8042fc0 <strcpy+0x60>
8042fe0: f800283a ret
8042fe4: 200d883a mov r6,r4
8042fe8: 003ff506 br 8042fc0 <strcpy+0x60>
08042fec <strncmp>:
8042fec: 30003726 beq r6,zero,80430cc <strncmp+0xe0>
8042ff0: 2144b03a or r2,r4,r5
8042ff4: 108000cc andi r2,r2,3
8042ff8: 10001f1e bne r2,zero,8043078 <strncmp+0x8c>
8042ffc: 30800130 cmpltui r2,r6,4
8043000: 10001d1e bne r2,zero,8043078 <strncmp+0x8c>
8043004: 20800017 ldw r2,0(r4)
8043008: 28c00017 ldw r3,0(r5)
804300c: 10c0311e bne r2,r3,80430d4 <strncmp+0xe8>
8043010: 31bfff04 addi r6,r6,-4
8043014: 30002d26 beq r6,zero,80430cc <strncmp+0xe0>
8043018: 02bfbff4 movhi r10,65279
804301c: 52bfbfc4 addi r10,r10,-257
8043020: 1287883a add r3,r2,r10
8043024: 02602074 movhi r9,32897
8043028: 0084303a nor r2,zero,r2
804302c: 1884703a and r2,r3,r2
8043030: 4a602004 addi r9,r9,-32640
8043034: 1244703a and r2,r2,r9
8043038: 10000b26 beq r2,zero,8043068 <strncmp+0x7c>
804303c: 00002306 br 80430cc <strncmp+0xe0>
8043040: 20c00017 ldw r3,0(r4)
8043044: 29c00017 ldw r7,0(r5)
8043048: 1a85883a add r2,r3,r10
804304c: 00d0303a nor r8,zero,r3
8043050: 1204703a and r2,r2,r8
8043054: 1244703a and r2,r2,r9
8043058: 19c01e1e bne r3,r7,80430d4 <strncmp+0xe8>
804305c: 31bfff04 addi r6,r6,-4
8043060: 30001a26 beq r6,zero,80430cc <strncmp+0xe0>
8043064: 1000191e bne r2,zero,80430cc <strncmp+0xe0>
8043068: 30800130 cmpltui r2,r6,4
804306c: 21000104 addi r4,r4,4
8043070: 29400104 addi r5,r5,4
8043074: 103ff226 beq r2,zero,8043040 <strncmp+0x54>
8043078: 20800007 ldb r2,0(r4)
804307c: 28c00007 ldb r3,0(r5)
8043080: 31bfffc4 addi r6,r6,-1
8043084: 10c00d1e bne r2,r3,80430bc <strncmp+0xd0>
8043088: 30001026 beq r6,zero,80430cc <strncmp+0xe0>
804308c: 10000f26 beq r2,zero,80430cc <strncmp+0xe0>
8043090: 20800044 addi r2,r4,1
8043094: 218d883a add r6,r4,r6
8043098: 00000306 br 80430a8 <strncmp+0xbc>
804309c: 11800b26 beq r2,r6,80430cc <strncmp+0xe0>
80430a0: 10800044 addi r2,r2,1
80430a4: 18000926 beq r3,zero,80430cc <strncmp+0xe0>
80430a8: 29400044 addi r5,r5,1
80430ac: 10c00007 ldb r3,0(r2)
80430b0: 29c00007 ldb r7,0(r5)
80430b4: 1009883a mov r4,r2
80430b8: 19fff826 beq r3,r7,804309c <strncmp+0xb0>
80430bc: 20800003 ldbu r2,0(r4)
80430c0: 28c00003 ldbu r3,0(r5)
80430c4: 10c5c83a sub r2,r2,r3
80430c8: f800283a ret
80430cc: 0005883a mov r2,zero
80430d0: f800283a ret
80430d4: 28c00007 ldb r3,0(r5)
80430d8: 20800007 ldb r2,0(r4)
80430dc: 31bfffc4 addi r6,r6,-1
80430e0: 18bfea26 beq r3,r2,804308c <strncmp+0xa0>
80430e4: 003ff506 br 80430bc <strncmp+0xd0>
080430e8 <_strtol_l.isra.0>:
80430e8: defff504 addi sp,sp,-44
80430ec: dd400615 stw r21,24(sp)
80430f0: dd000515 stw r20,20(sp)
80430f4: dcc00415 stw r19,16(sp)
80430f8: d9000015 stw r4,0(sp)
80430fc: dfc00a15 stw ra,40(sp)
8043100: df000915 stw fp,36(sp)
8043104: ddc00815 stw r23,32(sp)
8043108: dd800715 stw r22,28(sp)
804310c: dc800315 stw r18,12(sp)
8043110: dc400215 stw r17,8(sp)
8043114: dc000115 stw r16,4(sp)
8043118: 2827883a mov r19,r5
804311c: 3029883a mov r20,r6
8043120: 382b883a mov r21,r7
8043124: 2809883a mov r4,r5
8043128: 00000106 br 8043130 <_strtol_l.isra.0+0x48>
804312c: 8009883a mov r4,r16
8043130: 24000044 addi r16,r4,1
8043134: 80ffffc3 ldbu r3,-1(r16)
8043138: 00820134 movhi r2,2052
804313c: 1885883a add r2,r3,r2
8043140: 109c75c3 ldbu r2,29143(r2)
8043144: 1080020c andi r2,r2,8
8043148: 103ff81e bne r2,zero,804312c <_strtol_l.isra.0+0x44>
804314c: 18800b58 cmpnei r2,r3,45
8043150: 10005226 beq r2,zero,804329c <_strtol_l.isra.0+0x1b4>
8043154: 18800ae0 cmpeqi r2,r3,43
8043158: 1000251e bne r2,zero,80431f0 <_strtol_l.isra.0+0x108>
804315c: 1823883a mov r17,r3
8043160: 0039883a mov fp,zero
8043164: a8002626 beq r21,zero,8043200 <_strtol_l.isra.0+0x118>
8043168: a8800420 cmpeqi r2,r21,16
804316c: 10004f1e bne r2,zero,80432ac <_strtol_l.isra.0+0x1c4>
8043170: a82d883a mov r22,r21
8043174: 05e00034 movhi r23,32768
8043178: e000011e bne fp,zero,8043180 <_strtol_l.isra.0+0x98>
804317c: bdffffc4 addi r23,r23,-1
8043180: b00b883a mov r5,r22
8043184: b809883a mov r4,r23
8043188: 800d05c0 call 800d05c <__umodsi3>
804318c: b00b883a mov r5,r22
8043190: b809883a mov r4,r23
8043194: 1025883a mov r18,r2
8043198: 800cff80 call 800cff8 <__udivsi3>
804319c: 100f883a mov r7,r2
80431a0: 000b883a mov r5,zero
80431a4: 0005883a mov r2,zero
80431a8: 88fff404 addi r3,r17,-48
80431ac: 190002a8 cmpgeui r4,r3,10
80431b0: 20000426 beq r4,zero,80431c4 <_strtol_l.isra.0+0xdc>
80431b4: 88ffefc4 addi r3,r17,-65
80431b8: 18c006a8 cmpgeui r3,r3,26
80431bc: 1800181e bne r3,zero,8043220 <_strtol_l.isra.0+0x138>
80431c0: 88fff244 addi r3,r17,-55
80431c4: 1d401b0e bge r3,r21,8043234 <_strtol_l.isra.0+0x14c>
80431c8: 293fffe0 cmpeqi r4,r5,-1
80431cc: 2000051e bne r4,zero,80431e4 <_strtol_l.isra.0+0xfc>
80431d0: 38801136 bltu r7,r2,8043218 <_strtol_l.isra.0+0x130>
80431d4: 38800f26 beq r7,r2,8043214 <_strtol_l.isra.0+0x12c>
80431d8: b089383a mul r4,r22,r2
80431dc: 01400044 movi r5,1
80431e0: 1905883a add r2,r3,r4
80431e4: 84000044 addi r16,r16,1
80431e8: 847fffc3 ldbu r17,-1(r16)
80431ec: 003fee06 br 80431a8 <_strtol_l.isra.0+0xc0>
80431f0: 84400003 ldbu r17,0(r16)
80431f4: 0039883a mov fp,zero
80431f8: 24000084 addi r16,r4,2
80431fc: a83fda1e bne r21,zero,8043168 <_strtol_l.isra.0+0x80>
8043200: 88800c20 cmpeqi r2,r17,48
8043204: 1000361e bne r2,zero,80432e0 <_strtol_l.isra.0+0x1f8>
8043208: 05800284 movi r22,10
804320c: 05400284 movi r21,10
8043210: 003fd806 br 8043174 <_strtol_l.isra.0+0x8c>
8043214: 90fff00e bge r18,r3,80431d8 <_strtol_l.isra.0+0xf0>
8043218: 017fffc4 movi r5,-1
804321c: 003ff106 br 80431e4 <_strtol_l.isra.0+0xfc>
8043220: 88ffe7c4 addi r3,r17,-97
8043224: 18c006a8 cmpgeui r3,r3,26
8043228: 1800021e bne r3,zero,8043234 <_strtol_l.isra.0+0x14c>
804322c: 88ffea44 addi r3,r17,-87
8043230: 1d7fe516 blt r3,r21,80431c8 <_strtol_l.isra.0+0xe0>
8043234: 28ffffd8 cmpnei r3,r5,-1
8043238: 18001126 beq r3,zero,8043280 <_strtol_l.isra.0+0x198>
804323c: e0000126 beq fp,zero,8043244 <_strtol_l.isra.0+0x15c>
8043240: 0085c83a sub r2,zero,r2
8043244: a0000226 beq r20,zero,8043250 <_strtol_l.isra.0+0x168>
8043248: 28002e1e bne r5,zero,8043304 <_strtol_l.isra.0+0x21c>
804324c: a4c00015 stw r19,0(r20)
8043250: dfc00a17 ldw ra,40(sp)
8043254: df000917 ldw fp,36(sp)
8043258: ddc00817 ldw r23,32(sp)
804325c: dd800717 ldw r22,28(sp)
8043260: dd400617 ldw r21,24(sp)
8043264: dd000517 ldw r20,20(sp)
8043268: dcc00417 ldw r19,16(sp)
804326c: dc800317 ldw r18,12(sp)
8043270: dc400217 ldw r17,8(sp)
8043274: dc000117 ldw r16,4(sp)
8043278: dec00b04 addi sp,sp,44
804327c: f800283a ret
8043280: d8c00017 ldw r3,0(sp)
8043284: 00800884 movi r2,34
8043288: 18800015 stw r2,0(r3)
804328c: a0001b26 beq r20,zero,80432fc <_strtol_l.isra.0+0x214>
8043290: 84ffffc4 addi r19,r16,-1
8043294: b805883a mov r2,r23
8043298: 003fec06 br 804324c <_strtol_l.isra.0+0x164>
804329c: 84400003 ldbu r17,0(r16)
80432a0: 07000044 movi fp,1
80432a4: 24000084 addi r16,r4,2
80432a8: 003fae06 br 8043164 <_strtol_l.isra.0+0x7c>
80432ac: 88800c18 cmpnei r2,r17,48
80432b0: 1000041e bne r2,zero,80432c4 <_strtol_l.isra.0+0x1dc>
80432b4: 80800003 ldbu r2,0(r16)
80432b8: 108037cc andi r2,r2,223
80432bc: 10801620 cmpeqi r2,r2,88
80432c0: 1000021e bne r2,zero,80432cc <_strtol_l.isra.0+0x1e4>
80432c4: 05800404 movi r22,16
80432c8: 003faa06 br 8043174 <_strtol_l.isra.0+0x8c>
80432cc: 84400043 ldbu r17,1(r16)
80432d0: 05800404 movi r22,16
80432d4: 84000084 addi r16,r16,2
80432d8: 05400404 movi r21,16
80432dc: 003fa506 br 8043174 <_strtol_l.isra.0+0x8c>
80432e0: 80800003 ldbu r2,0(r16)
80432e4: 108037cc andi r2,r2,223
80432e8: 10801620 cmpeqi r2,r2,88
80432ec: 103ff71e bne r2,zero,80432cc <_strtol_l.isra.0+0x1e4>
80432f0: 05800204 movi r22,8
80432f4: 05400204 movi r21,8
80432f8: 003f9e06 br 8043174 <_strtol_l.isra.0+0x8c>
80432fc: b805883a mov r2,r23
8043300: 003fd306 br 8043250 <_strtol_l.isra.0+0x168>
8043304: 102f883a mov r23,r2
8043308: 003fe106 br 8043290 <_strtol_l.isra.0+0x1a8>
0804330c <_strtol_r>:
804330c: 80430e81 jmpi 80430e8 <_strtol_l.isra.0>
08043310 <strtol_l>:
8043310: 00820174 movhi r2,2053
8043314: 300f883a mov r7,r6
8043318: 280d883a mov r6,r5
804331c: 200b883a mov r5,r4
8043320: 1132af17 ldw r4,-13636(r2)
8043324: 80430e81 jmpi 80430e8 <_strtol_l.isra.0>
08043328 <strtol>:
8043328: 00820174 movhi r2,2053
804332c: 300f883a mov r7,r6
8043330: 280d883a mov r6,r5
8043334: 200b883a mov r5,r4
8043338: 1132af17 ldw r4,-13636(r2)
804333c: 80430e81 jmpi 80430e8 <_strtol_l.isra.0>
08043340 <___svfprintf_internal_r>:
8043340: deffbd04 addi sp,sp,-268
8043344: dfc04215 stw ra,264(sp)
8043348: dd403e15 stw r21,248(sp)
804334c: dcc03c15 stw r19,240(sp)
8043350: d9000515 stw r4,20(sp)
8043354: 2827883a mov r19,r5
8043358: 302b883a mov r21,r6
804335c: d9c00615 stw r7,24(sp)
8043360: df004115 stw fp,260(sp)
8043364: ddc04015 stw r23,256(sp)
8043368: dd803f15 stw r22,252(sp)
804336c: dd003d15 stw r20,244(sp)
8043370: dc803b15 stw r18,236(sp)
8043374: dc403a15 stw r17,232(sp)
8043378: dc003915 stw r16,228(sp)
804337c: 8007bf00 call 8007bf0 <_localeconv_r>
8043380: 10800017 ldw r2,0(r2)
8043384: 1009883a mov r4,r2
8043388: d8800d15 stw r2,52(sp)
804338c: 8002dac0 call 8002dac <strlen>
8043390: d8800b15 stw r2,44(sp)
8043394: 9880030b ldhu r2,12(r19)
8043398: 1080200c andi r2,r2,128
804339c: 10000226 beq r2,zero,80433a8 <___svfprintf_internal_r+0x68>
80433a0: 98800417 ldw r2,16(r19)
80433a4: 10059a26 beq r2,zero,8044a10 <___svfprintf_internal_r+0x16d0>
80433a8: ddc02904 addi r23,sp,164
80433ac: ddc01c15 stw r23,112(sp)
80433b0: d8001e15 stw zero,120(sp)
80433b4: d8001d15 stw zero,116(sp)
80433b8: d8000815 stw zero,32(sp)
80433bc: d8000915 stw zero,36(sp)
80433c0: d8000a15 stw zero,40(sp)
80433c4: b811883a mov r8,r23
80433c8: d8000c15 stw zero,48(sp)
80433cc: d8001115 stw zero,68(sp)
80433d0: d8000415 stw zero,16(sp)
80433d4: a82d883a mov r22,r21
80433d8: b0800007 ldb r2,0(r22)
80433dc: 10009126 beq r2,zero,8043624 <___svfprintf_internal_r+0x2e4>
80433e0: 10800960 cmpeqi r2,r2,37
80433e4: 1004f61e bne r2,zero,80447c0 <___svfprintf_internal_r+0x1480>
80433e8: b021883a mov r16,r22
80433ec: 00000206 br 80433f8 <___svfprintf_internal_r+0xb8>
80433f0: 18008226 beq r3,zero,80435fc <___svfprintf_internal_r+0x2bc>
80433f4: 9021883a mov r16,r18
80433f8: 80800047 ldb r2,1(r16)
80433fc: 84800044 addi r18,r16,1
8043400: 10c00958 cmpnei r3,r2,37
8043404: 103ffa1e bne r2,zero,80433f0 <___svfprintf_internal_r+0xb0>
8043408: 95a3c83a sub r17,r18,r22
804340c: 88008526 beq r17,zero,8043624 <___svfprintf_internal_r+0x2e4>
8043410: d8c01e17 ldw r3,120(sp)
8043414: d8801d17 ldw r2,116(sp)
8043418: 45800015 stw r22,0(r8)
804341c: 1c47883a add r3,r3,r17
8043420: 10800044 addi r2,r2,1
8043424: d8801d15 stw r2,116(sp)
8043428: 44400115 stw r17,4(r8)
804342c: d8c01e15 stw r3,120(sp)
8043430: 10800208 cmpgei r2,r2,8
8043434: 1000741e bne r2,zero,8043608 <___svfprintf_internal_r+0x2c8>
8043438: 42000204 addi r8,r8,8
804343c: d8c00417 ldw r3,16(sp)
8043440: 80800047 ldb r2,1(r16)
8043444: 1c47883a add r3,r3,r17
8043448: d8c00415 stw r3,16(sp)
804344c: 10007526 beq r2,zero,8043624 <___svfprintf_internal_r+0x2e4>
8043450: 92800047 ldb r10,1(r18)
8043454: 95800044 addi r22,r18,1
8043458: d8001545 stb zero,85(sp)
804345c: 0009883a mov r4,zero
8043460: 000b883a mov r5,zero
8043464: 02ffffc4 movi r11,-1
8043468: 0023883a mov r17,zero
804346c: 0019883a mov r12,zero
8043470: b5800044 addi r22,r22,1
8043474: 5039883a mov fp,r10
8043478: e0bff804 addi r2,fp,-32
804347c: 10c01668 cmpgeui r3,r2,89
8043480: 18008a1e bne r3,zero,80436ac <___svfprintf_internal_r+0x36c>
8043484: 100490ba slli r2,r2,2
8043488: 00c20134 movhi r3,2052
804348c: 10c7883a add r3,r2,r3
8043490: 188d2617 ldw r2,13464(r3)
8043494: 1000683a jmp r2
8043498: 0804377c xorhi zero,at,4317
804349c: 080436ac andhi zero,at,4314
80434a0: 080436ac andhi zero,at,4314
80434a4: 08043770 cmpltui zero,at,4317
80434a8: 080436ac andhi zero,at,4314
80434ac: 080436ac andhi zero,at,4314
80434b0: 080436ac andhi zero,at,4314
80434b4: 080436ac andhi zero,at,4314
80434b8: 080436ac andhi zero,at,4314
80434bc: 080436ac andhi zero,at,4314
80434c0: 08043748 cmpgei zero,at,4317
80434c4: 08043738 rdprs zero,at,4316
80434c8: 080436ac andhi zero,at,4314
80434cc: 08043720 cmpeqi zero,at,4316
80434d0: 080436dc xori zero,at,4315
80434d4: 080436ac andhi zero,at,4314
80434d8: 080436d0 cmplti zero,at,4315
80434dc: 0804367c xorhi zero,at,4313
80434e0: 0804367c xorhi zero,at,4313
80434e4: 0804367c xorhi zero,at,4313
80434e8: 0804367c xorhi zero,at,4313
80434ec: 0804367c xorhi zero,at,4313
80434f0: 0804367c xorhi zero,at,4313
80434f4: 0804367c xorhi zero,at,4313
80434f8: 0804367c xorhi zero,at,4313
80434fc: 0804367c xorhi zero,at,4313
8043500: 080436ac andhi zero,at,4314
8043504: 080436ac andhi zero,at,4314
8043508: 080436ac andhi zero,at,4314
804350c: 080436ac andhi zero,at,4314
8043510: 080436ac andhi zero,at,4314
8043514: 080436ac andhi zero,at,4314
8043518: 080436ac andhi zero,at,4314
804351c: 080436ac andhi zero,at,4314
8043520: 080436ac andhi zero,at,4314
8043524: 080436ac andhi zero,at,4314
8043528: 08043d30 cmpltui zero,at,4340
804352c: 08043c50 cmplti zero,at,4337
8043530: 080436ac andhi zero,at,4314
8043534: 08043c50 cmplti zero,at,4337
8043538: 080436ac andhi zero,at,4314
804353c: 080436ac andhi zero,at,4314
8043540: 080436ac andhi zero,at,4314
8043544: 080436ac andhi zero,at,4314
8043548: 08043e84 addi zero,at,4346
804354c: 080436ac andhi zero,at,4314
8043550: 080436ac andhi zero,at,4314
8043554: 08043c1c xori zero,at,4336
8043558: 080436ac andhi zero,at,4314
804355c: 080436ac andhi zero,at,4314
8043560: 080436ac andhi zero,at,4314
8043564: 080436ac andhi zero,at,4314
8043568: 080436ac andhi zero,at,4314
804356c: 08043e50 cmplti zero,at,4345
8043570: 080436ac andhi zero,at,4314
8043574: 080436ac andhi zero,at,4314
8043578: 08043e08 cmpgei zero,at,4344
804357c: 080436ac andhi zero,at,4314
8043580: 080436ac andhi zero,at,4314
8043584: 080436ac andhi zero,at,4314
8043588: 080436ac andhi zero,at,4314
804358c: 080436ac andhi zero,at,4314
8043590: 080436ac andhi zero,at,4314
8043594: 080436ac andhi zero,at,4314
8043598: 080436ac andhi zero,at,4314
804359c: 080436ac andhi zero,at,4314
80435a0: 080436ac andhi zero,at,4314
80435a4: 08043904 addi zero,at,4324
80435a8: 08043890 cmplti zero,at,4322
80435ac: 08043c50 cmplti zero,at,4337
80435b0: 08043c50 cmplti zero,at,4337
80435b4: 08043c50 cmplti zero,at,4337
80435b8: 08043b88 cmpgei zero,at,4334
80435bc: 08043890 cmplti zero,at,4322
80435c0: 080436ac andhi zero,at,4314
80435c4: 080436ac andhi zero,at,4314
80435c8: 08043b74 orhi zero,at,4333
80435cc: 080436ac andhi zero,at,4314
80435d0: 08043b34 orhi zero,at,4332
80435d4: 08043af4 orhi zero,at,4331
80435d8: 08043ba0 cmpeqi zero,at,4334
80435dc: 08043b94 ori zero,at,4334
80435e0: 080436ac andhi zero,at,4314
80435e4: 08043830 cmpltui zero,at,4320
80435e8: 080436ac andhi zero,at,4314
80435ec: 080437f0 cmpltui zero,at,4319
80435f0: 080436ac andhi zero,at,4314
80435f4: 080436ac andhi zero,at,4314
80435f8: 080437a8 cmpgeui zero,at,4318
80435fc: 95a3c83a sub r17,r18,r22
8043600: 883f9326 beq r17,zero,8043450 <___svfprintf_internal_r+0x110>
8043604: 003f8206 br 8043410 <___svfprintf_internal_r+0xd0>
8043608: d9000517 ldw r4,20(sp)
804360c: d9801c04 addi r6,sp,112
8043610: 980b883a mov r5,r19
8043614: 80456900 call 8045690 <__ssprint_r>
8043618: 1000081e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
804361c: b811883a mov r8,r23
8043620: 003f8606 br 804343c <___svfprintf_internal_r+0xfc>
8043624: d8801e17 ldw r2,120(sp)
8043628: 10000426 beq r2,zero,804363c <___svfprintf_internal_r+0x2fc>
804362c: d9000517 ldw r4,20(sp)
8043630: d9801c04 addi r6,sp,112
8043634: 980b883a mov r5,r19
8043638: 80456900 call 8045690 <__ssprint_r>
804363c: 9880030b ldhu r2,12(r19)
8043640: 1080100c andi r2,r2,64
8043644: 10072d1e bne r2,zero,80452fc <___svfprintf_internal_r+0x1fbc>
8043648: d8800417 ldw r2,16(sp)
804364c: dfc04217 ldw ra,264(sp)
8043650: df004117 ldw fp,260(sp)
8043654: ddc04017 ldw r23,256(sp)
8043658: dd803f17 ldw r22,252(sp)
804365c: dd403e17 ldw r21,248(sp)
8043660: dd003d17 ldw r20,244(sp)
8043664: dcc03c17 ldw r19,240(sp)
8043668: dc803b17 ldw r18,236(sp)
804366c: dc403a17 ldw r17,232(sp)
8043670: dc003917 ldw r16,228(sp)
8043674: dec04304 addi sp,sp,268
8043678: f800283a ret
804367c: 0023883a mov r17,zero
8043680: e0bff404 addi r2,fp,-48
8043684: b5800044 addi r22,r22,1
8043688: 8c4002a4 muli r17,r17,10
804368c: b73fffc7 ldb fp,-1(r22)
8043690: 1463883a add r17,r2,r17
8043694: e0bff404 addi r2,fp,-48
8043698: 10c002b0 cmpltui r3,r2,10
804369c: 183ff91e bne r3,zero,8043684 <___svfprintf_internal_r+0x344>
80436a0: e0bff804 addi r2,fp,-32
80436a4: 10c01668 cmpgeui r3,r2,89
80436a8: 183f7626 beq r3,zero,8043484 <___svfprintf_internal_r+0x144>
80436ac: 21003fcc andi r4,r4,255
80436b0: 20068c1e bne r4,zero,80450e4 <___svfprintf_internal_r+0x1da4>
80436b4: e03fdb26 beq fp,zero,8043624 <___svfprintf_internal_r+0x2e4>
80436b8: df001f05 stb fp,124(sp)
80436bc: d8001545 stb zero,85(sp)
80436c0: 05000044 movi r20,1
80436c4: 05400044 movi r21,1
80436c8: dc001f04 addi r16,sp,124
80436cc: 00009606 br 8043928 <___svfprintf_internal_r+0x5e8>
80436d0: 63002014 ori r12,r12,128
80436d4: b2800007 ldb r10,0(r22)
80436d8: 003f6506 br 8043470 <___svfprintf_internal_r+0x130>
80436dc: b7000007 ldb fp,0(r22)
80436e0: b0c00044 addi r3,r22,1
80436e4: e0800aa0 cmpeqi r2,fp,42
80436e8: 1007491e bne r2,zero,8045410 <___svfprintf_internal_r+0x20d0>
80436ec: e0bff404 addi r2,fp,-48
80436f0: 118002b0 cmpltui r6,r2,10
80436f4: 182d883a mov r22,r3
80436f8: 0017883a mov r11,zero
80436fc: 303f5e26 beq r6,zero,8043478 <___svfprintf_internal_r+0x138>
8043700: b5800044 addi r22,r22,1
8043704: 5ac002a4 muli r11,r11,10
8043708: b73fffc7 ldb fp,-1(r22)
804370c: 5897883a add r11,r11,r2
8043710: e0bff404 addi r2,fp,-48
8043714: 10c002b0 cmpltui r3,r2,10
8043718: 183ff91e bne r3,zero,8043700 <___svfprintf_internal_r+0x3c0>
804371c: 003f5606 br 8043478 <___svfprintf_internal_r+0x138>
8043720: b7000003 ldbu fp,0(r22)
8043724: e2803fcc andi r10,fp,255
8043728: 5280201c xori r10,r10,128
804372c: 63000114 ori r12,r12,4
8043730: 52bfe004 addi r10,r10,-128
8043734: 003f4e06 br 8043470 <___svfprintf_internal_r+0x130>
8043738: 01000044 movi r4,1
804373c: 01400ac4 movi r5,43
8043740: b2800007 ldb r10,0(r22)
8043744: 003f4a06 br 8043470 <___svfprintf_internal_r+0x130>
8043748: d8800617 ldw r2,24(sp)
804374c: b7000003 ldbu fp,0(r22)
8043750: 14400017 ldw r17,0(r2)
8043754: 10800104 addi r2,r2,4
8043758: 88049016 blt r17,zero,804499c <___svfprintf_internal_r+0x165c>
804375c: d8800615 stw r2,24(sp)
8043760: e2803fcc andi r10,fp,255
8043764: 5280201c xori r10,r10,128
8043768: 52bfe004 addi r10,r10,-128
804376c: 003f4006 br 8043470 <___svfprintf_internal_r+0x130>
8043770: 63000054 ori r12,r12,1
8043774: b2800007 ldb r10,0(r22)
8043778: 003f3d06 br 8043470 <___svfprintf_internal_r+0x130>
804377c: 28803fcc andi r2,r5,255
8043780: 1080201c xori r2,r2,128
8043784: 10bfe004 addi r2,r2,-128
8043788: b7000003 ldbu fp,0(r22)
804378c: 103ff41e bne r2,zero,8043760 <___svfprintf_internal_r+0x420>
8043790: e2803fcc andi r10,fp,255
8043794: 5280201c xori r10,r10,128
8043798: 01000044 movi r4,1
804379c: 01400804 movi r5,32
80437a0: 52bfe004 addi r10,r10,-128
80437a4: 003f3206 br 8043470 <___svfprintf_internal_r+0x130>
80437a8: 21003fcc andi r4,r4,255
80437ac: 2006b01e bne r4,zero,8045270 <___svfprintf_internal_r+0x1f30>
80437b0: 00820134 movhi r2,2052
80437b4: 109d2004 addi r2,r2,29824
80437b8: d8800c15 stw r2,48(sp)
80437bc: 6080080c andi r2,r12,32
80437c0: 10019826 beq r2,zero,8043e24 <___svfprintf_internal_r+0xae4>
80437c4: d8800617 ldw r2,24(sp)
80437c8: 15000017 ldw r20,0(r2)
80437cc: 15400117 ldw r21,4(r2)
80437d0: 10800204 addi r2,r2,8
80437d4: d8800615 stw r2,24(sp)
80437d8: 6080004c andi r2,r12,1
80437dc: 10000226 beq r2,zero,80437e8 <___svfprintf_internal_r+0x4a8>
80437e0: a544b03a or r2,r20,r21
80437e4: 1004671e bne r2,zero,8044984 <___svfprintf_internal_r+0x1644>
80437e8: 00800084 movi r2,2
80437ec: 0000fb06 br 8043bdc <___svfprintf_internal_r+0x89c>
80437f0: 21003fcc andi r4,r4,255
80437f4: 20069a1e bne r4,zero,8045260 <___svfprintf_internal_r+0x1f20>
80437f8: 6080080c andi r2,r12,32
80437fc: 1001a41e bne r2,zero,8043e90 <___svfprintf_internal_r+0xb50>
8043800: d8800617 ldw r2,24(sp)
8043804: 60c0040c andi r3,r12,16
8043808: 15000017 ldw r20,0(r2)
804380c: 10800104 addi r2,r2,4
8043810: 1801961e bne r3,zero,8043e6c <___svfprintf_internal_r+0xb2c>
8043814: 60c0100c andi r3,r12,64
8043818: 1805ab26 beq r3,zero,8044ec8 <___svfprintf_internal_r+0x1b88>
804381c: d8800615 stw r2,24(sp)
8043820: a53fffcc andi r20,r20,65535
8043824: 002b883a mov r21,zero
8043828: 00800044 movi r2,1
804382c: 0000eb06 br 8043bdc <___svfprintf_internal_r+0x89c>
8043830: d8800617 ldw r2,24(sp)
8043834: d8001545 stb zero,85(sp)
8043838: 14000017 ldw r16,0(r2)
804383c: 14800104 addi r18,r2,4
8043840: 80051226 beq r16,zero,8044c8c <___svfprintf_internal_r+0x194c>
8043844: da000e15 stw r8,56(sp)
8043848: db000715 stw r12,28(sp)
804384c: 58bfffe0 cmpeqi r2,r11,-1
8043850: 1004671e bne r2,zero,80449f0 <___svfprintf_internal_r+0x16b0>
8043854: 580d883a mov r6,r11
8043858: 000b883a mov r5,zero
804385c: 8009883a mov r4,r16
8043860: dac00615 stw r11,24(sp)
8043864: 80085d00 call 80085d0 <memchr>
8043868: dac00617 ldw r11,24(sp)
804386c: db000717 ldw r12,28(sp)
8043870: da000e17 ldw r8,56(sp)
8043874: 10066826 beq r2,zero,8045218 <___svfprintf_internal_r+0x1ed8>
8043878: 142bc83a sub r21,r2,r16
804387c: a829883a mov r20,r21
8043880: a800010e bge r21,zero,8043888 <___svfprintf_internal_r+0x548>
8043884: 0029883a mov r20,zero
8043888: dc800615 stw r18,24(sp)
804388c: 00002606 br 8043928 <___svfprintf_internal_r+0x5e8>
8043890: 21003fcc andi r4,r4,255
8043894: 20067c1e bne r4,zero,8045288 <___svfprintf_internal_r+0x1f48>
8043898: 6080080c andi r2,r12,32
804389c: 1001831e bne r2,zero,8043eac <___svfprintf_internal_r+0xb6c>
80438a0: d8800617 ldw r2,24(sp)
80438a4: 60c0040c andi r3,r12,16
80438a8: 10800104 addi r2,r2,4
80438ac: 1801271e bne r3,zero,8043d4c <___svfprintf_internal_r+0xa0c>
80438b0: 60c0100c andi r3,r12,64
80438b4: 18012526 beq r3,zero,8043d4c <___svfprintf_internal_r+0xa0c>
80438b8: d8c00617 ldw r3,24(sp)
80438bc: d8800615 stw r2,24(sp)
80438c0: 1d00000f ldh r20,0(r3)
80438c4: a02bd7fa srai r21,r20,31
80438c8: a805883a mov r2,r21
80438cc: 10012516 blt r2,zero,8043d64 <___svfprintf_internal_r+0xa24>
80438d0: 58bfffd8 cmpnei r2,r11,-1
80438d4: db401543 ldbu r13,85(sp)
80438d8: 10018226 beq r2,zero,8043ee4 <___svfprintf_internal_r+0xba4>
80438dc: 00ffdfc4 movi r3,-129
80438e0: a544b03a or r2,r20,r21
80438e4: 60d8703a and r12,r12,r3
80438e8: 10017e1e bne r2,zero,8043ee4 <___svfprintf_internal_r+0xba4>
80438ec: 5801801e bne r11,zero,8043ef0 <___svfprintf_internal_r+0xbb0>
80438f0: 6025883a mov r18,r12
80438f4: 0017883a mov r11,zero
80438f8: 002b883a mov r21,zero
80438fc: b821883a mov r16,r23
8043900: 00018006 br 8043f04 <___svfprintf_internal_r+0xbc4>
8043904: d8c00617 ldw r3,24(sp)
8043908: d8001545 stb zero,85(sp)
804390c: 05000044 movi r20,1
8043910: 18800017 ldw r2,0(r3)
8043914: 18c00104 addi r3,r3,4
8043918: d8c00615 stw r3,24(sp)
804391c: d8801f05 stb r2,124(sp)
8043920: 05400044 movi r21,1
8043924: dc001f04 addi r16,sp,124
8043928: 6025883a mov r18,r12
804392c: 0017883a mov r11,zero
8043930: d8000715 stw zero,28(sp)
8043934: 9380008c andi r14,r18,2
8043938: 70000126 beq r14,zero,8043940 <___svfprintf_internal_r+0x600>
804393c: a5000084 addi r20,r20,2
8043940: 9340210c andi r13,r18,132
8043944: d8c01e17 ldw r3,120(sp)
8043948: 6800021e bne r13,zero,8043954 <___svfprintf_internal_r+0x614>
804394c: 8d0fc83a sub r7,r17,r20
8043950: 01c2a616 blt zero,r7,80443ec <___svfprintf_internal_r+0x10ac>
8043954: d8801547 ldb r2,85(sp)
8043958: 10000c26 beq r2,zero,804398c <___svfprintf_internal_r+0x64c>
804395c: d8801d17 ldw r2,116(sp)
8043960: d9001544 addi r4,sp,85
8043964: 18c00044 addi r3,r3,1
8043968: 10800044 addi r2,r2,1
804396c: 41000015 stw r4,0(r8)
8043970: 01000044 movi r4,1
8043974: d8801d15 stw r2,116(sp)
8043978: 41000115 stw r4,4(r8)
804397c: d8c01e15 stw r3,120(sp)
8043980: 10800208 cmpgei r2,r2,8
8043984: 1002d31e bne r2,zero,80444d4 <___svfprintf_internal_r+0x1194>
8043988: 42000204 addi r8,r8,8
804398c: 70000c26 beq r14,zero,80439c0 <___svfprintf_internal_r+0x680>
8043990: d8801d17 ldw r2,116(sp)
8043994: d9001584 addi r4,sp,86
8043998: 18c00084 addi r3,r3,2
804399c: 10800044 addi r2,r2,1
80439a0: 41000015 stw r4,0(r8)
80439a4: 01000084 movi r4,2
80439a8: d8801d15 stw r2,116(sp)
80439ac: 41000115 stw r4,4(r8)
80439b0: d8c01e15 stw r3,120(sp)
80439b4: 10800208 cmpgei r2,r2,8
80439b8: 1002d41e bne r2,zero,804450c <___svfprintf_internal_r+0x11cc>
80439bc: 42000204 addi r8,r8,8
80439c0: 6b402018 cmpnei r13,r13,128
80439c4: 6801ca26 beq r13,zero,80440f0 <___svfprintf_internal_r+0xdb0>
80439c8: 5d4fc83a sub r7,r11,r21
80439cc: 01c20116 blt zero,r7,80441d4 <___svfprintf_internal_r+0xe94>
80439d0: 9080400c andi r2,r18,256
80439d4: 1001791e bne r2,zero,8043fbc <___svfprintf_internal_r+0xc7c>
80439d8: d8801d17 ldw r2,116(sp)
80439dc: 1d47883a add r3,r3,r21
80439e0: 44000015 stw r16,0(r8)
80439e4: 10800044 addi r2,r2,1
80439e8: d8801d15 stw r2,116(sp)
80439ec: 45400115 stw r21,4(r8)
80439f0: d8c01e15 stw r3,120(sp)
80439f4: 10800208 cmpgei r2,r2,8
80439f8: 1002721e bne r2,zero,80443c4 <___svfprintf_internal_r+0x1084>
80439fc: 42000204 addi r8,r8,8
8043a00: 9480010c andi r18,r18,4
8043a04: 90000226 beq r18,zero,8043a10 <___svfprintf_internal_r+0x6d0>
8043a08: 8d21c83a sub r16,r17,r20
8043a0c: 04000916 blt zero,r16,8043a34 <___svfprintf_internal_r+0x6f4>
8043a10: 8d00010e bge r17,r20,8043a18 <___svfprintf_internal_r+0x6d8>
8043a14: a023883a mov r17,r20
8043a18: d8800417 ldw r2,16(sp)
8043a1c: 1445883a add r2,r2,r17
8043a20: d8800415 stw r2,16(sp)
8043a24: 18021f1e bne r3,zero,80442a4 <___svfprintf_internal_r+0xf64>
8043a28: d8001d15 stw zero,116(sp)
8043a2c: b811883a mov r8,r23
8043a30: 003e6906 br 80433d8 <___svfprintf_internal_r+0x98>
8043a34: 03020174 movhi r12,2053
8043a38: 81000450 cmplti r4,r16,17
8043a3c: 632e3844 addi r12,r12,-18207
8043a40: d8801d17 ldw r2,116(sp)
8043a44: 20001c1e bne r4,zero,8043ab8 <___svfprintf_internal_r+0x778>
8043a48: 04800404 movi r18,16
8043a4c: dd400517 ldw r21,20(sp)
8043a50: 6039883a mov fp,r12
8043a54: 00000406 br 8043a68 <___svfprintf_internal_r+0x728>
8043a58: 843ffc04 addi r16,r16,-16
8043a5c: 81000448 cmpgei r4,r16,17
8043a60: 42000204 addi r8,r8,8
8043a64: 20001326 beq r4,zero,8043ab4 <___svfprintf_internal_r+0x774>
8043a68: 10800044 addi r2,r2,1
8043a6c: 18c00404 addi r3,r3,16
8043a70: 47000015 stw fp,0(r8)
8043a74: 44800115 stw r18,4(r8)
8043a78: d8c01e15 stw r3,120(sp)
8043a7c: d8801d15 stw r2,116(sp)
8043a80: 11000208 cmpgei r4,r2,8
8043a84: 203ff426 beq r4,zero,8043a58 <___svfprintf_internal_r+0x718>
8043a88: d9801c04 addi r6,sp,112
8043a8c: 980b883a mov r5,r19
8043a90: a809883a mov r4,r21
8043a94: 80456900 call 8045690 <__ssprint_r>
8043a98: 103ee81e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8043a9c: 843ffc04 addi r16,r16,-16
8043aa0: 81000448 cmpgei r4,r16,17
8043aa4: d8c01e17 ldw r3,120(sp)
8043aa8: d8801d17 ldw r2,116(sp)
8043aac: b811883a mov r8,r23
8043ab0: 203fed1e bne r4,zero,8043a68 <___svfprintf_internal_r+0x728>
8043ab4: e019883a mov r12,fp
8043ab8: 10800044 addi r2,r2,1
8043abc: 1c07883a add r3,r3,r16
8043ac0: d8801d15 stw r2,116(sp)
8043ac4: 43000015 stw r12,0(r8)
8043ac8: 44000115 stw r16,4(r8)
8043acc: d8c01e15 stw r3,120(sp)
8043ad0: 10800210 cmplti r2,r2,8
8043ad4: 103fce1e bne r2,zero,8043a10 <___svfprintf_internal_r+0x6d0>
8043ad8: d9000517 ldw r4,20(sp)
8043adc: d9801c04 addi r6,sp,112
8043ae0: 980b883a mov r5,r19
8043ae4: 80456900 call 8045690 <__ssprint_r>
8043ae8: 103ed41e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8043aec: d8c01e17 ldw r3,120(sp)
8043af0: 003fc706 br 8043a10 <___svfprintf_internal_r+0x6d0>
8043af4: 21003fcc andi r4,r4,255
8043af8: 2005e11e bne r4,zero,8045280 <___svfprintf_internal_r+0x1f40>
8043afc: 6080080c andi r2,r12,32
8043b00: 1000f11e bne r2,zero,8043ec8 <___svfprintf_internal_r+0xb88>
8043b04: d8800617 ldw r2,24(sp)
8043b08: 60c0040c andi r3,r12,16
8043b0c: 15000017 ldw r20,0(r2)
8043b10: 10800104 addi r2,r2,4
8043b14: 1800481e bne r3,zero,8043c38 <___svfprintf_internal_r+0x8f8>
8043b18: 60c0100c andi r3,r12,64
8043b1c: 18053326 beq r3,zero,8044fec <___svfprintf_internal_r+0x1cac>
8043b20: d8800615 stw r2,24(sp)
8043b24: a53fffcc andi r20,r20,65535
8043b28: 002b883a mov r21,zero
8043b2c: 0005883a mov r2,zero
8043b30: 00002a06 br 8043bdc <___svfprintf_internal_r+0x89c>
8043b34: 21003fcc andi r4,r4,255
8043b38: 2005d71e bne r4,zero,8045298 <___svfprintf_internal_r+0x1f58>
8043b3c: d9000617 ldw r4,24(sp)
8043b40: 6080080c andi r2,r12,32
8043b44: 20c00104 addi r3,r4,4
8043b48: 1003871e bne r2,zero,8044968 <___svfprintf_internal_r+0x1628>
8043b4c: 6080040c andi r2,r12,16
8043b50: 1003dc1e bne r2,zero,8044ac4 <___svfprintf_internal_r+0x1784>
8043b54: 6300100c andi r12,r12,64
8043b58: 6003da26 beq r12,zero,8044ac4 <___svfprintf_internal_r+0x1784>
8043b5c: d8800617 ldw r2,24(sp)
8043b60: d8c00615 stw r3,24(sp)
8043b64: d8c00417 ldw r3,16(sp)
8043b68: 10800017 ldw r2,0(r2)
8043b6c: 10c0000d sth r3,0(r2)
8043b70: 003e1906 br 80433d8 <___svfprintf_internal_r+0x98>
8043b74: b2800007 ldb r10,0(r22)
8043b78: 50801b18 cmpnei r2,r10,108
8043b7c: 10043426 beq r2,zero,8044c50 <___svfprintf_internal_r+0x1910>
8043b80: 63000414 ori r12,r12,16
8043b84: 003e3a06 br 8043470 <___svfprintf_internal_r+0x130>
8043b88: 63001014 ori r12,r12,64
8043b8c: b2800007 ldb r10,0(r22)
8043b90: 003e3706 br 8043470 <___svfprintf_internal_r+0x130>
8043b94: 63000814 ori r12,r12,32
8043b98: b2800007 ldb r10,0(r22)
8043b9c: 003e3406 br 8043470 <___svfprintf_internal_r+0x130>
8043ba0: d8c00617 ldw r3,24(sp)
8043ba4: 00800c04 movi r2,48
8043ba8: d8801585 stb r2,86(sp)
8043bac: 00801e04 movi r2,120
8043bb0: 01020134 movhi r4,2052
8043bb4: d88015c5 stb r2,87(sp)
8043bb8: 1d000017 ldw r20,0(r3)
8043bbc: 18800104 addi r2,r3,4
8043bc0: d8800615 stw r2,24(sp)
8043bc4: 209d2004 addi r2,r4,29824
8043bc8: d8800c15 stw r2,48(sp)
8043bcc: 002b883a mov r21,zero
8043bd0: 63000094 ori r12,r12,2
8043bd4: 00800084 movi r2,2
8043bd8: 07001e04 movi fp,120
8043bdc: d8001545 stb zero,85(sp)
8043be0: 58ffffe0 cmpeqi r3,r11,-1
8043be4: 001b883a mov r13,zero
8043be8: 1800681e bne r3,zero,8043d8c <___svfprintf_internal_r+0xa4c>
8043bec: 04bfdfc4 movi r18,-129
8043bf0: a546b03a or r3,r20,r21
8043bf4: 64a4703a and r18,r12,r18
8043bf8: 1801fa1e bne r3,zero,80443e4 <___svfprintf_internal_r+0x10a4>
8043bfc: 5804101e bne r11,zero,8044c40 <___svfprintf_internal_r+0x1900>
8043c00: 103f3c1e bne r2,zero,80438f4 <___svfprintf_internal_r+0x5b4>
8043c04: 6540004c andi r21,r12,1
8043c08: a8030126 beq r21,zero,8044810 <___svfprintf_internal_r+0x14d0>
8043c0c: 00800c04 movi r2,48
8043c10: d88028c5 stb r2,163(sp)
8043c14: dc0028c4 addi r16,sp,163
8043c18: 0000ba06 br 8043f04 <___svfprintf_internal_r+0xbc4>
8043c1c: 21003fcc andi r4,r4,255
8043c20: 2005951e bne r4,zero,8045278 <___svfprintf_internal_r+0x1f38>
8043c24: 6080080c andi r2,r12,32
8043c28: 63000414 ori r12,r12,16
8043c2c: 1000a61e bne r2,zero,8043ec8 <___svfprintf_internal_r+0xb88>
8043c30: d8800617 ldw r2,24(sp)
8043c34: 10800104 addi r2,r2,4
8043c38: d8c00617 ldw r3,24(sp)
8043c3c: 002b883a mov r21,zero
8043c40: d8800615 stw r2,24(sp)
8043c44: 1d000017 ldw r20,0(r3)
8043c48: 0005883a mov r2,zero
8043c4c: 003fe306 br 8043bdc <___svfprintf_internal_r+0x89c>
8043c50: 21003fcc andi r4,r4,255
8043c54: 20058e1e bne r4,zero,8045290 <___svfprintf_internal_r+0x1f50>
8043c58: d8c00617 ldw r3,24(sp)
8043c5c: 00a00034 movhi r2,32768
8043c60: 10bfffc4 addi r2,r2,-1
8043c64: 1d000117 ldw r20,4(r3)
8043c68: 1c800017 ldw r18,0(r3)
8043c6c: 01dffc34 movhi r7,32752
8043c70: a0a0703a and r16,r20,r2
8043c74: 01bfffc4 movi r6,-1
8043c78: 18800204 addi r2,r3,8
8043c7c: 39ffffc4 addi r7,r7,-1
8043c80: 9009883a mov r4,r18
8043c84: 800b883a mov r5,r16
8043c88: da000f15 stw r8,60(sp)
8043c8c: dac00e15 stw r11,56(sp)
8043c90: db000715 stw r12,28(sp)
8043c94: dd000a15 stw r20,40(sp)
8043c98: dc800915 stw r18,36(sp)
8043c9c: d8800615 stw r2,24(sp)
8043ca0: 800f5580 call 800f558 <__unorddf2>
8043ca4: db000717 ldw r12,28(sp)
8043ca8: dac00e17 ldw r11,56(sp)
8043cac: da000f17 ldw r8,60(sp)
8043cb0: 1002d91e bne r2,zero,8044818 <___svfprintf_internal_r+0x14d8>
8043cb4: 01dffc34 movhi r7,32752
8043cb8: 01bfffc4 movi r6,-1
8043cbc: 39ffffc4 addi r7,r7,-1
8043cc0: 9009883a mov r4,r18
8043cc4: 800b883a mov r5,r16
8043cc8: 800e4700 call 800e470 <__ledf2>
8043ccc: db000717 ldw r12,28(sp)
8043cd0: dac00e17 ldw r11,56(sp)
8043cd4: da000f17 ldw r8,60(sp)
8043cd8: 0082cf0e bge zero,r2,8044818 <___svfprintf_internal_r+0x14d8>
8043cdc: 000d883a mov r6,zero
8043ce0: 000f883a mov r7,zero
8043ce4: 9009883a mov r4,r18
8043ce8: a00b883a mov r5,r20
8043cec: da000e15 stw r8,56(sp)
8043cf0: 800e4700 call 800e470 <__ledf2>
8043cf4: db000717 ldw r12,28(sp)
8043cf8: da000e17 ldw r8,56(sp)
8043cfc: 1004db16 blt r2,zero,804506c <___svfprintf_internal_r+0x1d2c>
8043d00: db401543 ldbu r13,85(sp)
8043d04: e0801210 cmplti r2,fp,72
8043d08: 1004b51e bne r2,zero,8044fe0 <___svfprintf_internal_r+0x1ca0>
8043d0c: 04020134 movhi r16,2052
8043d10: 841d1804 addi r16,r16,29792
8043d14: 04bfdfc4 movi r18,-129
8043d18: 64a4703a and r18,r12,r18
8043d1c: 050000c4 movi r20,3
8043d20: 054000c4 movi r21,3
8043d24: 0017883a mov r11,zero
8043d28: d8000715 stw zero,28(sp)
8043d2c: 00007906 br 8043f14 <___svfprintf_internal_r+0xbd4>
8043d30: 21003fcc andi r4,r4,255
8043d34: 20054c1e bne r4,zero,8045268 <___svfprintf_internal_r+0x1f28>
8043d38: 6080080c andi r2,r12,32
8043d3c: 63000414 ori r12,r12,16
8043d40: 10005a1e bne r2,zero,8043eac <___svfprintf_internal_r+0xb6c>
8043d44: d8800617 ldw r2,24(sp)
8043d48: 10800104 addi r2,r2,4
8043d4c: d8c00617 ldw r3,24(sp)
8043d50: 1d000017 ldw r20,0(r3)
8043d54: d8800615 stw r2,24(sp)
8043d58: a02bd7fa srai r21,r20,31
8043d5c: a805883a mov r2,r21
8043d60: 103edb0e bge r2,zero,80438d0 <___svfprintf_internal_r+0x590>
8043d64: 0529c83a sub r20,zero,r20
8043d68: a004c03a cmpne r2,r20,zero
8043d6c: 056bc83a sub r21,zero,r21
8043d70: a8abc83a sub r21,r21,r2
8043d74: 00800b44 movi r2,45
8043d78: d8801545 stb r2,85(sp)
8043d7c: 58ffffe0 cmpeqi r3,r11,-1
8043d80: 03400b44 movi r13,45
8043d84: 00800044 movi r2,1
8043d88: 183f9826 beq r3,zero,8043bec <___svfprintf_internal_r+0x8ac>
8043d8c: 10c00060 cmpeqi r3,r2,1
8043d90: 1800541e bne r3,zero,8043ee4 <___svfprintf_internal_r+0xba4>
8043d94: 108000a0 cmpeqi r2,r2,2
8043d98: 1001e81e bne r2,zero,804453c <___svfprintf_internal_r+0x11fc>
8043d9c: b807883a mov r3,r23
8043da0: 00000106 br 8043da8 <___svfprintf_internal_r+0xa68>
8043da4: 8007883a mov r3,r16
8043da8: a008d0fa srli r4,r20,3
8043dac: a80a977a slli r5,r21,29
8043db0: a82ad0fa srli r21,r21,3
8043db4: a50001cc andi r20,r20,7
8043db8: a0800c04 addi r2,r20,48
8043dbc: 2928b03a or r20,r5,r4
8043dc0: 18bfffc5 stb r2,-1(r3)
8043dc4: a548b03a or r4,r20,r21
8043dc8: 1c3fffc4 addi r16,r3,-1
8043dcc: 203ff51e bne r4,zero,8043da4 <___svfprintf_internal_r+0xa64>
8043dd0: 6100004c andi r4,r12,1
8043dd4: 20007626 beq r4,zero,8043fb0 <___svfprintf_internal_r+0xc70>
8043dd8: 10803fcc andi r2,r2,255
8043ddc: 1080201c xori r2,r2,128
8043de0: 10bfe004 addi r2,r2,-128
8043de4: 10800c18 cmpnei r2,r2,48
8043de8: 10007126 beq r2,zero,8043fb0 <___svfprintf_internal_r+0xc70>
8043dec: 18ffff84 addi r3,r3,-2
8043df0: 00800c04 movi r2,48
8043df4: 80bfffc5 stb r2,-1(r16)
8043df8: b8ebc83a sub r21,r23,r3
8043dfc: 6025883a mov r18,r12
8043e00: 1821883a mov r16,r3
8043e04: 00003f06 br 8043f04 <___svfprintf_internal_r+0xbc4>
8043e08: 21003fcc andi r4,r4,255
8043e0c: 2005121e bne r4,zero,8045258 <___svfprintf_internal_r+0x1f18>
8043e10: 00820134 movhi r2,2052
8043e14: 109d1b04 addi r2,r2,29804
8043e18: d8800c15 stw r2,48(sp)
8043e1c: 6080080c andi r2,r12,32
8043e20: 103e681e bne r2,zero,80437c4 <___svfprintf_internal_r+0x484>
8043e24: d8c00617 ldw r3,24(sp)
8043e28: 6080040c andi r2,r12,16
8043e2c: 1d000017 ldw r20,0(r3)
8043e30: 18c00104 addi r3,r3,4
8043e34: d8c00615 stw r3,24(sp)
8043e38: 10025f1e bne r2,zero,80447b8 <___svfprintf_internal_r+0x1478>
8043e3c: 6080100c andi r2,r12,64
8043e40: 10025d26 beq r2,zero,80447b8 <___svfprintf_internal_r+0x1478>
8043e44: a53fffcc andi r20,r20,65535
8043e48: 002b883a mov r21,zero
8043e4c: 003e6206 br 80437d8 <___svfprintf_internal_r+0x498>
8043e50: 21003fcc andi r4,r4,255
8043e54: 2005121e bne r4,zero,80452a0 <___svfprintf_internal_r+0x1f60>
8043e58: 6080080c andi r2,r12,32
8043e5c: 63000414 ori r12,r12,16
8043e60: 10000b1e bne r2,zero,8043e90 <___svfprintf_internal_r+0xb50>
8043e64: d8800617 ldw r2,24(sp)
8043e68: 10800104 addi r2,r2,4
8043e6c: d8c00617 ldw r3,24(sp)
8043e70: 002b883a mov r21,zero
8043e74: d8800615 stw r2,24(sp)
8043e78: 1d000017 ldw r20,0(r3)
8043e7c: 00800044 movi r2,1
8043e80: 003f5606 br 8043bdc <___svfprintf_internal_r+0x89c>
8043e84: 63000214 ori r12,r12,8
8043e88: b2800007 ldb r10,0(r22)
8043e8c: 003d7806 br 8043470 <___svfprintf_internal_r+0x130>
8043e90: d8c00617 ldw r3,24(sp)
8043e94: 00800044 movi r2,1
8043e98: 1d000017 ldw r20,0(r3)
8043e9c: 1d400117 ldw r21,4(r3)
8043ea0: 18c00204 addi r3,r3,8
8043ea4: d8c00615 stw r3,24(sp)
8043ea8: 003f4c06 br 8043bdc <___svfprintf_internal_r+0x89c>
8043eac: d8c00617 ldw r3,24(sp)
8043eb0: 18800117 ldw r2,4(r3)
8043eb4: 1d000017 ldw r20,0(r3)
8043eb8: 18c00204 addi r3,r3,8
8043ebc: d8c00615 stw r3,24(sp)
8043ec0: 102b883a mov r21,r2
8043ec4: 003e8106 br 80438cc <___svfprintf_internal_r+0x58c>
8043ec8: d8c00617 ldw r3,24(sp)
8043ecc: 0005883a mov r2,zero
8043ed0: 1d000017 ldw r20,0(r3)
8043ed4: 1d400117 ldw r21,4(r3)
8043ed8: 18c00204 addi r3,r3,8
8043edc: d8c00615 stw r3,24(sp)
8043ee0: 003f3e06 br 8043bdc <___svfprintf_internal_r+0x89c>
8043ee4: a800111e bne r21,zero,8043f2c <___svfprintf_internal_r+0xbec>
8043ee8: a08002a8 cmpgeui r2,r20,10
8043eec: 10000f1e bne r2,zero,8043f2c <___svfprintf_internal_r+0xbec>
8043ef0: a5000c04 addi r20,r20,48
8043ef4: dd0028c5 stb r20,163(sp)
8043ef8: 6025883a mov r18,r12
8043efc: 05400044 movi r21,1
8043f00: dc0028c4 addi r16,sp,163
8043f04: 5829883a mov r20,r11
8043f08: 5d40010e bge r11,r21,8043f10 <___svfprintf_internal_r+0xbd0>
8043f0c: a829883a mov r20,r21
8043f10: d8000715 stw zero,28(sp)
8043f14: 6b403fcc andi r13,r13,255
8043f18: 6b40201c xori r13,r13,128
8043f1c: 6b7fe004 addi r13,r13,-128
8043f20: 683e8426 beq r13,zero,8043934 <___svfprintf_internal_r+0x5f4>
8043f24: a5000044 addi r20,r20,1
8043f28: 003e8206 br 8043934 <___svfprintf_internal_r+0x5f4>
8043f2c: dc400e15 stw r17,56(sp)
8043f30: b821883a mov r16,r23
8043f34: a823883a mov r17,r21
8043f38: db000715 stw r12,28(sp)
8043f3c: 982b883a mov r21,r19
8043f40: dac00f15 stw r11,60(sp)
8043f44: 4025883a mov r18,r8
8043f48: 6827883a mov r19,r13
8043f4c: 00000206 br 8043f58 <___svfprintf_internal_r+0xc18>
8043f50: 1029883a mov r20,r2
8043f54: 1823883a mov r17,r3
8043f58: a009883a mov r4,r20
8043f5c: 880b883a mov r5,r17
8043f60: 01800284 movi r6,10
8043f64: 000f883a mov r7,zero
8043f68: 800c9c00 call 800c9c0 <__umoddi3>
8043f6c: 10800c04 addi r2,r2,48
8043f70: 843fffc4 addi r16,r16,-1
8043f74: a009883a mov r4,r20
8043f78: 880b883a mov r5,r17
8043f7c: 80800005 stb r2,0(r16)
8043f80: 01800284 movi r6,10
8043f84: 000f883a mov r7,zero
8043f88: 800c4280 call 800c428 <__udivdi3>
8043f8c: 883ff01e bne r17,zero,8043f50 <___svfprintf_internal_r+0xc10>
8043f90: a50002a8 cmpgeui r20,r20,10
8043f94: a03fee1e bne r20,zero,8043f50 <___svfprintf_internal_r+0xc10>
8043f98: db000717 ldw r12,28(sp)
8043f9c: dc400e17 ldw r17,56(sp)
8043fa0: dac00f17 ldw r11,60(sp)
8043fa4: 981b883a mov r13,r19
8043fa8: 9011883a mov r8,r18
8043fac: a827883a mov r19,r21
8043fb0: bc2bc83a sub r21,r23,r16
8043fb4: 6025883a mov r18,r12
8043fb8: 003fd206 br 8043f04 <___svfprintf_internal_r+0xbc4>
8043fbc: e2801990 cmplti r10,fp,102
8043fc0: 5000be1e bne r10,zero,80442bc <___svfprintf_internal_r+0xf7c>
8043fc4: d9000917 ldw r4,36(sp)
8043fc8: d9400a17 ldw r5,40(sp)
8043fcc: 000d883a mov r6,zero
8043fd0: 000f883a mov r7,zero
8043fd4: da000f15 stw r8,60(sp)
8043fd8: d8c00e15 stw r3,56(sp)
8043fdc: 800e3000 call 800e300 <__eqdf2>
8043fe0: d8c00e17 ldw r3,56(sp)
8043fe4: da000f17 ldw r8,60(sp)
8043fe8: 1001641e bne r2,zero,804457c <___svfprintf_internal_r+0x123c>
8043fec: d8801d17 ldw r2,116(sp)
8043ff0: 01020134 movhi r4,2052
8043ff4: 211d2704 addi r4,r4,29852
8043ff8: 10800044 addi r2,r2,1
8043ffc: 18c00044 addi r3,r3,1
8044000: 41000015 stw r4,0(r8)
8044004: 01000044 movi r4,1
8044008: d8801d15 stw r2,116(sp)
804400c: 41000115 stw r4,4(r8)
8044010: d8c01e15 stw r3,120(sp)
8044014: 10800208 cmpgei r2,r2,8
8044018: 1002f81e bne r2,zero,8044bfc <___svfprintf_internal_r+0x18bc>
804401c: 42000204 addi r8,r8,8
8044020: d8801617 ldw r2,88(sp)
8044024: d8c00817 ldw r3,32(sp)
8044028: 10c00216 blt r2,r3,8044034 <___svfprintf_internal_r+0xcf4>
804402c: 9080004c andi r2,r18,1
8044030: 10026826 beq r2,zero,80449d4 <___svfprintf_internal_r+0x1694>
8044034: d8800d17 ldw r2,52(sp)
8044038: d8c01e17 ldw r3,120(sp)
804403c: d9000b17 ldw r4,44(sp)
8044040: 40800015 stw r2,0(r8)
8044044: d8801d17 ldw r2,116(sp)
8044048: 20c7883a add r3,r4,r3
804404c: 41000115 stw r4,4(r8)
8044050: 10800044 addi r2,r2,1
8044054: d8801d15 stw r2,116(sp)
8044058: d8c01e15 stw r3,120(sp)
804405c: 10800208 cmpgei r2,r2,8
8044060: 1003021e bne r2,zero,8044c6c <___svfprintf_internal_r+0x192c>
8044064: 42000204 addi r8,r8,8
8044068: d8800817 ldw r2,32(sp)
804406c: 143fffc4 addi r16,r2,-1
8044070: 043e630e bge zero,r16,8043a00 <___svfprintf_internal_r+0x6c0>
8044074: 03020174 movhi r12,2053
8044078: 81000450 cmplti r4,r16,17
804407c: 632e3444 addi r12,r12,-18223
8044080: d8801d17 ldw r2,116(sp)
8044084: 2003381e bne r4,zero,8044d68 <___svfprintf_internal_r+0x1a28>
8044088: dc400715 stw r17,28(sp)
804408c: 05400404 movi r21,16
8044090: df000517 ldw fp,20(sp)
8044094: 6023883a mov r17,r12
8044098: 00000406 br 80440ac <___svfprintf_internal_r+0xd6c>
804409c: 42000204 addi r8,r8,8
80440a0: 843ffc04 addi r16,r16,-16
80440a4: 81000448 cmpgei r4,r16,17
80440a8: 20032d26 beq r4,zero,8044d60 <___svfprintf_internal_r+0x1a20>
80440ac: 10800044 addi r2,r2,1
80440b0: 18c00404 addi r3,r3,16
80440b4: 44400015 stw r17,0(r8)
80440b8: 45400115 stw r21,4(r8)
80440bc: d8c01e15 stw r3,120(sp)
80440c0: d8801d15 stw r2,116(sp)
80440c4: 11000208 cmpgei r4,r2,8
80440c8: 203ff426 beq r4,zero,804409c <___svfprintf_internal_r+0xd5c>
80440cc: d9801c04 addi r6,sp,112
80440d0: 980b883a mov r5,r19
80440d4: e009883a mov r4,fp
80440d8: 80456900 call 8045690 <__ssprint_r>
80440dc: 103d571e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80440e0: d8c01e17 ldw r3,120(sp)
80440e4: d8801d17 ldw r2,116(sp)
80440e8: b811883a mov r8,r23
80440ec: 003fec06 br 80440a0 <___svfprintf_internal_r+0xd60>
80440f0: 8d0fc83a sub r7,r17,r20
80440f4: 01fe340e bge zero,r7,80439c8 <___svfprintf_internal_r+0x688>
80440f8: 03020174 movhi r12,2053
80440fc: 39000450 cmplti r4,r7,17
8044100: 632e3444 addi r12,r12,-18223
8044104: d8801d17 ldw r2,116(sp)
8044108: 2000271e bne r4,zero,80441a8 <___svfprintf_internal_r+0xe68>
804410c: dc800e15 stw r18,56(sp)
8044110: dc000f15 stw r16,60(sp)
8044114: dc401015 stw r17,64(sp)
8044118: 03400404 movi r13,16
804411c: 3821883a mov r16,r7
8044120: dac01215 stw r11,72(sp)
8044124: dc400517 ldw r17,20(sp)
8044128: 6025883a mov r18,r12
804412c: 00000406 br 8044140 <___svfprintf_internal_r+0xe00>
8044130: 843ffc04 addi r16,r16,-16
8044134: 81000448 cmpgei r4,r16,17
8044138: 42000204 addi r8,r8,8
804413c: 20001426 beq r4,zero,8044190 <___svfprintf_internal_r+0xe50>
8044140: 10800044 addi r2,r2,1
8044144: 18c00404 addi r3,r3,16
8044148: 44800015 stw r18,0(r8)
804414c: 43400115 stw r13,4(r8)
8044150: d8c01e15 stw r3,120(sp)
8044154: d8801d15 stw r2,116(sp)
8044158: 11000208 cmpgei r4,r2,8
804415c: 203ff426 beq r4,zero,8044130 <___svfprintf_internal_r+0xdf0>
8044160: d9801c04 addi r6,sp,112
8044164: 980b883a mov r5,r19
8044168: 8809883a mov r4,r17
804416c: 80456900 call 8045690 <__ssprint_r>
8044170: 103d321e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044174: 843ffc04 addi r16,r16,-16
8044178: 81000448 cmpgei r4,r16,17
804417c: d8c01e17 ldw r3,120(sp)
8044180: d8801d17 ldw r2,116(sp)
8044184: b811883a mov r8,r23
8044188: 03400404 movi r13,16
804418c: 203fec1e bne r4,zero,8044140 <___svfprintf_internal_r+0xe00>
8044190: 800f883a mov r7,r16
8044194: 9019883a mov r12,r18
8044198: dc000f17 ldw r16,60(sp)
804419c: dc401017 ldw r17,64(sp)
80441a0: dac01217 ldw r11,72(sp)
80441a4: dc800e17 ldw r18,56(sp)
80441a8: 10800044 addi r2,r2,1
80441ac: 19c7883a add r3,r3,r7
80441b0: d8801d15 stw r2,116(sp)
80441b4: 43000015 stw r12,0(r8)
80441b8: 41c00115 stw r7,4(r8)
80441bc: d8c01e15 stw r3,120(sp)
80441c0: 10800208 cmpgei r2,r2,8
80441c4: 1002941e bne r2,zero,8044c18 <___svfprintf_internal_r+0x18d8>
80441c8: 5d4fc83a sub r7,r11,r21
80441cc: 42000204 addi r8,r8,8
80441d0: 01fdff0e bge zero,r7,80439d0 <___svfprintf_internal_r+0x690>
80441d4: 03020174 movhi r12,2053
80441d8: 39000450 cmplti r4,r7,17
80441dc: 632e3444 addi r12,r12,-18223
80441e0: d8801d17 ldw r2,116(sp)
80441e4: 2000251e bne r4,zero,804427c <___svfprintf_internal_r+0xf3c>
80441e8: dc800e15 stw r18,56(sp)
80441ec: dc000f15 stw r16,60(sp)
80441f0: dc401015 stw r17,64(sp)
80441f4: 02c00404 movi r11,16
80441f8: 3821883a mov r16,r7
80441fc: dc400517 ldw r17,20(sp)
8044200: 6025883a mov r18,r12
8044204: 00000406 br 8044218 <___svfprintf_internal_r+0xed8>
8044208: 843ffc04 addi r16,r16,-16
804420c: 81000448 cmpgei r4,r16,17
8044210: 42000204 addi r8,r8,8
8044214: 20001426 beq r4,zero,8044268 <___svfprintf_internal_r+0xf28>
8044218: 10800044 addi r2,r2,1
804421c: 18c00404 addi r3,r3,16
8044220: 44800015 stw r18,0(r8)
8044224: 42c00115 stw r11,4(r8)
8044228: d8c01e15 stw r3,120(sp)
804422c: d8801d15 stw r2,116(sp)
8044230: 11000208 cmpgei r4,r2,8
8044234: 203ff426 beq r4,zero,8044208 <___svfprintf_internal_r+0xec8>
8044238: d9801c04 addi r6,sp,112
804423c: 980b883a mov r5,r19
8044240: 8809883a mov r4,r17
8044244: 80456900 call 8045690 <__ssprint_r>
8044248: 103cfc1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
804424c: 843ffc04 addi r16,r16,-16
8044250: 81000448 cmpgei r4,r16,17
8044254: d8c01e17 ldw r3,120(sp)
8044258: d8801d17 ldw r2,116(sp)
804425c: b811883a mov r8,r23
8044260: 02c00404 movi r11,16
8044264: 203fec1e bne r4,zero,8044218 <___svfprintf_internal_r+0xed8>
8044268: 800f883a mov r7,r16
804426c: 9019883a mov r12,r18
8044270: dc401017 ldw r17,64(sp)
8044274: dc000f17 ldw r16,60(sp)
8044278: dc800e17 ldw r18,56(sp)
804427c: 10800044 addi r2,r2,1
8044280: 19c7883a add r3,r3,r7
8044284: d8801d15 stw r2,116(sp)
8044288: 43000015 stw r12,0(r8)
804428c: 41c00115 stw r7,4(r8)
8044290: d8c01e15 stw r3,120(sp)
8044294: 10800208 cmpgei r2,r2,8
8044298: 10013f1e bne r2,zero,8044798 <___svfprintf_internal_r+0x1458>
804429c: 42000204 addi r8,r8,8
80442a0: 003dcb06 br 80439d0 <___svfprintf_internal_r+0x690>
80442a4: d9000517 ldw r4,20(sp)
80442a8: d9801c04 addi r6,sp,112
80442ac: 980b883a mov r5,r19
80442b0: 80456900 call 8045690 <__ssprint_r>
80442b4: 103ddc26 beq r2,zero,8043a28 <___svfprintf_internal_r+0x6e8>
80442b8: 003ce006 br 804363c <___svfprintf_internal_r+0x2fc>
80442bc: d8800817 ldw r2,32(sp)
80442c0: df001d17 ldw fp,116(sp)
80442c4: 18c00044 addi r3,r3,1
80442c8: 10800088 cmpgei r2,r2,2
80442cc: e5400044 addi r21,fp,1
80442d0: 42800204 addi r10,r8,8
80442d4: 10010226 beq r2,zero,80446e0 <___svfprintf_internal_r+0x13a0>
80442d8: 00800044 movi r2,1
80442dc: 40800115 stw r2,4(r8)
80442e0: 44000015 stw r16,0(r8)
80442e4: d8c01e15 stw r3,120(sp)
80442e8: dd401d15 stw r21,116(sp)
80442ec: a8800210 cmplti r2,r21,8
80442f0: 10013e26 beq r2,zero,80447ec <___svfprintf_internal_r+0x14ac>
80442f4: d8800b17 ldw r2,44(sp)
80442f8: d9000d17 ldw r4,52(sp)
80442fc: ad400044 addi r21,r21,1
8044300: 1887883a add r3,r3,r2
8044304: 50800115 stw r2,4(r10)
8044308: 51000015 stw r4,0(r10)
804430c: d8c01e15 stw r3,120(sp)
8044310: dd401d15 stw r21,116(sp)
8044314: a8800208 cmpgei r2,r21,8
8044318: 10012b1e bne r2,zero,80447c8 <___svfprintf_internal_r+0x1488>
804431c: 52800204 addi r10,r10,8
8044320: d8800817 ldw r2,32(sp)
8044324: d9000917 ldw r4,36(sp)
8044328: d9400a17 ldw r5,40(sp)
804432c: 52000204 addi r8,r10,8
8044330: 12ffffc4 addi r11,r2,-1
8044334: af000044 addi fp,r21,1
8044338: 000d883a mov r6,zero
804433c: 000f883a mov r7,zero
8044340: d8c01215 stw r3,72(sp)
8044344: da800f15 stw r10,60(sp)
8044348: da000e15 stw r8,56(sp)
804434c: dac00715 stw r11,28(sp)
8044350: df001015 stw fp,64(sp)
8044354: 800e3000 call 800e300 <__eqdf2>
8044358: dac00717 ldw r11,28(sp)
804435c: da000e17 ldw r8,56(sp)
8044360: da800f17 ldw r10,60(sp)
8044364: db401017 ldw r13,64(sp)
8044368: d8c01217 ldw r3,72(sp)
804436c: 1000e826 beq r2,zero,8044710 <___svfprintf_internal_r+0x13d0>
8044370: 84000044 addi r16,r16,1
8044374: 1ac7883a add r3,r3,r11
8044378: df001d15 stw fp,116(sp)
804437c: 54000015 stw r16,0(r10)
8044380: 52c00115 stw r11,4(r10)
8044384: d8c01e15 stw r3,120(sp)
8044388: e7000208 cmpgei fp,fp,8
804438c: e001da1e bne fp,zero,8044af8 <___svfprintf_internal_r+0x17b8>
8044390: 50800404 addi r2,r10,16
8044394: af000084 addi fp,r21,2
8044398: 4015883a mov r10,r8
804439c: 1011883a mov r8,r2
80443a0: d9001117 ldw r4,68(sp)
80443a4: d8801844 addi r2,sp,97
80443a8: df001d15 stw fp,116(sp)
80443ac: 20c7883a add r3,r4,r3
80443b0: 50800015 stw r2,0(r10)
80443b4: 51000115 stw r4,4(r10)
80443b8: d8c01e15 stw r3,120(sp)
80443bc: e7000210 cmplti fp,fp,8
80443c0: e03d8f1e bne fp,zero,8043a00 <___svfprintf_internal_r+0x6c0>
80443c4: d9000517 ldw r4,20(sp)
80443c8: d9801c04 addi r6,sp,112
80443cc: 980b883a mov r5,r19
80443d0: 80456900 call 8045690 <__ssprint_r>
80443d4: 103c991e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80443d8: d8c01e17 ldw r3,120(sp)
80443dc: b811883a mov r8,r23
80443e0: 003d8706 br 8043a00 <___svfprintf_internal_r+0x6c0>
80443e4: 9019883a mov r12,r18
80443e8: 003e6806 br 8043d8c <___svfprintf_internal_r+0xa4c>
80443ec: 03020174 movhi r12,2053
80443f0: 39000450 cmplti r4,r7,17
80443f4: 632e3844 addi r12,r12,-18207
80443f8: d8801d17 ldw r2,116(sp)
80443fc: 20002b1e bne r4,zero,80444ac <___svfprintf_internal_r+0x116c>
8044400: dc801015 stw r18,64(sp)
8044404: dc001215 stw r16,72(sp)
8044408: dc401315 stw r17,76(sp)
804440c: 03c00404 movi r15,16
8044410: db800e15 stw r14,56(sp)
8044414: db400f15 stw r13,60(sp)
8044418: dac01415 stw r11,80(sp)
804441c: 3821883a mov r16,r7
8044420: dc400517 ldw r17,20(sp)
8044424: 6025883a mov r18,r12
8044428: 00000406 br 804443c <___svfprintf_internal_r+0x10fc>
804442c: 843ffc04 addi r16,r16,-16
8044430: 81000448 cmpgei r4,r16,17
8044434: 42000204 addi r8,r8,8
8044438: 20001426 beq r4,zero,804448c <___svfprintf_internal_r+0x114c>
804443c: 10800044 addi r2,r2,1
8044440: 18c00404 addi r3,r3,16
8044444: 44800015 stw r18,0(r8)
8044448: 43c00115 stw r15,4(r8)
804444c: d8c01e15 stw r3,120(sp)
8044450: d8801d15 stw r2,116(sp)
8044454: 11000208 cmpgei r4,r2,8
8044458: 203ff426 beq r4,zero,804442c <___svfprintf_internal_r+0x10ec>
804445c: d9801c04 addi r6,sp,112
8044460: 980b883a mov r5,r19
8044464: 8809883a mov r4,r17
8044468: 80456900 call 8045690 <__ssprint_r>
804446c: 103c731e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044470: 843ffc04 addi r16,r16,-16
8044474: 81000448 cmpgei r4,r16,17
8044478: d8c01e17 ldw r3,120(sp)
804447c: d8801d17 ldw r2,116(sp)
8044480: b811883a mov r8,r23
8044484: 03c00404 movi r15,16
8044488: 203fec1e bne r4,zero,804443c <___svfprintf_internal_r+0x10fc>
804448c: 800f883a mov r7,r16
8044490: 9019883a mov r12,r18
8044494: db800e17 ldw r14,56(sp)
8044498: db400f17 ldw r13,60(sp)
804449c: dc401317 ldw r17,76(sp)
80444a0: dac01417 ldw r11,80(sp)
80444a4: dc001217 ldw r16,72(sp)
80444a8: dc801017 ldw r18,64(sp)
80444ac: 10800044 addi r2,r2,1
80444b0: 19c7883a add r3,r3,r7
80444b4: d8801d15 stw r2,116(sp)
80444b8: 43000015 stw r12,0(r8)
80444bc: 41c00115 stw r7,4(r8)
80444c0: d8c01e15 stw r3,120(sp)
80444c4: 10800208 cmpgei r2,r2,8
80444c8: 1001be1e bne r2,zero,8044bc4 <___svfprintf_internal_r+0x1884>
80444cc: 42000204 addi r8,r8,8
80444d0: 003d2006 br 8043954 <___svfprintf_internal_r+0x614>
80444d4: d9000517 ldw r4,20(sp)
80444d8: d9801c04 addi r6,sp,112
80444dc: 980b883a mov r5,r19
80444e0: dac01015 stw r11,64(sp)
80444e4: db400f15 stw r13,60(sp)
80444e8: db800e15 stw r14,56(sp)
80444ec: 80456900 call 8045690 <__ssprint_r>
80444f0: 103c521e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80444f4: d8c01e17 ldw r3,120(sp)
80444f8: b811883a mov r8,r23
80444fc: dac01017 ldw r11,64(sp)
8044500: db400f17 ldw r13,60(sp)
8044504: db800e17 ldw r14,56(sp)
8044508: 003d2006 br 804398c <___svfprintf_internal_r+0x64c>
804450c: d9000517 ldw r4,20(sp)
8044510: d9801c04 addi r6,sp,112
8044514: 980b883a mov r5,r19
8044518: dac00f15 stw r11,60(sp)
804451c: db400e15 stw r13,56(sp)
8044520: 80456900 call 8045690 <__ssprint_r>
8044524: 103c451e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044528: d8c01e17 ldw r3,120(sp)
804452c: b811883a mov r8,r23
8044530: dac00f17 ldw r11,60(sp)
8044534: db400e17 ldw r13,56(sp)
8044538: 003d2106 br 80439c0 <___svfprintf_internal_r+0x680>
804453c: d9000c17 ldw r4,48(sp)
8044540: b821883a mov r16,r23
8044544: a08003cc andi r2,r20,15
8044548: a806973a slli r3,r21,28
804454c: 2085883a add r2,r4,r2
8044550: a028d13a srli r20,r20,4
8044554: 10800003 ldbu r2,0(r2)
8044558: a82ad13a srli r21,r21,4
804455c: 843fffc4 addi r16,r16,-1
8044560: 1d28b03a or r20,r3,r20
8044564: 80800005 stb r2,0(r16)
8044568: a544b03a or r2,r20,r21
804456c: 103ff51e bne r2,zero,8044544 <___svfprintf_internal_r+0x1204>
8044570: bc2bc83a sub r21,r23,r16
8044574: 6025883a mov r18,r12
8044578: 003e6206 br 8043f04 <___svfprintf_internal_r+0xbc4>
804457c: d9001617 ldw r4,88(sp)
8044580: 0101680e bge zero,r4,8044b24 <___svfprintf_internal_r+0x17e4>
8044584: d8800817 ldw r2,32(sp)
8044588: d9000717 ldw r4,28(sp)
804458c: 1039883a mov fp,r2
8044590: 20810516 blt r4,r2,80449a8 <___svfprintf_internal_r+0x1668>
8044594: 07000a0e bge zero,fp,80445c0 <___svfprintf_internal_r+0x1280>
8044598: d8801d17 ldw r2,116(sp)
804459c: 1f07883a add r3,r3,fp
80445a0: 44000015 stw r16,0(r8)
80445a4: 10800044 addi r2,r2,1
80445a8: d8801d15 stw r2,116(sp)
80445ac: 47000115 stw fp,4(r8)
80445b0: d8c01e15 stw r3,120(sp)
80445b4: 10800208 cmpgei r2,r2,8
80445b8: 1003011e bne r2,zero,80451c0 <___svfprintf_internal_r+0x1e80>
80445bc: 42000204 addi r8,r8,8
80445c0: e0010616 blt fp,zero,80449dc <___svfprintf_internal_r+0x169c>
80445c4: d8800717 ldw r2,28(sp)
80445c8: 1739c83a sub fp,r2,fp
80445cc: 07011916 blt zero,fp,8044a34 <___svfprintf_internal_r+0x16f4>
80445d0: d9001617 ldw r4,88(sp)
80445d4: d8800817 ldw r2,32(sp)
80445d8: 2080f60e bge r4,r2,80449b4 <___svfprintf_internal_r+0x1674>
80445dc: d8800d17 ldw r2,52(sp)
80445e0: d9400b17 ldw r5,44(sp)
80445e4: 40800015 stw r2,0(r8)
80445e8: d8801d17 ldw r2,116(sp)
80445ec: 1947883a add r3,r3,r5
80445f0: 41400115 stw r5,4(r8)
80445f4: 10800044 addi r2,r2,1
80445f8: d8801d15 stw r2,116(sp)
80445fc: d8c01e15 stw r3,120(sp)
8044600: 10800208 cmpgei r2,r2,8
8044604: 1002a61e bne r2,zero,80450a0 <___svfprintf_internal_r+0x1d60>
8044608: 42000204 addi r8,r8,8
804460c: d8800817 ldw r2,32(sp)
8044610: d9400717 ldw r5,28(sp)
8044614: 1105c83a sub r2,r2,r4
8044618: 2901300e bge r5,r4,8044adc <___svfprintf_internal_r+0x179c>
804461c: 1039883a mov fp,r2
8044620: 07000c0e bge zero,fp,8044654 <___svfprintf_internal_r+0x1314>
8044624: d9000717 ldw r4,28(sp)
8044628: 1f07883a add r3,r3,fp
804462c: 47000115 stw fp,4(r8)
8044630: 8121883a add r16,r16,r4
8044634: d9001d17 ldw r4,116(sp)
8044638: 44000015 stw r16,0(r8)
804463c: d8c01e15 stw r3,120(sp)
8044640: 21000044 addi r4,r4,1
8044644: d9001d15 stw r4,116(sp)
8044648: 21000208 cmpgei r4,r4,8
804464c: 2002e71e bne r4,zero,80451ec <___svfprintf_internal_r+0x1eac>
8044650: 42000204 addi r8,r8,8
8044654: e000010e bge fp,zero,804465c <___svfprintf_internal_r+0x131c>
8044658: 0039883a mov fp,zero
804465c: 1739c83a sub fp,r2,fp
8044660: 073ce70e bge zero,fp,8043a00 <___svfprintf_internal_r+0x6c0>
8044664: 03020174 movhi r12,2053
8044668: e1000450 cmplti r4,fp,17
804466c: 632e3444 addi r12,r12,-18223
8044670: d8801d17 ldw r2,116(sp)
8044674: 2002741e bne r4,zero,8045048 <___svfprintf_internal_r+0x1d08>
8044678: dc400715 stw r17,28(sp)
804467c: 05400404 movi r21,16
8044680: dc000517 ldw r16,20(sp)
8044684: 6023883a mov r17,r12
8044688: 00000406 br 804469c <___svfprintf_internal_r+0x135c>
804468c: 42000204 addi r8,r8,8
8044690: e73ffc04 addi fp,fp,-16
8044694: e1000448 cmpgei r4,fp,17
8044698: 20026926 beq r4,zero,8045040 <___svfprintf_internal_r+0x1d00>
804469c: 10800044 addi r2,r2,1
80446a0: 18c00404 addi r3,r3,16
80446a4: 44400015 stw r17,0(r8)
80446a8: 45400115 stw r21,4(r8)
80446ac: d8c01e15 stw r3,120(sp)
80446b0: d8801d15 stw r2,116(sp)
80446b4: 11000208 cmpgei r4,r2,8
80446b8: 203ff426 beq r4,zero,804468c <___svfprintf_internal_r+0x134c>
80446bc: d9801c04 addi r6,sp,112
80446c0: 980b883a mov r5,r19
80446c4: 8009883a mov r4,r16
80446c8: 80456900 call 8045690 <__ssprint_r>
80446cc: 103bdb1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80446d0: d8c01e17 ldw r3,120(sp)
80446d4: d8801d17 ldw r2,116(sp)
80446d8: b811883a mov r8,r23
80446dc: 003fec06 br 8044690 <___svfprintf_internal_r+0x1350>
80446e0: 9080004c andi r2,r18,1
80446e4: 103efc1e bne r2,zero,80442d8 <___svfprintf_internal_r+0xf98>
80446e8: 00800044 movi r2,1
80446ec: dd401d15 stw r21,116(sp)
80446f0: 44000015 stw r16,0(r8)
80446f4: 40800115 stw r2,4(r8)
80446f8: d8c01e15 stw r3,120(sp)
80446fc: ad400208 cmpgei r21,r21,8
8044700: a800fd1e bne r21,zero,8044af8 <___svfprintf_internal_r+0x17b8>
8044704: e7000084 addi fp,fp,2
8044708: 42000404 addi r8,r8,16
804470c: 003f2406 br 80443a0 <___svfprintf_internal_r+0x1060>
8044710: 02ff230e bge zero,r11,80443a0 <___svfprintf_internal_r+0x1060>
8044714: 58800450 cmplti r2,r11,17
8044718: 03020174 movhi r12,2053
804471c: 10032f1e bne r2,zero,80453dc <___svfprintf_internal_r+0x209c>
8044720: 632e3444 addi r12,r12,-18223
8044724: dc800715 stw r18,28(sp)
8044728: dc400e15 stw r17,56(sp)
804472c: 04000404 movi r16,16
8044730: 5823883a mov r17,r11
8044734: df000517 ldw fp,20(sp)
8044738: 6025883a mov r18,r12
804473c: 682b883a mov r21,r13
8044740: 00000506 br 8044758 <___svfprintf_internal_r+0x1418>
8044744: 52800204 addi r10,r10,8
8044748: 8c7ffc04 addi r17,r17,-16
804474c: 88800448 cmpgei r2,r17,17
8044750: 10018e26 beq r2,zero,8044d8c <___svfprintf_internal_r+0x1a4c>
8044754: ad400044 addi r21,r21,1
8044758: 18c00404 addi r3,r3,16
804475c: 54800015 stw r18,0(r10)
8044760: 54000115 stw r16,4(r10)
8044764: d8c01e15 stw r3,120(sp)
8044768: dd401d15 stw r21,116(sp)
804476c: a8800208 cmpgei r2,r21,8
8044770: 103ff426 beq r2,zero,8044744 <___svfprintf_internal_r+0x1404>
8044774: d9801c04 addi r6,sp,112
8044778: 980b883a mov r5,r19
804477c: e009883a mov r4,fp
8044780: 80456900 call 8045690 <__ssprint_r>
8044784: 103bad1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044788: dd401d17 ldw r21,116(sp)
804478c: d8c01e17 ldw r3,120(sp)
8044790: b815883a mov r10,r23
8044794: 003fec06 br 8044748 <___svfprintf_internal_r+0x1408>
8044798: d9000517 ldw r4,20(sp)
804479c: d9801c04 addi r6,sp,112
80447a0: 980b883a mov r5,r19
80447a4: 80456900 call 8045690 <__ssprint_r>
80447a8: 103ba41e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80447ac: d8c01e17 ldw r3,120(sp)
80447b0: b811883a mov r8,r23
80447b4: 003c8606 br 80439d0 <___svfprintf_internal_r+0x690>
80447b8: 002b883a mov r21,zero
80447bc: 003c0606 br 80437d8 <___svfprintf_internal_r+0x498>
80447c0: b025883a mov r18,r22
80447c4: 003b2206 br 8043450 <___svfprintf_internal_r+0x110>
80447c8: d9000517 ldw r4,20(sp)
80447cc: d9801c04 addi r6,sp,112
80447d0: 980b883a mov r5,r19
80447d4: 80456900 call 8045690 <__ssprint_r>
80447d8: 103b981e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80447dc: d8c01e17 ldw r3,120(sp)
80447e0: dd401d17 ldw r21,116(sp)
80447e4: b815883a mov r10,r23
80447e8: 003ecd06 br 8044320 <___svfprintf_internal_r+0xfe0>
80447ec: d9000517 ldw r4,20(sp)
80447f0: d9801c04 addi r6,sp,112
80447f4: 980b883a mov r5,r19
80447f8: 80456900 call 8045690 <__ssprint_r>
80447fc: 103b8f1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044800: d8c01e17 ldw r3,120(sp)
8044804: dd401d17 ldw r21,116(sp)
8044808: b815883a mov r10,r23
804480c: 003eb906 br 80442f4 <___svfprintf_internal_r+0xfb4>
8044810: b821883a mov r16,r23
8044814: 003dbb06 br 8043f04 <___svfprintf_internal_r+0xbc4>
8044818: d9000917 ldw r4,36(sp)
804481c: d9400a17 ldw r5,40(sp)
8044820: da000f15 stw r8,60(sp)
8044824: 200d883a mov r6,r4
8044828: 280f883a mov r7,r5
804482c: dac00e15 stw r11,56(sp)
8044830: db000715 stw r12,28(sp)
8044834: 800f5580 call 800f558 <__unorddf2>
8044838: db000717 ldw r12,28(sp)
804483c: dac00e17 ldw r11,56(sp)
8044840: da000f17 ldw r8,60(sp)
8044844: 1002d91e bne r2,zero,80453ac <___svfprintf_internal_r+0x206c>
8044848: 00fff7c4 movi r3,-33
804484c: e0c6703a and r3,fp,r3
8044850: 58bfffe0 cmpeqi r2,r11,-1
8044854: d8c00715 stw r3,28(sp)
8044858: 1002621e bne r2,zero,80451e4 <___svfprintf_internal_r+0x1ea4>
804485c: 188011d8 cmpnei r2,r3,71
8044860: 1000a226 beq r2,zero,8044aec <___svfprintf_internal_r+0x17ac>
8044864: d8800a17 ldw r2,40(sp)
8044868: 64804014 ori r18,r12,256
804486c: 10021516 blt r2,zero,80450c4 <___svfprintf_internal_r+0x1d84>
8044870: dd000a17 ldw r20,40(sp)
8044874: d8000e05 stb zero,56(sp)
8044878: e08019a0 cmpeqi r2,fp,102
804487c: d8800f15 stw r2,60(sp)
8044880: 1001531e bne r2,zero,8044dd0 <___svfprintf_internal_r+0x1a90>
8044884: e08011a0 cmpeqi r2,fp,70
8044888: 1001511e bne r2,zero,8044dd0 <___svfprintf_internal_r+0x1a90>
804488c: d8800717 ldw r2,28(sp)
8044890: da001215 stw r8,72(sp)
8044894: db001015 stw r12,64(sp)
8044898: 10801158 cmpnei r2,r2,69
804489c: 10022b26 beq r2,zero,804514c <___svfprintf_internal_r+0x1e0c>
80448a0: d8801a04 addi r2,sp,104
80448a4: d8800315 stw r2,12(sp)
80448a8: d9400917 ldw r5,36(sp)
80448ac: d8801704 addi r2,sp,92
80448b0: d9000517 ldw r4,20(sp)
80448b4: d8800215 stw r2,8(sp)
80448b8: d8801604 addi r2,sp,88
80448bc: dac00015 stw r11,0(sp)
80448c0: d8800115 stw r2,4(sp)
80448c4: 01c00084 movi r7,2
80448c8: a00d883a mov r6,r20
80448cc: dac00815 stw r11,32(sp)
80448d0: 80053ec0 call 80053ec <_dtoa_r>
80448d4: dac00817 ldw r11,32(sp)
80448d8: 1021883a mov r16,r2
80448dc: e08019d8 cmpnei r2,fp,103
80448e0: db001017 ldw r12,64(sp)
80448e4: da001217 ldw r8,72(sp)
80448e8: 582b883a mov r21,r11
80448ec: 1002291e bne r2,zero,8045194 <___svfprintf_internal_r+0x1e54>
80448f0: 6080004c andi r2,r12,1
80448f4: 1002291e bne r2,zero,804519c <___svfprintf_internal_r+0x1e5c>
80448f8: d8c01617 ldw r3,88(sp)
80448fc: d8800717 ldw r2,28(sp)
8044900: d8c00715 stw r3,28(sp)
8044904: d8c01a17 ldw r3,104(sp)
8044908: 108011e0 cmpeqi r2,r2,71
804490c: 1c07c83a sub r3,r3,r16
8044910: d8c00815 stw r3,32(sp)
8044914: 10017126 beq r2,zero,8044edc <___svfprintf_internal_r+0x1b9c>
8044918: d8c00717 ldw r3,28(sp)
804491c: 18bfff50 cmplti r2,r3,-3
8044920: 10016d1e bne r2,zero,8044ed8 <___svfprintf_internal_r+0x1b98>
8044924: 58c16c16 blt r11,r3,8044ed8 <___svfprintf_internal_r+0x1b98>
8044928: d8800717 ldw r2,28(sp)
804492c: d8c00817 ldw r3,32(sp)
8044930: 10c23d16 blt r2,r3,8045228 <___svfprintf_internal_r+0x1ee8>
8044934: 6300004c andi r12,r12,1
8044938: 6002731e bne r12,zero,8045308 <___svfprintf_internal_r+0x1fc8>
804493c: 1029883a mov r20,r2
8044940: 1000010e bge r2,zero,8044948 <___svfprintf_internal_r+0x1608>
8044944: 0029883a mov r20,zero
8044948: dd400717 ldw r21,28(sp)
804494c: 070019c4 movi fp,103
8044950: d8800e07 ldb r2,56(sp)
8044954: 10021726 beq r2,zero,80451b4 <___svfprintf_internal_r+0x1e74>
8044958: 00800b44 movi r2,45
804495c: d8801545 stb r2,85(sp)
8044960: 0017883a mov r11,zero
8044964: 003d6f06 br 8043f24 <___svfprintf_internal_r+0xbe4>
8044968: d9400417 ldw r5,16(sp)
804496c: 20800017 ldw r2,0(r4)
8044970: d8c00615 stw r3,24(sp)
8044974: 2809d7fa srai r4,r5,31
8044978: 11400015 stw r5,0(r2)
804497c: 11000115 stw r4,4(r2)
8044980: 003a9506 br 80433d8 <___svfprintf_internal_r+0x98>
8044984: 00800c04 movi r2,48
8044988: d8801585 stb r2,86(sp)
804498c: df0015c5 stb fp,87(sp)
8044990: 63000094 ori r12,r12,2
8044994: 00800084 movi r2,2
8044998: 003c9006 br 8043bdc <___svfprintf_internal_r+0x89c>
804499c: 0463c83a sub r17,zero,r17
80449a0: d8800615 stw r2,24(sp)
80449a4: 003b5f06 br 8043724 <___svfprintf_internal_r+0x3e4>
80449a8: 2039883a mov fp,r4
80449ac: 073efa16 blt zero,fp,8044598 <___svfprintf_internal_r+0x1258>
80449b0: 003f0306 br 80445c0 <___svfprintf_internal_r+0x1280>
80449b4: 9080004c andi r2,r18,1
80449b8: 103f081e bne r2,zero,80445dc <___svfprintf_internal_r+0x129c>
80449bc: d8800817 ldw r2,32(sp)
80449c0: d9400717 ldw r5,28(sp)
80449c4: 1105c83a sub r2,r2,r4
80449c8: 2900440e bge r5,r4,8044adc <___svfprintf_internal_r+0x179c>
80449cc: 1039883a mov fp,r2
80449d0: 003f2006 br 8044654 <___svfprintf_internal_r+0x1314>
80449d4: d8c01e17 ldw r3,120(sp)
80449d8: 003c0906 br 8043a00 <___svfprintf_internal_r+0x6c0>
80449dc: d8800717 ldw r2,28(sp)
80449e0: 0039883a mov fp,zero
80449e4: 1739c83a sub fp,r2,fp
80449e8: 073ef90e bge zero,fp,80445d0 <___svfprintf_internal_r+0x1290>
80449ec: 00001106 br 8044a34 <___svfprintf_internal_r+0x16f4>
80449f0: 8009883a mov r4,r16
80449f4: 8002dac0 call 8002dac <strlen>
80449f8: 102b883a mov r21,r2
80449fc: 1029883a mov r20,r2
8044a00: dc800615 stw r18,24(sp)
8044a04: db000717 ldw r12,28(sp)
8044a08: da000e17 ldw r8,56(sp)
8044a0c: 003bc606 br 8043928 <___svfprintf_internal_r+0x5e8>
8044a10: d9000517 ldw r4,20(sp)
8044a14: 01401004 movi r5,64
8044a18: 8007ddc0 call 8007ddc <_malloc_r>
8044a1c: 98800015 stw r2,0(r19)
8044a20: 98800415 stw r2,16(r19)
8044a24: 10028626 beq r2,zero,8045440 <___svfprintf_internal_r+0x2100>
8044a28: 00801004 movi r2,64
8044a2c: 98800515 stw r2,20(r19)
8044a30: 003a5d06 br 80433a8 <___svfprintf_internal_r+0x68>
8044a34: 03020174 movhi r12,2053
8044a38: e1000450 cmplti r4,fp,17
8044a3c: 632e3444 addi r12,r12,-18223
8044a40: d8801d17 ldw r2,116(sp)
8044a44: 2001741e bne r4,zero,8045018 <___svfprintf_internal_r+0x1cd8>
8044a48: b009883a mov r4,r22
8044a4c: dc800e15 stw r18,56(sp)
8044a50: dc000f15 stw r16,60(sp)
8044a54: 882d883a mov r22,r17
8044a58: 05400404 movi r21,16
8044a5c: e023883a mov r17,fp
8044a60: dc000517 ldw r16,20(sp)
8044a64: 6025883a mov r18,r12
8044a68: 2039883a mov fp,r4
8044a6c: 00000406 br 8044a80 <___svfprintf_internal_r+0x1740>
8044a70: 42000204 addi r8,r8,8
8044a74: 8c7ffc04 addi r17,r17,-16
8044a78: 89000448 cmpgei r4,r17,17
8044a7c: 20015f26 beq r4,zero,8044ffc <___svfprintf_internal_r+0x1cbc>
8044a80: 10800044 addi r2,r2,1
8044a84: 18c00404 addi r3,r3,16
8044a88: 44800015 stw r18,0(r8)
8044a8c: 45400115 stw r21,4(r8)
8044a90: d8c01e15 stw r3,120(sp)
8044a94: d8801d15 stw r2,116(sp)
8044a98: 11000208 cmpgei r4,r2,8
8044a9c: 203ff426 beq r4,zero,8044a70 <___svfprintf_internal_r+0x1730>
8044aa0: d9801c04 addi r6,sp,112
8044aa4: 980b883a mov r5,r19
8044aa8: 8009883a mov r4,r16
8044aac: 80456900 call 8045690 <__ssprint_r>
8044ab0: 103ae21e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044ab4: d8c01e17 ldw r3,120(sp)
8044ab8: d8801d17 ldw r2,116(sp)
8044abc: b811883a mov r8,r23
8044ac0: 003fec06 br 8044a74 <___svfprintf_internal_r+0x1734>
8044ac4: d8800617 ldw r2,24(sp)
8044ac8: 10800017 ldw r2,0(r2)
8044acc: d8c00615 stw r3,24(sp)
8044ad0: d8c00417 ldw r3,16(sp)
8044ad4: 10c00015 stw r3,0(r2)
8044ad8: 003a3f06 br 80433d8 <___svfprintf_internal_r+0x98>
8044adc: d9000817 ldw r4,32(sp)
8044ae0: d9400717 ldw r5,28(sp)
8044ae4: 2179c83a sub fp,r4,r5
8044ae8: 003ecd06 br 8044620 <___svfprintf_internal_r+0x12e0>
8044aec: 583f5d1e bne r11,zero,8044864 <___svfprintf_internal_r+0x1524>
8044af0: 02c00044 movi r11,1
8044af4: 003f5b06 br 8044864 <___svfprintf_internal_r+0x1524>
8044af8: d9000517 ldw r4,20(sp)
8044afc: d9801c04 addi r6,sp,112
8044b00: 980b883a mov r5,r19
8044b04: 80456900 call 8045690 <__ssprint_r>
8044b08: 103acc1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044b0c: df001d17 ldw fp,116(sp)
8044b10: d8c01e17 ldw r3,120(sp)
8044b14: da002b04 addi r8,sp,172
8044b18: e7000044 addi fp,fp,1
8044b1c: b815883a mov r10,r23
8044b20: 003e1f06 br 80443a0 <___svfprintf_internal_r+0x1060>
8044b24: d8801d17 ldw r2,116(sp)
8044b28: 01420134 movhi r5,2052
8044b2c: 295d2704 addi r5,r5,29852
8044b30: 10800044 addi r2,r2,1
8044b34: 18c00044 addi r3,r3,1
8044b38: 41400015 stw r5,0(r8)
8044b3c: 01400044 movi r5,1
8044b40: d8801d15 stw r2,116(sp)
8044b44: 41400115 stw r5,4(r8)
8044b48: d8c01e15 stw r3,120(sp)
8044b4c: 10800208 cmpgei r2,r2,8
8044b50: 10014a1e bne r2,zero,804507c <___svfprintf_internal_r+0x1d3c>
8044b54: 42000204 addi r8,r8,8
8044b58: 2000541e bne r4,zero,8044cac <___svfprintf_internal_r+0x196c>
8044b5c: d9000817 ldw r4,32(sp)
8044b60: 9080004c andi r2,r18,1
8044b64: 1104b03a or r2,r2,r4
8044b68: 103ba526 beq r2,zero,8043a00 <___svfprintf_internal_r+0x6c0>
8044b6c: d8800d17 ldw r2,52(sp)
8044b70: d9000b17 ldw r4,44(sp)
8044b74: 40800015 stw r2,0(r8)
8044b78: d8801d17 ldw r2,116(sp)
8044b7c: 20c7883a add r3,r4,r3
8044b80: 41000115 stw r4,4(r8)
8044b84: 10800044 addi r2,r2,1
8044b88: d8c01e15 stw r3,120(sp)
8044b8c: d8801d15 stw r2,116(sp)
8044b90: 11000208 cmpgei r4,r2,8
8044b94: 2001551e bne r4,zero,80450ec <___svfprintf_internal_r+0x1dac>
8044b98: 42000204 addi r8,r8,8
8044b9c: d9000817 ldw r4,32(sp)
8044ba0: 10800044 addi r2,r2,1
8044ba4: d8801d15 stw r2,116(sp)
8044ba8: 20c7883a add r3,r4,r3
8044bac: 44000015 stw r16,0(r8)
8044bb0: 41000115 stw r4,4(r8)
8044bb4: d8c01e15 stw r3,120(sp)
8044bb8: 10800208 cmpgei r2,r2,8
8044bbc: 103b8f26 beq r2,zero,80439fc <___svfprintf_internal_r+0x6bc>
8044bc0: 003e0006 br 80443c4 <___svfprintf_internal_r+0x1084>
8044bc4: d9000517 ldw r4,20(sp)
8044bc8: d9801c04 addi r6,sp,112
8044bcc: 980b883a mov r5,r19
8044bd0: dac01015 stw r11,64(sp)
8044bd4: db400f15 stw r13,60(sp)
8044bd8: db800e15 stw r14,56(sp)
8044bdc: 80456900 call 8045690 <__ssprint_r>
8044be0: 103a961e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044be4: d8c01e17 ldw r3,120(sp)
8044be8: b811883a mov r8,r23
8044bec: dac01017 ldw r11,64(sp)
8044bf0: db400f17 ldw r13,60(sp)
8044bf4: db800e17 ldw r14,56(sp)
8044bf8: 003b5606 br 8043954 <___svfprintf_internal_r+0x614>
8044bfc: d9000517 ldw r4,20(sp)
8044c00: d9801c04 addi r6,sp,112
8044c04: 980b883a mov r5,r19
8044c08: 80456900 call 8045690 <__ssprint_r>
8044c0c: 103a8b1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044c10: b811883a mov r8,r23
8044c14: 003d0206 br 8044020 <___svfprintf_internal_r+0xce0>
8044c18: d9000517 ldw r4,20(sp)
8044c1c: d9801c04 addi r6,sp,112
8044c20: 980b883a mov r5,r19
8044c24: dac00e15 stw r11,56(sp)
8044c28: 80456900 call 8045690 <__ssprint_r>
8044c2c: 103a831e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044c30: d8c01e17 ldw r3,120(sp)
8044c34: b811883a mov r8,r23
8044c38: dac00e17 ldw r11,56(sp)
8044c3c: 003b6206 br 80439c8 <___svfprintf_internal_r+0x688>
8044c40: 10c00060 cmpeqi r3,r2,1
8044c44: 9019883a mov r12,r18
8044c48: 183c5226 beq r3,zero,8043d94 <___svfprintf_internal_r+0xa54>
8044c4c: 003ca806 br 8043ef0 <___svfprintf_internal_r+0xbb0>
8044c50: b7000043 ldbu fp,1(r22)
8044c54: 63000814 ori r12,r12,32
8044c58: b5800044 addi r22,r22,1
8044c5c: e2803fcc andi r10,fp,255
8044c60: 5280201c xori r10,r10,128
8044c64: 52bfe004 addi r10,r10,-128
8044c68: 003a0106 br 8043470 <___svfprintf_internal_r+0x130>
8044c6c: d9000517 ldw r4,20(sp)
8044c70: d9801c04 addi r6,sp,112
8044c74: 980b883a mov r5,r19
8044c78: 80456900 call 8045690 <__ssprint_r>
8044c7c: 103a6f1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044c80: d8c01e17 ldw r3,120(sp)
8044c84: b811883a mov r8,r23
8044c88: 003cf706 br 8044068 <___svfprintf_internal_r+0xd28>
8044c8c: 588001f0 cmpltui r2,r11,7
8044c90: 582b883a mov r21,r11
8044c94: 10011126 beq r2,zero,80450dc <___svfprintf_internal_r+0x1d9c>
8044c98: 04020134 movhi r16,2052
8044c9c: a829883a mov r20,r21
8044ca0: dc800615 stw r18,24(sp)
8044ca4: 841d2504 addi r16,r16,29844
8044ca8: 003b1f06 br 8043928 <___svfprintf_internal_r+0x5e8>
8044cac: d8800d17 ldw r2,52(sp)
8044cb0: d9400b17 ldw r5,44(sp)
8044cb4: 40800015 stw r2,0(r8)
8044cb8: d8801d17 ldw r2,116(sp)
8044cbc: 28c7883a add r3,r5,r3
8044cc0: 41400115 stw r5,4(r8)
8044cc4: 10800044 addi r2,r2,1
8044cc8: d8c01e15 stw r3,120(sp)
8044ccc: d8801d15 stw r2,116(sp)
8044cd0: 11400208 cmpgei r5,r2,8
8044cd4: 2801051e bne r5,zero,80450ec <___svfprintf_internal_r+0x1dac>
8044cd8: 42000204 addi r8,r8,8
8044cdc: 203faf0e bge r4,zero,8044b9c <___svfprintf_internal_r+0x185c>
8044ce0: 03020174 movhi r12,2053
8044ce4: 217ffc08 cmpgei r5,r4,-16
8044ce8: 632e3444 addi r12,r12,-18223
8044cec: 012bc83a sub r21,zero,r4
8044cf0: 2801711e bne r5,zero,80452b8 <___svfprintf_internal_r+0x1f78>
8044cf4: dc000715 stw r16,28(sp)
8044cf8: 07000404 movi fp,16
8044cfc: a821883a mov r16,r21
8044d00: 882b883a mov r21,r17
8044d04: 6023883a mov r17,r12
8044d08: 00000406 br 8044d1c <___svfprintf_internal_r+0x19dc>
8044d0c: 42000204 addi r8,r8,8
8044d10: 843ffc04 addi r16,r16,-16
8044d14: 81000448 cmpgei r4,r16,17
8044d18: 20016326 beq r4,zero,80452a8 <___svfprintf_internal_r+0x1f68>
8044d1c: 10800044 addi r2,r2,1
8044d20: 18c00404 addi r3,r3,16
8044d24: 44400015 stw r17,0(r8)
8044d28: 47000115 stw fp,4(r8)
8044d2c: d8c01e15 stw r3,120(sp)
8044d30: d8801d15 stw r2,116(sp)
8044d34: 11000208 cmpgei r4,r2,8
8044d38: 203ff426 beq r4,zero,8044d0c <___svfprintf_internal_r+0x19cc>
8044d3c: d9000517 ldw r4,20(sp)
8044d40: d9801c04 addi r6,sp,112
8044d44: 980b883a mov r5,r19
8044d48: 80456900 call 8045690 <__ssprint_r>
8044d4c: 103a3b1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8044d50: d8c01e17 ldw r3,120(sp)
8044d54: d8801d17 ldw r2,116(sp)
8044d58: b811883a mov r8,r23
8044d5c: 003fec06 br 8044d10 <___svfprintf_internal_r+0x19d0>
8044d60: 8819883a mov r12,r17
8044d64: dc400717 ldw r17,28(sp)
8044d68: 10800044 addi r2,r2,1
8044d6c: 1c07883a add r3,r3,r16
8044d70: d8801d15 stw r2,116(sp)
8044d74: 43000015 stw r12,0(r8)
8044d78: 44000115 stw r16,4(r8)
8044d7c: d8c01e15 stw r3,120(sp)
8044d80: 10800208 cmpgei r2,r2,8
8044d84: 103b1d26 beq r2,zero,80439fc <___svfprintf_internal_r+0x6bc>
8044d88: 003d8e06 br 80443c4 <___svfprintf_internal_r+0x1084>
8044d8c: 8817883a mov r11,r17
8044d90: 9019883a mov r12,r18
8044d94: dc400e17 ldw r17,56(sp)
8044d98: dc800717 ldw r18,28(sp)
8044d9c: af000044 addi fp,r21,1
8044da0: 50800204 addi r2,r10,8
8044da4: 1ac7883a add r3,r3,r11
8044da8: 53000015 stw r12,0(r10)
8044dac: 52c00115 stw r11,4(r10)
8044db0: d8c01e15 stw r3,120(sp)
8044db4: df001d15 stw fp,116(sp)
8044db8: e1000208 cmpgei r4,fp,8
8044dbc: 203f4e1e bne r4,zero,8044af8 <___svfprintf_internal_r+0x17b8>
8044dc0: e7000044 addi fp,fp,1
8044dc4: 12000204 addi r8,r2,8
8044dc8: 1015883a mov r10,r2
8044dcc: 003d7406 br 80443a0 <___svfprintf_internal_r+0x1060>
8044dd0: d8801a04 addi r2,sp,104
8044dd4: d8800315 stw r2,12(sp)
8044dd8: d9400917 ldw r5,36(sp)
8044ddc: d8801704 addi r2,sp,92
8044de0: d9000517 ldw r4,20(sp)
8044de4: d8800215 stw r2,8(sp)
8044de8: d8801604 addi r2,sp,88
8044dec: dac00015 stw r11,0(sp)
8044df0: d8800115 stw r2,4(sp)
8044df4: 01c000c4 movi r7,3
8044df8: a00d883a mov r6,r20
8044dfc: da001215 stw r8,72(sp)
8044e00: db001015 stw r12,64(sp)
8044e04: dac00815 stw r11,32(sp)
8044e08: 80053ec0 call 80053ec <_dtoa_r>
8044e0c: dac00817 ldw r11,32(sp)
8044e10: 1021883a mov r16,r2
8044e14: db001017 ldw r12,64(sp)
8044e18: 12eb883a add r21,r2,r11
8044e1c: 80800007 ldb r2,0(r16)
8044e20: da001217 ldw r8,72(sp)
8044e24: 10800c20 cmpeqi r2,r2,48
8044e28: 10013e1e bne r2,zero,8045324 <___svfprintf_internal_r+0x1fe4>
8044e2c: d8801617 ldw r2,88(sp)
8044e30: a8ab883a add r21,r21,r2
8044e34: d9000917 ldw r4,36(sp)
8044e38: 000d883a mov r6,zero
8044e3c: 000f883a mov r7,zero
8044e40: a00b883a mov r5,r20
8044e44: da001215 stw r8,72(sp)
8044e48: dac01015 stw r11,64(sp)
8044e4c: db000815 stw r12,32(sp)
8044e50: 800e3000 call 800e300 <__eqdf2>
8044e54: db000817 ldw r12,32(sp)
8044e58: dac01017 ldw r11,64(sp)
8044e5c: da001217 ldw r8,72(sp)
8044e60: 10009c26 beq r2,zero,80450d4 <___svfprintf_internal_r+0x1d94>
8044e64: d8801a17 ldw r2,104(sp)
8044e68: 01000c04 movi r4,48
8044e6c: 1540052e bgeu r2,r21,8044e84 <___svfprintf_internal_r+0x1b44>
8044e70: 10c00044 addi r3,r2,1
8044e74: d8c01a15 stw r3,104(sp)
8044e78: 11000005 stb r4,0(r2)
8044e7c: d8801a17 ldw r2,104(sp)
8044e80: 157ffb36 bltu r2,r21,8044e70 <___svfprintf_internal_r+0x1b30>
8044e84: 1405c83a sub r2,r2,r16
8044e88: d8c00717 ldw r3,28(sp)
8044e8c: d8800815 stw r2,32(sp)
8044e90: d8801617 ldw r2,88(sp)
8044e94: 18c011d8 cmpnei r3,r3,71
8044e98: d8800715 stw r2,28(sp)
8044e9c: 183e9e26 beq r3,zero,8044918 <___svfprintf_internal_r+0x15d8>
8044ea0: d8800f17 ldw r2,60(sp)
8044ea4: 10000d26 beq r2,zero,8044edc <___svfprintf_internal_r+0x1b9c>
8044ea8: d8c00717 ldw r3,28(sp)
8044eac: 6080004c andi r2,r12,1
8044eb0: 12c4b03a or r2,r2,r11
8044eb4: 00c0bb0e bge zero,r3,80451a4 <___svfprintf_internal_r+0x1e64>
8044eb8: 1001381e bne r2,zero,804539c <___svfprintf_internal_r+0x205c>
8044ebc: dd400717 ldw r21,28(sp)
8044ec0: a829883a mov r20,r21
8044ec4: 003ea206 br 8044950 <___svfprintf_internal_r+0x1610>
8044ec8: d8800615 stw r2,24(sp)
8044ecc: 002b883a mov r21,zero
8044ed0: 00800044 movi r2,1
8044ed4: 003b4106 br 8043bdc <___svfprintf_internal_r+0x89c>
8044ed8: e73fff84 addi fp,fp,-2
8044edc: d8800717 ldw r2,28(sp)
8044ee0: df001845 stb fp,97(sp)
8044ee4: 157fffc4 addi r21,r2,-1
8044ee8: dd401615 stw r21,88(sp)
8044eec: a8009216 blt r21,zero,8045138 <___svfprintf_internal_r+0x1df8>
8044ef0: 00800ac4 movi r2,43
8044ef4: d8801885 stb r2,98(sp)
8044ef8: a8800290 cmplti r2,r21,10
8044efc: 1001191e bne r2,zero,8045364 <___svfprintf_internal_r+0x2024>
8044f00: dc000715 stw r16,28(sp)
8044f04: dd001bc4 addi r20,sp,111
8044f08: a821883a mov r16,r21
8044f0c: db000f15 stw r12,60(sp)
8044f10: 982b883a mov r21,r19
8044f14: 4027883a mov r19,r8
8044f18: 00000206 br 8044f24 <___svfprintf_internal_r+0x1be4>
8044f1c: 2029883a mov r20,r4
8044f20: 1021883a mov r16,r2
8044f24: 8009883a mov r4,r16
8044f28: 01400284 movi r5,10
8044f2c: 800cf800 call 800cf80 <__modsi3>
8044f30: 10800c04 addi r2,r2,48
8044f34: 8009883a mov r4,r16
8044f38: a0bfffc5 stb r2,-1(r20)
8044f3c: 01400284 movi r5,10
8044f40: 800cf000 call 800cf00 <__divsi3>
8044f44: 80c01908 cmpgei r3,r16,100
8044f48: a13fffc4 addi r4,r20,-1
8044f4c: 183ff31e bne r3,zero,8044f1c <___svfprintf_internal_r+0x1bdc>
8044f50: 10800c04 addi r2,r2,48
8044f54: 20bfffc5 stb r2,-1(r4)
8044f58: a0ffff84 addi r3,r20,-2
8044f5c: d9001bc4 addi r4,sp,111
8044f60: 9811883a mov r8,r19
8044f64: dc000717 ldw r16,28(sp)
8044f68: db000f17 ldw r12,60(sp)
8044f6c: a827883a mov r19,r21
8044f70: 1901242e bgeu r3,r4,8045404 <___svfprintf_internal_r+0x20c4>
8044f74: d90018c4 addi r4,sp,99
8044f78: 00000106 br 8044f80 <___svfprintf_internal_r+0x1c40>
8044f7c: 18800003 ldbu r2,0(r3)
8044f80: 21000044 addi r4,r4,1
8044f84: 20bfffc5 stb r2,-1(r4)
8044f88: 18c00044 addi r3,r3,1
8044f8c: d8801bc4 addi r2,sp,111
8044f90: 18bffa1e bne r3,r2,8044f7c <___svfprintf_internal_r+0x1c3c>
8044f94: d8801c44 addi r2,sp,113
8044f98: d8c018c4 addi r3,sp,99
8044f9c: 1505c83a sub r2,r2,r20
8044fa0: 1885883a add r2,r3,r2
8044fa4: d8c01844 addi r3,sp,97
8044fa8: 10c5c83a sub r2,r2,r3
8044fac: d8801115 stw r2,68(sp)
8044fb0: d8c00817 ldw r3,32(sp)
8044fb4: d9001117 ldw r4,68(sp)
8044fb8: 18800088 cmpgei r2,r3,2
8044fbc: 192b883a add r21,r3,r4
8044fc0: 1000ef26 beq r2,zero,8045380 <___svfprintf_internal_r+0x2040>
8044fc4: d8800b17 ldw r2,44(sp)
8044fc8: a8ab883a add r21,r21,r2
8044fcc: a829883a mov r20,r21
8044fd0: a800010e bge r21,zero,8044fd8 <___svfprintf_internal_r+0x1c98>
8044fd4: 0029883a mov r20,zero
8044fd8: d8000715 stw zero,28(sp)
8044fdc: 003e5c06 br 8044950 <___svfprintf_internal_r+0x1610>
8044fe0: 04020134 movhi r16,2052
8044fe4: 841d1704 addi r16,r16,29788
8044fe8: 003b4a06 br 8043d14 <___svfprintf_internal_r+0x9d4>
8044fec: d8800615 stw r2,24(sp)
8044ff0: 002b883a mov r21,zero
8044ff4: 0005883a mov r2,zero
8044ff8: 003af806 br 8043bdc <___svfprintf_internal_r+0x89c>
8044ffc: 9019883a mov r12,r18
8045000: dc000f17 ldw r16,60(sp)
8045004: dc800e17 ldw r18,56(sp)
8045008: e009883a mov r4,fp
804500c: 8839883a mov fp,r17
8045010: b023883a mov r17,r22
8045014: 202d883a mov r22,r4
8045018: 10800044 addi r2,r2,1
804501c: 1f07883a add r3,r3,fp
8045020: d8801d15 stw r2,116(sp)
8045024: 43000015 stw r12,0(r8)
8045028: 47000115 stw fp,4(r8)
804502c: d8c01e15 stw r3,120(sp)
8045030: 10800208 cmpgei r2,r2,8
8045034: 1000381e bne r2,zero,8045118 <___svfprintf_internal_r+0x1dd8>
8045038: 42000204 addi r8,r8,8
804503c: 003d6406 br 80445d0 <___svfprintf_internal_r+0x1290>
8045040: 8819883a mov r12,r17
8045044: dc400717 ldw r17,28(sp)
8045048: 10800044 addi r2,r2,1
804504c: 1f07883a add r3,r3,fp
8045050: d8801d15 stw r2,116(sp)
8045054: 43000015 stw r12,0(r8)
8045058: 47000115 stw fp,4(r8)
804505c: d8c01e15 stw r3,120(sp)
8045060: 10800208 cmpgei r2,r2,8
8045064: 103a6526 beq r2,zero,80439fc <___svfprintf_internal_r+0x6bc>
8045068: 003cd606 br 80443c4 <___svfprintf_internal_r+0x1084>
804506c: 00800b44 movi r2,45
8045070: d8801545 stb r2,85(sp)
8045074: 03400b44 movi r13,45
8045078: 003b2206 br 8043d04 <___svfprintf_internal_r+0x9c4>
804507c: d9000517 ldw r4,20(sp)
8045080: d9801c04 addi r6,sp,112
8045084: 980b883a mov r5,r19
8045088: 80456900 call 8045690 <__ssprint_r>
804508c: 10396b1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8045090: d9001617 ldw r4,88(sp)
8045094: d8c01e17 ldw r3,120(sp)
8045098: b811883a mov r8,r23
804509c: 003eae06 br 8044b58 <___svfprintf_internal_r+0x1818>
80450a0: d9000517 ldw r4,20(sp)
80450a4: d9801c04 addi r6,sp,112
80450a8: 980b883a mov r5,r19
80450ac: 80456900 call 8045690 <__ssprint_r>
80450b0: 1039621e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80450b4: d9001617 ldw r4,88(sp)
80450b8: d8c01e17 ldw r3,120(sp)
80450bc: b811883a mov r8,r23
80450c0: 003d5206 br 804460c <___svfprintf_internal_r+0x12cc>
80450c4: 1520003c xorhi r20,r2,32768
80450c8: 00800b44 movi r2,45
80450cc: d8800e05 stb r2,56(sp)
80450d0: 003de906 br 8044878 <___svfprintf_internal_r+0x1538>
80450d4: a805883a mov r2,r21
80450d8: 003f6a06 br 8044e84 <___svfprintf_internal_r+0x1b44>
80450dc: 05400184 movi r21,6
80450e0: 003eed06 br 8044c98 <___svfprintf_internal_r+0x1958>
80450e4: d9401545 stb r5,85(sp)
80450e8: 00397206 br 80436b4 <___svfprintf_internal_r+0x374>
80450ec: d9000517 ldw r4,20(sp)
80450f0: d9801c04 addi r6,sp,112
80450f4: 980b883a mov r5,r19
80450f8: 80456900 call 8045690 <__ssprint_r>
80450fc: 10394f1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8045100: d9001617 ldw r4,88(sp)
8045104: d8c01e17 ldw r3,120(sp)
8045108: d8801d17 ldw r2,116(sp)
804510c: b811883a mov r8,r23
8045110: 203ea20e bge r4,zero,8044b9c <___svfprintf_internal_r+0x185c>
8045114: 003ef206 br 8044ce0 <___svfprintf_internal_r+0x19a0>
8045118: d9000517 ldw r4,20(sp)
804511c: d9801c04 addi r6,sp,112
8045120: 980b883a mov r5,r19
8045124: 80456900 call 8045690 <__ssprint_r>
8045128: 1039441e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
804512c: d8c01e17 ldw r3,120(sp)
8045130: b811883a mov r8,r23
8045134: 003d2606 br 80445d0 <___svfprintf_internal_r+0x1290>
8045138: 00c00044 movi r3,1
804513c: 18abc83a sub r21,r3,r2
8045140: 00800b44 movi r2,45
8045144: d8801885 stb r2,98(sp)
8045148: 003f6b06 br 8044ef8 <___svfprintf_internal_r+0x1bb8>
804514c: d8801a04 addi r2,sp,104
8045150: d8800315 stw r2,12(sp)
8045154: d9400917 ldw r5,36(sp)
8045158: d8801704 addi r2,sp,92
804515c: d9000517 ldw r4,20(sp)
8045160: 5d400044 addi r21,r11,1
8045164: d8800215 stw r2,8(sp)
8045168: d8801604 addi r2,sp,88
804516c: d8800115 stw r2,4(sp)
8045170: dd400015 stw r21,0(sp)
8045174: 01c00084 movi r7,2
8045178: a00d883a mov r6,r20
804517c: dac00815 stw r11,32(sp)
8045180: 80053ec0 call 80053ec <_dtoa_r>
8045184: dac00817 ldw r11,32(sp)
8045188: db001017 ldw r12,64(sp)
804518c: da001217 ldw r8,72(sp)
8045190: 1021883a mov r16,r2
8045194: e08011d8 cmpnei r2,fp,71
8045198: 103dd526 beq r2,zero,80448f0 <___svfprintf_internal_r+0x15b0>
804519c: 856b883a add r21,r16,r21
80451a0: 003f2406 br 8044e34 <___svfprintf_internal_r+0x1af4>
80451a4: 1000891e bne r2,zero,80453cc <___svfprintf_internal_r+0x208c>
80451a8: 05000044 movi r20,1
80451ac: 05400044 movi r21,1
80451b0: 003de706 br 8044950 <___svfprintf_internal_r+0x1610>
80451b4: db401543 ldbu r13,85(sp)
80451b8: 0017883a mov r11,zero
80451bc: 003b5506 br 8043f14 <___svfprintf_internal_r+0xbd4>
80451c0: d9000517 ldw r4,20(sp)
80451c4: d9801c04 addi r6,sp,112
80451c8: 980b883a mov r5,r19
80451cc: 80456900 call 8045690 <__ssprint_r>
80451d0: 10391a1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80451d4: d8c01e17 ldw r3,120(sp)
80451d8: b811883a mov r8,r23
80451dc: e03cf90e bge fp,zero,80445c4 <___svfprintf_internal_r+0x1284>
80451e0: 003dfe06 br 80449dc <___svfprintf_internal_r+0x169c>
80451e4: 02c00184 movi r11,6
80451e8: 003d9e06 br 8044864 <___svfprintf_internal_r+0x1524>
80451ec: d9000517 ldw r4,20(sp)
80451f0: d9801c04 addi r6,sp,112
80451f4: 980b883a mov r5,r19
80451f8: 80456900 call 8045690 <__ssprint_r>
80451fc: 10390f1e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
8045200: d8801617 ldw r2,88(sp)
8045204: d9000817 ldw r4,32(sp)
8045208: d8c01e17 ldw r3,120(sp)
804520c: b811883a mov r8,r23
8045210: 2085c83a sub r2,r4,r2
8045214: 003d0f06 br 8044654 <___svfprintf_internal_r+0x1314>
8045218: 5829883a mov r20,r11
804521c: dc800615 stw r18,24(sp)
8045220: 582b883a mov r21,r11
8045224: 0039c006 br 8043928 <___svfprintf_internal_r+0x5e8>
8045228: d8800817 ldw r2,32(sp)
804522c: d8c00b17 ldw r3,44(sp)
8045230: 10eb883a add r21,r2,r3
8045234: d8800717 ldw r2,28(sp)
8045238: 00800316 blt zero,r2,8045248 <___svfprintf_internal_r+0x1f08>
804523c: d8800717 ldw r2,28(sp)
8045240: a8b9c83a sub fp,r21,r2
8045244: e5400044 addi r21,fp,1
8045248: a829883a mov r20,r21
804524c: a8003316 blt r21,zero,804531c <___svfprintf_internal_r+0x1fdc>
8045250: 070019c4 movi fp,103
8045254: 003dbe06 br 8044950 <___svfprintf_internal_r+0x1610>
8045258: d9401545 stb r5,85(sp)
804525c: 003aec06 br 8043e10 <___svfprintf_internal_r+0xad0>
8045260: d9401545 stb r5,85(sp)
8045264: 00396406 br 80437f8 <___svfprintf_internal_r+0x4b8>
8045268: d9401545 stb r5,85(sp)
804526c: 003ab206 br 8043d38 <___svfprintf_internal_r+0x9f8>
8045270: d9401545 stb r5,85(sp)
8045274: 00394e06 br 80437b0 <___svfprintf_internal_r+0x470>
8045278: d9401545 stb r5,85(sp)
804527c: 003a6906 br 8043c24 <___svfprintf_internal_r+0x8e4>
8045280: d9401545 stb r5,85(sp)
8045284: 003a1d06 br 8043afc <___svfprintf_internal_r+0x7bc>
8045288: d9401545 stb r5,85(sp)
804528c: 00398206 br 8043898 <___svfprintf_internal_r+0x558>
8045290: d9401545 stb r5,85(sp)
8045294: 003a7006 br 8043c58 <___svfprintf_internal_r+0x918>
8045298: d9401545 stb r5,85(sp)
804529c: 003a2706 br 8043b3c <___svfprintf_internal_r+0x7fc>
80452a0: d9401545 stb r5,85(sp)
80452a4: 003aec06 br 8043e58 <___svfprintf_internal_r+0xb18>
80452a8: 8819883a mov r12,r17
80452ac: a823883a mov r17,r21
80452b0: 802b883a mov r21,r16
80452b4: dc000717 ldw r16,28(sp)
80452b8: 10800044 addi r2,r2,1
80452bc: 1d47883a add r3,r3,r21
80452c0: 43000015 stw r12,0(r8)
80452c4: 45400115 stw r21,4(r8)
80452c8: d8c01e15 stw r3,120(sp)
80452cc: d8801d15 stw r2,116(sp)
80452d0: 11000208 cmpgei r4,r2,8
80452d4: 203e3026 beq r4,zero,8044b98 <___svfprintf_internal_r+0x1858>
80452d8: d9000517 ldw r4,20(sp)
80452dc: d9801c04 addi r6,sp,112
80452e0: 980b883a mov r5,r19
80452e4: 80456900 call 8045690 <__ssprint_r>
80452e8: 1038d41e bne r2,zero,804363c <___svfprintf_internal_r+0x2fc>
80452ec: d8c01e17 ldw r3,120(sp)
80452f0: d8801d17 ldw r2,116(sp)
80452f4: b811883a mov r8,r23
80452f8: 003e2806 br 8044b9c <___svfprintf_internal_r+0x185c>
80452fc: 00bfffc4 movi r2,-1
8045300: d8800415 stw r2,16(sp)
8045304: 0038d006 br 8043648 <___svfprintf_internal_r+0x308>
8045308: d8800717 ldw r2,28(sp)
804530c: d8c00b17 ldw r3,44(sp)
8045310: 10eb883a add r21,r2,r3
8045314: a829883a mov r20,r21
8045318: a83fcd0e bge r21,zero,8045250 <___svfprintf_internal_r+0x1f10>
804531c: 0029883a mov r20,zero
8045320: 003fcb06 br 8045250 <___svfprintf_internal_r+0x1f10>
8045324: d9000917 ldw r4,36(sp)
8045328: 000d883a mov r6,zero
804532c: 000f883a mov r7,zero
8045330: a00b883a mov r5,r20
8045334: da001215 stw r8,72(sp)
8045338: dac01015 stw r11,64(sp)
804533c: db000815 stw r12,32(sp)
8045340: 800e3000 call 800e300 <__eqdf2>
8045344: db000817 ldw r12,32(sp)
8045348: dac01017 ldw r11,64(sp)
804534c: da001217 ldw r8,72(sp)
8045350: 103eb626 beq r2,zero,8044e2c <___svfprintf_internal_r+0x1aec>
8045354: 00800044 movi r2,1
8045358: 12c5c83a sub r2,r2,r11
804535c: d8801615 stw r2,88(sp)
8045360: 003eb306 br 8044e30 <___svfprintf_internal_r+0x1af0>
8045364: 00800c04 movi r2,48
8045368: a8c00c04 addi r3,r21,48
804536c: d88018c5 stb r2,99(sp)
8045370: 00800104 movi r2,4
8045374: d8c01905 stb r3,100(sp)
8045378: d8801115 stw r2,68(sp)
804537c: 003f0c06 br 8044fb0 <___svfprintf_internal_r+0x1c70>
8045380: 6080004c andi r2,r12,1
8045384: d8800715 stw r2,28(sp)
8045388: 103f0e1e bne r2,zero,8044fc4 <___svfprintf_internal_r+0x1c84>
804538c: a829883a mov r20,r21
8045390: a83d6f0e bge r21,zero,8044950 <___svfprintf_internal_r+0x1610>
8045394: 0029883a mov r20,zero
8045398: 003d6d06 br 8044950 <___svfprintf_internal_r+0x1610>
804539c: d8800b17 ldw r2,44(sp)
80453a0: 1885883a add r2,r3,r2
80453a4: 12eb883a add r21,r2,r11
80453a8: 003ff806 br 804538c <___svfprintf_internal_r+0x204c>
80453ac: d8800a17 ldw r2,40(sp)
80453b0: 10001016 blt r2,zero,80453f4 <___svfprintf_internal_r+0x20b4>
80453b4: db401543 ldbu r13,85(sp)
80453b8: e0801210 cmplti r2,fp,72
80453bc: 10000a1e bne r2,zero,80453e8 <___svfprintf_internal_r+0x20a8>
80453c0: 04020134 movhi r16,2052
80453c4: 841d1a04 addi r16,r16,29800
80453c8: 003a5206 br 8043d14 <___svfprintf_internal_r+0x9d4>
80453cc: d8800b17 ldw r2,44(sp)
80453d0: 10800044 addi r2,r2,1
80453d4: 12eb883a add r21,r2,r11
80453d8: 003fec06 br 804538c <___svfprintf_internal_r+0x204c>
80453dc: 4005883a mov r2,r8
80453e0: 632e3444 addi r12,r12,-18223
80453e4: 003e6f06 br 8044da4 <___svfprintf_internal_r+0x1a64>
80453e8: 04020134 movhi r16,2052
80453ec: 841d1904 addi r16,r16,29796
80453f0: 003a4806 br 8043d14 <___svfprintf_internal_r+0x9d4>
80453f4: 00800b44 movi r2,45
80453f8: d8801545 stb r2,85(sp)
80453fc: 03400b44 movi r13,45
8045400: 003fed06 br 80453b8 <___svfprintf_internal_r+0x2078>
8045404: 00800084 movi r2,2
8045408: d8801115 stw r2,68(sp)
804540c: 003ee806 br 8044fb0 <___svfprintf_internal_r+0x1c70>
8045410: d8800617 ldw r2,24(sp)
8045414: 12c00017 ldw r11,0(r2)
8045418: 10800104 addi r2,r2,4
804541c: 5800010e bge r11,zero,8045424 <___svfprintf_internal_r+0x20e4>
8045420: 02ffffc4 movi r11,-1
8045424: b7000043 ldbu fp,1(r22)
8045428: d8800615 stw r2,24(sp)
804542c: 182d883a mov r22,r3
8045430: e2803fcc andi r10,fp,255
8045434: 5280201c xori r10,r10,128
8045438: 52bfe004 addi r10,r10,-128
804543c: 00380c06 br 8043470 <___svfprintf_internal_r+0x130>
8045440: d8c00517 ldw r3,20(sp)
8045444: 00800304 movi r2,12
8045448: 18800015 stw r2,0(r3)
804544c: 00bfffc4 movi r2,-1
8045450: d8800415 stw r2,16(sp)
8045454: 00387c06 br 8043648 <___svfprintf_internal_r+0x308>
08045458 <vprintf>:
8045458: 00820174 movhi r2,2053
804545c: 10b2af17 ldw r2,-13636(r2)
8045460: 280f883a mov r7,r5
8045464: 200d883a mov r6,r4
8045468: 11400217 ldw r5,8(r2)
804546c: 1009883a mov r4,r2
8045470: 80469701 jmpi 8046970 <_vfprintf_r>
08045474 <_vprintf_r>:
8045474: 300f883a mov r7,r6
8045478: 280d883a mov r6,r5
804547c: 21400217 ldw r5,8(r4)
8045480: 80469701 jmpi 8046970 <_vfprintf_r>
08045484 <_vsprintf_r>:
8045484: deffe504 addi sp,sp,-108
8045488: 00a00034 movhi r2,32768
804548c: 00fffff4 movhi r3,65535
8045490: 2811883a mov r8,r5
8045494: 10bfffc4 addi r2,r2,-1
8045498: 18c08204 addi r3,r3,520
804549c: d80b883a mov r5,sp
80454a0: dfc01a15 stw ra,104(sp)
80454a4: d8c00315 stw r3,12(sp)
80454a8: da000015 stw r8,0(sp)
80454ac: da000415 stw r8,16(sp)
80454b0: d8800515 stw r2,20(sp)
80454b4: d8800215 stw r2,8(sp)
80454b8: 80433400 call 8043340 <___svfprintf_internal_r>
80454bc: d8c00017 ldw r3,0(sp)
80454c0: 18000005 stb zero,0(r3)
80454c4: dfc01a17 ldw ra,104(sp)
80454c8: dec01b04 addi sp,sp,108
80454cc: f800283a ret
080454d0 <vsprintf>:
80454d0: 00820174 movhi r2,2053
80454d4: 300f883a mov r7,r6
80454d8: 280d883a mov r6,r5
80454dc: 200b883a mov r5,r4
80454e0: 1132af17 ldw r4,-13636(r2)
80454e4: 80454841 jmpi 8045484 <_vsprintf_r>
080454e8 <__register_exitproc>:
80454e8: 00820174 movhi r2,2053
80454ec: 10f2ae17 ldw r3,-13640(r2)
80454f0: 18805217 ldw r2,328(r3)
80454f4: 10001726 beq r2,zero,8045554 <__register_exitproc+0x6c>
80454f8: 10c00117 ldw r3,4(r2)
80454fc: 1a000808 cmpgei r8,r3,32
8045500: 40001b1e bne r8,zero,8045570 <__register_exitproc+0x88>
8045504: 20000b26 beq r4,zero,8045534 <__register_exitproc+0x4c>
8045508: 181090ba slli r8,r3,2
804550c: 02400044 movi r9,1
8045510: 48d2983a sll r9,r9,r3
8045514: 1211883a add r8,r2,r8
8045518: 41802215 stw r6,136(r8)
804551c: 11806217 ldw r6,392(r2)
8045520: 21000098 cmpnei r4,r4,2
8045524: 324cb03a or r6,r6,r9
8045528: 11806215 stw r6,392(r2)
804552c: 41c04215 stw r7,264(r8)
8045530: 20000b26 beq r4,zero,8045560 <__register_exitproc+0x78>
8045534: 19000084 addi r4,r3,2
8045538: 200890ba slli r4,r4,2
804553c: 18c00044 addi r3,r3,1
8045540: 10c00115 stw r3,4(r2)
8045544: 1105883a add r2,r2,r4
8045548: 11400015 stw r5,0(r2)
804554c: 0005883a mov r2,zero
8045550: f800283a ret
8045554: 18805304 addi r2,r3,332
8045558: 18805215 stw r2,328(r3)
804555c: 003fe606 br 80454f8 <__register_exitproc+0x10>
8045560: 11006317 ldw r4,396(r2)
8045564: 2252b03a or r9,r4,r9
8045568: 12406315 stw r9,396(r2)
804556c: 003ff106 br 8045534 <__register_exitproc+0x4c>
8045570: 00bfffc4 movi r2,-1
8045574: f800283a ret
08045578 <__call_exitprocs>:
8045578: defff704 addi sp,sp,-36
804557c: 00820174 movhi r2,2053
8045580: ddc00715 stw r23,28(sp)
8045584: 15f2ae17 ldw r23,-13640(r2)
8045588: dd400515 stw r21,20(sp)
804558c: dd000415 stw r20,16(sp)
8045590: dcc00315 stw r19,12(sp)
8045594: dfc00815 stw ra,32(sp)
8045598: dd800615 stw r22,24(sp)
804559c: dc800215 stw r18,8(sp)
80455a0: dc400115 stw r17,4(sp)
80455a4: dc000015 stw r16,0(sp)
80455a8: 2029883a mov r20,r4
80455ac: 282b883a mov r21,r5
80455b0: 04c00044 movi r19,1
80455b4: bc805217 ldw r18,328(r23)
80455b8: 90000d26 beq r18,zero,80455f0 <__call_exitprocs+0x78>
80455bc: 94000117 ldw r16,4(r18)
80455c0: 847fffc4 addi r17,r16,-1
80455c4: 88000a16 blt r17,zero,80455f0 <__call_exitprocs+0x78>
80455c8: 84000044 addi r16,r16,1
80455cc: 802090ba slli r16,r16,2
80455d0: 9421883a add r16,r18,r16
80455d4: a8001126 beq r21,zero,804561c <__call_exitprocs+0xa4>
80455d8: 80804017 ldw r2,256(r16)
80455dc: 15400f26 beq r2,r21,804561c <__call_exitprocs+0xa4>
80455e0: 8c7fffc4 addi r17,r17,-1
80455e4: 88bfffd8 cmpnei r2,r17,-1
80455e8: 843fff04 addi r16,r16,-4
80455ec: 103ff91e bne r2,zero,80455d4 <__call_exitprocs+0x5c>
80455f0: dfc00817 ldw ra,32(sp)
80455f4: ddc00717 ldw r23,28(sp)
80455f8: dd800617 ldw r22,24(sp)
80455fc: dd400517 ldw r21,20(sp)
8045600: dd000417 ldw r20,16(sp)
8045604: dcc00317 ldw r19,12(sp)
8045608: dc800217 ldw r18,8(sp)
804560c: dc400117 ldw r17,4(sp)
8045610: dc000017 ldw r16,0(sp)
8045614: dec00904 addi sp,sp,36
8045618: f800283a ret
804561c: 90800117 ldw r2,4(r18)
8045620: 81800017 ldw r6,0(r16)
8045624: 10bfffc4 addi r2,r2,-1
8045628: 14401526 beq r2,r17,8045680 <__call_exitprocs+0x108>
804562c: 80000015 stw zero,0(r16)
8045630: 303feb26 beq r6,zero,80455e0 <__call_exitprocs+0x68>
8045634: 9c46983a sll r3,r19,r17
8045638: 90806217 ldw r2,392(r18)
804563c: 95800117 ldw r22,4(r18)
8045640: 1884703a and r2,r3,r2
8045644: 1000061e bne r2,zero,8045660 <__call_exitprocs+0xe8>
8045648: 303ee83a callr r6
804564c: 90800117 ldw r2,4(r18)
8045650: 15bfd81e bne r2,r22,80455b4 <__call_exitprocs+0x3c>
8045654: b8805217 ldw r2,328(r23)
8045658: 14bfe126 beq r2,r18,80455e0 <__call_exitprocs+0x68>
804565c: 003fd506 br 80455b4 <__call_exitprocs+0x3c>
8045660: 90806317 ldw r2,396(r18)
8045664: 81002017 ldw r4,128(r16)
8045668: 1886703a and r3,r3,r2
804566c: 1800061e bne r3,zero,8045688 <__call_exitprocs+0x110>
8045670: 200b883a mov r5,r4
8045674: a009883a mov r4,r20
8045678: 303ee83a callr r6
804567c: 003ff306 br 804564c <__call_exitprocs+0xd4>
8045680: 94400115 stw r17,4(r18)
8045684: 003fea06 br 8045630 <__call_exitprocs+0xb8>
8045688: 303ee83a callr r6
804568c: 003fef06 br 804564c <__call_exitprocs+0xd4>
08045690 <__ssprint_r>:
8045690: 30800217 ldw r2,8(r6)
8045694: defff604 addi sp,sp,-40
8045698: dcc00315 stw r19,12(sp)
804569c: dfc00915 stw ra,36(sp)
80456a0: df000815 stw fp,32(sp)
80456a4: ddc00715 stw r23,28(sp)
80456a8: dd800615 stw r22,24(sp)
80456ac: dd400515 stw r21,20(sp)
80456b0: dd000415 stw r20,16(sp)
80456b4: dc800215 stw r18,8(sp)
80456b8: dc400115 stw r17,4(sp)
80456bc: dc000015 stw r16,0(sp)
80456c0: 3027883a mov r19,r6
80456c4: 10005426 beq r2,zero,8045818 <__ssprint_r+0x188>
80456c8: 2029883a mov r20,r4
80456cc: 2821883a mov r16,r5
80456d0: 35800017 ldw r22,0(r6)
80456d4: 29000017 ldw r4,0(r5)
80456d8: 2c400217 ldw r17,8(r5)
80456dc: 057edfc4 movi r21,-1153
80456e0: 00003406 br 80457b4 <__ssprint_r+0x124>
80456e4: 8080030b ldhu r2,12(r16)
80456e8: 10c1200c andi r3,r2,1152
80456ec: 18002426 beq r3,zero,8045780 <__ssprint_r+0xf0>
80456f0: 81800517 ldw r6,20(r16)
80456f4: 81400417 ldw r5,16(r16)
80456f8: 90c00044 addi r3,r18,1
80456fc: 318000e4 muli r6,r6,3
8045700: 216fc83a sub r23,r4,r5
8045704: 1dc7883a add r3,r3,r23
8045708: 3022d7fa srli r17,r6,31
804570c: 89a3883a add r17,r17,r6
8045710: 8823d07a srai r17,r17,1
8045714: 880d883a mov r6,r17
8045718: 88c0022e bgeu r17,r3,8045724 <__ssprint_r+0x94>
804571c: 1823883a mov r17,r3
8045720: 180d883a mov r6,r3
8045724: 1081000c andi r2,r2,1024
8045728: 10002b26 beq r2,zero,80457d8 <__ssprint_r+0x148>
804572c: 300b883a mov r5,r6
8045730: a009883a mov r4,r20
8045734: 8007ddc0 call 8007ddc <_malloc_r>
8045738: 10002e26 beq r2,zero,80457f4 <__ssprint_r+0x164>
804573c: 81400417 ldw r5,16(r16)
8045740: b80d883a mov r6,r23
8045744: 1009883a mov r4,r2
8045748: 80086b80 call 80086b8 <memcpy>
804574c: 1007883a mov r3,r2
8045750: 8080030b ldhu r2,12(r16)
8045754: 1544703a and r2,r2,r21
8045758: 10802014 ori r2,r2,128
804575c: 8080030d sth r2,12(r16)
8045760: 8dc5c83a sub r2,r17,r23
8045764: 1dc9883a add r4,r3,r23
8045768: 84400515 stw r17,20(r16)
804576c: 80c00415 stw r3,16(r16)
8045770: 81000015 stw r4,0(r16)
8045774: 9023883a mov r17,r18
8045778: 80800215 stw r2,8(r16)
804577c: 902f883a mov r23,r18
8045780: b80d883a mov r6,r23
8045784: e00b883a mov r5,fp
8045788: 80087b80 call 80087b8 <memmove>
804578c: 80c00217 ldw r3,8(r16)
8045790: 81000017 ldw r4,0(r16)
8045794: 98800217 ldw r2,8(r19)
8045798: 1c63c83a sub r17,r3,r17
804579c: 25c9883a add r4,r4,r23
80457a0: 84400215 stw r17,8(r16)
80457a4: 81000015 stw r4,0(r16)
80457a8: 14a5c83a sub r18,r2,r18
80457ac: 9c800215 stw r18,8(r19)
80457b0: 90001926 beq r18,zero,8045818 <__ssprint_r+0x188>
80457b4: b4800117 ldw r18,4(r22)
80457b8: b7000017 ldw fp,0(r22)
80457bc: 882f883a mov r23,r17
80457c0: b5800204 addi r22,r22,8
80457c4: 903ffb26 beq r18,zero,80457b4 <__ssprint_r+0x124>
80457c8: 947fc62e bgeu r18,r17,80456e4 <__ssprint_r+0x54>
80457cc: 9023883a mov r17,r18
80457d0: 902f883a mov r23,r18
80457d4: 003fea06 br 8045780 <__ssprint_r+0xf0>
80457d8: a009883a mov r4,r20
80457dc: 8009abc0 call 8009abc <_realloc_r>
80457e0: 1007883a mov r3,r2
80457e4: 103fde1e bne r2,zero,8045760 <__ssprint_r+0xd0>
80457e8: 81400417 ldw r5,16(r16)
80457ec: a009883a mov r4,r20
80457f0: 80071c40 call 80071c4 <_free_r>
80457f4: 80c0030b ldhu r3,12(r16)
80457f8: 00800304 movi r2,12
80457fc: a0800015 stw r2,0(r20)
8045800: 18c01014 ori r3,r3,64
8045804: 80c0030d sth r3,12(r16)
8045808: 00bfffc4 movi r2,-1
804580c: 98000215 stw zero,8(r19)
8045810: 98000115 stw zero,4(r19)
8045814: 00000206 br 8045820 <__ssprint_r+0x190>
8045818: 98000115 stw zero,4(r19)
804581c: 0005883a mov r2,zero
8045820: dfc00917 ldw ra,36(sp)
8045824: df000817 ldw fp,32(sp)
8045828: ddc00717 ldw r23,28(sp)
804582c: dd800617 ldw r22,24(sp)
8045830: dd400517 ldw r21,20(sp)
8045834: dd000417 ldw r20,16(sp)
8045838: dcc00317 ldw r19,12(sp)
804583c: dc800217 ldw r18,8(sp)
8045840: dc400117 ldw r17,4(sp)
8045844: dc000017 ldw r16,0(sp)
8045848: dec00a04 addi sp,sp,40
804584c: f800283a ret
08045850 <___svfiprintf_internal_r>:
8045850: 2880030b ldhu r2,12(r5)
8045854: deffd004 addi sp,sp,-192
8045858: df002e15 stw fp,184(sp)
804585c: dd802c15 stw r22,176(sp)
8045860: dd002a15 stw r20,168(sp)
8045864: dfc02f15 stw ra,188(sp)
8045868: ddc02d15 stw r23,180(sp)
804586c: dd402b15 stw r21,172(sp)
8045870: dcc02915 stw r19,164(sp)
8045874: dc802815 stw r18,160(sp)
8045878: dc402715 stw r17,156(sp)
804587c: dc002615 stw r16,152(sp)
8045880: 1080200c andi r2,r2,128
8045884: d9c00315 stw r7,12(sp)
8045888: 2829883a mov r20,r5
804588c: 202d883a mov r22,r4
8045890: 3039883a mov fp,r6
8045894: 10000226 beq r2,zero,80458a0 <___svfiprintf_internal_r+0x50>
8045898: 28800417 ldw r2,16(r5)
804589c: 10039b26 beq r2,zero,804670c <___svfiprintf_internal_r+0xebc>
80458a0: dc801604 addi r18,sp,88
80458a4: dc800915 stw r18,36(sp)
80458a8: d8000b15 stw zero,44(sp)
80458ac: d8000a15 stw zero,40(sp)
80458b0: 9011883a mov r8,r18
80458b4: d8000415 stw zero,16(sp)
80458b8: d8000015 stw zero,0(sp)
80458bc: e0800007 ldb r2,0(fp)
80458c0: 10009026 beq r2,zero,8045b04 <___svfiprintf_internal_r+0x2b4>
80458c4: 10800960 cmpeqi r2,r2,37
80458c8: 1003751e bne r2,zero,80466a0 <___svfiprintf_internal_r+0xe50>
80458cc: e021883a mov r16,fp
80458d0: 00000206 br 80458dc <___svfiprintf_internal_r+0x8c>
80458d4: 18008126 beq r3,zero,8045adc <___svfiprintf_internal_r+0x28c>
80458d8: 8821883a mov r16,r17
80458dc: 80800047 ldb r2,1(r16)
80458e0: 84400044 addi r17,r16,1
80458e4: 10c00958 cmpnei r3,r2,37
80458e8: 103ffa1e bne r2,zero,80458d4 <___svfiprintf_internal_r+0x84>
80458ec: 8f27c83a sub r19,r17,fp
80458f0: 98008426 beq r19,zero,8045b04 <___svfiprintf_internal_r+0x2b4>
80458f4: d8c00b17 ldw r3,44(sp)
80458f8: d8800a17 ldw r2,40(sp)
80458fc: 47000015 stw fp,0(r8)
8045900: 1cc7883a add r3,r3,r19
8045904: 10800044 addi r2,r2,1
8045908: d8800a15 stw r2,40(sp)
804590c: 44c00115 stw r19,4(r8)
8045910: d8c00b15 stw r3,44(sp)
8045914: 10800208 cmpgei r2,r2,8
8045918: 1000731e bne r2,zero,8045ae8 <___svfiprintf_internal_r+0x298>
804591c: 42000204 addi r8,r8,8
8045920: d8c00017 ldw r3,0(sp)
8045924: 80800047 ldb r2,1(r16)
8045928: 1cc7883a add r3,r3,r19
804592c: d8c00015 stw r3,0(sp)
8045930: 10007426 beq r2,zero,8045b04 <___svfiprintf_internal_r+0x2b4>
8045934: 88800047 ldb r2,1(r17)
8045938: 8f000044 addi fp,r17,1
804593c: d8000845 stb zero,33(sp)
8045940: 000b883a mov r5,zero
8045944: 000d883a mov r6,zero
8045948: 027fffc4 movi r9,-1
804594c: 0021883a mov r16,zero
8045950: 0019883a mov r12,zero
8045954: e7000044 addi fp,fp,1
8045958: 10fff804 addi r3,r2,-32
804595c: 19001668 cmpgeui r4,r3,89
8045960: 20008a1e bne r4,zero,8045b8c <___svfiprintf_internal_r+0x33c>
8045964: 180690ba slli r3,r3,2
8045968: 01020134 movhi r4,2052
804596c: 1909883a add r4,r3,r4
8045970: 20d65e17 ldw r3,22904(r4)
8045974: 1800683a jmp r3
8045978: 08045c5c xori zero,at,4465
804597c: 08045b8c andi zero,at,4462
8045980: 08045b8c andi zero,at,4462
8045984: 08045c50 cmplti zero,at,4465
8045988: 08045b8c andi zero,at,4462
804598c: 08045b8c andi zero,at,4462
8045990: 08045b8c andi zero,at,4462
8045994: 08045b8c andi zero,at,4462
8045998: 08045b8c andi zero,at,4462
804599c: 08045b8c andi zero,at,4462
80459a0: 08045c28 cmpgeui zero,at,4464
80459a4: 08045c18 cmpnei zero,at,4464
80459a8: 08045b8c andi zero,at,4462
80459ac: 08045c00 call 8045c0 <OSCtxSw_SWITCH_PC+0x804580>
80459b0: 08045bbc xorhi zero,at,4462
80459b4: 08045b8c andi zero,at,4462
80459b8: 08045bb0 cmpltui zero,at,4462
80459bc: 08045b5c xori zero,at,4461
80459c0: 08045b5c xori zero,at,4461
80459c4: 08045b5c xori zero,at,4461
80459c8: 08045b5c xori zero,at,4461
80459cc: 08045b5c xori zero,at,4461
80459d0: 08045b5c xori zero,at,4461
80459d4: 08045b5c xori zero,at,4461
80459d8: 08045b5c xori zero,at,4461
80459dc: 08045b5c xori zero,at,4461
80459e0: 08045b8c andi zero,at,4462
80459e4: 08045b8c andi zero,at,4462
80459e8: 08045b8c andi zero,at,4462
80459ec: 08045b8c andi zero,at,4462
80459f0: 08045b8c andi zero,at,4462
80459f4: 08045b8c andi zero,at,4462
80459f8: 08045b8c andi zero,at,4462
80459fc: 08045b8c andi zero,at,4462
8045a00: 08045b8c andi zero,at,4462
8045a04: 08045b8c andi zero,at,4462
8045a08: 080461c8 cmpgei zero,at,4487
8045a0c: 08045b8c andi zero,at,4462
8045a10: 08045b8c andi zero,at,4462
8045a14: 08045b8c andi zero,at,4462
8045a18: 08045b8c andi zero,at,4462
8045a1c: 08045b8c andi zero,at,4462
8045a20: 08045b8c andi zero,at,4462
8045a24: 08045b8c andi zero,at,4462
8045a28: 08045b8c andi zero,at,4462
8045a2c: 08045b8c andi zero,at,4462
8045a30: 08045b8c andi zero,at,4462
8045a34: 08046194 ori zero,at,4486
8045a38: 08045b8c andi zero,at,4462
8045a3c: 08045b8c andi zero,at,4462
8045a40: 08045b8c andi zero,at,4462
8045a44: 08045b8c andi zero,at,4462
8045a48: 08045b8c andi zero,at,4462
8045a4c: 08046160 cmpeqi zero,at,4485
8045a50: 08045b8c andi zero,at,4462
8045a54: 08045b8c andi zero,at,4462
8045a58: 08046118 cmpnei zero,at,4484
8045a5c: 08045b8c andi zero,at,4462
8045a60: 08045b8c andi zero,at,4462
8045a64: 08045b8c andi zero,at,4462
8045a68: 08045b8c andi zero,at,4462
8045a6c: 08045b8c andi zero,at,4462
8045a70: 08045b8c andi zero,at,4462
8045a74: 08045b8c andi zero,at,4462
8045a78: 08045b8c andi zero,at,4462
8045a7c: 08045b8c andi zero,at,4462
8045a80: 08045b8c andi zero,at,4462
8045a84: 080460e8 cmpgeui zero,at,4483
8045a88: 08046074 orhi zero,at,4481
8045a8c: 08045b8c andi zero,at,4462
8045a90: 08045b8c andi zero,at,4462
8045a94: 08045b8c andi zero,at,4462
8045a98: 08046068 cmpgeui zero,at,4481
8045a9c: 08046074 orhi zero,at,4481
8045aa0: 08045b8c andi zero,at,4462
8045aa4: 08045b8c andi zero,at,4462
8045aa8: 08046054 ori zero,at,4481
8045aac: 08045b8c andi zero,at,4462
8045ab0: 08046014 ori zero,at,4480
8045ab4: 08045fd4 ori zero,at,4479
8045ab8: 08045d7c xorhi zero,at,4469
8045abc: 08045d70 cmpltui zero,at,4469
8045ac0: 08045b8c andi zero,at,4462
8045ac4: 08045d10 cmplti zero,at,4468
8045ac8: 08045b8c andi zero,at,4462
8045acc: 08045cd0 cmplti zero,at,4467
8045ad0: 08045b8c andi zero,at,4462
8045ad4: 08045b8c andi zero,at,4462
8045ad8: 08045c88 cmpgei zero,at,4466
8045adc: 8f27c83a sub r19,r17,fp
8045ae0: 983f9426 beq r19,zero,8045934 <___svfiprintf_internal_r+0xe4>
8045ae4: 003f8306 br 80458f4 <___svfiprintf_internal_r+0xa4>
8045ae8: d9800904 addi r6,sp,36
8045aec: a00b883a mov r5,r20
8045af0: b009883a mov r4,r22
8045af4: 80456900 call 8045690 <__ssprint_r>
8045af8: 1000081e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
8045afc: 9011883a mov r8,r18
8045b00: 003f8706 br 8045920 <___svfiprintf_internal_r+0xd0>
8045b04: d8800b17 ldw r2,44(sp)
8045b08: 10000426 beq r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
8045b0c: d9800904 addi r6,sp,36
8045b10: a00b883a mov r5,r20
8045b14: b009883a mov r4,r22
8045b18: 80456900 call 8045690 <__ssprint_r>
8045b1c: a080030b ldhu r2,12(r20)
8045b20: 1080100c andi r2,r2,64
8045b24: 10037e1e bne r2,zero,8046920 <___svfiprintf_internal_r+0x10d0>
8045b28: d8800017 ldw r2,0(sp)
8045b2c: dfc02f17 ldw ra,188(sp)
8045b30: df002e17 ldw fp,184(sp)
8045b34: ddc02d17 ldw r23,180(sp)
8045b38: dd802c17 ldw r22,176(sp)
8045b3c: dd402b17 ldw r21,172(sp)
8045b40: dd002a17 ldw r20,168(sp)
8045b44: dcc02917 ldw r19,164(sp)
8045b48: dc802817 ldw r18,160(sp)
8045b4c: dc402717 ldw r17,156(sp)
8045b50: dc002617 ldw r16,152(sp)
8045b54: dec03004 addi sp,sp,192
8045b58: f800283a ret
8045b5c: 0021883a mov r16,zero
8045b60: 10fff404 addi r3,r2,-48
8045b64: e7000044 addi fp,fp,1
8045b68: 840002a4 muli r16,r16,10
8045b6c: e0bfffc7 ldb r2,-1(fp)
8045b70: 1c21883a add r16,r3,r16
8045b74: 10fff404 addi r3,r2,-48
8045b78: 190002b0 cmpltui r4,r3,10
8045b7c: 203ff91e bne r4,zero,8045b64 <___svfiprintf_internal_r+0x314>
8045b80: 10fff804 addi r3,r2,-32
8045b84: 19001668 cmpgeui r4,r3,89
8045b88: 203f7626 beq r4,zero,8045964 <___svfiprintf_internal_r+0x114>
8045b8c: 29403fcc andi r5,r5,255
8045b90: 2803471e bne r5,zero,80468b0 <___svfiprintf_internal_r+0x1060>
8045b94: 103fdb26 beq r2,zero,8045b04 <___svfiprintf_internal_r+0x2b4>
8045b98: d8800c05 stb r2,48(sp)
8045b9c: d8000845 stb zero,33(sp)
8045ba0: 04c00044 movi r19,1
8045ba4: 05400044 movi r21,1
8045ba8: ddc00c04 addi r23,sp,48
8045bac: 00015706 br 804610c <___svfiprintf_internal_r+0x8bc>
8045bb0: 63002014 ori r12,r12,128
8045bb4: e0800007 ldb r2,0(fp)
8045bb8: 003f6606 br 8045954 <___svfiprintf_internal_r+0x104>
8045bbc: e0800007 ldb r2,0(fp)
8045bc0: e1000044 addi r4,fp,1
8045bc4: 10c00aa0 cmpeqi r3,r2,42
8045bc8: 1803581e bne r3,zero,804692c <___svfiprintf_internal_r+0x10dc>
8045bcc: 10fff404 addi r3,r2,-48
8045bd0: 19c002b0 cmpltui r7,r3,10
8045bd4: 2039883a mov fp,r4
8045bd8: 0013883a mov r9,zero
8045bdc: 383f5e26 beq r7,zero,8045958 <___svfiprintf_internal_r+0x108>
8045be0: e7000044 addi fp,fp,1
8045be4: 4a4002a4 muli r9,r9,10
8045be8: e0bfffc7 ldb r2,-1(fp)
8045bec: 48d3883a add r9,r9,r3
8045bf0: 10fff404 addi r3,r2,-48
8045bf4: 190002b0 cmpltui r4,r3,10
8045bf8: 203ff91e bne r4,zero,8045be0 <___svfiprintf_internal_r+0x390>
8045bfc: 003f5606 br 8045958 <___svfiprintf_internal_r+0x108>
8045c00: e0800003 ldbu r2,0(fp)
8045c04: 10803fcc andi r2,r2,255
8045c08: 1080201c xori r2,r2,128
8045c0c: 63000114 ori r12,r12,4
8045c10: 10bfe004 addi r2,r2,-128
8045c14: 003f4f06 br 8045954 <___svfiprintf_internal_r+0x104>
8045c18: 01400044 movi r5,1
8045c1c: 01800ac4 movi r6,43
8045c20: e0800007 ldb r2,0(fp)
8045c24: 003f4b06 br 8045954 <___svfiprintf_internal_r+0x104>
8045c28: d8800317 ldw r2,12(sp)
8045c2c: 14000017 ldw r16,0(r2)
8045c30: 15c00104 addi r23,r2,4
8045c34: e0800003 ldbu r2,0(fp)
8045c38: 8002ee16 blt r16,zero,80467f4 <___svfiprintf_internal_r+0xfa4>
8045c3c: ddc00315 stw r23,12(sp)
8045c40: 10803fcc andi r2,r2,255
8045c44: 1080201c xori r2,r2,128
8045c48: 10bfe004 addi r2,r2,-128
8045c4c: 003f4106 br 8045954 <___svfiprintf_internal_r+0x104>
8045c50: 63000054 ori r12,r12,1
8045c54: e0800007 ldb r2,0(fp)
8045c58: 003f3e06 br 8045954 <___svfiprintf_internal_r+0x104>
8045c5c: 30c03fcc andi r3,r6,255
8045c60: 18c0201c xori r3,r3,128
8045c64: 18ffe004 addi r3,r3,-128
8045c68: e0800003 ldbu r2,0(fp)
8045c6c: 183ff41e bne r3,zero,8045c40 <___svfiprintf_internal_r+0x3f0>
8045c70: 10803fcc andi r2,r2,255
8045c74: 1080201c xori r2,r2,128
8045c78: 01400044 movi r5,1
8045c7c: 01800804 movi r6,32
8045c80: 10bfe004 addi r2,r2,-128
8045c84: 003f3306 br 8045954 <___svfiprintf_internal_r+0x104>
8045c88: 29403fcc andi r5,r5,255
8045c8c: 28030e1e bne r5,zero,80468c8 <___svfiprintf_internal_r+0x1078>
8045c90: 00c20134 movhi r3,2052
8045c94: 18dd2004 addi r3,r3,29824
8045c98: d8c00415 stw r3,16(sp)
8045c9c: 60c0080c andi r3,r12,32
8045ca0: 18012426 beq r3,zero,8046134 <___svfiprintf_internal_r+0x8e4>
8045ca4: d8c00317 ldw r3,12(sp)
8045ca8: 1cc00017 ldw r19,0(r3)
8045cac: 1d400117 ldw r21,4(r3)
8045cb0: 18c00204 addi r3,r3,8
8045cb4: d8c00315 stw r3,12(sp)
8045cb8: 60c0004c andi r3,r12,1
8045cbc: 18000226 beq r3,zero,8045cc8 <___svfiprintf_internal_r+0x478>
8045cc0: 9d46b03a or r3,r19,r21
8045cc4: 1802811e bne r3,zero,80466cc <___svfiprintf_internal_r+0xe7c>
8045cc8: 00800084 movi r2,2
8045ccc: 00003906 br 8045db4 <___svfiprintf_internal_r+0x564>
8045cd0: 29403fcc andi r5,r5,255
8045cd4: 2803081e bne r5,zero,80468f8 <___svfiprintf_internal_r+0x10a8>
8045cd8: 6080080c andi r2,r12,32
8045cdc: 10017e1e bne r2,zero,80462d8 <___svfiprintf_internal_r+0xa88>
8045ce0: d8800317 ldw r2,12(sp)
8045ce4: 60c0040c andi r3,r12,16
8045ce8: 14c00017 ldw r19,0(r2)
8045cec: 10800104 addi r2,r2,4
8045cf0: 1801221e bne r3,zero,804617c <___svfiprintf_internal_r+0x92c>
8045cf4: 60c0100c andi r3,r12,64
8045cf8: 1802e626 beq r3,zero,8046894 <___svfiprintf_internal_r+0x1044>
8045cfc: d8800315 stw r2,12(sp)
8045d00: 9cffffcc andi r19,r19,65535
8045d04: 002b883a mov r21,zero
8045d08: 00800044 movi r2,1
8045d0c: 00002906 br 8045db4 <___svfiprintf_internal_r+0x564>
8045d10: d8800317 ldw r2,12(sp)
8045d14: d8000845 stb zero,33(sp)
8045d18: 15c00017 ldw r23,0(r2)
8045d1c: 14400104 addi r17,r2,4
8045d20: b802cf26 beq r23,zero,8046860 <___svfiprintf_internal_r+0x1010>
8045d24: 48bfffe0 cmpeqi r2,r9,-1
8045d28: 10026e1e bne r2,zero,80466e4 <___svfiprintf_internal_r+0xe94>
8045d2c: 480d883a mov r6,r9
8045d30: 000b883a mov r5,zero
8045d34: b809883a mov r4,r23
8045d38: da000315 stw r8,12(sp)
8045d3c: db000215 stw r12,8(sp)
8045d40: da400115 stw r9,4(sp)
8045d44: 80085d00 call 80085d0 <memchr>
8045d48: da400117 ldw r9,4(sp)
8045d4c: db000217 ldw r12,8(sp)
8045d50: da000317 ldw r8,12(sp)
8045d54: 1002d826 beq r2,zero,80468b8 <___svfiprintf_internal_r+0x1068>
8045d58: 15ebc83a sub r21,r2,r23
8045d5c: a827883a mov r19,r21
8045d60: a800010e bge r21,zero,8045d68 <___svfiprintf_internal_r+0x518>
8045d64: 0027883a mov r19,zero
8045d68: dc400315 stw r17,12(sp)
8045d6c: 0000e706 br 804610c <___svfiprintf_internal_r+0x8bc>
8045d70: 63000814 ori r12,r12,32
8045d74: e0800007 ldb r2,0(fp)
8045d78: 003ef606 br 8045954 <___svfiprintf_internal_r+0x104>
8045d7c: d8c00317 ldw r3,12(sp)
8045d80: 00800c04 movi r2,48
8045d84: d8800885 stb r2,34(sp)
8045d88: 00801e04 movi r2,120
8045d8c: 01020134 movhi r4,2052
8045d90: d88008c5 stb r2,35(sp)
8045d94: 1cc00017 ldw r19,0(r3)
8045d98: 18800104 addi r2,r3,4
8045d9c: d8800315 stw r2,12(sp)
8045da0: 209d2004 addi r2,r4,29824
8045da4: d8800415 stw r2,16(sp)
8045da8: 002b883a mov r21,zero
8045dac: 63000094 ori r12,r12,2
8045db0: 00800084 movi r2,2
8045db4: d8000845 stb zero,33(sp)
8045db8: 48ffffe0 cmpeqi r3,r9,-1
8045dbc: 001b883a mov r13,zero
8045dc0: 1801181e bne r3,zero,8046224 <___svfiprintf_internal_r+0x9d4>
8045dc4: 047fdfc4 movi r17,-129
8045dc8: 9d46b03a or r3,r19,r21
8045dcc: 6462703a and r17,r12,r17
8045dd0: 1801d21e bne r3,zero,804651c <___svfiprintf_internal_r+0xccc>
8045dd4: 48028a1e bne r9,zero,8046800 <___svfiprintf_internal_r+0xfb0>
8045dd8: 1000bf1e bne r2,zero,80460d8 <___svfiprintf_internal_r+0x888>
8045ddc: 6540004c andi r21,r12,1
8045de0: a8023126 beq r21,zero,80466a8 <___svfiprintf_internal_r+0xe58>
8045de4: 00800c04 movi r2,48
8045de8: d88015c5 stb r2,87(sp)
8045dec: ddc015c4 addi r23,sp,87
8045df0: 4827883a mov r19,r9
8045df4: 4d40010e bge r9,r21,8045dfc <___svfiprintf_internal_r+0x5ac>
8045df8: a827883a mov r19,r21
8045dfc: 6b403fcc andi r13,r13,255
8045e00: 6b40201c xori r13,r13,128
8045e04: 6b7fe004 addi r13,r13,-128
8045e08: 68000126 beq r13,zero,8045e10 <___svfiprintf_internal_r+0x5c0>
8045e0c: 9cc00044 addi r19,r19,1
8045e10: 8b40008c andi r13,r17,2
8045e14: 68000126 beq r13,zero,8045e1c <___svfiprintf_internal_r+0x5cc>
8045e18: 9cc00084 addi r19,r19,2
8045e1c: 8b00210c andi r12,r17,132
8045e20: d8800b17 ldw r2,44(sp)
8045e24: d9000a17 ldw r4,40(sp)
8045e28: 6000021e bne r12,zero,8045e34 <___svfiprintf_internal_r+0x5e4>
8045e2c: 84c7c83a sub r3,r16,r19
8045e30: 00c1bc16 blt zero,r3,8046524 <___svfiprintf_internal_r+0xcd4>
8045e34: d9800847 ldb r6,33(sp)
8045e38: 21400044 addi r5,r4,1
8045e3c: 40c00204 addi r3,r8,8
8045e40: 30000f26 beq r6,zero,8045e80 <___svfiprintf_internal_r+0x630>
8045e44: d9800844 addi r6,sp,33
8045e48: 10800044 addi r2,r2,1
8045e4c: 41800015 stw r6,0(r8)
8045e50: 01800044 movi r6,1
8045e54: 41800115 stw r6,4(r8)
8045e58: d8800b15 stw r2,44(sp)
8045e5c: d9400a15 stw r5,40(sp)
8045e60: 29800208 cmpgei r6,r5,8
8045e64: 3001e11e bne r6,zero,80465ec <___svfiprintf_internal_r+0xd9c>
8045e68: 21c00084 addi r7,r4,2
8045e6c: 41800404 addi r6,r8,16
8045e70: 2809883a mov r4,r5
8045e74: 1811883a mov r8,r3
8045e78: 380b883a mov r5,r7
8045e7c: 3007883a mov r3,r6
8045e80: 68000d26 beq r13,zero,8045eb8 <___svfiprintf_internal_r+0x668>
8045e84: d9000884 addi r4,sp,34
8045e88: 10800084 addi r2,r2,2
8045e8c: 41000015 stw r4,0(r8)
8045e90: 01000084 movi r4,2
8045e94: 41000115 stw r4,4(r8)
8045e98: d8800b15 stw r2,44(sp)
8045e9c: d9400a15 stw r5,40(sp)
8045ea0: 29000208 cmpgei r4,r5,8
8045ea4: 2001e21e bne r4,zero,8046630 <___svfiprintf_internal_r+0xde0>
8045ea8: 2809883a mov r4,r5
8045eac: 1811883a mov r8,r3
8045eb0: 29400044 addi r5,r5,1
8045eb4: 18c00204 addi r3,r3,8
8045eb8: 63002018 cmpnei r12,r12,128
8045ebc: 60011626 beq r12,zero,8046318 <___svfiprintf_internal_r+0xac8>
8045ec0: 4d53c83a sub r9,r9,r21
8045ec4: 02414816 blt zero,r9,80463e8 <___svfiprintf_internal_r+0xb98>
8045ec8: a885883a add r2,r21,r2
8045ecc: 45c00015 stw r23,0(r8)
8045ed0: 45400115 stw r21,4(r8)
8045ed4: d8800b15 stw r2,44(sp)
8045ed8: d9400a15 stw r5,40(sp)
8045edc: 29000210 cmplti r4,r5,8
8045ee0: 20017026 beq r4,zero,80464a4 <___svfiprintf_internal_r+0xc54>
8045ee4: 8c40010c andi r17,r17,4
8045ee8: 88000226 beq r17,zero,8045ef4 <___svfiprintf_internal_r+0x6a4>
8045eec: 84e3c83a sub r17,r16,r19
8045ef0: 04400916 blt zero,r17,8045f18 <___svfiprintf_internal_r+0x6c8>
8045ef4: 84c0010e bge r16,r19,8045efc <___svfiprintf_internal_r+0x6ac>
8045ef8: 9821883a mov r16,r19
8045efc: d8c00017 ldw r3,0(sp)
8045f00: 1c07883a add r3,r3,r16
8045f04: d8c00015 stw r3,0(sp)
8045f08: 10017e1e bne r2,zero,8046504 <___svfiprintf_internal_r+0xcb4>
8045f0c: d8000a15 stw zero,40(sp)
8045f10: 9011883a mov r8,r18
8045f14: 003e6906 br 80458bc <___svfiprintf_internal_r+0x6c>
8045f18: 01c20174 movhi r7,2053
8045f1c: 89400450 cmplti r5,r17,17
8045f20: 39ee4044 addi r7,r7,-18175
8045f24: d9000a17 ldw r4,40(sp)
8045f28: 05400404 movi r21,16
8045f2c: 28000526 beq r5,zero,8045f44 <___svfiprintf_internal_r+0x6f4>
8045f30: 00001906 br 8045f98 <___svfiprintf_internal_r+0x748>
8045f34: 8c7ffc04 addi r17,r17,-16
8045f38: 89400448 cmpgei r5,r17,17
8045f3c: 18c00204 addi r3,r3,8
8045f40: 28001526 beq r5,zero,8045f98 <___svfiprintf_internal_r+0x748>
8045f44: 21000044 addi r4,r4,1
8045f48: 10800404 addi r2,r2,16
8045f4c: 19c00015 stw r7,0(r3)
8045f50: 1d400115 stw r21,4(r3)
8045f54: d8800b15 stw r2,44(sp)
8045f58: d9000a15 stw r4,40(sp)
8045f5c: 21400208 cmpgei r5,r4,8
8045f60: 283ff426 beq r5,zero,8045f34 <___svfiprintf_internal_r+0x6e4>
8045f64: d9800904 addi r6,sp,36
8045f68: a00b883a mov r5,r20
8045f6c: b009883a mov r4,r22
8045f70: d9c00115 stw r7,4(sp)
8045f74: 80456900 call 8045690 <__ssprint_r>
8045f78: 103ee81e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
8045f7c: 8c7ffc04 addi r17,r17,-16
8045f80: 89400448 cmpgei r5,r17,17
8045f84: d8800b17 ldw r2,44(sp)
8045f88: d9000a17 ldw r4,40(sp)
8045f8c: 9007883a mov r3,r18
8045f90: d9c00117 ldw r7,4(sp)
8045f94: 283feb1e bne r5,zero,8045f44 <___svfiprintf_internal_r+0x6f4>
8045f98: 21000044 addi r4,r4,1
8045f9c: 1445883a add r2,r2,r17
8045fa0: d9000a15 stw r4,40(sp)
8045fa4: 19c00015 stw r7,0(r3)
8045fa8: 1c400115 stw r17,4(r3)
8045fac: d8800b15 stw r2,44(sp)
8045fb0: 21000210 cmplti r4,r4,8
8045fb4: 203fcf1e bne r4,zero,8045ef4 <___svfiprintf_internal_r+0x6a4>
8045fb8: d9800904 addi r6,sp,36
8045fbc: a00b883a mov r5,r20
8045fc0: b009883a mov r4,r22
8045fc4: 80456900 call 8045690 <__ssprint_r>
8045fc8: 103ed41e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
8045fcc: d8800b17 ldw r2,44(sp)
8045fd0: 003fc806 br 8045ef4 <___svfiprintf_internal_r+0x6a4>
8045fd4: 29403fcc andi r5,r5,255
8045fd8: 28024b1e bne r5,zero,8046908 <___svfiprintf_internal_r+0x10b8>
8045fdc: 6080080c andi r2,r12,32
8045fe0: 1000af1e bne r2,zero,80462a0 <___svfiprintf_internal_r+0xa50>
8045fe4: d8800317 ldw r2,12(sp)
8045fe8: 60c0040c andi r3,r12,16
8045fec: 14c00017 ldw r19,0(r2)
8045ff0: 10800104 addi r2,r2,4
8045ff4: 18006e1e bne r3,zero,80461b0 <___svfiprintf_internal_r+0x960>
8045ff8: 60c0100c andi r3,r12,64
8045ffc: 18022126 beq r3,zero,8046884 <___svfiprintf_internal_r+0x1034>
8046000: d8800315 stw r2,12(sp)
8046004: 9cffffcc andi r19,r19,65535
8046008: 002b883a mov r21,zero
804600c: 0005883a mov r2,zero
8046010: 003f6806 br 8045db4 <___svfiprintf_internal_r+0x564>
8046014: 29403fcc andi r5,r5,255
8046018: 2802391e bne r5,zero,8046900 <___svfiprintf_internal_r+0x10b0>
804601c: d9000317 ldw r4,12(sp)
8046020: 6080080c andi r2,r12,32
8046024: 20c00104 addi r3,r4,4
8046028: 1001a11e bne r2,zero,80466b0 <___svfiprintf_internal_r+0xe60>
804602c: 6080040c andi r2,r12,16
8046030: 1001be1e bne r2,zero,804672c <___svfiprintf_internal_r+0xedc>
8046034: 6300100c andi r12,r12,64
8046038: 6001bc26 beq r12,zero,804672c <___svfiprintf_internal_r+0xedc>
804603c: d8800317 ldw r2,12(sp)
8046040: d8c00315 stw r3,12(sp)
8046044: d8c00017 ldw r3,0(sp)
8046048: 10800017 ldw r2,0(r2)
804604c: 10c0000d sth r3,0(r2)
8046050: 003e1a06 br 80458bc <___svfiprintf_internal_r+0x6c>
8046054: e0800007 ldb r2,0(fp)
8046058: 10c01b18 cmpnei r3,r2,108
804605c: 1801ec26 beq r3,zero,8046810 <___svfiprintf_internal_r+0xfc0>
8046060: 63000414 ori r12,r12,16
8046064: 003e3b06 br 8045954 <___svfiprintf_internal_r+0x104>
8046068: 63001014 ori r12,r12,64
804606c: e0800007 ldb r2,0(fp)
8046070: 003e3806 br 8045954 <___svfiprintf_internal_r+0x104>
8046074: 29403fcc andi r5,r5,255
8046078: 28021d1e bne r5,zero,80468f0 <___svfiprintf_internal_r+0x10a0>
804607c: 6080080c andi r2,r12,32
8046080: 10008e1e bne r2,zero,80462bc <___svfiprintf_internal_r+0xa6c>
8046084: d8800317 ldw r2,12(sp)
8046088: 60c0040c andi r3,r12,16
804608c: 10800104 addi r2,r2,4
8046090: 1800541e bne r3,zero,80461e4 <___svfiprintf_internal_r+0x994>
8046094: 60c0100c andi r3,r12,64
8046098: 18005226 beq r3,zero,80461e4 <___svfiprintf_internal_r+0x994>
804609c: d8c00317 ldw r3,12(sp)
80460a0: d8800315 stw r2,12(sp)
80460a4: 1cc0000f ldh r19,0(r3)
80460a8: 982bd7fa srai r21,r19,31
80460ac: a805883a mov r2,r21
80460b0: 10005216 blt r2,zero,80461fc <___svfiprintf_internal_r+0x9ac>
80460b4: 48bfffd8 cmpnei r2,r9,-1
80460b8: db400843 ldbu r13,33(sp)
80460bc: 10008d26 beq r2,zero,80462f4 <___svfiprintf_internal_r+0xaa4>
80460c0: 00ffdfc4 movi r3,-129
80460c4: 9d44b03a or r2,r19,r21
80460c8: 60d8703a and r12,r12,r3
80460cc: 1000891e bne r2,zero,80462f4 <___svfiprintf_internal_r+0xaa4>
80460d0: 48008b1e bne r9,zero,8046300 <___svfiprintf_internal_r+0xab0>
80460d4: 6023883a mov r17,r12
80460d8: 0013883a mov r9,zero
80460dc: 002b883a mov r21,zero
80460e0: 902f883a mov r23,r18
80460e4: 003f4206 br 8045df0 <___svfiprintf_internal_r+0x5a0>
80460e8: d8c00317 ldw r3,12(sp)
80460ec: d8000845 stb zero,33(sp)
80460f0: 04c00044 movi r19,1
80460f4: 18800017 ldw r2,0(r3)
80460f8: 18c00104 addi r3,r3,4
80460fc: d8c00315 stw r3,12(sp)
8046100: d8800c05 stb r2,48(sp)
8046104: 05400044 movi r21,1
8046108: ddc00c04 addi r23,sp,48
804610c: 6023883a mov r17,r12
8046110: 0013883a mov r9,zero
8046114: 003f3e06 br 8045e10 <___svfiprintf_internal_r+0x5c0>
8046118: 29403fcc andi r5,r5,255
804611c: 2801ec1e bne r5,zero,80468d0 <___svfiprintf_internal_r+0x1080>
8046120: 00c20134 movhi r3,2052
8046124: 18dd1b04 addi r3,r3,29804
8046128: d8c00415 stw r3,16(sp)
804612c: 60c0080c andi r3,r12,32
8046130: 183edc1e bne r3,zero,8045ca4 <___svfiprintf_internal_r+0x454>
8046134: d9000317 ldw r4,12(sp)
8046138: 60c0040c andi r3,r12,16
804613c: 24c00017 ldw r19,0(r4)
8046140: 21000104 addi r4,r4,4
8046144: d9000315 stw r4,12(sp)
8046148: 1801481e bne r3,zero,804666c <___svfiprintf_internal_r+0xe1c>
804614c: 60c0100c andi r3,r12,64
8046150: 18014626 beq r3,zero,804666c <___svfiprintf_internal_r+0xe1c>
8046154: 9cffffcc andi r19,r19,65535
8046158: 002b883a mov r21,zero
804615c: 003ed606 br 8045cb8 <___svfiprintf_internal_r+0x468>
8046160: 29403fcc andi r5,r5,255
8046164: 2801dc1e bne r5,zero,80468d8 <___svfiprintf_internal_r+0x1088>
8046168: 6080080c andi r2,r12,32
804616c: 63000414 ori r12,r12,16
8046170: 1000591e bne r2,zero,80462d8 <___svfiprintf_internal_r+0xa88>
8046174: d8800317 ldw r2,12(sp)
8046178: 10800104 addi r2,r2,4
804617c: d8c00317 ldw r3,12(sp)
8046180: 002b883a mov r21,zero
8046184: d8800315 stw r2,12(sp)
8046188: 1cc00017 ldw r19,0(r3)
804618c: 00800044 movi r2,1
8046190: 003f0806 br 8045db4 <___svfiprintf_internal_r+0x564>
8046194: 29403fcc andi r5,r5,255
8046198: 2801d11e bne r5,zero,80468e0 <___svfiprintf_internal_r+0x1090>
804619c: 6080080c andi r2,r12,32
80461a0: 63000414 ori r12,r12,16
80461a4: 10003e1e bne r2,zero,80462a0 <___svfiprintf_internal_r+0xa50>
80461a8: d8800317 ldw r2,12(sp)
80461ac: 10800104 addi r2,r2,4
80461b0: d8c00317 ldw r3,12(sp)
80461b4: 002b883a mov r21,zero
80461b8: d8800315 stw r2,12(sp)
80461bc: 1cc00017 ldw r19,0(r3)
80461c0: 0005883a mov r2,zero
80461c4: 003efb06 br 8045db4 <___svfiprintf_internal_r+0x564>
80461c8: 29403fcc andi r5,r5,255
80461cc: 2801c61e bne r5,zero,80468e8 <___svfiprintf_internal_r+0x1098>
80461d0: 6080080c andi r2,r12,32
80461d4: 63000414 ori r12,r12,16
80461d8: 1000381e bne r2,zero,80462bc <___svfiprintf_internal_r+0xa6c>
80461dc: d8800317 ldw r2,12(sp)
80461e0: 10800104 addi r2,r2,4
80461e4: d8c00317 ldw r3,12(sp)
80461e8: 1cc00017 ldw r19,0(r3)
80461ec: d8800315 stw r2,12(sp)
80461f0: 982bd7fa srai r21,r19,31
80461f4: a805883a mov r2,r21
80461f8: 103fae0e bge r2,zero,80460b4 <___svfiprintf_internal_r+0x864>
80461fc: 04e7c83a sub r19,zero,r19
8046200: 9804c03a cmpne r2,r19,zero
8046204: 056bc83a sub r21,zero,r21
8046208: a8abc83a sub r21,r21,r2
804620c: 00800b44 movi r2,45
8046210: d8800845 stb r2,33(sp)
8046214: 48ffffe0 cmpeqi r3,r9,-1
8046218: 03400b44 movi r13,45
804621c: 00800044 movi r2,1
8046220: 183ee826 beq r3,zero,8045dc4 <___svfiprintf_internal_r+0x574>
8046224: 10c00060 cmpeqi r3,r2,1
8046228: 1800321e bne r3,zero,80462f4 <___svfiprintf_internal_r+0xaa4>
804622c: 108000a0 cmpeqi r2,r2,2
8046230: 1000a41e bne r2,zero,80464c4 <___svfiprintf_internal_r+0xc74>
8046234: 9007883a mov r3,r18
8046238: 00000106 br 8046240 <___svfiprintf_internal_r+0x9f0>
804623c: b807883a mov r3,r23
8046240: 9808d0fa srli r4,r19,3
8046244: a80a977a slli r5,r21,29
8046248: a82ad0fa srli r21,r21,3
804624c: 9cc001cc andi r19,r19,7
8046250: 98800c04 addi r2,r19,48
8046254: 2926b03a or r19,r5,r4
8046258: 18bfffc5 stb r2,-1(r3)
804625c: 9d48b03a or r4,r19,r21
8046260: 1dffffc4 addi r23,r3,-1
8046264: 203ff51e bne r4,zero,804623c <___svfiprintf_internal_r+0x9ec>
8046268: 6100004c andi r4,r12,1
804626c: 2000a226 beq r4,zero,80464f8 <___svfiprintf_internal_r+0xca8>
8046270: 10803fcc andi r2,r2,255
8046274: 1080201c xori r2,r2,128
8046278: 10bfe004 addi r2,r2,-128
804627c: 10800c18 cmpnei r2,r2,48
8046280: 10009d26 beq r2,zero,80464f8 <___svfiprintf_internal_r+0xca8>
8046284: 18ffff84 addi r3,r3,-2
8046288: 00800c04 movi r2,48
804628c: b8bfffc5 stb r2,-1(r23)
8046290: 90ebc83a sub r21,r18,r3
8046294: 6023883a mov r17,r12
8046298: 182f883a mov r23,r3
804629c: 003ed406 br 8045df0 <___svfiprintf_internal_r+0x5a0>
80462a0: d8c00317 ldw r3,12(sp)
80462a4: 0005883a mov r2,zero
80462a8: 1cc00017 ldw r19,0(r3)
80462ac: 1d400117 ldw r21,4(r3)
80462b0: 18c00204 addi r3,r3,8
80462b4: d8c00315 stw r3,12(sp)
80462b8: 003ebe06 br 8045db4 <___svfiprintf_internal_r+0x564>
80462bc: d8c00317 ldw r3,12(sp)
80462c0: 18800117 ldw r2,4(r3)
80462c4: 1cc00017 ldw r19,0(r3)
80462c8: 18c00204 addi r3,r3,8
80462cc: d8c00315 stw r3,12(sp)
80462d0: 102b883a mov r21,r2
80462d4: 003f7606 br 80460b0 <___svfiprintf_internal_r+0x860>
80462d8: d8c00317 ldw r3,12(sp)
80462dc: 00800044 movi r2,1
80462e0: 1cc00017 ldw r19,0(r3)
80462e4: 1d400117 ldw r21,4(r3)
80462e8: 18c00204 addi r3,r3,8
80462ec: d8c00315 stw r3,12(sp)
80462f0: 003eb006 br 8045db4 <___svfiprintf_internal_r+0x564>
80462f4: a801131e bne r21,zero,8046744 <___svfiprintf_internal_r+0xef4>
80462f8: 988002a8 cmpgeui r2,r19,10
80462fc: 1001111e bne r2,zero,8046744 <___svfiprintf_internal_r+0xef4>
8046300: 9cc00c04 addi r19,r19,48
8046304: dcc015c5 stb r19,87(sp)
8046308: 6023883a mov r17,r12
804630c: 05400044 movi r21,1
8046310: ddc015c4 addi r23,sp,87
8046314: 003eb606 br 8045df0 <___svfiprintf_internal_r+0x5a0>
8046318: 84d9c83a sub r12,r16,r19
804631c: 033ee80e bge zero,r12,8045ec0 <___svfiprintf_internal_r+0x670>
8046320: 61800450 cmplti r6,r12,17
8046324: 01c20174 movhi r7,2053
8046328: 3001791e bne r6,zero,8046910 <___svfiprintf_internal_r+0x10c0>
804632c: 39ee3c44 addi r7,r7,-18191
8046330: 03400404 movi r13,16
8046334: 00000406 br 8046348 <___svfiprintf_internal_r+0xaf8>
8046338: 633ffc04 addi r12,r12,-16
804633c: 60c00448 cmpgei r3,r12,17
8046340: 42000204 addi r8,r8,8
8046344: 18001a26 beq r3,zero,80463b0 <___svfiprintf_internal_r+0xb60>
8046348: 21000044 addi r4,r4,1
804634c: 10800404 addi r2,r2,16
8046350: 41c00015 stw r7,0(r8)
8046354: 43400115 stw r13,4(r8)
8046358: d8800b15 stw r2,44(sp)
804635c: d9000a15 stw r4,40(sp)
8046360: 20c00208 cmpgei r3,r4,8
8046364: 183ff426 beq r3,zero,8046338 <___svfiprintf_internal_r+0xae8>
8046368: d9800904 addi r6,sp,36
804636c: a00b883a mov r5,r20
8046370: b009883a mov r4,r22
8046374: d9c00515 stw r7,20(sp)
8046378: db000215 stw r12,8(sp)
804637c: da400115 stw r9,4(sp)
8046380: 80456900 call 8045690 <__ssprint_r>
8046384: 103de51e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
8046388: db000217 ldw r12,8(sp)
804638c: d8800b17 ldw r2,44(sp)
8046390: d9000a17 ldw r4,40(sp)
8046394: 633ffc04 addi r12,r12,-16
8046398: 60c00448 cmpgei r3,r12,17
804639c: 9011883a mov r8,r18
80463a0: d9c00517 ldw r7,20(sp)
80463a4: 03400404 movi r13,16
80463a8: da400117 ldw r9,4(sp)
80463ac: 183fe61e bne r3,zero,8046348 <___svfiprintf_internal_r+0xaf8>
80463b0: 21000044 addi r4,r4,1
80463b4: 41800204 addi r6,r8,8
80463b8: 1305883a add r2,r2,r12
80463bc: 41c00015 stw r7,0(r8)
80463c0: 43000115 stw r12,4(r8)
80463c4: d8800b15 stw r2,44(sp)
80463c8: d9000a15 stw r4,40(sp)
80463cc: 20c00208 cmpgei r3,r4,8
80463d0: 1801161e bne r3,zero,804682c <___svfiprintf_internal_r+0xfdc>
80463d4: 4d53c83a sub r9,r9,r21
80463d8: 21400044 addi r5,r4,1
80463dc: 30c00204 addi r3,r6,8
80463e0: 3011883a mov r8,r6
80463e4: 027eb80e bge zero,r9,8045ec8 <___svfiprintf_internal_r+0x678>
80463e8: 49800450 cmplti r6,r9,17
80463ec: 01c20174 movhi r7,2053
80463f0: 30012c1e bne r6,zero,80468a4 <___svfiprintf_internal_r+0x1054>
80463f4: 39ee3c44 addi r7,r7,-18191
80463f8: 03000404 movi r12,16
80463fc: 00000406 br 8046410 <___svfiprintf_internal_r+0xbc0>
8046400: 4a7ffc04 addi r9,r9,-16
8046404: 48c00448 cmpgei r3,r9,17
8046408: 42000204 addi r8,r8,8
804640c: 18001826 beq r3,zero,8046470 <___svfiprintf_internal_r+0xc20>
8046410: 21000044 addi r4,r4,1
8046414: 10800404 addi r2,r2,16
8046418: 41c00015 stw r7,0(r8)
804641c: 43000115 stw r12,4(r8)
8046420: d8800b15 stw r2,44(sp)
8046424: d9000a15 stw r4,40(sp)
8046428: 20c00208 cmpgei r3,r4,8
804642c: 183ff426 beq r3,zero,8046400 <___svfiprintf_internal_r+0xbb0>
8046430: d9800904 addi r6,sp,36
8046434: a00b883a mov r5,r20
8046438: b009883a mov r4,r22
804643c: d9c00215 stw r7,8(sp)
8046440: da400115 stw r9,4(sp)
8046444: 80456900 call 8045690 <__ssprint_r>
8046448: 103db41e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
804644c: da400117 ldw r9,4(sp)
8046450: d8800b17 ldw r2,44(sp)
8046454: d9000a17 ldw r4,40(sp)
8046458: 4a7ffc04 addi r9,r9,-16
804645c: 48c00448 cmpgei r3,r9,17
8046460: 9011883a mov r8,r18
8046464: d9c00217 ldw r7,8(sp)
8046468: 03000404 movi r12,16
804646c: 183fe81e bne r3,zero,8046410 <___svfiprintf_internal_r+0xbc0>
8046470: 21400044 addi r5,r4,1
8046474: 41000204 addi r4,r8,8
8046478: 1245883a add r2,r2,r9
804647c: 41c00015 stw r7,0(r8)
8046480: 42400115 stw r9,4(r8)
8046484: d8800b15 stw r2,44(sp)
8046488: d9400a15 stw r5,40(sp)
804648c: 28c00208 cmpgei r3,r5,8
8046490: 1800781e bne r3,zero,8046674 <___svfiprintf_internal_r+0xe24>
8046494: 29400044 addi r5,r5,1
8046498: 20c00204 addi r3,r4,8
804649c: 2011883a mov r8,r4
80464a0: 003e8906 br 8045ec8 <___svfiprintf_internal_r+0x678>
80464a4: d9800904 addi r6,sp,36
80464a8: a00b883a mov r5,r20
80464ac: b009883a mov r4,r22
80464b0: 80456900 call 8045690 <__ssprint_r>
80464b4: 103d991e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
80464b8: d8800b17 ldw r2,44(sp)
80464bc: 9007883a mov r3,r18
80464c0: 003e8806 br 8045ee4 <___svfiprintf_internal_r+0x694>
80464c4: 902f883a mov r23,r18
80464c8: d9000417 ldw r4,16(sp)
80464cc: 988003cc andi r2,r19,15
80464d0: a806973a slli r3,r21,28
80464d4: 2085883a add r2,r4,r2
80464d8: 9826d13a srli r19,r19,4
80464dc: 10800003 ldbu r2,0(r2)
80464e0: a82ad13a srli r21,r21,4
80464e4: bdffffc4 addi r23,r23,-1
80464e8: 1ce6b03a or r19,r3,r19
80464ec: b8800005 stb r2,0(r23)
80464f0: 9d44b03a or r2,r19,r21
80464f4: 103ff41e bne r2,zero,80464c8 <___svfiprintf_internal_r+0xc78>
80464f8: 95ebc83a sub r21,r18,r23
80464fc: 6023883a mov r17,r12
8046500: 003e3b06 br 8045df0 <___svfiprintf_internal_r+0x5a0>
8046504: d9800904 addi r6,sp,36
8046508: a00b883a mov r5,r20
804650c: b009883a mov r4,r22
8046510: 80456900 call 8045690 <__ssprint_r>
8046514: 103e7d26 beq r2,zero,8045f0c <___svfiprintf_internal_r+0x6bc>
8046518: 003d8006 br 8045b1c <___svfiprintf_internal_r+0x2cc>
804651c: 8819883a mov r12,r17
8046520: 003f4006 br 8046224 <___svfiprintf_internal_r+0x9d4>
8046524: 01c20174 movhi r7,2053
8046528: 19400450 cmplti r5,r3,17
804652c: 39ee4044 addi r7,r7,-18175
8046530: 03800404 movi r14,16
8046534: 28000526 beq r5,zero,804654c <___svfiprintf_internal_r+0xcfc>
8046538: 00002206 br 80465c4 <___svfiprintf_internal_r+0xd74>
804653c: 18fffc04 addi r3,r3,-16
8046540: 19400448 cmpgei r5,r3,17
8046544: 42000204 addi r8,r8,8
8046548: 28001e26 beq r5,zero,80465c4 <___svfiprintf_internal_r+0xd74>
804654c: 21000044 addi r4,r4,1
8046550: 10800404 addi r2,r2,16
8046554: 41c00015 stw r7,0(r8)
8046558: 43800115 stw r14,4(r8)
804655c: d8800b15 stw r2,44(sp)
8046560: d9000a15 stw r4,40(sp)
8046564: 21400208 cmpgei r5,r4,8
8046568: 283ff426 beq r5,zero,804653c <___svfiprintf_internal_r+0xcec>
804656c: d9800904 addi r6,sp,36
8046570: a00b883a mov r5,r20
8046574: b009883a mov r4,r22
8046578: d9c00715 stw r7,28(sp)
804657c: d8c00615 stw r3,24(sp)
8046580: da400515 stw r9,20(sp)
8046584: db000215 stw r12,8(sp)
8046588: db400115 stw r13,4(sp)
804658c: 80456900 call 8045690 <__ssprint_r>
8046590: 103d621e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
8046594: d8c00617 ldw r3,24(sp)
8046598: d8800b17 ldw r2,44(sp)
804659c: d9000a17 ldw r4,40(sp)
80465a0: 18fffc04 addi r3,r3,-16
80465a4: 19400448 cmpgei r5,r3,17
80465a8: 9011883a mov r8,r18
80465ac: d9c00717 ldw r7,28(sp)
80465b0: 03800404 movi r14,16
80465b4: da400517 ldw r9,20(sp)
80465b8: db000217 ldw r12,8(sp)
80465bc: db400117 ldw r13,4(sp)
80465c0: 283fe21e bne r5,zero,804654c <___svfiprintf_internal_r+0xcfc>
80465c4: 21000044 addi r4,r4,1
80465c8: 10c5883a add r2,r2,r3
80465cc: 40c00115 stw r3,4(r8)
80465d0: 41c00015 stw r7,0(r8)
80465d4: d8800b15 stw r2,44(sp)
80465d8: d9000a15 stw r4,40(sp)
80465dc: 20c00208 cmpgei r3,r4,8
80465e0: 1800751e bne r3,zero,80467b8 <___svfiprintf_internal_r+0xf68>
80465e4: 42000204 addi r8,r8,8
80465e8: 003e1206 br 8045e34 <___svfiprintf_internal_r+0x5e4>
80465ec: d9800904 addi r6,sp,36
80465f0: a00b883a mov r5,r20
80465f4: b009883a mov r4,r22
80465f8: da400515 stw r9,20(sp)
80465fc: db000215 stw r12,8(sp)
8046600: db400115 stw r13,4(sp)
8046604: 80456900 call 8045690 <__ssprint_r>
8046608: 103d441e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
804660c: d9000a17 ldw r4,40(sp)
8046610: d8800b17 ldw r2,44(sp)
8046614: d8c01804 addi r3,sp,96
8046618: 21400044 addi r5,r4,1
804661c: 9011883a mov r8,r18
8046620: da400517 ldw r9,20(sp)
8046624: db000217 ldw r12,8(sp)
8046628: db400117 ldw r13,4(sp)
804662c: 003e1406 br 8045e80 <___svfiprintf_internal_r+0x630>
8046630: d9800904 addi r6,sp,36
8046634: a00b883a mov r5,r20
8046638: b009883a mov r4,r22
804663c: da400215 stw r9,8(sp)
8046640: db000115 stw r12,4(sp)
8046644: 80456900 call 8045690 <__ssprint_r>
8046648: 103d341e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
804664c: d9000a17 ldw r4,40(sp)
8046650: d8800b17 ldw r2,44(sp)
8046654: d8c01804 addi r3,sp,96
8046658: 21400044 addi r5,r4,1
804665c: 9011883a mov r8,r18
8046660: da400217 ldw r9,8(sp)
8046664: db000117 ldw r12,4(sp)
8046668: 003e1306 br 8045eb8 <___svfiprintf_internal_r+0x668>
804666c: 002b883a mov r21,zero
8046670: 003d9106 br 8045cb8 <___svfiprintf_internal_r+0x468>
8046674: d9800904 addi r6,sp,36
8046678: a00b883a mov r5,r20
804667c: b009883a mov r4,r22
8046680: 80456900 call 8045690 <__ssprint_r>
8046684: 103d251e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
8046688: d9000a17 ldw r4,40(sp)
804668c: d8800b17 ldw r2,44(sp)
8046690: d8c01804 addi r3,sp,96
8046694: 21400044 addi r5,r4,1
8046698: 9011883a mov r8,r18
804669c: 003e0a06 br 8045ec8 <___svfiprintf_internal_r+0x678>
80466a0: e023883a mov r17,fp
80466a4: 003ca306 br 8045934 <___svfiprintf_internal_r+0xe4>
80466a8: 902f883a mov r23,r18
80466ac: 003dd006 br 8045df0 <___svfiprintf_internal_r+0x5a0>
80466b0: d9400017 ldw r5,0(sp)
80466b4: 20800017 ldw r2,0(r4)
80466b8: d8c00315 stw r3,12(sp)
80466bc: 2809d7fa srai r4,r5,31
80466c0: 11400015 stw r5,0(r2)
80466c4: 11000115 stw r4,4(r2)
80466c8: 003c7c06 br 80458bc <___svfiprintf_internal_r+0x6c>
80466cc: 00c00c04 movi r3,48
80466d0: d88008c5 stb r2,35(sp)
80466d4: d8c00885 stb r3,34(sp)
80466d8: 63000094 ori r12,r12,2
80466dc: 00800084 movi r2,2
80466e0: 003db406 br 8045db4 <___svfiprintf_internal_r+0x564>
80466e4: b809883a mov r4,r23
80466e8: da000215 stw r8,8(sp)
80466ec: db000115 stw r12,4(sp)
80466f0: 8002dac0 call 8002dac <strlen>
80466f4: 102b883a mov r21,r2
80466f8: 1027883a mov r19,r2
80466fc: dc400315 stw r17,12(sp)
8046700: db000117 ldw r12,4(sp)
8046704: da000217 ldw r8,8(sp)
8046708: 003e8006 br 804610c <___svfiprintf_internal_r+0x8bc>
804670c: 01401004 movi r5,64
8046710: 8007ddc0 call 8007ddc <_malloc_r>
8046714: a0800015 stw r2,0(r20)
8046718: a0800415 stw r2,16(r20)
804671c: 10008f26 beq r2,zero,804695c <___svfiprintf_internal_r+0x110c>
8046720: 00801004 movi r2,64
8046724: a0800515 stw r2,20(r20)
8046728: 003c5d06 br 80458a0 <___svfiprintf_internal_r+0x50>
804672c: d8800317 ldw r2,12(sp)
8046730: 10800017 ldw r2,0(r2)
8046734: d8c00315 stw r3,12(sp)
8046738: d8c00017 ldw r3,0(sp)
804673c: 10c00015 stw r3,0(r2)
8046740: 003c5e06 br 80458bc <___svfiprintf_internal_r+0x6c>
8046744: 902f883a mov r23,r18
8046748: 00000206 br 8046754 <___svfiprintf_internal_r+0xf04>
804674c: 1027883a mov r19,r2
8046750: 182b883a mov r21,r3
8046754: 9809883a mov r4,r19
8046758: a80b883a mov r5,r21
804675c: 01800284 movi r6,10
8046760: 000f883a mov r7,zero
8046764: db400615 stw r13,24(sp)
8046768: da000515 stw r8,20(sp)
804676c: da400215 stw r9,8(sp)
8046770: db000115 stw r12,4(sp)
8046774: 800c9c00 call 800c9c0 <__umoddi3>
8046778: 10800c04 addi r2,r2,48
804677c: bdffffc4 addi r23,r23,-1
8046780: 9809883a mov r4,r19
8046784: a80b883a mov r5,r21
8046788: b8800005 stb r2,0(r23)
804678c: 01800284 movi r6,10
8046790: 000f883a mov r7,zero
8046794: 800c4280 call 800c428 <__udivdi3>
8046798: db000117 ldw r12,4(sp)
804679c: da400217 ldw r9,8(sp)
80467a0: da000517 ldw r8,20(sp)
80467a4: db400617 ldw r13,24(sp)
80467a8: a83fe81e bne r21,zero,804674c <___svfiprintf_internal_r+0xefc>
80467ac: 9cc002a8 cmpgeui r19,r19,10
80467b0: 983fe61e bne r19,zero,804674c <___svfiprintf_internal_r+0xefc>
80467b4: 003f5006 br 80464f8 <___svfiprintf_internal_r+0xca8>
80467b8: d9800904 addi r6,sp,36
80467bc: a00b883a mov r5,r20
80467c0: b009883a mov r4,r22
80467c4: da400515 stw r9,20(sp)
80467c8: db000215 stw r12,8(sp)
80467cc: db400115 stw r13,4(sp)
80467d0: 80456900 call 8045690 <__ssprint_r>
80467d4: 103cd11e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
80467d8: d8800b17 ldw r2,44(sp)
80467dc: d9000a17 ldw r4,40(sp)
80467e0: 9011883a mov r8,r18
80467e4: da400517 ldw r9,20(sp)
80467e8: db000217 ldw r12,8(sp)
80467ec: db400117 ldw r13,4(sp)
80467f0: 003d9006 br 8045e34 <___svfiprintf_internal_r+0x5e4>
80467f4: 0421c83a sub r16,zero,r16
80467f8: ddc00315 stw r23,12(sp)
80467fc: 003d0106 br 8045c04 <___svfiprintf_internal_r+0x3b4>
8046800: 10c00060 cmpeqi r3,r2,1
8046804: 8819883a mov r12,r17
8046808: 183e8826 beq r3,zero,804622c <___svfiprintf_internal_r+0x9dc>
804680c: 003ebc06 br 8046300 <___svfiprintf_internal_r+0xab0>
8046810: e0800043 ldbu r2,1(fp)
8046814: 63000814 ori r12,r12,32
8046818: e7000044 addi fp,fp,1
804681c: 10803fcc andi r2,r2,255
8046820: 1080201c xori r2,r2,128
8046824: 10bfe004 addi r2,r2,-128
8046828: 003c4a06 br 8045954 <___svfiprintf_internal_r+0x104>
804682c: d9800904 addi r6,sp,36
8046830: a00b883a mov r5,r20
8046834: b009883a mov r4,r22
8046838: da400115 stw r9,4(sp)
804683c: 80456900 call 8045690 <__ssprint_r>
8046840: 103cb61e bne r2,zero,8045b1c <___svfiprintf_internal_r+0x2cc>
8046844: d9000a17 ldw r4,40(sp)
8046848: d8800b17 ldw r2,44(sp)
804684c: d8c01804 addi r3,sp,96
8046850: 21400044 addi r5,r4,1
8046854: 9011883a mov r8,r18
8046858: da400117 ldw r9,4(sp)
804685c: 003d9806 br 8045ec0 <___svfiprintf_internal_r+0x670>
8046860: 488001f0 cmpltui r2,r9,7
8046864: 482b883a mov r21,r9
8046868: 1000011e bne r2,zero,8046870 <___svfiprintf_internal_r+0x1020>
804686c: 05400184 movi r21,6
8046870: 05c20134 movhi r23,2052
8046874: a827883a mov r19,r21
8046878: dc400315 stw r17,12(sp)
804687c: bddd2504 addi r23,r23,29844
8046880: 003e2206 br 804610c <___svfiprintf_internal_r+0x8bc>
8046884: d8800315 stw r2,12(sp)
8046888: 002b883a mov r21,zero
804688c: 0005883a mov r2,zero
8046890: 003d4806 br 8045db4 <___svfiprintf_internal_r+0x564>
8046894: d8800315 stw r2,12(sp)
8046898: 002b883a mov r21,zero
804689c: 00800044 movi r2,1
80468a0: 003d4406 br 8045db4 <___svfiprintf_internal_r+0x564>
80468a4: 1809883a mov r4,r3
80468a8: 39ee3c44 addi r7,r7,-18191
80468ac: 003ef206 br 8046478 <___svfiprintf_internal_r+0xc28>
80468b0: d9800845 stb r6,33(sp)
80468b4: 003cb706 br 8045b94 <___svfiprintf_internal_r+0x344>
80468b8: 4827883a mov r19,r9
80468bc: dc400315 stw r17,12(sp)
80468c0: 482b883a mov r21,r9
80468c4: 003e1106 br 804610c <___svfiprintf_internal_r+0x8bc>
80468c8: d9800845 stb r6,33(sp)
80468cc: 003cf006 br 8045c90 <___svfiprintf_internal_r+0x440>
80468d0: d9800845 stb r6,33(sp)
80468d4: 003e1206 br 8046120 <___svfiprintf_internal_r+0x8d0>
80468d8: d9800845 stb r6,33(sp)
80468dc: 003e2206 br 8046168 <___svfiprintf_internal_r+0x918>
80468e0: d9800845 stb r6,33(sp)
80468e4: 003e2d06 br 804619c <___svfiprintf_internal_r+0x94c>
80468e8: d9800845 stb r6,33(sp)
80468ec: 003e3806 br 80461d0 <___svfiprintf_internal_r+0x980>
80468f0: d9800845 stb r6,33(sp)
80468f4: 003de106 br 804607c <___svfiprintf_internal_r+0x82c>
80468f8: d9800845 stb r6,33(sp)
80468fc: 003cf606 br 8045cd8 <___svfiprintf_internal_r+0x488>
8046900: d9800845 stb r6,33(sp)
8046904: 003dc506 br 804601c <___svfiprintf_internal_r+0x7cc>
8046908: d9800845 stb r6,33(sp)
804690c: 003db306 br 8045fdc <___svfiprintf_internal_r+0x78c>
8046910: 180d883a mov r6,r3
8046914: 2809883a mov r4,r5
8046918: 39ee3c44 addi r7,r7,-18191
804691c: 003ea606 br 80463b8 <___svfiprintf_internal_r+0xb68>
8046920: 00bfffc4 movi r2,-1
8046924: d8800015 stw r2,0(sp)
8046928: 003c7f06 br 8045b28 <___svfiprintf_internal_r+0x2d8>
804692c: d8800317 ldw r2,12(sp)
8046930: 12400017 ldw r9,0(r2)
8046934: 15c00104 addi r23,r2,4
8046938: 4800010e bge r9,zero,8046940 <___svfiprintf_internal_r+0x10f0>
804693c: 027fffc4 movi r9,-1
8046940: e0800043 ldbu r2,1(fp)
8046944: ddc00315 stw r23,12(sp)
8046948: 2039883a mov fp,r4
804694c: 10803fcc andi r2,r2,255
8046950: 1080201c xori r2,r2,128
8046954: 10bfe004 addi r2,r2,-128
8046958: 003bfe06 br 8045954 <___svfiprintf_internal_r+0x104>
804695c: 00800304 movi r2,12
8046960: b0800015 stw r2,0(r22)
8046964: 00bfffc4 movi r2,-1
8046968: d8800015 stw r2,0(sp)
804696c: 003c6e06 br 8045b28 <___svfiprintf_internal_r+0x2d8>
08046970 <_vfprintf_r>:
8046970: 8002e441 jmpi 8002e44 <___vfprintf_internal_r>
08046974 <_exit>:
*
* ALT_EXIT is mapped onto the _exit() system call in alt_syscall.h
*/
void ALT_EXIT (int exit_code)
{
8046974: defffd04 addi sp,sp,-12
8046978: df000215 stw fp,8(sp)
804697c: df000204 addi fp,sp,8
8046980: e13ffe15 stw r4,-8(fp)
ALT_LOG_PRINT_BOOT("[alt_exit.c] Entering _exit() function.\r\n");
ALT_LOG_PRINT_BOOT("[alt_exit.c] Exit code from main was %d.\r\n",exit_code);
/* Stop all other threads */
ALT_LOG_PRINT_BOOT("[alt_exit.c] Calling ALT_OS_STOP().\r\n");
ALT_OS_STOP();
8046984: d0204b45 stb zero,-32467(gp)
8046988: e0bffe17 ldw r2,-8(fp)
804698c: e0bfff15 stw r2,-4(fp)
/*
* Routine called on exit.
*/
static ALT_INLINE ALT_ALWAYS_INLINE void alt_sim_halt(int exit_code)
{
register int r2 asm ("r2") = exit_code;
8046990: e0bfff17 ldw r2,-4(fp)
__asm__ volatile ("\n0:\n\taddi %0,%0, -1\n\tbgt %0,zero,0b" : : "r" (ALT_CPU_FREQ/100) ); /* Delay for >30ms */
__asm__ volatile ("break 2" : : "r"(r2), "r"(r3) ALT_GMON_DATA );
#else /* !DEBUG_STUB */
if (r2) {
8046994: 10000226 beq r2,zero,80469a0 <_exit+0x2c>
ALT_SIM_FAIL();
8046998: 002af070 cmpltui zero,zero,43969
804699c: 00000106 br 80469a4 <_exit+0x30>
} else {
ALT_SIM_PASS();
80469a0: 002af0b0 cmpltui zero,zero,43970
ALT_SIM_HALT(exit_code);
/* spin forever, since there's no where to go back to */
ALT_LOG_PRINT_BOOT("[alt_exit.c] Spinning forever.\r\n");
while (1);
80469a4: 003fff06 br 80469a4 <_exit+0x30>